<?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>161818</bug_id>
          
          <creation_ts>2016-09-09 14:49:35 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Provide Direct2D-based geometry and transform cast operations</short_desc>
          <delta_ts>2016-09-13 14:59:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit 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>161817</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>pvollan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1228353</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-09 14:49:35 -0700</bug_when>
    <thetext>As a first step for creating a Direct2D backend, make it possible to cast our existing Rect, Point, and other types to and from Direct2D native types.

Do the same for Transforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228990</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-12 16:45:50 -0700</bug_when>
    <thetext>This patch grew to enormous size because I discovered that there were no unit tests for these functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228999</commentid>
    <comment_count>2</comment_count>
      <attachid>288642</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-12 16:58:42 -0700</bug_when>
    <thetext>Created attachment 288642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229000</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 17:00:07 -0700</bug_when>
    <thetext>Attachment 288642 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/IntRect.h:179:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/IntRect.h:180:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:59:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:64:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/FloatSize.h:133:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:71:  D2D1_POINT_2F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:76:  D2D1_POINT_2U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:48:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:63:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:42:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:43:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:185:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:54:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:55:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:370:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:59:  D2D1_SIZE_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:64:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 17 in 27 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>1229001</commentid>
    <comment_count>4</comment_count>
      <attachid>288643</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-12 17:05:15 -0700</bug_when>
    <thetext>Created attachment 288643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229003</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 17:06:57 -0700</bug_when>
    <thetext>Attachment 288643 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/IntRect.h:179:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/IntRect.h:180:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:59:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:64:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/FloatSize.h:133:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:71:  D2D1_POINT_2F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:76:  D2D1_POINT_2U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:48:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:63:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:42:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:43:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:185:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:54:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:55:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:370:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:59:  D2D1_SIZE_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:64:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 17 in 27 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>1229224</commentid>
    <comment_count>6</comment_count>
      <attachid>288705</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-13 11:24:07 -0700</bug_when>
    <thetext>Created attachment 288705
Patch (Style red due to MS naming)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229226</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-13 11:25:45 -0700</bug_when>
    <thetext>Attachment 288705 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/IntRect.h:179:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/IntRect.h:180:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:59:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntRectWin.cpp:64:  D2D1_RECT_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/FloatRectDirect2D.cpp:42:  D2D1_RECT_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/FloatSize.h:133:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:71:  D2D1_POINT_2F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntPointWin.cpp:76:  D2D1_POINT_2U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/FloatPointDirect2D.cpp:41:  D2D_POINT_2F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/FloatSizeDirect2D.cpp:41:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:48:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/TransformationMatrixDirect2D.cpp:63:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:42:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:43:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/AffineTransform.h:185:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:54:  D2D_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:55:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:370:  D2D1_MATRIX_3X2_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:59:  D2D1_SIZE_U is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/win/IntSizeWin.cpp:64:  D2D1_SIZE_F is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 20 in 30 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>1229227</commentid>
    <comment_count>8</comment_count>
      <attachid>288705</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-13 11:26:37 -0700</bug_when>
    <thetext>Comment on attachment 288705
Patch (Style red due to MS naming)

Unfortunately the Direct2D types defined by Microsoft violate our coding conventions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229259</commentid>
    <comment_count>9</comment_count>
      <attachid>288705</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-09-13 12:35:20 -0700</bug_when>
    <thetext>Comment on attachment 288705
Patch (Style red due to MS naming)

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

&gt; Source/WebCore/platform/graphics/IntPoint.h:144
&gt; +    explicit IntPoint(const D2D1_POINT_2F&amp;); // don&apos;t do this implicitly since it&apos;s lossy

Nit: Use sentence casing and punctuation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229270</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-13 12:56:59 -0700</bug_when>
    <thetext>Committed r205871: &lt;http://trac.webkit.org/changeset/205871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229279</commentid>
    <comment_count>11</comment_count>
      <attachid>288705</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-13 13:03:18 -0700</bug_when>
    <thetext>Comment on attachment 288705
Patch (Style red due to MS naming)

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

&gt; Source/WebCore/platform/graphics/FloatRect.h:49
&gt; +#include &lt;d2d1.h&gt;

Can&apos;t we forward-declare D2D1_RECT_F like we do for other platforms? This is bringing a huge header into a frequently-included WebCore header.

&gt; Source/WebCore/platform/graphics/FloatSize.h:51
&gt; +#include &lt;d2d1.h&gt;

Ditto.

&gt; Source/WebCore/platform/graphics/IntPoint.h:37
&gt; +#include &lt;d2d1.h&gt;

Again.

&gt; Source/WebCore/platform/graphics/IntRect.h:33
&gt; +#include &lt;d2d1.h&gt;

Again.

&gt; Source/WebCore/platform/graphics/IntSize.h:37
&gt; +#include &lt;d2d1.h&gt;

Again.

&gt; Source/WebCore/platform/graphics/win/FloatPointDirect2D.cpp:31
&gt; +#include &lt;d2d1.h&gt;

But the header included it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229286</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-13 13:12:26 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Source/WebCore/platform/graphics/FloatRect.h:49
&gt; &gt; +#include &lt;d2d1.h&gt;
&gt; 
&gt; Can&apos;t we forward-declare D2D1_RECT_F like we do for other platforms? This is
&gt; bringing a huge header into a frequently-included WebCore header.

I did try that first, but I ran into conflicting typedefs. Our usual trick of typedefing to an opaque struct type didn&apos;t work, because they define things like:

typedef struct D2D_RECT_F {
   float ...
} D2D_RECT_F;

typedef D2D_RECT_F D2D1_RECT_F;

So, if I make my own D2D1_RECT_F, it screws up the header includes in various ways.

I might be able to define our headers and cast operators in terms of &apos;D2D_RECT_F&apos;, rather than &apos;D2D1_RECT_F&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229323</commentid>
    <comment_count>13</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-13 14:59:53 -0700</bug_when>
    <thetext>Follow-up patch (to get rid of header includes of &lt;d2d1.h&gt;) landed in r205881.

Committed r205881: &lt;http://trac.webkit.org/changeset/205881&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288642</attachid>
            <date>2016-09-12 16:58:42 -0700</date>
            <delta_ts>2016-09-12 17:05:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161818-20160912165609.patch</filename>
            <type>text/plain</type>
            <size>186271</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE2LTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBQ
cm92aWRlIERpcmVjdDJELWJhc2VkIGdlb21ldHJ5IGFuZCB0cmFuc2Zvcm0gY2FzdCBvcGVyYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAgICAgQWRkIG5ldyBjYXN0aW5n
IG9wZXJhdG9ycyB0byBhbmQgZnJvbSB2YXJpb3VzIERpcmVjdDJEIGRhdGEgdHlwZXMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6
RmxvYXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ludFBvaW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpJbnRQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yRik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yVSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0Ojpv
cGVyYXRvciBEMkQxX1JFQ1RfRik6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRv
ciBEMkQxX1JFQ1RfVSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6SW50U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfVSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfRik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgRDJEMV9N
QVRSSVhfM1gyX0YpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBE
MkQxX01BVFJJWF8zWDJfRik6CisKIDIwMTYtMDktMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUuY2xp
Y2sgc2hvdWxkIGJlIEhUTUxFbGVtZW50LnByb3RvdHlwZS5jbGljawpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW4uY21ha2UJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VXRpbGl0aWVzLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAK
QEAgLTk5LDYgKzEwMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKICNlbmRp
ZgogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRl
IDxkMmQxLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVU
cmFuc2Zvcm07CkBAIC01Nyw3ICs2MSw3IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIGNsYXNzIEZs
b2F0UG9pbnQgewogcHVibGljOgotICAgIEZsb2F0UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsg
fQorICAgIEZsb2F0UG9pbnQoKSB7IH0KICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkp
IDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludChjb25z
dCBJbnRQb2ludCYpOwogICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBz
aXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CkBAIC0xNDgs
MTEgKzE1MiwxNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2lu
dCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRQb2ludChjb25zdCBEMkRfUE9JTlRfMkYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBv
cGVyYXRvciBEMkRfUE9JTlRfMkYoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRmxvYXRQb2ludCBt
YXRyaXhUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICBG
bG9hdFBvaW50IG1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX3gsIG1feTsKKyAgICBmbG9hdCBtX3ggeyAwIH07Cisg
ICAgZmxvYXQgbV95IHsgMCB9OwogfTsKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZWN0YW5nbGVfdDsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEludFJlY3Q7CkBAIC0xODIsNiArMTg2LDExIEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgc3RhdGljIEZsb2F0UmVjdCBpbmZpbml0ZVJlY3QoKTsKICAgICBib29sIGlzSW5m
aW5pdGUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMCBA
QCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKICNlbmRpZgogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRTaXplOwpAQCAtNTQsNyArNTgsNyBA
QCBjbGFzcyBUZXh0U3RyZWFtOwogCiBjbGFzcyBGbG9hdFNpemUgewogcHVibGljOgotICAgIEZs
b2F0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgRmxvYXRTaXplKCkg
eyB9CiAgICAgRmxvYXRTaXplKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIDogbV93aWR0aCh3
aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXpl
KGNvbnN0IEludFNpemUmKTsKIApAQCAtMTIwLDEzICsxMjQsMTggQEAgcHVibGljOgogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTKQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZsb2F0U2l6
ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdz
IGxvc3N5CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6
ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9w
ZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAg
V0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IEQyRDFfU0laRV9GJik7IC8v
IGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3Ig
RDJEMV9TSVpFX0YoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgotICAgIGZsb2F0IG1fd2lk
dGg7Ci0gICAgZmxvYXQgbV9oZWlnaHQ7CisgICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKKyAgICBm
bG9hdCBtX2hlaWdodCB7IDAgfTsKIH07CiAKIGlubGluZSBGbG9hdFNpemUmIG9wZXJhdG9yKz0o
RmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMyw2ICszMywxMCBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5
Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5k
aWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRp
ZgpAQCAtMTM1LDYgKzEzOSwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgUE9JTlQoKSBjb25z
dDsKICAgICBJbnRQb2ludChjb25zdCBQT0lOVFMmKTsKICAgICBvcGVyYXRvciBQT0lOVFMoKSBj
b25zdDsKKworICAgIEludFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMlUmKTsKKyAgICBleHBsaWNp
dCBJbnRQb2ludChjb25zdCBEMkQxX1BPSU5UXzJGJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgRDJEMV9QT0lOVF8yRigpIGNvbnN0
OworICAgIG9wZXJhdG9yIEQyRDFfUE9JTlRfMlUoKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKEVG
TCkKICAgICBleHBsaWNpdCBJbnRQb2ludChjb25zdCBFdmFzX1BvaW50Jik7CiAgICAgb3BlcmF0
b3IgRXZhc19Qb2ludCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBA
QAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogCisjaWYg
UExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiAjaWYgVVNFKENHKQog
dHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgpAQCAtMTcwLDYgKzE3NCwxMCBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFJlY3QoY29uc3QgUkVDVCYpOwog
ICAgIG9wZXJhdG9yIFJFQ1QoKSBjb25zdDsKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEQy
RDFfUkVDVF9GJik7CisgICAgSW50UmVjdChjb25zdCBEMkQxX1JFQ1RfVSYpOworICAgIG9wZXJh
dG9yIEQyRDFfUkVDVF9GKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgRDJEMV9SRUNUX1UoKSBjb25z
dDsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEVpbmFf
UmVjdGFuZ2xlJik7CiAgICAgb3BlcmF0b3IgRWluYV9SZWN0YW5nbGUoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgJKHJldmlzaW9uIDIw
NTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9t
ZXRyeS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgor
I2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dTaXplOwogI2Vu
ZGlmCkBAIC0xNTMsNiArMTU3LDEwIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShXSU4pCiAgICAg
SW50U2l6ZShjb25zdCBTSVpFJik7CiAgICAgb3BlcmF0b3IgU0laRSgpIGNvbnN0OworICAgIElu
dFNpemUoY29uc3QgRDJEMV9TSVpFX1UmKTsKKyAgICBleHBsaWNpdCBJbnRTaXplKGNvbnN0IEQy
RDFfU0laRV9GJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
OworICAgIG9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgRDJEMV9T
SVpFX0YoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5oCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgMjAxMCBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDYgKzM4LDExIEBA
IHR5cGVkZWYgc3RydWN0IENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW4KICNpbmNsdWRlIDxjYWly
by5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIHN0cnVjdCBEMkRfTUFU
UklYXzNYMl9GIEQyRF9NQVRSSVhfM1gyX0Y7Cit0eXBlZGVmIEQyRF9NQVRSSVhfM1gyX0YgRDJE
MV9NQVRSSVhfM1gyX0Y7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFBvaW50OwpAQCAtNjAsNiArNjUsMTAgQEAgcHVibGljOgogICAgIEFmZmluZVRyYW5zZm9y
bShjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4p
CisgICAgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJik7CisjZW5kaWYK
KwogICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJs
ZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOwogCiAgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJs
ZSB5LCBkb3VibGUmIHgyLCBkb3VibGUmIHkyKSBjb25zdDsKQEAgLTE3Miw2ICsxODEsMTAgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIGNhaXJvX21hdHJpeF90KCkgY29uc3Q7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0
OworI2VuZGlmCisKICAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uKGRvdWJs
ZSB4LCBkb3VibGUgeSkKICAgICB7CiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgMSwgeCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
CShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDExIEBAIHR5cGVkZWYgc3RydWN0IHRhZ1hGT1JNIFhGT1JNOwogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IEQyRF9NQVRSSVhfM1gyX0YgRDJE
X01BVFJJWF8zWDJfRjsKK3R5cGVkZWYgRDJEX01BVFJJWF8zWDJfRiBEMkQxX01BVFJJWF8zWDJf
RjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKQEAgLTM2MCw2ICszNjUsMTEgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIFhGT1JNKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYpOworICAgIG9wZXJhdG9yIEQyRDFfTUFUUklYXzNY
Ml9GKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIGJvb2wgaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWF0cml4WzBdWzBdID09IDEgJiYgbV9t
YXRyaXhbMF1bMV0gPT0gMCAmJiBtX21hdHJpeFswXVsyXSA9PSAwICYmIG1fbWF0cml4WzBdWzNd
ID09IDAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2lu
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ludFBvaW50V2luLmNwcAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAKKyNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVk
ZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw0ICs1NiwyNiBAQCBJ
bnRQb2ludDo6b3BlcmF0b3IgUE9JTlRTKCkgY29uc3QKICAgICByZXR1cm4gcDsKIH0KIAorSW50
UG9pbnQ6OkludFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMkYmIHApCisgICAgOiBtX3goY2xhbXBU
b0ludGVnZXIocC54KSkKKyAgICAsIG1feShjbGFtcFRvSW50ZWdlcihwLnkpKQoreworfQorCitJ
bnRQb2ludDo6SW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yVSYgcCkKKyAgICA6IG1feChwLngp
CisgICAgLCBtX3kocC55KQoreworfQorCitJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8y
RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQyRDE6OlBvaW50MkYobV94LCBtX3kpOworfQorCitJ
bnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yVSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQy
RDE6OlBvaW50MlUobV94LCBtX3kpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCShyZXZpc2lvbiAyMDU4
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNs
dWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEludFJlY3Q6OkludFJlY3QoY29uc3QgUkVDVCYgcikKLSAgICA6IG1fbG9jYXRpb24oSW50
UG9pbnQoci5sZWZ0LCByLnRvcCkpLCBtX3NpemUoSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5i
b3R0b20tci50b3ApKQorICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChyLmxlZnQsIHIudG9wKSks
IG1fc2l6ZShJbnRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9tIC0gci50b3ApKQogewog
fQogCkBAIC00Miw0ICs0NCwyNiBAQCBJbnRSZWN0OjpvcGVyYXRvciBSRUNUKCkgY29uc3QKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAorSW50UmVjdDo6SW50UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYg
cikKKyAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoY2xhbXBUb0ludGVnZXIoci5sZWZ0KSwgY2xh
bXBUb0ludGVnZXIoci50b3ApKSkKKyAgICAsIG1fc2l6ZShJbnRTaXplKGNsYW1wVG9JbnRlZ2Vy
KHIucmlnaHQgLSByLmxlZnQpLCBjbGFtcFRvSW50ZWdlcihyLmJvdHRvbSAtIHIudG9wKSkpCit7
Cit9CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRDJEMV9SRUNUX1UmIHIpCisgICAgOiBtX2xv
Y2F0aW9uKEludFBvaW50KHIubGVmdCwgci50b3ApKQorICAgICwgbV9zaXplKEludFNpemUoci5y
aWdodCAtIHIubGVmdCwgci5ib3R0b20gLSByLnRvcCkpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJh
dG9yIEQyRDFfUkVDVF9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6UmVjdEYoeCgpLCB5
KCksIG1heFgoKSwgbWF4WSgpKTsKK30KKworSW50UmVjdDo6b3BlcmF0b3IgRDJEMV9SRUNUX1Uo
KSBjb25zdAoreworICAgIHJldHVybiBEMkQxOjpSZWN0VSh4KCksIHkoKSwgbWF4WCgpLCBtYXhZ
KCkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsNCArNDQsMjYgQEAg
SW50U2l6ZTo6b3BlcmF0b3IgU0laRSgpIGNvbnN0CiAgICAgcmV0dXJuIHM7CiB9CiAKK0ludFNp
emU6OkludFNpemUoY29uc3QgRDJEMV9TSVpFX1UmIHMpCisgICAgOiBtX3dpZHRoKHMud2lkdGgp
CisgICAgLCBtX2hlaWdodChzLmhlaWdodCkKK3sKK30KKworSW50U2l6ZTo6SW50U2l6ZShjb25z
dCBEMkQxX1NJWkVfRiYgcykKKyAgICA6IG1fd2lkdGgoY2xhbXBUb0ludGVnZXIocy53aWR0aCkp
CisgICAgLCBtX2hlaWdodChjbGFtcFRvSW50ZWdlcihzLmhlaWdodCkpCit7Cit9CisKK0ludFNp
emU6Om9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6U2l6
ZVUobV93aWR0aCwgbV9oZWlnaHQpOworfQorCitJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVf
RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQyRDE6OlNpemVGKG1fd2lkdGgsIG1faGVpZ2h0KTsK
K30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5z
Zm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KworI2lmIFBMQVRGT1JNKFdJTikKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorCisjaW5jbHVkZSA8ZDJkMS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgdCkKK3sKKyAgICBzZXRBKHQuXzExKTsKKyAgICBz
ZXRCKHQuXzEyKTsKKyAgICBzZXRDKHQuXzIxKTsKKyAgICBzZXREKHQuXzIyKTsKKyAgICBzZXRF
KHQuXzMxKTsKKyAgICBzZXRGKHQuXzMyKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9w
ZXJhdG9yIEQyRDFfTUFUUklYXzNYMl9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6TWF0
cml4M3gyRihuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGEoKSksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoYigpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjKCkpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGQoKSksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoZSgpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChmKCkpKTsK
K30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oY29uc3QgRDJEMV9NQVRSSVhf
M1gyX0YmIHQpCit7CisgICAgc2V0TWF0cml4KHQuXzExLCB0Ll8xMiwgdC5fMjEsIHQuXzIyLCB0
Ll8zMSwgdC5fMzIpOworfQorCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIEQyRDFfTUFUUklY
XzNYMl9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6TWF0cml4M3gyRihuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGEoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYigpKSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjKCkpLAorICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGQoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZSgpKSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChmKCkpKTsKK30KKworfQorCisjZW5kaWYg
Ly8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYt
MDktMTIgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dp
bl1bRGlyZWN0MkRdIFByb3ZpZGUgRGlyZWN0MkQtYmFzZWQgZ2VvbWV0cnkgYW5kIHRyYW5zZm9y
bSBjYXN0IG9wZXJhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6IExpbmsgdG8gRGlyZWN0MkQgb24gV2luZG93
cy4KKwogMjAxNi0wOS0wNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtYY29kZV0gV2ViS2l0TGVnYWN5LmZyYW1ld29yayBpcyByZS1zaWduZWQgb24gaW5jcmVt
ZW50YWwgYnVpbGQgZXZlbiBpZiBub3RoaW5n4oCZcyBjaGFuZ2VkCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm1XaW4uY21ha2UJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfTElCUkFSSUVTCiAgICAgUFJJVkFURSBDb21jdGwzMgogICAgIFBSSVZBVEUgQ29tc3Vw
cAogICAgIFBSSVZBVEUgQ3J5cHQzMgorICAgIFBSSVZBVEUgRDJkMQogICAgIFBSSVZBVEUgSXBo
bHBhcGkKICAgICBQUklWQVRFIFBzYXBpCiAgICAgUFJJVkFURSBScGNydDQKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0
MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisy
MDE2LTA5LTEyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFtXaW5dW0RpcmVjdDJEXSBQcm92aWRlIERpcmVjdDJELWJhc2VkIGdlb21ldHJ5IGFuZCB0cmFu
c2Zvcm0gY2FzdCBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjE4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc2V2ZXJhbCBuZXcgdGVzdCBzdWl0ZXMgZm9yIHRoZSB2YXJpb3Vz
IGdlb21ldHJpYyBwcmltaXRpdmVzIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1BsYXRmb3JtV2luLmNtYWtlOiBBZGQgbmV3IGZpbGVzIGZvciB0ZXN0IGNhc2VzLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5l
VHJhbnNmb3JtLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0Zsb2F0UG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvRmxvYXRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0Zsb2F0U2l6ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9JbnRQb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFNpemUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOiBBZGQgc29t
ZSBuZXcKKyAgICAgICAgV2luZG93cy1mb2N1c2VkIHRlc3QgY2FzZXMuCisKIDIwMTYtMDktMTIg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBV
UkxQYXJzZXI6IEZpeCByZWxhdGl2ZSBVUkxzIGNvbnRhaW5pbmcgb25seSBmcmFnbWVudHMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkocmV2aXNpb24gMjA1ODQwKQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQCBhZGRfZGVmaW5pdGlvbnMoLURXRUJDT1JFX0VYUE9SVD0pCiAKIHNl
dCh0ZXN0X3dlYmNvcmVfTElCUkFSSUVTCiAgICAgQ3J5cHQzMgorICAgIEQyZDEKICAgICBJcGhs
cGFwaQogICAgIFBzYXBpCiAgICAgU2hsd2FwaQpAQCAtNDAsMTMgKzQxLDIxIEBAIHNldCh0ZXN0
X3dlYmNvcmVfTElCUkFSSUVTCiBzZXQoVGVzdFdlYkNvcmVMaWJfU09VUkNFUwogICAgICR7dGVz
dF9tYWluX1NPVVJDRVN9CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVy
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNm
b3JtLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQ2FsY3VsYXRp
b25WYWx1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0NTU1Bh
cnNlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVj
dC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Zsb2F0UG9pbnQu
Y3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GbG9hdFNpemUuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9IVE1MUGFyc2VySWRpb21z
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSW50UmVjdC5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0ludFBvaW50LmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSW50U2l6ZS5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9UaW1lUmFuZ2VzLmNwcAorICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9VUkwuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS93aW4vRElCUGl4ZWxEYXRhLmNwcApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksNiArMTQ5LDEzIEBACiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBX
aWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRT
dWJtaXRFdmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBGMUZBREQg
LyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0
by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKIAkJN0ExNDU4RkMxQUQ1QzA3MDAwRTA2Nzcy
IC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMTQ1OEZCMUFENUMwMzUwMEUwNjc3MiAvKiBt
b3VzZS1idXR0b24tbGlzdGVuZXIuaHRtbCAqLzsgfTsKKwkJN0E5MDlBN0QxRDg3NzQ4MDAwN0Ux
MEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZmaW5lVHJhbnNm
b3JtLmNwcCAqLzsgfTsKKwkJN0E5MDlBN0UxRDg3NzQ4MDAwN0UxMEY4IC8qIEZsb2F0UG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5MDlB
NzAxRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UG9pbnQuY3BwICovOyB9OworCQk3QTkwOUE3RjFE
ODc3NDgwMDA3RTEwRjggLyogRmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTA5QTcxMUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFJl
Y3QuY3BwICovOyB9OworCQk3QTkwOUE4MDFEODc3NDgwMDA3RTEwRjggLyogRmxvYXRTaXplLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTA5QTcy
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwICovOyB9OworCQk3QTkwOUE4MTFEODc3
NDgwMDA3RTEwRjggLyogSW50UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E5MDlBNzMxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFBvaW50LmNw
cCAqLzsgfTsKKwkJN0E5MDlBODIxRDg3NzQ4MDAwN0UxMEY4IC8qIEludFJlY3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5MDlBNzQxRDg3NzQ3
NTAwN0UxMEY4IC8qIEludFJlY3QuY3BwICovOyB9OworCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEw
RjggLyogSW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTkwOUE3NTFEODc3NDc1MDA3RTEwRjggLyogSW50U2l6ZS5jcHAgKi87IH07CiAJ
CTdBRDNGRThFMUQ3NjEzMTIwMEIxNjlBNCAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUQzRkU4RDFENzVG
QjhEMDBCMTY5QTQgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwICovOyB9OwogCQk3QUU5RTUw
OTFBRTVBRThCMDBDRjg3NEIgLyogdGVzdC5wZGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFOUU1MDgxQUU1QUU4QjAwQ0Y4NzRCIC8qIHRl
c3QucGRmICovOyB9OwogCQk3QzM5NjUwNjFDREQ3NEY5MDA5NERCQjggLyogQ29sb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzOTY1MDUxQ0RE
NzRGOTAwOTREQkI4IC8qIENvbG9yLmNwcCAqLzsgfTsKQEAgLTg5OCw2ICs5MDUsMTMgQEAKIAkJ
N0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8q
IEhhc2hDb3VudGVkU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhhc2hDb3VudGVkU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E1NjIz
MTAxQUQ1QUYzRTAwOTZCOTIwIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E5MDlBNkYxRDg3NzQ3NTAwN0UxMEY4
IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QTkwOUE3MDFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0E5MDlBNzExRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFJlY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTkwOUE3MjFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTczMUQ4Nzc0NzUwMDdFMTBG
OCAvKiBJbnRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTc0MUQ4Nzc0
NzUwMDdFMTBGOCAvKiBJbnRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEludFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTkwOUE3
NTFEODc3NDc1MDA3RTEwRjggLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0E5OUQ5OTMxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVR5cGVzRm9yTW91c2VF
dmVudHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTAyMUJBMUFCMDlFQTcw
MDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTZBMTUx
MUFBQzBCMzEwMDJCMkVEMyAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzNjUsNiArMTM3OSwxMyBAQAogCQk0NDBBMUQzNjE0QTAxMDAwMDA4QTY2RjIgLyogV2Vi
Q29yZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0E5
MDlBNkYxRDg3NzQ3NTAwN0UxMEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCisJCQkJN0E5
MDlBNzAxRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UG9pbnQuY3BwICovLAorCQkJCTdBOTA5QTcx
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFJlY3QuY3BwICovLAorCQkJCTdBOTA5QTcyMUQ4Nzc0
NzUwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwICovLAorCQkJCTdBOTA5QTczMUQ4Nzc0NzUwMDdF
MTBGOCAvKiBJbnRQb2ludC5jcHAgKi8sCisJCQkJN0E5MDlBNzQxRDg3NzQ3NTAwN0UxMEY4IC8q
IEludFJlY3QuY3BwICovLAorCQkJCTdBOTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXpl
LmNwcCAqLywKIAkJCQlDRDg5RDAzNzFDNEVEQjEzMDAwNDBBMDQgLyogY29jb2EgKi8sCiAJCQkJ
OTNBNzIwRTUxOEYxQTBFODAwQTg0OEUxIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAogCQkJ
CTdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvci5jcHAgKi8sCkBAIC0yMjQ3LDYgKzIy
NjgsNyBAQAogCQkJCTdDQ0U3RjI5MUE0MTFCMTAwMDQ0N0M0QyAvKiBDdXN0b21Qcm90b2NvbHNJ
bnZhbGlkU2NoZW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMkExQTQxMUIxMDAwNDQ3
QzRDIC8qIEN1c3RvbVByb3RvY29sc1N5bmNYSFJUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0NDRTdGMkIxQTQxMUIxMDAwNDQ3QzRDIC8qIEN1c3RvbVByb3RvY29sc1Rlc3QubW0gaW4gU291
cmNlcyAqLywKKwkJCQk3QTkwOUE4MDFEODc3NDgwMDA3RTEwRjggLyogRmxvYXRTaXplLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJEQzRDRjc3MUQyRDlERDgwMEVDQ0M5NCAvKiBEYXRhRGV0ZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxNjQ2RTIxRDE4NjJDRDAwMDE1QTFBIC8qIERl
ZmVycmVkVmlld0luV2luZG93U3RhdGVDaGFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VCOTFBNDExQTdFMDA0NDdDNEMgLyogRGV2aWNlU2NhbGVGYWN0b3JJbkRhc2hib2FyZFJlZ2lv
bnMubW0gaW4gU291cmNlcyAqLywKQEAgLTIyNjcsNiArMjI4OSw3IEBACiAJCQkJN0NDRTdFQkUx
QTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNEZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUUwMUE0MTFBOUEwMDQ0N0M0QyAvKiBFZGl0b3JDb21tYW5kcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJGMUE0MTFBN0UwMDQ0N0M0QyAvKiBFbGVtZW50QXRQ
b2ludEluV2ViRnJhbWUubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE4MzFEODc3NDgwMDA3
RTEwRjggLyogSW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRjFBNDExQUU2
MDA0NDdDNEMgLyogRXBoZW1lcmFsU2Vzc2lvblB1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYwMUE0MTFBRTYwMDQ0N0M0QyAvKiBFdmFsdWF0
ZUphdmFTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRjExQTQxMUFFNjAwNDQ3
QzRDIC8qIEZhaWxlZExvYWQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzQyLDggKzIzNjUsMTAg
QEAKIAkJCQk3Q0NFN0VBNjFBNDExQTBGMDA0NDdDNEMgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBNzFBNDExQTEzMDA0NDdDNEMgLyogUGxhdGZv
cm1XZWJWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMjYxQTQxMUFGNjAwNDQ3
QzRDIC8qIFByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBODIxRDg3NzQ4
MDAwN0UxMEY4IC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEIxQTQx
MUFFNjAwNDQ3QzRDIC8qIFByZXZlbnRFbXB0eVVzZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0YyQzFBNDExQjEwMDA0NDdDNEMgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRv
UmVzaXppbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE3RTFEODc3NDgwMDA3RTEwRjgg
LyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwQzFBNDExQUU2MDA0
NDdDNEMgLyogUHJpdmF0ZUJyb3dzaW5nUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQzExRDBBNjUyRjAwRkVCQ0YzIC8qIFByb3Zpc2lvbmFs
VVJMTm90Q2hhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQzgxQTQxMUE3RTAwNDQ3
QzRDIC8qIFB1YmxpY1N1ZmZpeC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjM1MSwxMyArMjM3Niwx
NiBAQAogCQkJCTdDQ0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0ZXJDcmFz
aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTBDMzFEMEE2NTNBMDBGRUJDRjMgLyogUmVt
b3RlT2JqZWN0UmVnaXN0cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDOTFBNDExQTdF
MDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJN0E5MDlBN0QxRDg3NzQ4MDAwN0UxMEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VDQTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZy
b21ET01SYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMEM0MUQwQTY1NDIwMEZFQkNG
MyAvKiBSZXF1aXJlc1VzZXJBY3Rpb25Gb3JQbGF5YmFjay5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTdDQ0U3RjBFMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZXNpemVSZXZlcnNlUGFnaW5hdGVkV2ViVmll
dy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwRjFBNDExQUU2MDA0NDdDNEMgLyogUmVz
aXplV2luZG93QWZ0ZXJDcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxMDFBNDEx
QUU2MDA0NDdDNEMgLyogUmVzcG9uc2l2ZW5lc3NUaW1lckRvZXNudEZpcmVFYXJseS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3Q0NFN0YxMTFBNDExQUU2MDA0NDdDNEMgLyogUmVzdG9yZVNlc3Np
b25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE4
MTFEODc3NDgwMDA3RTEwRjggLyogSW50UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM1
Q0Y5NjcxRDI1RkNENjAwMUE2NUQ0IC8qIFJlc3RvcmVTZXNzaW9uU3RhdGVXaXRob3V0TmF2aWdh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE3RjFEODc3NDgwMDA3RTEwRjggLyog
RmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjEyMUE0MTFBRTYwMDQ0N0M0
QyAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUNCMUE0MTFBN0UwMDQ0N0M0QyAvKiBTZXRBbmRVcGRhdGVDYWNoZU1vZGVsLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NDRTdFQ0MxQTQxMUE3RTAwNDQ3QzRDIC8qIFNldERvY3VtZW50VVJJLm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
QWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZv
aWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9y
bSkKK3sKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0QSgxLjEpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMS4xLCBhZmZpbmVUcmFuc2Zvcm0uYSgpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0Qigy
LjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4yLCBhZmZpbmVUcmFuc2Zvcm0uYigpKTsKKyAg
ICBhZmZpbmVUcmFuc2Zvcm0uc2V0QygzLjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4zLCBh
ZmZpbmVUcmFuc2Zvcm0uYygpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0RCg0LjQpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC40LCBhZmZpbmVUcmFuc2Zvcm0uZCgpKTsKKyAgICBhZmZpbmVU
cmFuc2Zvcm0uc2V0RSg1LjUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCBhZmZpbmVUcmFu
c2Zvcm0uZSgpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0Rig2LjYpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi42LCBhZmZpbmVUcmFuc2Zvcm0uZigpKTsKKworICAgIGFmZmluZVRyYW5zZm9y
bS5zZXRNYXRyaXgoOS45LCA4LjgsIDcuNywgNi42LCA1LjUsIDQuNCk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg5LjksIGFmZmluZVRyYW5zZm9ybS5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
OC44LCBhZmZpbmVUcmFuc2Zvcm0uYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNywgYWZm
aW5lVHJhbnNmb3JtLmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjYsIGFmZmluZVRyYW5z
Zm9ybS5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCBhZmZpbmVUcmFuc2Zvcm0uZSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgYWZmaW5lVHJhbnNmb3JtLmYoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RJZGVudGl0eShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLmEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwg
dHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChB
ZmZpbmVUcmFuc2Zvcm0sIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRlc3Q7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVzdCk7CisgICAgdGVzdEdl
dEFuZFNldCh0ZXN0KTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJh
bnNmb3JtLmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5iKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDMuMCwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRy
YW5zZm9ybS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdERvdWJsZWQoY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0u
YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9y
bS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEhhbHZlZChjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLmEoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMi4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuNSwgdHJh
bnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZh
bHVlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7CisKKyAgICBB
U1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LnBy
ZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSk7Cit9CisKKyNpZiBVU0UoQ0cpCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24pCit7CisgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gY2dUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoY2dU
cmFuc2Zvcm0pOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RH
ZXRBbmRTZXQodGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOwor
fQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRDJE
MU1hdHJpeENvbnN0cnVjdGlvbikKK3sKKyAgICBEMkQxX01BVFJJWF8zWDJfRiBkMmRUcmFuc2Zv
cm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KGQyZFRyYW5zZm9ybSk7CisKKyAgICB0ZXN0
VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9CisjZW5kaWYKKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIElkZW50aXR5KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgQVNTRVJUX0ZBTFNFKHRl
c3QuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbigpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bk9yRmxpcHBlZCgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25t
ZW50KCkpOworCisgICAgdGVzdC5tYWtlSWRlbnRpdHkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRl
c3QuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50
KCkpOworCisgICAgdGVzdElkZW50aXR5KHRlc3QpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9y
bSwgTWFwRmxvYXRQb2ludCkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KDEwMC4wZiwgNTAuMGYpOworCisgICAgYXV0
byBtYXBwZWRQb2ludCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYs
IG1hcHBlZFBvaW50LnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFw
cGVkUG9pbnQyID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MTAwLjBmLCBtYXBwZWRQb2ludDIueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBt
YXBwZWRQb2ludDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBw
ZWRQb2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1
MC4wZiwgbWFwcGVkUG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFw
cGVkUG9pbnQzLnkoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBEb3VibGVzKQor
eworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIGRvdWJsZSB4ID0gMTAw
LjA7CisgICAgZG91YmxlIHkgPSA1MC4wOworCisgICAgZG91YmxlIG1hcHBlZFggPSAwOworICAg
IGRvdWJsZSBtYXBwZWRZID0gMDsKKyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZ
KTsKKworICAgIEFTU0VSVF9ET1VCTEVfRVEoMTAwLjAsIG1hcHBlZFgpOworICAgIEFTU0VSVF9E
T1VCTEVfRVEoNTAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIG1h
cHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHksIG1hcHBlZFgs
IG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWCk7CisgICAg
QVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsK
KworICAgIG1hcHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHks
IG1hcHBlZFgsIG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSg1MC4wLCBtYXBwZWRY
KTsKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDEwMC4wLCBtYXBwZWRZKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIE1hcEludFBvaW50KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0ZXN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50KDEwMCwgNTApOworCisgICAgYXV0
byBtYXBwZWRQb2ludCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEw
MCwgbWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50LnkoKSk7
CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQyID0gdGVzdC5t
YXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRVEoMTAwLCBtYXBwZWRQb2ludDIueCgpKTsK
KyAgICBBU1NFUlRfRVEoMTAwLCBtYXBwZWRQb2ludDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgw
LjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKwor
ICAgIEFTU0VSVF9FUSg1MCwgbWFwcGVkUG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwg
bWFwcGVkUG9pbnQzLnkoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBJbnRTaXpl
KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSgyMDAsIDMwMCk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUgPSB0ZXN0Lm1hcFNp
emUoc2l6ZSk7CisKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRTaXplLndpZHRoKCkpOworICAg
IEFTU0VSVF9FUSgzMDAsIG1hcHBlZFNpemUuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXREKDIu
MCk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUyID0gdGVzdC5tYXBTaXplKHNpemUpOworCisgICAg
QVNTRVJUX0VRKDIwMCwgbWFwcGVkU2l6ZTIud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMCwg
bWFwcGVkU2l6ZTIuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXRBKDAuNSk7CisKKyAgICBhdXRv
IG1hcHBlZFNpemUzID0gdGVzdC5tYXBTaXplKHNpemUpOworCisgICAgQVNTRVJUX0VRKDEwMCwg
bWFwcGVkU2l6ZTMud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMCwgbWFwcGVkU2l6ZTMuaGVp
Z2h0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgTWFwRmxvYXRTaXplKQoreworICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBz
aXplKDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVkU2l6ZSA9IHRlc3QubWFwU2l6
ZShzaXplKTsKKworICAgIEFTU0VSVF9FUSgyMDAuMGYsIG1hcHBlZFNpemUud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0VRKDMwMC4wZiwgbWFwcGVkU2l6ZS5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNl
dEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkU2l6ZTIgPSB0ZXN0Lm1hcFNpemUoc2l6ZSk7CisK
KyAgICBBU1NFUlRfRVEoMjAwLjBmLCBtYXBwZWRTaXplMi53aWR0aCgpKTsKKyAgICBBU1NFUlRf
RVEoNjAwLjBmLCBtYXBwZWRTaXplMi5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsK
KworICAgIGF1dG8gbWFwcGVkU2l6ZTMgPSB0ZXN0Lm1hcFNpemUoc2l6ZSk7CisKKyAgICBBU1NF
UlRfRVEoMTAwLjBmLCBtYXBwZWRTaXplMy53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLjBm
LCBtYXBwZWRTaXplMy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBJ
bnRSZWN0KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdCgxMCwgMjAsIDIwMCwgMzAwKTsKKworICAgIGF1dG8gbWFwcGVkUmVj
dCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSgxMCwgbWFwcGVkUmVjdC54
KCkpOworICAgIEFTU0VSVF9FUSgyMCwgbWFwcGVkUmVjdC55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3Qud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDMwMCwgbWFwcGVkUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIg
PSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3QyLngo
KSk7CisgICAgQVNTRVJUX0VRKDQwLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9FUSg2MDAsIG1hcHBlZFJlY3Qy
LmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRSZWN0
MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSg1LCBtYXBwZWRSZWN0My54
KCkpOworICAgIEFTU0VSVF9FUSg0MCwgbWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRVEo
MTAwLCBtYXBwZWRSZWN0My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLCBtYXBwZWRSZWN0
My5oZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBGbG9hdFJlY3QpCit7
CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QoMTAuZiwgMjAuMGYsIDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVk
UmVjdCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwg
bWFwcGVkUmVjdC54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdC55
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFJlY3Qud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUmVjdC5oZWlnaHQoKSk7CisKKyAgICB0
ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIgPSB0ZXN0Lm1hcFJlY3QocmVj
dCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3QyLngoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDQwLjBmLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9GTE9B
VF9FUSgyMDAuMGYsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg2
MDAuMGYsIG1hcHBlZFJlY3QyLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisg
ICAgYXV0byBtYXBwZWRSZWN0MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9G
TE9BVF9FUSg1LjBmLCBtYXBwZWRSZWN0My54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MC4w
ZiwgbWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRS
ZWN0My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNjAwLjBmLCBtYXBwZWRSZWN0My5o
ZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBGbG9hdFF1YWQpCit7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAwLjBmLCAxMDAuMGYsIDEwMC4wZiwgNTAuMGYp
OworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkKHJlY3QpOworCisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgcXVhZC5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwg
cXVhZC5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMigpLngo
KSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMigpLnkoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDE1MC4wZiwgcXVhZC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVh
ZC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgcXVhZC5wNCgpLnkoKSk7
CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKyAgICBhdXRvIG1hcHBlZFF1
YWQgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBt
YXBwZWRRdWFkLnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRR
dWFkLnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkLnAy
KCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkLnAyKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkLnAzKCkueCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBtYXBwZWRRdWFkLnAzKCkueSgpKTsKKyAgICBBU1NF
UlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkLnA0KCkueCgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTUwLjBmLCBtYXBwZWRRdWFkLnA0KCkueSgpKTsKKworICAgIHRlc3Quc2V0RCgyLjAp
OworCisgICAgYXV0byBtYXBwZWRRdWFkMiA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAgIEFT
U0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQyLnAxKCkueCgpKTsKKyAgICBBU1NFUlRf
RkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMi5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgy
MDAuMGYsIG1hcHBlZFF1YWQyLnAyKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBm
LCBtYXBwZWRRdWFkMi5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFw
cGVkUXVhZDIucDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1
YWQyLnA0KCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFkMi5w
NCgpLnkoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUXVhZDMg
PSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBl
ZFF1YWQzLnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFk
My5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDMucDIo
KS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQzLnAyKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMy5wMygpLngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUXVhZDMucDMoKS55KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDMucDQoKS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQzLnA0KCkueSgpKTsKK30KKworVEVTVChBZmZpbmVU
cmFuc2Zvcm0sIE11bHRpcGx5KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSBpZGVudGl0eTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAg
IHRlc3QubXVsdGlwbHkoaWRlbnRpdHkpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRl
c3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGRvdWJsZXIoMi4wLCAwLjAsIDAu
MCwgMi4wLCAwLjAsIDAuMCk7CisKKyAgICB0ZXN0Lm11bHRpcGx5KGRvdWJsZXIpOworCisgICAg
dGVzdERvdWJsZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gaGFsdmVy
KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjApOworCisgICAgdGVzdC5tdWx0aXBseShoYWx2
ZXIpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5tdWx0
aXBseShoYWx2ZXIpOworCisgICAgdGVzdEhhbHZlZCh0ZXN0KTsKK30KKworVEVTVChBZmZpbmVU
cmFuc2Zvcm0sIFNjYWxlKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYu
MCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgyLjApOworCisgICAgdGVzdERvdWJsZWQodGVz
dCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24o
dGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0SGFsdmVkKHRlc3QpOwor
fQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgU2NhbGVYWSkKK3sKKyAgICBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMS4wLCAxLjApOwor
CisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgyLjAs
IDIuMCk7CisKKyAgICB0ZXN0RG91YmxlZCh0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMC41LCAw
LjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2Fs
ZSgwLjUsIDAuNSk7CisKKyAgICB0ZXN0SGFsdmVkKHRlc3QpOworfQorCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgU2NhbGVVbmlmb3JtTm9uVW5pZm9ybSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RW
YWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDEuMCwg
MS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2Nh
bGVOb25Vbmlmb3JtKDIuMCwgMi4wKTsKKworICAgIHRlc3REb3VibGVkKHRlc3QpOworCisgICAg
dGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAg
dGVzdEhhbHZlZCh0ZXN0KTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFNjYWxlTm9uVW5p
Zm9ybSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4w
LCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKwor
ICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDEuMCwgMi4wKTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5zY2FsZU5v
blVuaWZvcm0oMS4wLCAwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMi4wLCAxLjApOworCisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxMi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCB0ZXN0LmIo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Quc2Nh
bGVOb25Vbmlmb3JtKDAuNSwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0
KTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDAuNSwgMi4wKTsKKworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMy4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3Qu
ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFm
ZmluZVRyYW5zZm9ybSwgU2NhbGVGbG9hdFNpemUpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZmlyc3QoMS4w
ZiwgMi4wZik7CisKKyAgICB0ZXN0LnNjYWxlKGZpcnN0KTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIHNlY29uZCgxLjBmLCAwLjVmKTsKKworICAgIHRlc3Quc2NhbGUoc2Vjb25kKTsKKwor
ICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSB0aGlyZCgyLjBmLCAxLjBmKTsKKworICAgIHRlc3Quc2NhbGUodGhpcmQpOworCisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxMi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4w
LCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4w
LCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3VydGgoMC41ZiwgMS4wZik7CisKKyAgICB0ZXN0LnNjYWxl
KGZvdXJ0aCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFNpemUgZmlmdGgoMC41ZiwgMi4wZik7CisKKyAgICB0ZXN0LnNjYWxlKGZpZnRo
KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjUsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5j
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5m
KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgUm90YXRlKQoreworICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisg
ICAgdGVzdC5yb3RhdGUoMzYwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3Qp
OworCisgICAgdGVzdC5yb3RhdGUoMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9u
ID0gMC4wMDAxOworCisgICAgRVhQRUNUX05FQVIoLTYuMCwgdGVzdC5hKCksIGVwc2lsb24pOwor
ICAgIEVYUEVDVF9ORUFSKC01LjAsIHRlc3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVB
UigtNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTMuMCwgdGVzdC5k
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlKC0xODAu
MCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnJvdGF0
ZSg5MC4wKTsKKworICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKDMuMCwgdGVzdC5iKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC02
LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS4wLCB0ZXN0LmQoKSwg
ZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5yb3RhdGUoLTkwLjApOwor
CisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQorCitURVNUKEFmZmluZVRyYW5z
Zm9ybSwgUm90YXRlRnJvbVZlY3RvcikKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
dGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3Qucm90YXRlRnJv
bVZlY3RvcigwLjAsIDAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisK
KyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoLTEwLjAsIC0xMC4wKTsKKworICAgIHN0YXRpYyBk
b3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVYUEVDVF9ORUFSKC03LjA3MTAsIHRlc3Qu
YSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS42NTY4LCB0ZXN0LmIoKSwgZXBzaWxv
bik7CisgICAgRVhQRUNUX05FQVIoMS40MTQyLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX05FQVIoMS40MTQyLCB0ZXN0LmQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOwor
CisgICAgdGVzdC5yb3RhdGVGcm9tVmVjdG9yKDEwLjAsIDEwLjApOworCisgICAgRVhQRUNUX05F
QVIoLTQuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0zLjAsIHRlc3Qu
YigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUig2LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUig1LjAsIHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYo
KSk7CisKKyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoLTEwLjAsIDEwLjApOworCisgICAgRVhQ
RUNUX05FQVIoNy4wNzEwLCB0ZXN0LmEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoNS42
NTY4LCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTEuNDE0MiwgdGVzdC5j
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0xLjQxNDIsIHRlc3QuZCgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoMTAuMCwg
LTEwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQorCitURVNUKEFm
ZmluZVRyYW5zZm9ybSwgVHJhbnNsYXRlWFkpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0LnRyYW5z
bGF0ZSgwLjAsIDAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAg
ICB0ZXN0LnRyYW5zbGF0ZSg1LjAsIDAuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwg
dGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwg
dGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzIuMCwgdGVzdC5lKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMjYuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC50cmFuc2xhdGUoMC4w
LCAtMS4yKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwg
dGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyNy4yLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMi40
LCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUcmFuc2xhdGVGbG9hdFBv
aW50KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBub25lOworICAgIHRl
c3QudHJhbnNsYXRlKG5vbmUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmaXJzdCg1LjBmLCAwLjBmKTsKKworICAgIHRlc3Qu
dHJhbnNsYXRlKGZpcnN0KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgyNi4wLCB0ZXN0LmYoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNlY29uZCgw
LjBmLCAtMS4yZik7CisKKyAgICB0ZXN0LnRyYW5zbGF0ZShzZWNvbmQpOworCisgICAgc3RhdGlj
IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRl
c3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRl
c3QuZCgpKTsKKyAgICBFWFBFQ1RfTkVBUigyNy4yLCB0ZXN0LmUoKSwgZXBzaWxvbik7CisgICAg
RVhQRUNUX05FQVIoMjIuNCwgdGVzdC5mKCksIGVwc2lsb24pOworCisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgp
KTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAg
ICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsK
KworICAgIHRlc3QyLnRyYW5zbGF0ZShzZWNvbmQpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qy
LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNs
YXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBTaGVhcikKK3sKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4w
KTsKKworICAgIHRlc3Quc2hlYXIoMC4wLCAwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zaGVhcigyLjAsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDE0LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDEzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVz
dC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0
LnNoZWFyKC0xLjAsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQ2LjAsIHRlc3QuYSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDM3LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRmxpcFgp
Cit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4w
LCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0
ZXN0LmZsaXBYKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC02LjAsIHRlc3QuYSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAgdGVzdFZhbHVlQ29u
c3RydWN0aW9uKHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QyOwor
CisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBw
ZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMS4w
LCB0ZXN0Mi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MS4wLCB0ZXN0Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5lKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkpOworCisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uKCkpOworICAgIC8vICdGbGlwcGVkJyBqdXN0IG1lYW5zIGluIHRoZSBZIGRp
cmVjdGlvbgorICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0
Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRmxpcFkpCit7CisgICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEu
MCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LmZsaXBZ
KCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0
LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVz
dC5mKCkpOworCisgICAgdGVzdC5mbGlwWSgpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgdGVz
dElkZW50aXR5KHRlc3QyKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7
CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAg
QVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisK
KyAgICB0ZXN0Mi5mbGlwWSgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QyLmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QyLmIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIHRlc3QyLmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMS4wLCB0ZXN0
Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5lKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlz
SWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0
aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3Qy
LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNs
YXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBGbGlwWGFuZEZsaXBZKQor
eworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwg
Mi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVz
dC5mbGlwWCgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNi4wLCB0ZXN0LmEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgtNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0
LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoLTYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoLTMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxp
cFgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00LjAsIHRl
c3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC0zLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0
ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDI7CisKKyAgICBB
U1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0
Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOwor
CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIC8vIEZhbHNlIGhlcmUgYmVj
YXVzZSBYIGlzIGFsc28gZmxpcHBlZC4KKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qy
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVz
dDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNm
b3JtLCBTa2V3KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4w
LCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3Qp
OworCisgICAgdGVzdC5za2V3KDM2MC4wLCAzNjAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMC4wLCAwLjApOworCisgICAgdGVzdFZhbHVl
Q29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3KDE4MC4wLCAxODAuMCk7CisKKyAg
ICBzdGF0aWMgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7Cisg
ICAgRVhQRUNUX05FQVIoNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnNrZXco
LTE4MC4wLCAtMTgwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQor
CitURVNUKEFmZmluZVRyYW5zZm9ybSwgU2tld1gpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXdYKDM2MC4wKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2tld1goMTgwLjApOworCisg
ICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9F
USg2LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOwor
ICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmlu
ZVRyYW5zZm9ybSwgU2tld1kpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXdZKDM2MC4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0
cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2tld1koMTgwLjApOworCisgICAgc3RhdGljIGRv
dWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3Qu
YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9O
RUFSKDQuMCwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0
ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwg
WGFuZFlTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIEVYUEVDVF9ORUFSKDcuODEwMiwgdGVzdC54
U2NhbGUoKSwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUig1LjAsIHRlc3QueVNjYWxlKCksIDAu
MDAwMSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBFcXVhbGl0eSkKK3sKKyAgICBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDI7CisKKyAgICBBU1NFUlRfRkFMU0Uo
dGVzdCA9PSB0ZXN0Mik7CisgICAgQVNTRVJUX1RSVUUodGVzdCAhPSB0ZXN0Mik7CisKKyAgICB0
ZXN0Lm1ha2VJZGVudGl0eSgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdCA9PSB0ZXN0Mik7Cisg
ICAgQVNTRVJUX0ZBTFNFKHRlc3QgIT0gdGVzdDIpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9y
bSwgSW52ZXJzZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKworICAg
IEFTU0VSVF9UUlVFKHRlc3QuaXNJbnZlcnRpYmxlKCkpOworCisgICAgYXV0byBpbnZlcnNlID0g
dGVzdC5pbnZlcnNlKCk7CisKKyAgICBBU1NFUlQoaW52ZXJzZSk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEuMCwgaW52ZXJzZS0+YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52
ZXJzZS0+YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJzZS0+YygpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+ZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDAuMCwgaW52ZXJzZS0+ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJz
ZS0+ZigpKTsKKworICAgIGF1dG8gdGVzdDIgPSB0ZXN0ICogaW52ZXJzZS52YWx1ZSgpOworCisg
ICAgdGVzdElkZW50aXR5KHRlc3QyKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIEJsZW5k
KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworCisgICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIHRlc3QyOworICAgIHRlc3QyLnNjYWxlKDIuMCk7CisKKyAgICB0ZXN0
LmJsZW5kKHRlc3QyLCA1MCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00OC4wLCB0ZXN0LmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTQ4LjAsIHRlc3Qu
ZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUcmFu
c2xhdGlvbikKK3sKKyAgICBhdXRvIHRlc3QgPSBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnRy
YW5zbGF0aW9uKC01LjAsIC03LjApOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNS4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgtNy4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUb1Ry
YW5zZm9ybWF0aW9uTWF0cml4KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNm
b3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4w
LCBtYXRyaXgubTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTEyKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTEzKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCBtYXRyaXgubTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBt
YXRyaXgubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBtYXRyaXgubTIyKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTIzKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMC4wLCBtYXRyaXgubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRy
aXgubTMxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTMyKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBtYXRyaXgubTMzKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCBtYXRyaXgubTM0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgTWFrZU1h
cEJldHdlZW5SZWN0cykKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZyb21SZWN0KDEwLjBmLCAxMC4wZiwgMTAwLjBm
LCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0b1JlY3QoNzAuMGYsIDcwLjBmLCAy
MDAuMGYsIDUwLjBmKTsKKworICAgIGF1dG8gbWFwQmV0d2VlbiA9IFdlYkNvcmU6Om1ha2VNYXBC
ZXR3ZWVuUmVjdHMoZnJvbVJlY3QsIHRvUmVjdCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIu
MCwgbWFwQmV0d2Vlbi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVu
LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4uYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDAuNSwgbWFwQmV0d2Vlbi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNjAuMCwgbWFwQmV0d2Vlbi5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNjAuMCwgbWFw
QmV0d2Vlbi5mKCkpOworfQorCisjaWYgVVNFKENHKQorVEVTVChBZmZpbmVUcmFuc2Zvcm0sIENv
cmVHcmFwaGljc0Nhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0
ZXN0MiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4w
KTsKKworICAgIEFTU0VSVF9UUlVFKENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSh0
ZXN0LCB0ZXN0MikpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QzOworCisg
ICAgQVNTRVJUX0ZBTFNFKENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSh0ZXN0LCB0
ZXN0MykpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCitURVNUKEFmZmluZVRyYW5z
Zm9ybSwgRGlyZWN0MkRDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0oNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBEMkQxX01BVFJJ
WF8zWDJfRiB0ZXN0ID0gdHJhbnNmb3JtOworICAgIEQyRDFfTUFUUklYXzNYMl9GIHRlc3QyID0g
RDJEMTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMDAwMTsKKworICAgIEVYUEVDVF9ORUFS
KHRlc3QuXzExLCB0ZXN0Mi5fMTEsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzEy
LCB0ZXN0Mi5fMTIsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIxLCB0ZXN0Mi5f
MjEsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIyLCB0ZXN0Mi5fMjIsIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzMxLCB0ZXN0Mi5fMzEsIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKHRlc3QuXzMyLCB0ZXN0Mi5fMzIsIGVwc2lsb24pOworfQorI2VuZGlmCisK
K30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRQ
b2ludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVU
cmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9u
TWF0cml4Lmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZvaWQgdGVzdEdl
dEFuZFNldChXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQoreworICAgIHBvaW50LnNldFgoMS4x
Zik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMWYsIHBvaW50LngoKSk7CisgICAgcG9pbnQuc2V0
WSgyLjJmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4yZiwgcG9pbnQueSgpKTsKKworICAgIHBv
aW50LnNldCg5LjlmLCA4LjhmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOS45ZiwgcG9pbnQueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOC44ZiwgcG9pbnQueSgpKTsKK30KKworVEVTVChGbG9h
dFBvaW50LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
dGVzdDsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIHRlc3QueSgpKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RF
U1QoRmxvYXRQb2ludCwgVmFsdWVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0ZXN0KDkuOWYsIDguOGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDkuOWYsIHRlc3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOC44ZiwgdGVzdC55KCkpOworCisgICAgdGVzdEdl
dEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChGbG9hdFBvaW50LCBaZXJvQ29uc3RydWN0aW9uKQor
eworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdCA9IFdlYkNvcmU6OkZsb2F0UG9pbnQ6Onpl
cm8oKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIHRlc3QueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBJbnRQb2ludENvbnN0
cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0SW5wdXQoMjAwMywgMTk5Nyk7
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0ID0gV2ViQ29yZTo6RmxvYXRQb2ludCh0ZXN0
SW5wdXQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMDMuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMTk5Ny4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQs
IEZsb2F0U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdElu
cHV0KDUwMC43ZiwgMzAwLjJmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QgPSBXZWJD
b3JlOjpGbG9hdFBvaW50KHRlc3RJbnB1dCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAwLjcs
IHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjIsIHRlc3QueSgpKTsKK30KKwor
VEVTVChGbG9hdFBvaW50LCBOYXJyb3dQcmVjaXNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB0ZXN0WCA9IDEuMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM7CisgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSB0ZXN0WSA9IDIuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU7CisKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IHRlc3QgPSBXZWJDb3JlOjpGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24o
dGVzdFgsIDIuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzKTsKKworICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgZXBzaWxvbiA9IDAuMDAwMDE7CisKKyAgICBFWFBFQ1RfTkVBUigxLjEyMzQ1NiwgdGVzdC54
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDIuMzQ1Njc4LCB0ZXN0LnkoKSwgZXBzaWxv
bik7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgTW92ZUJ5RmxvYXQpCit7CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoMjAuMmYsIDMwLjNmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoLTgxLjNmLCAxMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MzguOWYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoMTEuMWYsIC0zMy4yZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NTAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA3LjFmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoLTUuNmYsIC05LjhmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0
NC40ZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTcuM2YsIHRlc3QueSgpKTsK
K30KKworVEVTVChGbG9hdFBvaW50LCBNb3ZlQnlJbnRTaXplKQoreworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkpOwor
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBmaXJzdCgyMCwgMzApOworCisgICAgdGVzdC5tb3ZlKGZp
cnN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjMwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNl
Y29uZCgtODEsIDEwKTsKKworICAgIHRlc3QubW92ZShzZWNvbmQpOworCisgICAgRVhQRUNUX0ZM
T0FUX0VRKDM5LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4wZiwgdGVz
dC55KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB0aGlyZCgxMSwgLTMzKTsKKworICAgIHRl
c3QubW92ZSh0aGlyZCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIHRlc3QueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA3LjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIGZvdXJ0aCgtNiwgLTEwKTsKKworICAgIHRlc3QubW92ZShmb3VydGgpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDQ0LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5
Ny4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIE1vdmVCeUZsb2F0U2l6ZSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QoMTAwLjBmLCAyMDAuMGYpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
MDAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmaXJzdCgyMC4yZiwg
MzAuM2YpOworCisgICAgdGVzdC5tb3ZlKGZpcnN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2Vjb25kKC04MS4zZiwgMTAuMGYpOworCisgICAg
dGVzdC5tb3ZlKHNlY29uZCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzguOWYsIHRlc3QueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgdGhpcmQoMTEuMWYsIC0zMy4yZik7CisKKyAgICB0ZXN0Lm1vdmUodGhpcmQp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDIwNy4xZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZvdXJ0
aCgtNS42ZiwgLTkuOGYpOworCisgICAgdGVzdC5tb3ZlKGZvdXJ0aCk7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNDQuNGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjNmLCB0
ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgTW92ZUJ5SW50UG9pbnQpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0
ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmaXJzdCgyMCwgMzApOworCisgICAg
dGVzdC5tb3ZlQnkoZmlyc3QpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgdGVzdC54
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMzAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNv
cmU6OkludFBvaW50IHNlY29uZCgtODEsIDEwKTsKKworICAgIHRlc3QubW92ZUJ5KHNlY29uZCk7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzkuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjQwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0aGlyZCgx
MSwgLTMzKTsKKworICAgIHRlc3QubW92ZUJ5KHRoaXJkKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USg1MC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDcuMGYsIHRlc3QueSgp
KTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGZvdXJ0aCgtNiwgLTEwKTsKKworICAgIHRlc3Qu
bW92ZUJ5KGZvdXJ0aCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDQuMGYsIHRlc3QueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjBmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQ
b2ludCwgTW92ZUJ5RmxvYXRQb2ludCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3Qo
MTAwLjBmLCAyMDAuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgZmlyc3QoMjAuMmYsIDMwLjNmKTsKKworICAgIHRlc3QubW92ZUJ5KGZpcnN0
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNl
Y29uZCgtODEuM2YsIDEwLjBmKTsKKworICAgIHRlc3QubW92ZUJ5KHNlY29uZCk7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMzguOWYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQw
LjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRoaXJkKDExLjFmLCAt
MzMuMmYpOworCisgICAgdGVzdC5tb3ZlQnkodGhpcmQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VR
KDUwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwNy4xZiwgdGVzdC55KCkp
OworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmb3VydGgoLTUuNmYsIC05LjhmKTsKKworICAg
IHRlc3QubW92ZUJ5KGZvdXJ0aCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDQuNGYsIHRlc3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjNmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1Qo
RmxvYXRQb2ludCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4w
ZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICB0ZXN0LnNjYWxlKDIu
MGYsIDIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYsIHRlc3QueSgpKTsKKworICAgIHRlc3Quc2NhbGUoMC41
ZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LngoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkpOworCisgICAgdGVzdC5zY2FsZSgxLjBm
LCAwLjVmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwg
Tm9ybWFsaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgzMC4wZiwgNDAuMGYpOwor
CisgICAgYS5ub3JtYWxpemUoKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjYsIGEueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC44LCBhLnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwg
RG90KQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuMGYsIDIwMC4wZik7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBiKDIuMGYsIDQuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgYygxLjBmLCAwLjVmKTsKKworICAgIEVYUEVDVF9ORUFSKDEwMDAuMGYsIGEuZG90KGIpLCAw
LjAwMDFmKTsKKyAgICBFWFBFQ1RfTkVBUigyMDAuMGYsIGEuZG90KGMpLCAwLjAwMDFmKTsKK30K
KworCitURVNUKEZsb2F0UG9pbnQsIFNsb3BlQW5nbGVSYWRpYW5zKQoreworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MS4xMDcxNDg4ZiwgdGVzdC5zbG9wZUFuZ2xlUmFkaWFucygpKTsKK30KKworVEVTVChGbG9hdFBv
aW50LCBMZW5ndGgpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAw
LjBmKTsKKworICAgIEVYUEVDVF9ORUFSKDIyMy42MDY3OTc3NWYsIHRlc3QubGVuZ3RoKCksIDAu
MDAwMWYpOworfQorCitURVNUKEZsb2F0UG9pbnQsIExlbmd0aFNxdWFyZWQpCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0
LnkoKSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAwMDAuMGYsIHRlc3QubGVuZ3RoU3F1YXJl
ZCgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBDb25zdHJhaW5lZEJldHdlZW4pCit7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBsZWZ0KDEwLjBmLCAyMC4wZik7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCByaWdodCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHRlc3QxKDUwLjBmLCA4MC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0Mig4LjBm
LCA4MC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0Myg1MC4wZiwgMjIwLjBmKTsK
KworICAgIGF1dG8gY29uc3RyYWluZWQxID0gdGVzdDEuY29uc3RyYWluZWRCZXR3ZWVuKGxlZnQs
IHJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIGNvbnN0cmFpbmVkMS54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg4MC4wZiwgY29uc3RyYWluZWQxLnkoKSk7CisKKyAgICBhdXRv
IGNvbnN0cmFpbmVkMiA9IHRlc3QyLmNvbnN0cmFpbmVkQmV0d2VlbihsZWZ0LCByaWdodCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBjb25zdHJhaW5lZDIueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoODAuMGYsIGNvbnN0cmFpbmVkMi55KCkpOworCisgICAgYXV0byBjb25zdHJhaW5l
ZDMgPSB0ZXN0My5jb25zdHJhaW5lZEJldHdlZW4obGVmdCwgcmlnaHQpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg1MC4wZiwgY29uc3RyYWluZWQzLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIw
MC4wZiwgY29uc3RyYWluZWQzLnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgU2hydW5rVG8p
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBiaWcoMTAwLjBmLCAyMDAuMGYpOworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgc21hbGxlcigxMC4wZiwgODAuMGYpOworCisgICAgYXV0byBzaHJ1
bmtUbyA9IGJpZy5zaHJ1bmtUbyhzbWFsbGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4w
Ziwgc2hydW5rVG8ueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoODAuMGYsIHNocnVua1RvLnko
KSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJpZ2lzaCg4LjBmLCAyMDAuMGYpOworCisg
ICAgYXV0byBzaHJ1bmtUbzIgPSBiaWdpc2guc2hydW5rVG8oc21hbGxlcik7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoOC4wZiwgc2hydW5rVG8yLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgw
LjBmLCBzaHJ1bmtUbzIueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBFeHBhbmRlZFRvKQor
eworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYmlnKDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHNtYWxsZXIoMTAuMGYsIDgwLjBmKTsKKworICAgIGF1dG8gZXhwYW5k
ZWRUbyA9IHNtYWxsZXIuZXhwYW5kZWRUbyhiaWcpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MC4wZiwgZXhwYW5kZWRUby54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIGV4cGFu
ZGVkVG8ueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYmlnaXNoKDguMGYsIDMwMC4w
Zik7CisKKyAgICBhdXRvIGV4cGFuZGVkVG8yID0gYmlnaXNoLmV4cGFuZGVkVG8oYmlnKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIGV4cGFuZGVkVG8yLngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMwMC4wZiwgZXhwYW5kZWRUbzIueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBUcmFuc3Bvc2UpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAw
LjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBhdXRvIHRyYW5zcG9zZWQgPSB0
ZXN0LnRyYW5zcG9zZWRQb2ludCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdHJh
bnNwb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRyYW5zcG9zZWQueSgp
KTsKK30KKworVEVTVChGbG9hdFBvaW50LCBUcmFuc2Zvcm1zKQoreworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gYWZmaW5lOworCisgICAgYXV0byB0cmFuc2Zvcm1lZDEgPSB0ZXN0Lm1hdHJpeFRyYW5z
Zm9ybShhZmZpbmUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdHJhbnNmb3JtZWQx
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdHJhbnNmb3JtZWQxLnkoKSk7CisK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lMigyLjAsIDAuMCwgMC4wLCAyLjAs
IDAuMCwgMC4wKTsKKworICAgIGF1dG8gdHJhbnNmb3JtZWQyID0gdGVzdC5tYXRyaXhUcmFuc2Zv
cm0oYWZmaW5lMik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc2Zvcm1lZDIu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAwLjBmLCB0cmFuc2Zvcm1lZDIueSgpKTsKKwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIGF1dG8gdHJh
bnNmb3JtZWQzID0gdGVzdC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAuMGYsIHRyYW5zZm9ybWVkMy54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
MDAuMGYsIHRyYW5zZm9ybWVkMy55KCkpOworCisgICAgYXV0byB0cmFuc2Zvcm1lZDQgPSB0ZXN0
Lm1hdHJpeFRyYW5zZm9ybShhZmZpbmUyLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc2Zvcm1lZDQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNDAwLjBmLCB0cmFuc2Zvcm1lZDQueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBNYXRoKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuMGYsIDIwMC4wZik7Cisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBiKDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGEgKz0gYjsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIGEueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNDAwLjBmLCBhLnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYyg1MC4wZiwgNTAu
MGYpOworCisgICAgYSArPSBjOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDI1MC4wZiwgYS54KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0NTAuMGYsIGEueSgpKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSBkKDEwLjBmLCAyMDAuMGYpOworCisgICAgYSAtPSBkOworCisgICAgRVhQRUNUX0ZM
T0FUX0VRKDI0MC4wZiwgYS54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNTAuMGYsIGEueSgp
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBlKDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGF1
dG8gZiA9IGIgKyBlOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgZi54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYsIGYueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgZygxMC4wZiwgMjAuMGYpOworCisgICAgYXV0byBoID0gYiArIGc7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMTEwLjBmLCBoLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgaC55
KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGkgPSBiIC0gZzsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSg5MC4wZiwgaS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTgwLjBmLCBp
LmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgaiA9IGIgLSBlOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAuMGYsIGoueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwg
ai55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBuZWdhdGVkID0gLWI7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoLTEwMC4wZiwgbmVnYXRlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgtMjAwLjBmLCBuZWdhdGVkLnkoKSk7CisKKyAgICBmbG9hdCB2YWx1ZSA9IGIgKiBnOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDUwMDAuMGYsIHZhbHVlKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBFcXVhbGl0eSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGEoMTAwLjBmLCAyMDAuMGYp
OworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYigxMDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBjKDEwLjBmLCAyMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShhID09IGIp
OworICAgIEFTU0VSVF9GQUxTRShhID09IGMpOworICAgIEFTU0VSVF9GQUxTRShhICE9IGIpOwor
ICAgIEFTU0VSVF9UUlVFKGEgIT0gYyk7CisKKyAgICBBU1NFUlRfVFJVRShXZWJDb3JlOjphcmVF
c3NlbnRpYWxseUVxdWFsKGEsIGIpKTsKKyAgICBBU1NFUlRfRkFMU0UoV2ViQ29yZTo6YXJlRXNz
ZW50aWFsbHlFcXVhbChhLCBjKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgRmxvb3JzKQorewor
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuNmYsIDE5OS45Zik7CisKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIGZsb29yZWRTaXplID0gV2ViQ29yZTo6Zmxvb3JlZEludFNpemUoYSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMCwgZmxvb3JlZFNpemUud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDE5OSwgZmxvb3JlZFNpemUuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50UG9p
bnQgZmxvb3JlZFBvaW50ID0gV2ViQ29yZTo6Zmxvb3JlZEludFBvaW50KGEpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDAsIGZsb29yZWRQb2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
OTksIGZsb29yZWRQb2ludC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmbG9vcmVk
UG9pbnQxeCA9IFdlYkNvcmU6OmZsb29yUG9pbnRUb0RldmljZVBpeGVscyhhLCAxLjApOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIGZsb29yZWRQb2ludDF4LngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDE5OS4wZiwgZmxvb3JlZFBvaW50MXgueSgpKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgZmxvb3JlZFBvaW50MnggPSBXZWJDb3JlOjpmbG9vclBvaW50VG9EZXZpY2VQaXhl
bHMoYSwgMi4wKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjVmLCBmbG9vcmVkUG9pbnQyeC54
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTkuNWYsIGZsb29yZWRQb2ludDJ4LnkoKSk7Cit9
CisKK1RFU1QoRmxvYXRQb2ludCwgUm91bmRpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBhKDEwMC40ZiwgMTk5LjlmKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IHJvdW5kZWRQb2lu
dCA9IFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChhKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LCByb3VuZGVkUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLCByb3VuZGVkUG9p
bnQueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBDZWlsaW5nKQoreworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgYSgxMDAuNGYsIDE5OS45Zik7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBj
ZWlsaW5nUG9pbnQgPSBXZWJDb3JlOjpjZWlsZWRJbnRQb2ludChhKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAxLCBjZWlsaW5nUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLCBj
ZWlsaW5nUG9pbnQueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY2VpbGluZ1BvaW50
MXggPSBXZWJDb3JlOjpjZWlsUG9pbnRUb0RldmljZVBpeGVscyhhLCAxLjApOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDEuMGYsIGNlaWxpbmdQb2ludDF4LngoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDIwMC4wZiwgY2VpbGluZ1BvaW50MXgueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgY2VpbGluZ1BvaW50MnggPSBXZWJDb3JlOjpjZWlsUG9pbnRUb0RldmljZVBpeGVscyhhLCAy
LjApOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuNWYsIGNlaWxpbmdQb2ludDJ4LngoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgY2VpbGluZ1BvaW50MngueSgpKTsKK30KKworVEVT
VChGbG9hdFBvaW50LCBDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAu
NGYsIDE5OS45Zik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZmxvYXRTaXplID0gV2ViQ29y
ZTo6dG9GbG9hdFNpemUoYSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40ZiwgZmxvYXRTaXpl
LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTkuOWYsIGZsb2F0U2l6ZS5oZWlnaHQo
KSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYig5OS42ZiwgMjk5LjFmKTsKKworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgZmxvYXRQb2ludCA9IFdlYkNvcmU6OnRvRmxvYXRQb2ludChiKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoOTkuNmYsIGZsb2F0UG9pbnQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjk5LjFmLCBmbG9hdFBvaW50LnkoKSk7CisKKyNpZiBVU0UoQ0cpCisgICAgQ0dQ
b2ludCBjZ1BvaW50ID0gYTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuNGYsIGNnUG9pbnQu
eCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5OS45ZiwgY2dQb2ludC55KTsKKworICAgIENHUG9p
bnQgY2dQb2ludDIgPSBDR1BvaW50TWFrZSgtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdGVzdENHKGNnUG9pbnQyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIu
M2YsIHRlc3RDRy54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdENHLnkoKSk7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBEMkRfUE9JTlRfMkYgZDJkUG9pbnQg
PSBhOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40ZiwgZDJkUG9pbnQueCk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE5OS45ZiwgZDJkUG9pbnQueSk7CisKKyAgICBEMkRfUE9JTlRfMkYgZDJk
UG9pbnQyID0gRDJEMTo6UG9pbnQyRigtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdEQyRChkMmRQb2ludDIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4z
ZiwgdGVzdEQyRC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdEQyRC55KCkp
OworI2VuZGlmCit9CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9GbG9hdFJlY3QuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgor
CisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCit7CisgICAgcmVjdC5zZXRYKDEuMWYpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxLjFmLCByZWN0LngoKSk7CisgICAgcmVjdC5zZXRZKDIuMmYpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLjJmLCByZWN0LnkoKSk7CisgICAgcmVjdC5zZXRXaWR0aCgyMDMuMmYp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDMuMmYsIHJlY3Qud2lkdGgoKSk7CisgICAgcmVjdC5z
ZXRIZWlnaHQoNzIuOWYpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3Mi45ZiwgcmVjdC5oZWlnaHQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RFbXB0eVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCByZWN0LngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVjdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVjdC5oZWlnaHQoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVj
dC5tYXhZKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZWN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkp
OworfQorCitURVNUKEZsb2F0UmVjdCwgRGVmYXVsdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgdGVzdDsKKworICAgIHRlc3RFbXB0eVJlY3QodGVzdCk7CisKKyAgICB0
ZXN0R2V0QW5kU2V0KHRlc3QpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRpb24o
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgbG9jYXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFZhbHVlQ29uc3RydWN0
aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXN0KDEwLjBmLCAyMC4wZiwgMTAwLjBm
LCA1MC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgdGVzdC5oZWln
aHQoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDExMC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg3MC4wZiwgdGVzdC5tYXhZKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworICAgIEVYUEVD
VF9GQUxTRSh0ZXN0LmlzSW5maW5pdGUoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5s
b2NhdGlvbigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgbG9jYXRpb24ueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGxvY2F0aW9uLnkoKSk7CisKKyAgICBhdXRvIHNpemUg
PSB0ZXN0LnNpemUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCBzaXplLndpZHRoKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
RmxvYXRSZWN0LCBQb2ludFNpemVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBsb2NhdGlvbigyMC4wZiwgMzAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXpl
KDEwMC4wZiwgNTAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRlc3QobG9jYXRpb24s
IHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMwLjBmLCB0ZXN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4w
ZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIHRlc3QuaGVpZ2h0
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRlc3QubWF4WCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoODAuMGYsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodGVzdC5pc0luZmluaXRlKCkpOworCisgICAgYXV0byBsb2NhdGlvbjIgPSB0ZXN0Lmxv
Y2F0aW9uKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBsb2NhdGlvbjIueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIGxvY2F0aW9uMi55KCkpOworCisgICAgYXV0byBzaXpl
MiA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHNpemUyLndpZHRo
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgc2l6ZTIuaGVpZ2h0KCkpOworfQorCitU
RVNUKEZsb2F0UmVjdCwgVHdvUG9pbnRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBwb2ludDEoMjAuMGYsIDMwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBv
aW50MigxNTAuMGYsIDI1MC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdGVzdChwb2lu
dDEsIHBvaW50Mik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTMwLjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMjAuMGYsIHRlc3Qu
aGVpZ2h0KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHRlc3QubWF4WCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjUwLjBmLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc1plcm8oKSk7CisgICAg
RVhQRUNUX1RSVUUodGVzdC5pc0V4cHJlc3NpYmxlQXNJbnRSZWN0KCkpOworICAgIEVYUEVDVF9G
QUxTRSh0ZXN0LmlzSW5maW5pdGUoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5sb2Nh
dGlvbigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgbG9jYXRpb24ueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMzAuMGYsIGxvY2F0aW9uLnkoKSk7CisKKyAgICBhdXRvIHNpemUgPSB0
ZXN0LnNpemUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBmLCBzaXplLndpZHRoKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyMjAuMGYsIHNpemUuaGVpZ2h0KCkpOworfQorCitURVNUKEZs
b2F0UmVjdCwgSW50UmVjdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJl
Y3QoMjAsIDMwLCAxNTAsIDMwMCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdGVzdChyZWN0
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMC4wZiwgdGVzdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHRl
c3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwMC4wZiwgdGVzdC5oZWlnaHQoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE3MC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMzAuMGYsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1RfVFJV
RSh0ZXN0LmlzRXhwcmVzc2libGVBc0ludFJlY3QoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3Qu
aXNJbmZpbml0ZSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9uKCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgzMC4wZiwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHNpemUud2lkdGgoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMwMC4wZiwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBT
ZXRMb2NhdGlvbkFuZFNpemUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Q7CisKKyAg
ICB0ZXN0RW1wdHlSZWN0KHJlY3QpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlv
bigxMC4wZiwgMjAuMGYpOworCisgICAgcmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBm
LCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9UUlVFKHJlY3QuaXNaZXJvKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFeHByZXNz
aWJsZUFzSW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOwor
CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUoMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVj
dC5zZXRTaXplKHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCByZWN0LngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDEwMC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTEwLjBmLCByZWN0Lm1heFgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9G
QUxTRShyZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNaZXJvKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgQ2VudGVy
KQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAy
MDAuMGYpOworCisgICAgYXV0byBjZW50ZXIgPSByZWN0LmNlbnRlcigpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDcwLjBmLCBjZW50ZXIueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBm
LCBjZW50ZXIueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIE1vdmUpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgZGVsdGEoMTAuMGYsIDIwLjBmKTsKKworICAgIHJlY3QubW92ZShk
ZWx0YSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNTAuMGYsIHJlY3QueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
ZGVsdGFQb2ludCgtMjAuMGYsIC00MC4wZik7CisKKyAgICByZWN0Lm1vdmVCeShkZWx0YVBvaW50
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMC4wZiwgcmVjdC55KCkpOworCisgICAgcmVjdC5tb3ZlKC0xMC4wZiwgMjIuMGYp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMzIuMGYsIHJlY3QueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIEV4cGFuZCkKK3sK
KyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBm
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKDEwMC4wZiwgMTAwLjBmKTsKKworICAg
IHJlY3QuZXhwYW5kKHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgcmVjdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjBmLCByZWN0LmhlaWdodCgpKTsKKwor
ICAgIHJlY3QuZXhwYW5kKDU1LjBmLCAyMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjU1
LjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMjIuMGYsIHJlY3QuaGVp
Z2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUyKC0xMC4wZiwgLTIwLjBmKTsK
KworICAgIHJlY3QuZXhwYW5kKHNpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDUuMGYs
IHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwMi4wZiwgcmVjdC5oZWlnaHQo
KSk7CisKKyAgICByZWN0LmV4cGFuZCgtNS4wZiwgLTIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FU
X0VRKDI0MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjBmLCBy
ZWN0LmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzSW5maW5pdGUoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBDb250cmFjdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBzaXplKDUwLjBmLCAxMDAuMGYpOworCisgICAgcmVjdC5jb250cmFjdChzaXplKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLjBmLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3QuY29udHJhY3QoMjUuMGYs
IDIyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyNS4wZiwgcmVjdC53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNzguMGYsIHJlY3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIHNpemUyKC0xMC4wZiwgLTIwLjBmKTsKKworICAgIHJlY3QuY29udHJhY3Qoc2l6
ZTIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDM1LjBmLCByZWN0LndpZHRoKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg5OC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmNvbnRyYWN0
KC01LjBmLCAtMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBF
WFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgU2hp
ZnRYRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEw
MC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3Quc2hpZnRYRWRnZVRvKDc3LjBmKTsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSg3Ny4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAu
MGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3QueSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDQzLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYs
IHJlY3QuaGVpZ2h0KCkpOworCisgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8oMjAwLjBmKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg3Ny4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMDAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3Qu
eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEyMy4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFNoaWZ0WUVkZ2Up
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIw
MC4wZik7CisKKyAgICByZWN0LnNoaWZ0WUVkZ2VUbyg1OS4wZik7CisKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0
Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDU5LjBmLCByZWN0LnkoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIzMC4wZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MDAuMGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE3MS4wZiwgcmVjdC5o
ZWlnaHQoKSk7CisKKyAgICByZWN0LnNoaWZ0TWF4WUVkZ2VUbygyNzAuMGYpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4w
ZiwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1OS4wZiwgcmVjdC55KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyNzAuMGYsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMTEuMGYs
IHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgSW5mbGF0ZSkKK3sKKyAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKwor
ICAgIHJlY3QuaW5mbGF0ZVgoNS4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTUuMGYsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTI1LjBmLCByZWN0Lm1heFgoKSk7CisKKyAg
ICByZWN0LmluZmxhdGVZKDQuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDI2LjBmLCByZWN0
LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzNC4wZiwgcmVjdC5tYXhZKCkpOworCisgICAg
cmVjdC5pbmZsYXRlKDEwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg1LjBmLCByZWN0Lngo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEzNS4wZiwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxNi4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDQuMGYs
IHJlY3QubWF4WSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzSW5maW5pdGUoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBDb3JuZXJzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0b3BMZWZ0ID0gcmVjdC5taW5YTWluWUNvcm5lcigpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMC4wZiwgdG9wTGVmdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdG9wTGVm
dC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BSaWdodCA9IHJlY3QubWF4WE1p
bllDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCB0b3BSaWdodC54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdG9wUmlnaHQueSgpKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgYm90dG9tTGVmdCA9IHJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjAuMGYsIGJvdHRvbUxlZnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjMwLjBmLCBib3R0b21MZWZ0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJvdHRv
bVJpZ2h0ID0gcmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAu
MGYsIGJvdHRvbVJpZ2h0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgYm90dG9t
UmlnaHQueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIENvbnRhaW5zKQoreworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRhaW5lZCgzMC4wZiwgNDAuMGYsIDUwLjBmLCAxMDAuMGYp
OworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhjb250YWluZWQpKTsKKworICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBvdXRzaWRlKDEyMC4wZiwgMjMwLjBmLCA1MC4wZiwgMTAwLjBmKTsK
KworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKG91dHNpZGUpKTsKKworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBpbnRlcnNlY3RzKDEwLjBmLCAyMC4wZiwgOTAuMGYsIDE4MC4wZik7CisK
KyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucyhpbnRlcnNlY3RzKSk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHBvaW50SW5zaWRlKDYwLjBmLCA3MC4wZik7CisKKyAgICBBU1NFUlRf
VFJVRShyZWN0LmNvbnRhaW5zKHBvaW50SW5zaWRlKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5j
b250YWlucyhwb2ludEluc2lkZSwgV2ViQ29yZTo6RmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0
cm9rZSkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludE91dHNpZGUoMTYwLjBmLCAy
NzAuMGYpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9pbnRPdXRzaWRlKSk7
CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9pbnRPdXRzaWRlLCBXZWJDb3JlOjpG
bG9hdFJlY3Q6Okluc2lkZUJ1dE5vdE9uU3Ryb2tlKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IHBvaW50T25MaW5lKDIwLjBmLCAzMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0LmNv
bnRhaW5zKHBvaW50T25MaW5lKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9p
bnRPdXRzaWRlLCBXZWJDb3JlOjpGbG9hdFJlY3Q6Okluc2lkZUJ1dE5vdE9uU3Ryb2tlKSk7CisK
KyAgICBBU1NFUlRfVFJVRShyZWN0LmNvbnRhaW5zKDYwLjBmLCA3MC4wZikpOworICAgIEFTU0VS
VF9GQUxTRShyZWN0LmNvbnRhaW5zKDE2MC4wZiwgMjcwLjBmKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBJbnRlcnNlY3RzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAz
MC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRhaW5l
ZCgzMC4wZiwgNDAuMGYsIDUwLjBmLCAxMDAuMGYpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5p
bnRlcnNlY3RzKGNvbnRhaW5lZCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG91dHNpZGUo
MTIwLjBmLCAyMzAuMGYsIDUwLjBmLCAxMDAuMGYpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3Qu
aW50ZXJzZWN0cyhvdXRzaWRlKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgaW50ZXJzZWN0
cygxMC4wZiwgMjAuMGYsIDkwLjBmLCAxODAuMGYpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5p
bnRlcnNlY3RzKGludGVyc2VjdHMpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEludGVyc2VjdFJl
c3VsdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDcwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC5t
YXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4MC4wZiwgcmVjdC55KCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyMzAuMGYsIHJlY3QubWF4WSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIElu
dGVyc2VjdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEEoMjAuMGYsIDMwLjBmLCAx
MDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RCKDcwLjBmLCA4MC4w
ZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVjdEEuaW50ZXJzZWN0KHJlY3RCKTsKKworICAg
IHRlc3RJbnRlcnNlY3RSZXN1bHQocmVjdEEpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3RDKDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgYXV0byBpbnRlcnNlY3Rl
ZCA9IFdlYkNvcmU6OmludGVyc2VjdGlvbihyZWN0QywgcmVjdEIpOworCisgICAgdGVzdEludGVy
c2VjdFJlc3VsdChpbnRlcnNlY3RlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RVbml0ZWRSZWN0
cyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHVuaXRlZCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMjAuMGYsIHVuaXRlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNzAuMGYsIHVuaXRl
ZC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdW5pdGVkLnkoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDI4MC4wZiwgdW5pdGVkLm1heFkoKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBVbml0ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEEoMjAuMGYsIDMwLjBm
LCAxMDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RCKDcwLjBmLCA4
MC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVjdEEudW5pdGUocmVjdEIpOworCisgICAg
dGVzdFVuaXRlZFJlY3RzKHJlY3RBKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Qygy
MC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGF1dG8gdW5pdGVkID0gV2ViQ29y
ZTo6dW5pb25SZWN0KHJlY3RDLCByZWN0Qik7CisKKyAgICB0ZXN0VW5pdGVkUmVjdHModW5pdGVk
KTsKK30KKworVEVTVChGbG9hdFJlY3QsIEV4dGVuZCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IHBvaW50KDE3MC4wZiwgMjgwLjBmKTsKKworICAgIHJlY3QuZXh0ZW5kKHBvaW50KTsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgxNzAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJl
Y3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjgwLjBmLCByZWN0Lm1heFkoKSk7Cit9CisK
K1RFU1QoRmxvYXRSZWN0LCBPdmVybGFwcykKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEFTU0VSVF9GQUxTRShyZWN0
Lm92ZXJsYXBzWFJhbmdlKDAuMGYsIDEwLjBmKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5vdmVy
bGFwc1hSYW5nZSgxMC4wZiwgMzAuMGYpKTsKKyAgICBBU1NFUlRfVFJVRShyZWN0Lm92ZXJsYXBz
WFJhbmdlKDQwLjBmLCA3MC4wZikpOworICAgIEFTU0VSVF9UUlVFKHJlY3Qub3ZlcmxhcHNYUmFu
Z2UoMTEwLjBmLCAxMzAuMGYpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5vdmVybGFwc1hSYW5n
ZSgxNDAuMGYsIDYwMC4wZikpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3Qub3ZlcmxhcHNZUmFu
Z2UoMC4wZiwgMTAuMGYpKTsKKyAgICBBU1NFUlRfVFJVRShyZWN0Lm92ZXJsYXBzWVJhbmdlKDEw
LjBmLCA0MC4wZikpOworICAgIEFTU0VSVF9UUlVFKHJlY3Qub3ZlcmxhcHNZUmFuZ2UoNDAuMGYs
IDcwLjBmKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5vdmVybGFwc1lSYW5nZSgyMjAuMGYsIDI1
MC4wZikpOworICAgIEFTU0VSVF9GQUxTRShyZWN0Lm92ZXJsYXBzWVJhbmdlKDI1MC4wZiwgNjAw
LjBmKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3Quc2Nh
bGUoMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjQwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDYwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ2MC4wZiwgcmVjdC5tYXhZ
KCkpOworCisgICAgcmVjdC5zY2FsZSgwLjVmLCAyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHJlY3QubWF4
WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDkyMC4wZiwgcmVjdC5tYXhZKCkpOworCisgICAgcmVjdC5zY2FsZSgxLjBmLCAw
LjI1Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMw
LjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgcmVjdC5tYXhZKCkp
OworfQorCitURVNUKEZsb2F0UmVjdCwgVHJhbnNwb3NlKQoreworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgYXV0byB0cmFu
c3Bvc2VkID0gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDMw
LjBmLCB0cmFuc3Bvc2VkLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgdHJhbnNw
b3NlZC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgdHJhbnNwb3NlZC55KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRyYW5zcG9zZWQubWF4WSgpKTsKK30KKwor
VEVTVChGbG9hdFJlY3QsIEZpdFRvUG9pbnRzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KDEwLjBmLCAyMC4wZiwgMzAuMGYsIDQwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgcDAoMjAuMGYsIDMwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAxKDcwLjBmLCAx
MzAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcDIoNTAuMGYsIDIwLjBmKTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IHAzKDkwLjBmLCAxOTAuMGYpOworCisgICAgcmVjdC5maXRUb1Bv
aW50cyhwMCwgcDEpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LngoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDcwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEzMC4wZiwgcmVjdC5t
YXhZKCkpOworCisgICAgcmVjdC5maXRUb1BvaW50cyhwMCwgcDEsIHAyKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3MC4wZiwg
cmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC55KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMzAuMGYsIHJlY3QubWF4WSgpKTsKKworICAgIHJlY3QuZml0VG9Q
b2ludHMocDAsIHAxLCBwMiwgcDMpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDkwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5MC4w
ZiwgcmVjdC5tYXhZKCkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja0Nhc3RSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAu
MGYsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVT
VChGbG9hdFJlY3QsIENhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAu
MGYsIDIwLjBmLCAzMC4wZiwgNDAuMGYpOworCisjaWYgVVNFKENHKQorICAgIENHUmVjdCBjZ1Jl
Y3QgPSByZWN0OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBjZ1JlY3Qub3JpZ2luLngp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgY2dSZWN0Lm9yaWdpbi55KTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMzAuMGYsIGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNDAuMGYsIGNnUmVjdC5zaXplLmhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdEZyb21DR1JlY3QoY2dSZWN0KTsKKworICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21DR1Jl
Y3QpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9SRUNUX0YgZDJkUmVj
dCA9IHJlY3Q7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGQyZFJlY3QubGVmdCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBkMmRSZWN0LnRvcCk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQwLjBmLCBkMmRSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAuMGYsIGQy
ZFJlY3QuYm90dG9tKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0RnJvbUQyRFJlY3Qo
ZDJkUmVjdCk7CisKKyAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tRDJEUmVjdCk7CisjZW5kaWYK
K30KKworc3RhdGljIHZvaWQgY2hlY2tBZGRpdGlvblJlc3VsdDEoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMzAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjIwLjBmLCByZWN0
Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZv
aWQgY2hlY2tBZGRpdGlvblJlc3VsdDIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQor
eworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyNTAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJl
Y3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjBmLCByZWN0Lm1heFkoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDI0MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMjIwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIEFkZGl0aW9u
KQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMTAwLjBmLCAx
MDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByaWdodFNpZGUoMC4wZiwgMC4wZiwgMjAu
MGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdHRvbSgwLjBmLCAwLjBmLCAx
MjAuMGYsIDIwLjBmKTsKKworICAgIGF1dG8gY29tYmluZWQgPSByZWN0ICsgcmlnaHRTaWRlOwor
CisgICAgY2hlY2tBZGRpdGlvblJlc3VsdDEoY29tYmluZWQpOworCisgICAgYXV0byBjb21iaW5l
ZDIgPSBjb21iaW5lZCArIGJvdHRvbTsKKworICAgIGNoZWNrQWRkaXRpb25SZXN1bHQyKGNvbWJp
bmVkMik7CisKKyAgICByZWN0ICs9IHJpZ2h0U2lkZTsKKyAgICByZWN0ICs9IGJvdHRvbTsKKwor
ICAgIGNoZWNrQWRkaXRpb25SZXN1bHQyKHJlY3QpOworfQorCitURVNUKEZsb2F0UmVjdCwgRXF1
YWxpdHkpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAuMGYsIDIwLjBmLCAxMDAu
MGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QyKDEwLjBmLCAyMC4wZiwg
MTAwLjBmLCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByaWdodFNpZGUoMTEwLjBm
LCAyMC4wZiwgMjAuMGYsIDEwMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0ID09IHJlY3Qy
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdCAhPSByZWN0Mik7CisgICAgQVNTRVJUX1RSVUUocmVj
dCAhPSByaWdodFNpZGUpOworICAgIEFTU0VSVF9GQUxTRShyZWN0ID09IHJpZ2h0U2lkZSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBJbmZpbml0ZVJlY3QpCit7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGluZmluaXRlID0gV2ViQ29yZTo6RmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8gMiwg
aW5maW5pdGUueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKSAvIDIsIGluZmluaXRlLnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgaW5maW5pdGUud2lkdGgoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgaW5maW5p
dGUuaGVpZ2h0KCkpOworCisgICAgLy8gRklYTUU6IFdlIGhhdmUgYW4gdW51c3VhbCByZXByZXNl
bnRhdGlvbiBmb3Igb3VyIGluZmluaXRlIHJlY3QuCisgICAgLy8gV2ViQ29yZTo6RmxvYXQ6Omlu
ZmluaXRlUmVjdCBpcyAobmVnYXRpdmUgaW5maW5pdHkpLzIgZm9yIHRoZSB1cHBlciBsZWZ0IGNv
cm5lciwKKyAgICAvLyB3aGlsZSBDb3JlR3JhcGhpY3MgYW5kIEQyRCB1c2UgKG5lZ2F0aXZlIGlu
ZmluaXR5KS4KKworI2lmIFVTRShDRykKKyAgICBDR1JlY3QgY2dJbmZpbml0ZVJlY3QgPSBDR1Jl
Y3RJbmZpbml0ZTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueCk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGNnSW5maW5pdGVSZWN0Lm9y
aWdpbi55KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueCArIGNnSW5maW5pdGVSZWN0LnNpemUud2lk
dGgpOworICAgIEVYUEVDVF9GTE9BVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCksIGNnSW5maW5pdGVSZWN0Lm9yaWdpbi55ICsgY2dJbmZpbml0ZVJlY3Quc2l6ZS5oZWlnaHQp
OworICAgIC8vIEFTU0VSVF9UUlVFKGluZmluaXRlID09IGNnSW5maW5pdGVSZWN0KTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEQyRDFfUkVDVF9GIGQyZEluZmluaXRlUmVjdCA9
IEQyRDE6OkluZmluaXRlUmVjdCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC1zdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5sZWZ0KTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgZDJkSW5maW5p
dGVSZWN0LnRvcCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjptYXgoKSwgZDJkSW5maW5pdGVSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZpbml0ZVJlY3QuYm90dG9t
KTsKKyAgICAvLyBBU1NFUlRfVFJVRShpbmZpbml0ZSA9PSBkMmRJbmZpbml0ZVJlY3QpOworI2Vu
ZGlmCit9CisKK1RFU1QoRmxvYXRSZWN0LCBFbmNsb3NpbmdBbmRSb3VuZGluZykKK3sKKyAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgxMC4wZiwgMjAuMGYsIDEwMjQuM2YsIDc2OC4zZik7CisK
KyAgICBhdXRvIGVuY2xvc2VkID0gV2ViQ29yZTo6ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhy
ZWN0LCAxLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgZW5jbG9zZWQueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGVuY2xvc2VkLnkoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDEwMzUuMGYsIGVuY2xvc2VkLm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4
OS4wZiwgZW5jbG9zZWQubWF4WSgpKTsKKworICAgIGF1dG8gZW5jbG9zZWQyID0gV2ViQ29yZTo6
ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhyZWN0LCAyLjBmKTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMC4wZiwgZW5jbG9zZWQyLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBl
bmNsb3NlZDIueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAzNC41ZiwgZW5jbG9zZWQyLm1h
eFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4OC41ZiwgZW5jbG9zZWQyLm1heFkoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBFbmNsb3NpbmdJbnRSZWN0KQoreworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMTAyNC4zZiwgNzY4LjZmKTsKKworICAgIGF1dG8g
ZW5jbG9zZWQgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEwLCBlbmNsb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMCwgZW5j
bG9zZWQueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAzNSwgZW5jbG9zZWQubWF4WCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNzg5LCBlbmNsb3NlZC5tYXhZKCkpOworfQorCitURVNUKEZs
b2F0UmVjdCwgUm91bmRlZEludFJlY3QpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Qo
MTAuMGYsIDIwLjBmLCAxMDI0LjNmLCA3NjguNmYpOworCisgICAgYXV0byBlbmNsb3NlZCA9IFdl
YkNvcmU6OnJvdW5kZWRJbnRSZWN0KHJlY3QpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLCBl
bmNsb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMCwgZW5jbG9zZWQueSgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAzNCwgZW5jbG9zZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoNzg5LCBlbmNsb3NlZC5tYXhZKCkpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6RmxvYXRTaXpl
IHNpemUpCit7CisgICAgc2l6ZS5zZXRXaWR0aCgxMDEuMWYpOworICAgIEVYUEVDVF9GTE9BVF9F
USgxMDEuMWYsIHNpemUud2lkdGgoKSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoMjE4LjJmKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjE4LjJmLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9h
dFNpemUsIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRl
c3Q7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc1plcm8oKSk7CisgICAgQVNTRVJUX1RSVUUo
dGVzdC5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0
KTsKK30KKworVEVTVChGbG9hdFNpemUsIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSB0ZXN0KDEwMjQuMGYsIDc2OC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMTAyNC4wZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0
ZXN0LmhlaWdodCgpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNFeHBy
ZXNzaWJsZUFzSW50U2l6ZSgpKTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBlcHNpbG9uID0g
MC4wMDAxZjsKKyAgICBFWFBFQ1RfTkVBUigxLjMzMzNmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVw
c2lsb24pOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB0ZXN0MigxMDI0LjhmLCA3NjguM2YpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBJbnRTaXplQ29uc3Ry
dWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgxMDI0LCA3NjgpOworICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQu
MGYsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5oZWln
aHQoKSk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9G
QUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzRXhwcmVzc2libGVB
c0ludFNpemUoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7
CisgICAgRVhQRUNUX05FQVIoMS4zMzMzZiwgdGVzdC5hc3BlY3RSYXRpbygpLCBlcHNpbG9uKTsK
KworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBTY2FsZSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAg
dGVzdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCB0ZXN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTM2LjBmLCB0ZXN0LmhlaWdodCgpKTsKKwor
ICAgIHRlc3Quc2NhbGUoMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgdGVz
dC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0ZXN0LmhlaWdodCgpKTsK
KworICAgIHRlc3Quc2NhbGUoMi4wZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA0
OC4wZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzg0LjBmLCB0ZXN0Lmhl
aWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIEV4cGFuZCkKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MjQuMGYsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5o
ZWlnaHQoKSk7CisKKyAgICB0ZXN0LmV4cGFuZCgxMDAuMGYsIDUwLjBmKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMTI0LjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
MTguMGYsIHRlc3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG90aGVyKDIw
NDguMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIGV4cGFuZGVkID0gdGVzdC5leHBhbmRlZFRvKG90
aGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCBleHBhbmRlZC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoODE4LjBmLCBleHBhbmRlZC5oZWlnaHQoKSk7Cit9CisKK1RF
U1QoRmxvYXRTaXplLCBTaHJpbmspCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRlc3QoMTAy
NC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgb3RoZXIoMTAwMC4wZiwgNzAw
LjBmKTsKKworICAgIGF1dG8gc2hydW5rZW4gPSB0ZXN0LnNocnVua1RvKG90aGVyKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAwLjBmLCBzaHJ1bmtlbi53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNzAwLjBmLCBzaHJ1bmtlbi5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFNpemUgb3RoZXIyKDIwMDAuMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIHNocnVua2VuMiA9IHRl
c3Quc2hydW5rVG8ob3RoZXIyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBzaHJ1
bmtlbjIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDcwMC4wZiwgc2hydW5rZW4yLmhl
aWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIERpYWdvbmFsTGVuZ3RoQW5kQXJlYSkKK3sK
KyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEyODAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGgoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDE2Mzg0MDAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg3ODY0MzIuMGYsIHRlc3QuYXJlYSgpKTsKK30KKworVEVTVChGbG9h
dFNpemUsIFRyYW5zcG9zZWRTaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KDEw
MjQuMGYsIDc2OC4wZik7CisKKyAgICBhdXRvIHRyYW5zcG9zZWRTaXplID0gdGVzdC50cmFuc3Bv
c2VkU2l6ZSgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQuMGYsIHRlc3Qud2lkdGgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
RmxvYXRTaXplLCBDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KDEwMjQu
MGYsIDc2OC4wZik7CisKKyNpZiBVU0UoQ0cpCisgICAgQ0dTaXplIGNnU2l6ZSA9IHRlc3Q7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgY2dTaXplLndpZHRoKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNzY4LjBmLCBjZ1NpemUuaGVpZ2h0KTsKKworICAgIENHU2l6ZSBjZ1NpemUyID0g
Q0dTaXplTWFrZSgtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0
Q0coY2dTaXplMik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLTIyLjNmLCB0ZXN0Q0cud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0Q0cuaGVpZ2h0KCkpOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9TSVpFX0YgZDJkU2l6ZSA9IHRlc3Q7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgZDJkU2l6ZS53aWR0aCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDc2OC4wZiwgZDJkU2l6ZS5oZWlnaHQpOworCisgICAgRDJEMV9TSVpFX0YgZDJk
U2l6ZTIgPSBEMkQxOjpTaXplRigtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB0ZXN0RDJEKGQyZFNpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIuM2YsIHRl
c3REMkQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0RDJELmhlaWdo
dCgpKTsKKyNlbmRpZgorfQorCitURVNUKEZsb2F0U2l6ZSwgQWRkU3VidHJhY3QpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIGEoNTEyLjBmLCAzODQuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBiKDEwMC4wZiwgMTAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjID0gYSAr
IGI7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjEyLjBmLCBjLndpZHRoKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg0ODQuMGYsIGMuaGVpZ2h0KCkpOworCisgICAgYSArPSBiOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDYxMi4wZiwgYS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDg0
LjBmLCBhLmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhMig1MTIuMGYsIDM4
NC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZCA9IGEyIC0gYjsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSg0MTIuMGYsIGQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI4NC4w
ZiwgZC5oZWlnaHQoKSk7CisKKyAgICBhMiAtPSBiOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQx
Mi4wZiwgYTIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI4NC4wZiwgYTIuaGVpZ2h0
KCkpOworfQorCitURVNUKEZsb2F0U2l6ZSwgTmVnYXRpb24pCit7CisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIGEoNTEyLjBmLCAzODQuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG5lZ2F0
ZWQgPSAtYTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtNTEyLjBmLCBuZWdhdGVkLndpZHRoKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgtMzg0LjBmLCBuZWdhdGVkLmhlaWdodCgpKTsKK30KKwor
VEVTVChGbG9hdFNpemUsIE11bHRpcGx5KQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDUx
Mi4wZiwgMzg0LjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtdWx0aXBsaWVkID0gYSAq
IDIuMGY7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgbXVsdGlwbGllZC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCBtdWx0aXBsaWVkLmhlaWdodCgpKTsKKwor
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtdWx0aXBsaWVkMiA9IDMuMGYgKiBhOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE1MzYuMGYsIG11bHRpcGxpZWQyLndpZHRoKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMTUyLjBmLCBtdWx0aXBsaWVkMi5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpG
bG9hdFNpemUgYigxMDI0LjBmLCA3NjguMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG11
bHRpcGxpZWQzID0gYSAqIGI7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTI0Mjg4LjBmLCBtdWx0
aXBsaWVkMy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjk0OTEyLjBmLCBtdWx0aXBs
aWVkMy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBEaXZpZGUpCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIGEoMTAyNC4wZiwgNzY4LjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBkaXZpZGVkID0gYSAvIDIuMGY7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTEyLjBmLCBk
aXZpZGVkLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzODQuMGYsIGRpdmlkZWQuaGVp
Z2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGIoNTEyLjBmLCAyNTYuMGYpOworCisg
ICAgV2ViQ29yZTo6RmxvYXRTaXplIGRpdmlkZWQyID0gMTAyNC4wZiAvIGI7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMi4wZiwgZGl2aWRlZDIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQuMGYsIGRpdmlkZWQyLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIEVxdWFsaXR5
KQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDEwMjQuMGYsIDc2OC4wZik7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIGIoMTAyNC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNp
emUgYyg3NjguMGYsIDUzNC4wRik7CisKKyAgICBBU1NFUlRfVFJVRShhID09IGIpOworICAgIEFT
U0VSVF9GQUxTRShhICE9IGIpOworICAgIEFTU0VSVF9GQUxTRShhID09IGMpOworICAgIEFTU0VS
VF9UUlVFKGEgIT0gYyk7CisKKyAgICBBU1NFUlRfVFJVRShXZWJDb3JlOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGEsIGIpKTsKKyAgICBBU1NFUlRfRkFMU0UoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlF
cXVhbChhLCBjKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBGbG9vcnMpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIGEoMTAyNC40ZiwgNzY4LjhmKTsKKworICAgIFdlYkNvcmU6OkludFNpemUg
Zmxvb3JTaXplID0gV2ViQ29yZTo6Zmxvb3JlZEludFNpemUoYSk7CisKKyAgICBFWFBFQ1RfRVEo
MTAyNCwgZmxvb3JTaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGZsb29yU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmbG9vclBvaW50ID0gV2ViQ29yZTo6
Zmxvb3JlZEludFBvaW50KGEpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIGZsb29yUG9pbnQueCgp
KTsKKyAgICBFWFBFQ1RfRVEoNzY4LCBmbG9vclBvaW50LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRT
aXplLCBSb3VuZGVkKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDEwMjQuNGYsIDc2OC44
Zik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWRTaXplID0gV2ViQ29yZTo6cm91bmRl
ZEludFNpemUoYSk7CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgcm91bmRlZFNpemUud2lkdGgoKSk7
CisgICAgRVhQRUNUX0VRKDc2OSwgcm91bmRlZFNpemUuaGVpZ2h0KCkpOworCisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBleHBhbmRlZFNpemUgPSBXZWJDb3JlOjpleHBhbmRlZEludFNpemUoYSk7CisK
KyAgICBFWFBFQ1RfRVEoMTAyNSwgZXhwYW5kZWRTaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9F
USg3NjksIGV4cGFuZGVkU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFBvaW50LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQpCit7CisgICAgcG9pbnQuc2V0WCgxKTsKKyAgICBFWFBFQ1RfRVEoMSwgcG9pbnQueCgp
KTsKKyAgICBwb2ludC5zZXRZKDIpOworICAgIEVYUEVDVF9FUSgyLCBwb2ludC55KCkpOworfQor
CitURVNUKEludFBvaW50LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6Oklu
dFBvaW50IHRlc3Q7CisKKyAgICBFWFBFQ1RfRVEoMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9F
USgwLCB0ZXN0LnkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc1plcm8oKSk7CisKKyAgICB0
ZXN0R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEludFBvaW50LCBWYWx1ZUNvbnN0cnVjdGlv
bikKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0KDEwLCA5KTsKKworICAgIEVYUEVDVF9F
USgxMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9FUSg5LCB0ZXN0LnkoKSk7CisKKyAgICB0ZXN0
R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEludFBvaW50LCBaZXJvQ29uc3RydWN0aW9uKQor
eworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3QgPSBXZWJDb3JlOjpJbnRQb2ludDo6emVybygp
OworCisgICAgRVhQRUNUX0VRKDAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgdGVzdC55
KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNaZXJvKCkpOworfQorCitURVNUKEludFBvaW50
LCBJbnRTaXplQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdElucHV0
KDIwMDMsIDE5OTcpOworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3QodGVzdElucHV0KTsKKwor
ICAgIEVYUEVDVF9FUSgyMDAzLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDE5OTcsIHRlc3Qu
eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc1plcm8oKSk7Cit9CisKK1RFU1QoSW50UG9p
bnQsIEZsb2F0UG9pbnRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0
ZXN0SW5wdXQoMjAwMy4yZiwgMTk5Ny4zZik7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdGVzdCh0
ZXN0SW5wdXQpOworCisgICAgRVhQRUNUX0VRKDIwMDMsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTk5NywgdGVzdC55KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKK30K
KworVEVTVChJbnRQb2ludCwgTW92ZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0KDEw
LCAyMCk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKDMwLCA1MCk7CisKKyAgICB0ZXN0Lm1v
dmUoc2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEoNDAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEo
NzAsIHRlc3QueSgpKTsKKworICAgIHRlc3QubW92ZSgtMiwgOCk7CisKKyAgICBFWFBFQ1RfRVEo
MzgsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoNzgsIHRlc3QueSgpKTsKKworICAgIFdlYkNv
cmU6OkludFBvaW50IG9mZnNldCgxMDAsIDEwMCk7CisKKyAgICB0ZXN0Lm1vdmVCeShvZmZzZXQp
OworCisgICAgRVhQRUNUX0VRKDEzOCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9FUSgxNzgsIHRl
c3QueSgpKTsKK30KKworVEVTVChJbnRQb2ludCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgdGVzdCgxMCwgMjApOworCisgICAgdGVzdC5zY2FsZSgyLjApOworCisgICAgRVhQRUNU
X0VRKDIwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDQwLCB0ZXN0LnkoKSk7CisKKyAgICB0
ZXN0LnNjYWxlKDMuMCwgMS41KTsKKworICAgIEVYUEVDVF9FUSg2MCwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9FUSg2MCwgdGVzdC55KCkpOworfQorCitURVNUKEludFBvaW50LCBFeHBhbmQpCit7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworICAgIFdlYkNvcmU6OkludFBvaW50
IGIoMjAsIDQwKTsKKworICAgIGF1dG8gYyA9IGEuZXhwYW5kZWRUbyhiKTsKKworICAgIEVYUEVD
VF9FUSgyMCwgYy54KCkpOworICAgIEVYUEVDVF9FUSg0MCwgYy55KCkpOworfQorCitURVNUKElu
dFBvaW50LCBTaHJpbmspCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworICAg
IFdlYkNvcmU6OkludFBvaW50IGIoMjAsIDQwKTsKKworICAgIGF1dG8gYyA9IGIuc2hydW5rVG8o
YSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIGMueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGMueSgp
KTsKK30KKworLyoKKworSW50UG9pbnQgY29uc3RyYWluZWRCZXR3ZWVuKGNvbnN0IEludFBvaW50
JiBtaW4sIGNvbnN0IEludFBvaW50JiBtYXgpIGNvbnN0OworCitpbnQgZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCit2b2lkIGNsYW1wTmVnYXRpdmVUb1pl
cm8oKQoreworKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7Cit9CisqLworCitURVNUKEludFBv
aW50LCBUcmFuc3Bvc2UpCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworCisg
ICAgYXV0byBiID0gYS50cmFuc3Bvc2VkUG9pbnQoKTsKKworICAgIEVYUEVDVF9FUSgyMCwgYi54
KCkpOworICAgIEVYUEVDVF9FUSgxMCwgYi55KCkpOworfQorCitURVNUKEludFBvaW50LCBDYXN0
KQoreworICAgIFdlYkNvcmU6OkludFBvaW50IGEoMTAsIDIwKTsKKworICAgIFdlYkNvcmU6Oklu
dFNpemUgYXMgPSBXZWJDb3JlOjp0b0ludFNpemUoYSk7CisgICAgRVhQRUNUX0VRKDEwLCBhcy53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGFzLmhlaWdodCgpKTsKKworI2lmIFVTRShDRykK
KyAgICBDR1BvaW50IGNnUG9pbnQgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBj
Z1BvaW50LngpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgY2dQb2ludC55KTsKKworICAg
IFdlYkNvcmU6OkludFBvaW50IGZyb21DR1BvaW50KGNnUG9pbnQpOworICAgIEVYUEVDVF9FUSgx
MCwgZnJvbUNHUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZyb21DR1BvaW50LnkoKSk7
CisgICAgQVNTRVJUX1RSVUUoYSA9PSBmcm9tQ0dQb2ludCk7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICBQT0lOVCBnZGlQb2ludCA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MTAuMGYsIGdkaVBvaW50LngpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgZ2RpUG9pbnQu
eSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tR0RJUG9pbnQoZ2RpUG9pbnQpOworICAg
IEVYUEVDVF9FUSgxMCwgZnJvbUdESVBvaW50LngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBmcm9t
R0RJUG9pbnQueSgpKTsKKyAgICBBU1NFUlRfVFJVRShhID09IGZyb21HRElQb2ludCk7CisKKyAg
ICBEMkQxX1BPSU5UXzJGIGQyZFBvaW50RiA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAu
MGYsIGQyZFBvaW50Ri54KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAuMGYsIGQyZFBvaW50Ri55
KTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGZyb21EMkRQb2ludEYoZDJkUG9pbnRGKTsKKyAg
ICBFWFBFQ1RfRVEoMTAsIGZyb21EMkRQb2ludEYueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZy
b21EMkRQb2ludEYueSgpKTsKKyAgICBBU1NFUlRfVFJVRShhID09IGZyb21EMkRQb2ludEYpOwor
CisgICAgRDJEMV9QT0lOVF8yVSBkMmRQb2ludFUgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VR
KDEwLjBmLCBkMmRQb2ludFUueCk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwLjBmLCBkMmRQb2lu
dFUueSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tRDJEUG9pbnRVKGQyZFBvaW50VSk7
CisgICAgRVhQRUNUX0VRKDEwLCBmcm9tRDJEUG9pbnRVLngoKSk7CisgICAgRVhQRUNUX0VRKDIw
LCBmcm9tRDJEUG9pbnRVLnkoKSk7CisgICAgQVNTRVJUX1RSVUUoYSA9PSBmcm9tRDJEUG9pbnRV
KTsKKyNlbmRpZgorfQorCitURVNUKEludFBvaW50LCBBZGRpdGlvbikKK3sKKyAgICBXZWJDb3Jl
OjpJbnRQb2ludCBhKDEwLCAyMCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwgNjApOwor
ICAgIFdlYkNvcmU6OkludFNpemUgYnMoNTAsIDYwKTsKKworICAgIGF1dG8gYyA9IGEgKyBiOwor
CisgICAgRVhQRUNUX0VRKDYwLCBjLngoKSk7CisgICAgRVhQRUNUX0VRKDgwLCBjLnkoKSk7CisK
KyAgICBhICs9IGJzOworCisgICAgRVhQRUNUX0VRKDYwLCBhLngoKSk7CisgICAgRVhQRUNUX0VR
KDgwLCBhLnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIFN1YnRyYWN0aW9uKQoreworICAgIFdl
YkNvcmU6OkludFBvaW50IGEoMTAwLCA4MCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwg
NjApOworICAgIFdlYkNvcmU6OkludFNpemUgYnMoNTAsIDYwKTsKKworICAgIFdlYkNvcmU6Oklu
dFNpemUgYyA9IGEgLSBiOworCisgICAgRVhQRUNUX0VRKDUwLCBjLndpZHRoKCkpOworICAgIEVY
UEVDVF9FUSgyMCwgYy5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBkID0gYSAt
IGJzOworCisgICAgRVhQRUNUX0VRKDUwLCBkLngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBkLnko
KSk7CisKKyAgICBhIC09IGJzOworCisgICAgRVhQRUNUX0VRKDUwLCBhLngoKSk7CisgICAgRVhQ
RUNUX0VRKDIwLCBhLnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIE5lZ2F0aW9uKQoreworICAg
IFdlYkNvcmU6OkludFBvaW50IGEoMTAwLCA4MCk7CisgICAgYXV0byBiID0gLWE7CisKKyAgICBF
WFBFQ1RfRVEoLTEwMCwgYi54KCkpOworICAgIEVYUEVDVF9FUSgtODAsIGIueSgpKTsKK30KKwor
VEVTVChJbnRQb2ludCwgRXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMDAs
IDgwKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBiKDcwLCA1MCk7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgYygxMDAsIDgwKTsKKworICAgIEFTU0VSVF9UUlVFKGEgPT0gYyk7CisgICAgQVNTRVJU
X0ZBTFNFKGEgPT0gYik7CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYyk7CisgICAgQVNTRVJUX1RS
VUUoYSAhPSBiKTsKK30KKworVEVTVChJbnRQb2ludCwgRGlzdGFuY2VTcXVhcmVkKQoreworICAg
IFdlYkNvcmU6OkludFBvaW50IGEoMTAsIDIwKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBiKDMw
LCA1MCk7CisKKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVkID0gYS5kaXN0YW5jZVNxdWFyZWRUb1Bv
aW50KGIpOworCisgICAgQVNTRVJUX0VRKDEzMDAsIGRpc3RhbmNlU3F1YXJlZCk7Cit9CisKK30K
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UmVjdC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKworI2lmIFVTRShDRykKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJ
TikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkludFJlY3QgcmVjdCkKK3sK
KyAgICByZWN0LnNldFgoMSk7CisgICAgRVhQRUNUX0VRKDEsIHJlY3QueCgpKTsKKyAgICByZWN0
LnNldFkoMik7CisgICAgRVhQRUNUX0VRKDIsIHJlY3QueSgpKTsKKyAgICByZWN0LnNldFdpZHRo
KDIwMyk7CisgICAgRVhQRUNUX0VRKDIwMywgcmVjdC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhl
aWdodCg3Myk7CisgICAgRVhQRUNUX0VRKDczLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEVtcHR5UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IEVYUEVDVF9FUSgwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3QueSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC5oZWln
aHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
cmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVT
VChJbnRSZWN0LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFJlY3Qg
dGVzdDsKKworICAgIHRlc3RFbXB0eVJlY3QodGVzdCk7CisKKyAgICB0ZXN0R2V0QW5kU2V0KHRl
c3QpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRpb24oKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgbG9jYXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbG9jYXRpb24ueSgpKTsKKwor
ICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9FUSgwLCBzaXplLndpZHRo
KCkpOworICAgIEVYUEVDVF9FUSgwLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0
LCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRlc3QoMTAsIDIw
LCAxMDAsIDUwKTsKKworICAgIEVYUEVDVF9FUSgxMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9F
USgyMCwgdGVzdC55KCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHRlc3Qud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDUwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMTEwLCB0ZXN0Lm1h
eFgoKSk7CisgICAgRVhQRUNUX0VRKDcwLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3QuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9uKCk7
CisgICAgRVhQRUNUX0VRKDEwLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9FUSgyMCwgbG9j
YXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9F
USgxMDAsIHNpemUud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzaXplLmhlaWdodCgpKTsK
K30KKworVEVTVChJbnRSZWN0LCBQb2ludFNpemVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbG9jYXRpb24oMjAsIDMwKTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUo
MTAwLCA1MCk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRlc3QobG9jYXRpb24sIHNpemUpOwor
CisgICAgRVhQRUNUX0VRKDIwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDMwLCB0ZXN0Lnko
KSk7CisgICAgRVhQRUNUX0VRKDEwMCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTAs
IHRlc3QuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUSgxMjAsIHRlc3QubWF4WCgpKTsKKyAgICBF
WFBFQ1RfRVEoODAsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5
KCkpOworCisgICAgYXV0byBsb2NhdGlvbjIgPSB0ZXN0LmxvY2F0aW9uKCk7CisgICAgRVhQRUNU
X0VRKDIwLCBsb2NhdGlvbjIueCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIGxvY2F0aW9uMi55KCkp
OworCisgICAgYXV0byBzaXplMiA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9FUSgxMDAsIHNp
emUyLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2l6ZTIuaGVpZ2h0KCkpOworfQorCitU
RVNUKEludFJlY3QsIEZsb2F0UmVjdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDE1MC4wZiwgMzAwLjBmKTsKKworICAgIFdlYkNvcmU6
OkludFJlY3QgdGVzdChyZWN0KTsKKworICAgIEVYUEVDVF9FUSgyMCwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9FUSgzMCwgdGVzdC55KCkpOworICAgIEVYUEVDVF9FUSgxNTAsIHRlc3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDMwMCwgdGVzdC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDE3
MCwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgzMzAsIHRlc3QubWF4WSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3Qu
bG9jYXRpb24oKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGxvY2F0aW9uLngoKSk7CisgICAgRVhQRUNU
X0VRKDMwLCBsb2NhdGlvbi55KCkpOworCisgICAgYXV0byBzaXplID0gdGVzdC5zaXplKCk7Cisg
ICAgRVhQRUNUX0VRKDE1MCwgc2l6ZS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAwLCBzaXpl
LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBTZXRMb2NhdGlvbkFuZFNpemUpCit7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0OworCisgICAgdGVzdEVtcHR5UmVjdChyZWN0KTsKKwor
ICAgIFdlYkNvcmU6OkludFBvaW50IGxvY2F0aW9uKDEwLCAyMCk7CisKKyAgICByZWN0LnNldExv
Y2F0aW9uKGxvY2F0aW9uKTsKKworICAgIEVYUEVDVF9FUSgxMCwgcmVjdC54KCkpOworICAgIEVY
UEVDVF9FUSgyMCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSgwLCByZWN0LndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMTAsIHJlY3Qu
bWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZWN0LmlzRW1wdHkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoMTAwLCAyMDAp
OworCisgICAgcmVjdC5zZXRTaXplKHNpemUpOworCisgICAgRVhQRUNUX0VRKDEwLCByZWN0Lngo
KSk7CisgICAgRVhQRUNUX0VRKDIwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVj
dC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBF
Q1RfRVEoMTEwLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDIyMCwgcmVjdC5tYXhZKCkp
OworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwg
Q2VudGVyKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgNDAsIDEwMCwgMjAwKTsK
KworICAgIGF1dG8gY2VudGVyID0gcmVjdC5jZW50ZXIoKTsKKworICAgIEVYUEVDVF9FUSg3MCwg
Y2VudGVyLngoKSk7CisgICAgRVhQRUNUX0VRKDE0MCwgY2VudGVyLnkoKSk7Cit9CisKK1RFU1Qo
SW50UmVjdCwgTW92ZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAs
IDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGRlbHRhKDEwLCAyMCk7CisKKyAgICByZWN0
Lm1vdmUoZGVsdGEpOworCisgICAgRVhQRUNUX0VRKDMwLCByZWN0LngoKSk7CisgICAgRVhQRUNU
X0VRKDUwLCByZWN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBkZWx0YVBvaW50KC0y
MCwgLTQwKTsKKworICAgIHJlY3QubW92ZUJ5KGRlbHRhUG9pbnQpOworCisgICAgRVhQRUNUX0VR
KDEwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDEwLCByZWN0LnkoKSk7CisKKyAgICByZWN0
Lm1vdmUoLTEwLCAyMik7CisKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC54KCkpOworICAgIEVYUEVD
VF9FUSgzMiwgcmVjdC55KCkpOworfQorCitURVNUKEludFJlY3QsIEV4cGFuZCkKK3sKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHNpemUoMTAwLCAxMDApOworCisgICAgcmVjdC5leHBhbmQoc2l6ZSk7CisKKyAgICBF
WFBFQ1RfRVEoMjAwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgzMDAsIHJlY3QuaGVp
Z2h0KCkpOworCisgICAgcmVjdC5leHBhbmQoNTUsIDIyKTsKKworICAgIEVYUEVDVF9FUSgyNTUs
IHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDMyMiwgcmVjdC5oZWlnaHQoKSk7CisKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIHNpemUyKC0xMCwgLTIwKTsKKworICAgIHJlY3QuZXhwYW5kKHNp
emUyKTsKKworICAgIEVYUEVDVF9FUSgyNDUsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KDMwMiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmV4cGFuZCgtNSwgLTIpOworCisgICAg
RVhQRUNUX0VRKDI0MCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAwLCByZWN0Lmhl
aWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDb250cmFjdCkKK3sKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emUoNTAsIDEwMCk7CisKKyAgICByZWN0LmNvbnRyYWN0KHNpemUpOworCisgICAgRVhQRUNUX0VR
KDUwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3QuaGVpZ2h0KCkpOwor
CisgICAgcmVjdC5jb250cmFjdCgyNSwgMjIpOworCisgICAgRVhQRUNUX0VRKDI1LCByZWN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9FUSg3OCwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIHNpemUyKC0xMCwgLTIwKTsKKworICAgIHJlY3QuY29udHJhY3Qoc2l6ZTIpOwor
CisgICAgRVhQRUNUX0VRKDM1LCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg5OCwgcmVj
dC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmNvbnRyYWN0KC01LCAtMik7CisKKyAgICBFWFBFQ1Rf
RVEoNDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKK1RFU1QoSW50UmVjdCwgU2hpZnRYRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICByZWN0LnNoaWZ0WEVkZ2VUbyg3Nyk7CisK
KyAgICBFWFBFQ1RfRVEoNzcsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCByZWN0Lm1h
eFgoKSk7CisgICAgRVhQRUNUX0VRKDMwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwg
cmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSg0MywgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoMjAwLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKDIw
MCk7CisKKyAgICBFWFBFQ1RfRVEoNzcsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCBy
ZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDMwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VR
KDIzMCwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgxMjMsIHJlY3Qud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKDIwMCwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgU2hp
ZnRZRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7
CisKKyAgICByZWN0LnNoaWZ0WUVkZ2VUbyg1OS4wZik7CisKKyAgICBFWFBFQ1RfRVEoMjAsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VR
KDU5LCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwgcmVjdC5tYXhZKCkpOworICAgIEVY
UEVDVF9FUSgxMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE3MSwgcmVjdC5oZWln
aHQoKSk7CisKKyAgICByZWN0LnNoaWZ0TWF4WUVkZ2VUbygyNzAuMGYpOworCisgICAgRVhQRUNU
X0VRKDIwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDEyMCwgcmVjdC5tYXhYKCkpOworICAg
IEVYUEVDVF9FUSg1OSwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSgyNzAsIHJlY3QubWF4WSgp
KTsKKyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgyMTEs
IHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3QsIEluZmxhdGUpCit7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisgICAgcmVjdC5pbmZsYXRl
WCg1KTsKKworICAgIEVYUEVDVF9FUSgxNSwgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgxMjUs
IHJlY3QubWF4WCgpKTsKKworICAgIHJlY3QuaW5mbGF0ZVkoNCk7CisKKyAgICBFWFBFQ1RfRVEo
MjYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoMjM0LCByZWN0Lm1heFkoKSk7CisKKyAgICBy
ZWN0LmluZmxhdGUoMTApOworCisgICAgRVhQRUNUX0VRKDUsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRVEoMTM1LCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCByZWN0LnkoKSk7Cisg
ICAgRVhQRUNUX0VRKDI0NCwgcmVjdC5tYXhZKCkpOworfQorCitURVNUKEludFJlY3QsIENvcm5l
cnMpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BMZWZ0ID0gcmVjdC5taW5YTWluWUNvcm5lcigpOwor
ICAgIEVYUEVDVF9FUSgyMCwgdG9wTGVmdC54KCkpOworICAgIEVYUEVDVF9FUSgzMCwgdG9wTGVm
dC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BSaWdodCA9IHJlY3QubWF4WE1p
bllDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCB0b3BSaWdodC54KCkpOworICAgIEVYUEVD
VF9FUSgzMCwgdG9wUmlnaHQueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm90dG9t
TGVmdCA9IHJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGJvdHRvbUxl
ZnQueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjMwLCBib3R0b21MZWZ0LnkoKSk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGJvdHRvbVJpZ2h0ID0gcmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAg
IEVYUEVDVF9FUSgxMjAsIGJvdHRvbVJpZ2h0LngoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwgYm90
dG9tUmlnaHQueSgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDb250YWlucykKK3sKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNvbnRhaW5lZCgzMCwgNDAsIDUwLCAxMDApOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5j
b250YWlucyhjb250YWluZWQpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3Qgb3V0c2lkZSgxMjAs
IDIzMCwgNTAsIDEwMCk7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucyhvdXRzaWRl
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGludGVyc2VjdHMoMTAsIDIwLCA5MCwgMTgwKTsK
KworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKGludGVyc2VjdHMpKTsKKworICAgIFdl
YkNvcmU6OkludFBvaW50IHBvaW50SW5zaWRlKDYwLCA3MCk7CisKKyAgICBBU1NFUlRfVFJVRShy
ZWN0LmNvbnRhaW5zKHBvaW50SW5zaWRlKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dE91dHNpZGUoMTYwLCAyNzApOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9p
bnRPdXRzaWRlKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludE9uTGluZSgyMCwgMzAp
OworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhwb2ludE9uTGluZSkpOworCisgICAg
QVNTRVJUX1RSVUUocmVjdC5jb250YWlucyg2MCwgNzApKTsKKyAgICBBU1NFUlRfRkFMU0UocmVj
dC5jb250YWlucygxNjAsIDI3MCkpOworfQorCitURVNUKEludFJlY3QsIEludGVyc2VjdHMpCit7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisgICAgV2Vi
Q29yZTo6SW50UmVjdCBjb250YWluZWQoMzAsIDQwLCA1MCwgMTAwKTsKKworICAgIEFTU0VSVF9U
UlVFKHJlY3QuaW50ZXJzZWN0cyhjb250YWluZWQpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3Qg
b3V0c2lkZSgxMjAsIDIzMCwgNTAsIDEwMCk7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5pbnRl
cnNlY3RzKG91dHNpZGUpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgaW50ZXJzZWN0cygxMCwg
MjAsIDkwLCAxODApOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5pbnRlcnNlY3RzKGludGVyc2Vj
dHMpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEludGVyc2VjdFJlc3VsdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9FUSg3MCwgcmVjdC54KCkpOworICAgIEVY
UEVDVF9FUSgxMjAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoODAsIHJlY3QueSgpKTsK
KyAgICBFWFBFQ1RfRVEoMjMwLCByZWN0Lm1heFkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgSW50
ZXJzZWN0KQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEEoMjAsIDMwLCAxMDAsIDIwMCk7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0Qig3MCwgODAsIDEwMCwgMjAwKTsKKworICAgIHJl
Y3RBLmludGVyc2VjdChyZWN0Qik7CisKKyAgICB0ZXN0SW50ZXJzZWN0UmVzdWx0KHJlY3RBKTsK
KworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEMoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBh
dXRvIGludGVyc2VjdGVkID0gV2ViQ29yZTo6aW50ZXJzZWN0aW9uKHJlY3RDLCByZWN0Qik7CisK
KyAgICB0ZXN0SW50ZXJzZWN0UmVzdWx0KGludGVyc2VjdGVkKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFVuaXRlZFJlY3RzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHVuaXRlZCkKK3sKKyAgICBF
WFBFQ1RfRVEoMjAsIHVuaXRlZC54KCkpOworICAgIEVYUEVDVF9FUSgxNzAsIHVuaXRlZC5tYXhY
KCkpOworICAgIEVYUEVDVF9FUSgzMCwgdW5pdGVkLnkoKSk7CisgICAgRVhQRUNUX0VRKDI4MCwg
dW5pdGVkLm1heFkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgVW5pdGUpCit7CisgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0QSgyMCwgMzAsIDEwMCwgMjAwKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3RCKDcwLCA4MCwgMTAwLCAyMDApOworCisgICAgcmVjdEEudW5pdGUocmVjdEIpOworCisg
ICAgdGVzdFVuaXRlZFJlY3RzKHJlY3RBKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEMo
MjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBhdXRvIHVuaXRlZCA9IFdlYkNvcmU6OnVuaW9uUmVj
dChyZWN0QywgcmVjdEIpOworCisgICAgdGVzdFVuaXRlZFJlY3RzKHVuaXRlZCk7Cit9CisKK1RF
U1QoSW50UmVjdCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwg
MTAwLCAyMDApOworCisgICAgcmVjdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9FUSg0MCwg
cmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgyNDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1Rf
RVEoNjAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoNDYwLCByZWN0Lm1heFkoKSk7Cit9CisK
K1RFU1QoSW50UmVjdCwgVHJhbnNwb3NlKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgy
MCwgMzAsIDEwMCwgMjAwKTsKKworICAgIGF1dG8gdHJhbnNwb3NlZCA9IHJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKKworICAgIEVYUEVDVF9FUSgzMCwgdHJhbnNwb3NlZC54KCkpOworICAgIEVYUEVD
VF9FUSgyMzAsIHRyYW5zcG9zZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHRyYW5zcG9z
ZWQueSgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCB0cmFuc3Bvc2VkLm1heFkoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrQ2FzdFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBFWFBFQ1RfRVEoMTAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoNDAsIHJlY3QubWF4
WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoNjAsIHJl
Y3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDQwLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDYXN0aW5nKQorewor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgxMCwgMjAsIDMwLCA0MCk7CisKKyNpZiBVU0UoQ0cp
CisgICAgQ0dSZWN0IGNnUmVjdCA9IENHUmVjdE1ha2UoMTAuMCwgMjAuMCwgMzAuMCwgNDAuMCk7
CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tQ0dSZWN0KGNnUmVjdCk7CisKKyAgICBj
aGVja0Nhc3RSZWN0KHJlY3RGcm9tQ0dSZWN0KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lO
KQorICAgIFJFQ1QgZ2RpUmVjdCA9IHJlY3Q7CisKKyAgICBFWFBFQ1RfRVEoMTAsIGdkaVJlY3Qu
bGVmdCk7CisgICAgRVhQRUNUX0VRKDIwLCBnZGlSZWN0LnRvcCk7CisgICAgRVhQRUNUX0VRKDQw
LCBnZGlSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRVEoNjAsIGdkaVJlY3QuYm90dG9tKTsKKwor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21HRElSZWN0KGdkaVJlY3QpOworCisgICAgY2hl
Y2tDYXN0UmVjdChyZWN0RnJvbUdESVJlY3QpOworCisgICAgRDJEMV9SRUNUX1UgZDJkUmVjdFUg
PSByZWN0OworCisgICAgRVhQRUNUX0VRKDEwLCBkMmRSZWN0VS5sZWZ0KTsKKyAgICBFWFBFQ1Rf
RVEoMjAsIGQyZFJlY3RVLnRvcCk7CisgICAgRVhQRUNUX0VRKDQwLCBkMmRSZWN0VS5yaWdodCk7
CisgICAgRVhQRUNUX0VRKDYwLCBkMmRSZWN0VS5ib3R0b20pOworCisgICAgV2ViQ29yZTo6SW50
UmVjdCByZWN0RnJvbUQyRFJlY3RVKGQyZFJlY3RVKTsKKworICAgIGNoZWNrQ2FzdFJlY3QocmVj
dEZyb21EMkRSZWN0VSk7CisKKyAgICBEMkQxX1JFQ1RfRiBkMmRSZWN0RiA9IHJlY3Q7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGQyZFJlY3RGLmxlZnQpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyMC4wZiwgZDJkUmVjdEYudG9wKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIGQy
ZFJlY3RGLnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAuMGYsIGQyZFJlY3RGLmJvdHRv
bSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tRDJEUmVjdEYoZDJkUmVjdEYpOwor
CisgICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUQyRFJlY3RGKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgdm9pZCBjaGVja1N1YnRyYWN0aW9uUmVzdWx0MShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIEVYUEVDVF9FUSgtMTAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoOTAs
IHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoLTEwLCByZWN0LnkoKSk7CisgICAgRVhQRUNU
X0VRKDkwLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQgY2hl
Y2tTdWJ0cmFjdGlvblJlc3VsdDIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBFWFBFQ1RfRVEoLTQwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDYwLCByZWN0Lm1heFgo
KSk7CisgICAgRVhQRUNUX0VRKC01MCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSg1MCwgcmVj
dC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDEwMCwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgU3VidHJhY3Rpb24p
Cit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDEwLCAyMCwgMTAwLCAxMDApOworICAgIFdl
YkNvcmU6OkludFBvaW50IHJpZ2h0U2lkZSgyMCwgMzApOworCisgICAgcmVjdCAtPSByaWdodFNp
ZGU7CisKKyAgICBjaGVja1N1YnRyYWN0aW9uUmVzdWx0MShyZWN0KTsKKworICAgIGF1dG8gcmVj
dDIgPSByZWN0IC0gV2ViQ29yZTo6SW50UG9pbnQoMzAsIDQwKTsKKyAgICBjaGVja1N1YnRyYWN0
aW9uUmVzdWx0MihyZWN0Mik7Cit9CisKK1RFU1QoSW50UmVjdCwgRXF1YWxpdHkpCit7CisgICAg
V2ViQ29yZTo6SW50UmVjdCByZWN0KDEwLCAyMCwgMTAwLCAxMDApOworICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdDIoMTAsIDIwLCAxMDAsIDEwMCk7CisgICAgV2ViQ29yZTo6SW50UmVjdCByaWdo
dFNpZGUoMTEwLCAyMCwgMjAsIDEwMCk7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0ID09IHJlY3Qy
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdCAhPSByZWN0Mik7CisgICAgQVNTRVJUX1RSVUUocmVj
dCAhPSByaWdodFNpZGUpOworICAgIEFTU0VSVF9GQUxTRShyZWN0ID09IHJpZ2h0U2lkZSk7Cit9
CisKK3N0YXRpYyB2b2lkIGNoZWNrRW5jbG9zaW5nSW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9FUSgxMCwgcmVjdC54KCkpOworICAgIEVYUEVDVF9F
USg0MSwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgyMSwgcmVjdC55KCkpOworICAgIEVY
UEVDVF9FUSg2MiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgzMSwgcmVjdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoNDEsIHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3Qs
IEVuY2xvc2luZ0ludFJlY3QpCit7CisjaWYgVVNFKENHKQorICAgIENHUmVjdCBjZ1JlY3QgPSBD
R1JlY3RNYWtlKDEwLjUsIDIxLjMsIDMwLjEsIDQwLjApOworCisgICAgV2ViQ29yZTo6SW50UmVj
dCBlbmNsb3NpbmdDRyA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QoY2dSZWN0KTsKKworICAg
IGNoZWNrRW5jbG9zaW5nSW50UmVjdChlbmNsb3NpbmdDRyk7CisjZW5kaWYKK30KKworVEVTVChJ
bnRSZWN0LCBBcmVhQW5kRGlzdGFuY2VzKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgx
MCwgMjAsIDEwMCwgMTAwKTsKKworICAgIEVYUEVDVF9FUSgxMDAwMCwgcmVjdC5hcmVhKCkpOwor
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQoMTIwLCAxMzApOworCisgICAgV2ViQ29yZTo6
SW50U2l6ZSBkaXN0YW5jZSA9IHJlY3QuZGlmZmVyZW5jZVRvUG9pbnQocG9pbnQpOworICAgIEVY
UEVDVF9FUSgtMTAsIGRpc3RhbmNlLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgtMTAsIGRpc3Rh
bmNlLmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9FUSgyMDAsIHJlY3QuZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChwb2ludCkpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSW50U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0ludFNpemUuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKwor
I2lmIFVTRShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNv
cmU6OkludFNpemUgcmVjdCkKK3sKKyAgICByZWN0LnNldFdpZHRoKDIwMyk7CisgICAgRVhQRUNU
X0VRKDIwMywgcmVjdC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhlaWdodCg3Myk7CisgICAgRVhQ
RUNUX0VRKDczLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEVtcHR5U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiByZWN0KQoreworICAgIEVYUEVDVF9FUSgwLCByZWN0
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc1plcm8oKSk7Cit9
CisKK1RFU1QoSW50U2l6ZSwgRGVmYXVsdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHRlc3Q7CisKKyAgICB0ZXN0RW1wdHlTaXplKHRlc3QpOworCisgICAgdGVzdEdldEFu
ZFNldCh0ZXN0KTsKK30KKworVEVTVChJbnRTaXplLCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAwLCAyMDApOworCisgICAgRVhQRUNUX0VRKDEwMCwg
dGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVy
bygpKTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBlcHNpbG9uID0gMC4wMDAxZjsKKyAgICBF
WFBFQ1RfTkVBUigwLjVmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVwc2lsb24pOworfQorCitURVNU
KEludFNpemUsIEZsb2F0U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNp
emUgc2l6ZSgxMDI0LjIsIDc2Ny44KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3Qoc2l6ZSk7
CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY3
LCB0ZXN0LmhlaWdodCgpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBlcHNpbG9uID0gMC4wMDE7CisgICAgRVhQRUNUX05FQVIoMS4zMzVmLCB0ZXN0LmFzcGVjdFJh
dGlvKCksIGVwc2lsb24pOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChJ
bnRTaXplLCBEaWFnb25hbExlbmd0aEFuZEFyZWEpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0
ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBFWFBFQ1RfRVEoMTYzODQwMCwgdGVzdC5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKSk7CisgICAgRVhQRUNUX0VRKDc4NjQzMiwgdGVzdC5hcmVhKCkpOworfQor
CitURVNUKEludFNpemUsIFNjYWxlKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdCgxMDI0
LCA3NjgpOworCisgICAgdGVzdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9FUSgyMDQ4LCB0
ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNTM2LCB0ZXN0LmhlaWdodCgpKTsKKworICAg
IHRlc3Quc2NhbGUoMC41Zik7CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgdGVzdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoNzY4LCB0ZXN0LmhlaWdodCgpKTsKKworICAgIHRlc3Quc2NhbGUoMi4w
ZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRVEoMjA0OCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoMzg0LCB0ZXN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRTaXplLCBFeHBhbmQpCit7
CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBFWFBFQ1RfRVEo
MTAyNCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY4LCB0ZXN0LmhlaWdodCgpKTsK
KworICAgIHRlc3QuZXhwYW5kKDEwMCwgNTApOworCisgICAgRVhQRUNUX0VRKDExMjQsIHRlc3Qu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDgxOCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIG90aGVyKDIwNDgsIDcwMCk7CisKKyAgICBhdXRvIGV4cGFuZGVkID0gdGVz
dC5leHBhbmRlZFRvKG90aGVyKTsKKworICAgIEVYUEVDVF9FUSgyMDQ4LCBleHBhbmRlZC53aWR0
aCgpKTsKKyAgICBFWFBFQ1RfRVEoODE4LCBleHBhbmRlZC5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
SW50U2l6ZSwgU2hyaW5rKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdCgxMDI0LCA3Njgp
OworICAgIFdlYkNvcmU6OkludFNpemUgb3RoZXIoMTAwMCwgNzAwKTsKKworICAgIGF1dG8gc2hy
dW5rZW4gPSB0ZXN0LnNocnVua1RvKG90aGVyKTsKKworICAgIEVYUEVDVF9FUSgxMDAwLCBzaHJ1
bmtlbi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzAwLCBzaHJ1bmtlbi5oZWlnaHQoKSk7CisK
KyAgICBXZWJDb3JlOjpJbnRTaXplIG90aGVyMigyMDAwLjBmLCA3MDAuMGYpOworCisgICAgYXV0
byBzaHJ1bmtlbjIgPSB0ZXN0LnNocnVua1RvKG90aGVyMik7CisKKyAgICBFWFBFQ1RfRVEoMTAy
NCwgc2hydW5rZW4yLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3MDAsIHNocnVua2VuMi5oZWln
aHQoKSk7Cit9CisKK1RFU1QoSW50U2l6ZSwgVHJhbnNwb3NlZFNpemUpCit7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSB0ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBhdXRvIHRyYW5zcG9zZWRTaXplID0g
dGVzdC50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIHRlc3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDc2OCwgdGVzdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50U2l6
ZSwgQ2FzdGluZykKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAyNCwgNzY4KTsKKwor
I2lmIFVTRShDRykKKyAgICBDR1NpemUgY2dTaXplID0gdGVzdDsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMDI0LjBmLCBjZ1NpemUud2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYs
IGNnU2l6ZS5oZWlnaHQpOworCisgICAgQ0dTaXplIGNnU2l6ZTIgPSBDR1NpemVNYWtlKC0yMi4z
ZiwgMTQuNmYpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0Q0coY2dTaXplMik7CisKKyAg
ICBFWFBFQ1RfRVEoLTIyLCB0ZXN0Q0cud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE0LCB0ZXN0
Q0cuaGVpZ2h0KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9TSVpF
X1UgZDJkU2l6ZVUgPSB0ZXN0OworICAgIEVYUEVDVF9FUSgxMDI0LCBkMmRTaXplVS53aWR0aCk7
CisgICAgRVhQRUNUX0VRKDc2OCwgZDJkU2l6ZVUuaGVpZ2h0KTsKKworICAgIEQyRDFfU0laRV9G
IGQyZFNpemVGID0gdGVzdDsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgZDJkU2l6ZUYu
d2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGQyZFNpemVGLmhlaWdodCk7CisK
KyAgICBEMkQxX1NJWkVfRiBkMmRTaXplRjIgPSBEMkQxOjpTaXplRigtMjIuM2YsIDE0LjZmKTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdEQyRChkMmRTaXplRjIpOworCisgICAgRVhQRUNU
X0VRKC0yMiwgdGVzdEQyRC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTQsIHRlc3REMkQuaGVp
Z2h0KCkpOworCisgICAgRDJEMV9TSVpFX0YgZDJkU2l6ZVUyID0gRDJEMTo6U2l6ZUYoLTIzLCAx
Nik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3REMkQyKGQyZFNpemVVMik7CisKKyAgICBF
WFBFQ1RfRVEoLTIzLCB0ZXN0RDJEMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIHRlc3RE
MkQyLmhlaWdodCgpKTsKKyNlbmRpZgorfQorCitURVNUKEludFNpemUsIEFkZFN1YnRyYWN0KQor
eworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisgICAgV2ViQ29yZTo6SW50U2l6
ZSBiKDEwMCwgMTAwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYyA9IGEgKyBiOworCisgICAg
RVhQRUNUX0VRKDYxMiwgYy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNDg0LCBjLmhlaWdodCgp
KTsKKworICAgIGEgKz0gYjsKKworICAgIEVYUEVDVF9FUSg2MTIsIGEud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDQ4NCwgYS5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGEyKDUx
MiwgMzg0KTsKKworICAgIFdlYkNvcmU6OkludFNpemUgZCA9IGEyIC0gYjsKKworICAgIEVYUEVD
VF9FUSg0MTIsIGQud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDI4NCwgZC5oZWlnaHQoKSk7CisK
KyAgICBhMiAtPSBiOworCisgICAgRVhQRUNUX0VRKDQxMiwgYTIud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0VRKDI4NCwgYTIuaGVpZ2h0KCkpOworfQorCitURVNUKEludFNpemUsIE5lZ2F0aW9uKQor
eworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG5lZ2F0ZWQgPSAtYTsKKworICAgIEVYUEVDVF9FUSgtNTEyLCBuZWdhdGVkLndpZHRoKCkp
OworICAgIEVYUEVDVF9FUSgtMzg0LCBuZWdhdGVkLmhlaWdodCgpKTsKK30KKworVEVTVChJbnRT
aXplLCBFcXVhbGl0eSkKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIGEoMTAyNCwgNzY4KTsKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIGIoMTAyNCwgNzY4KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIGMo
NzY4LCA1MzQpOworCisgICAgQVNTRVJUX1RSVUUoYSA9PSBiKTsKKyAgICBBU1NFUlRfRkFMU0Uo
YSAhPSBiKTsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBjKTsKKyAgICBBU1NFUlRfVFJVRShhICE9
IGMpOworfQorCitURVNUKEludFNpemUsIENvbnRyYWN0KQoreworICAgIFdlYkNvcmU6OkludFNp
emUgYSgxMDI0LCA3NjgpOworCisgICAgYS5jb250cmFjdCgxMDAsIDUwKTsKKworICAgIEVYUEVD
VF9FUSg5MjQsIGEud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDcxOCwgYS5oZWlnaHQoKSk7Cit9
CisKK1RFU1QoSW50U2l6ZSwgQ2xhbXApCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBhKDEwMjQs
IDc2OCk7CisKKyAgICBhLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEVYUEVDVF9FUSgx
MDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGEuaGVpZ2h0KCkpOworCisgICAg
V2ViQ29yZTo6SW50U2l6ZSBiKC0xMDI0LCAtNzY4KTsKKworICAgIGIuY2xhbXBOZWdhdGl2ZVRv
WmVybygpOworCisgICAgRVhQRUNUX0VRKDAsIGIud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDAs
IGIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtU2l6ZSgxMDI0LCAx
MDAwKTsKKworICAgIGEuY2xhbXBUb01pbmltdW1TaXplKG1pbmltdW1TaXplKTsKKworICAgIEVY
UEVDVF9FUSgxMDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxMDAwLCBhLmhlaWdodCgp
KTsKK30KKworVEVTVChJbnRTaXplLCBDb25zdHJhaW5lZEJldHdlZW4pCit7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBtaW5pbXVtU2l6ZSgzODQsIDI1Nik7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBt
YXhpbXVtU2l6ZSgyMDQ4LCAxNTM2KTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYSgxMDI0LCA3
NjgpOworCisgICAgYXV0byBjb25zdHJhaW5lZDEgPSBhLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5p
bXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIGNvbnN0cmFpbmVk
MS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY4LCBjb25zdHJhaW5lZDEuaGVpZ2h0KCkpOwor
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBiKDIwMCwgMTAwKTsKKworICAgIGF1dG8gY29uc3RyYWlu
ZWQyID0gYi5jb25zdHJhaW5lZEJldHdlZW4obWluaW11bVNpemUsIG1heGltdW1TaXplKTsKKwor
ICAgIEVYUEVDVF9FUSgzODQsIGNvbnN0cmFpbmVkMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
MjU2LCBjb25zdHJhaW5lZDIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBjKDUw
MDAsIDIwMDApOworCisgICAgYXV0byBjb25zdHJhaW5lZDMgPSBjLmNvbnN0cmFpbmVkQmV0d2Vl
bihtaW5pbXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDIwNDgsIGNvbnN0
cmFpbmVkMy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTUzNiwgY29uc3RyYWluZWQzLmhlaWdo
dCgpKTsKK30KKworLyoKKworSW50U2l6ZSBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgSW50U2l6
ZSYgbWluLCBjb25zdCBJbnRTaXplJiBtYXgpIGNvbnN0OworCisqLworCit9CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTMgKzEsMTQ2NiBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMywgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UXVhZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgorCisjaWYgVVNFKENBKQorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgor
I2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwg
Tm9uSW52ZXJ0YWJsZUJsZW5kKQorc3RhdGljIHZvaWQgdGVzdElkZW50aXR5KGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxLjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRy
YW5zZm9ybS5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMTMo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5z
Zm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMjQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9y
bS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAs
IHRyYW5zZm9ybS5tNDQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICB0cmFuc2Zvcm0uc2V0
QSgxLjEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4xLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICB0
cmFuc2Zvcm0uc2V0QigyLjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4yLCB0cmFuc2Zvcm0u
YigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0QygzLjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4z
LCB0cmFuc2Zvcm0uYygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0RCg0LjQpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNC40LCB0cmFuc2Zvcm0uZCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0RSg1LjUpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCB0cmFuc2Zvcm0uZSgpKTsKKyAgICB0cmFuc2Zvcm0u
c2V0Rig2LjYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0uZigpKTsKKwor
ICAgIHRyYW5zZm9ybS5zZXRNMTEoMS4xKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMSwgdHJh
bnNmb3JtLm0xMSgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTEyKDIuMik7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjIsIHRyYW5zZm9ybS5tMTIoKSk7CisgICAgdHJhbnNmb3JtLnNldE0xMygzLjMp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4zLCB0cmFuc2Zvcm0ubTEzKCkpOworICAgIHRyYW5z
Zm9ybS5zZXRNMTQoNC40KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgdHJhbnNmb3JtLm0x
NCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTIxKDUuNSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1
LjUsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgdHJhbnNmb3JtLnNldE0yMig2LjYpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0ubTIyKCkpOworICAgIHRyYW5zZm9ybS5zZXRN
MjMoNy43KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNywgdHJhbnNmb3JtLm0yMygpKTsKKyAg
ICB0cmFuc2Zvcm0uc2V0TTI0KDguOCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjgsIHRyYW5z
Zm9ybS5tMjQoKSk7CisgICAgdHJhbnNmb3JtLnNldE0zMSg5LjkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoOS45LCB0cmFuc2Zvcm0ubTMxKCkpOworICAgIHRyYW5zZm9ybS5zZXRNMzIoMTAuMTAp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMTAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgdHJh
bnNmb3JtLnNldE0zMygxMS4xMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4xMSwgdHJhbnNm
b3JtLm0zMygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTM0KDEyLjEyKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEyLjEyLCB0cmFuc2Zvcm0ubTM0KCkpOworICAgIHRyYW5zZm9ybS5zZXRNNDEoMTMu
MTMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTMuMTMsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAg
dHJhbnNmb3JtLnNldE00MigxNC4xNCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNC4xNCwgdHJh
bnNmb3JtLm00MigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTQzKDE1LjE1KTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDE1LjE1LCB0cmFuc2Zvcm0ubTQzKCkpOworICAgIHRyYW5zZm9ybS5zZXRNNDQo
MTYuMTYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMTYsIHRyYW5zZm9ybS5tNDQoKSk7CisK
KyAgICB0cmFuc2Zvcm0uc2V0TWF0cml4KDkuOSwgOC44LCA3LjcsIDYuNiwgNS41LCA0LjQpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoOS45LCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDguOCwgdHJhbnNmb3JtLmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjcsIHRy
YW5zZm9ybS5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0uZCgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuNSwgdHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg0LjQsIHRyYW5zZm9ybS5mKCkpOworCisgICAgdHJhbnNmb3JtLnNldE1hdHJpeCgx
Ni4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLCA5LjAsCisgICAgICAgIDgu
MCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDE2LjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCB0
cmFuc2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgdHJhbnNmb3JtLm0x
MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEzLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMTEuMCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAs
IHRyYW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIHRyYW5zZm9ybS5t
MjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSg3LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSg2LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRy
YW5zZm9ybS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5tNDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgs
IERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggdGVzdDsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0KTsKKworICAgIHRlc3RHZXRBbmRTZXQo
dGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0
cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNmb3JtLmIoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5jKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMy4wLCB0cmFuc2Zvcm0uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwg
dHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5mKCkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24oY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDE2LjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCB0cmFu
c2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgdHJhbnNmb3JtLm0xMygp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEzLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMTEuMCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRy
YW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIHRyYW5zZm9ybS5tMjQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg3LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg2LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5z
Zm9ybS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRyYW5zZm9ybS5tNDQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRyYW5zZm9ybS5pc0FmZmlu
ZSgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgVmFsdWVDb25zdHJ1Y3Rpb24p
Cit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDEoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0
MSk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdDEuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0MS5pc0FmZmluZSgpKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRlc3QyKDE2LjAsIDE1LjAsIDE0LjAsIDEzLjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAg
ICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAg
dGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QyKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdDIp
OworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QyLmlzQWZmaW5lKCkpOworCisgICAgdGVzdDIubWFrZUlkZW50aXR5KCk7CisKKyAg
ICB0ZXN0SWRlbnRpdHkodGVzdDIpOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0
eSgpKTsKK30KKworI2lmIFVTRShDRykKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENHQWZm
aW5lVHJhbnNmb3JtQ29uc3RydWN0aW9uKQoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNnVHJh
bnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAx
LjApOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoY2dUcmFuc2Zvcm0p
OworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisgICAgdGVzdEdldEFu
ZFNldCh0ZXN0KTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEQy
RDFNYXRyaXhDb25zdHJ1Y3Rpb24pCit7CisgICAgRDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNm
b3JtID0gRDJEMTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KGQyZFRyYW5zZm9ybSk7CisKKyAg
ICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKyAgICB0ZXN0R2V0QW5kU2V0KHRl
c3QpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0eSgpKTsKK30KKyNlbmRpZgor
CitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBBZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24p
Cit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGFmZmluZVRyYW5zZm9ybSg2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0ZXN0KGFmZmluZVRyYW5zZm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlv
bih0ZXN0KTsKKyAgICB0ZXN0R2V0QW5kU2V0KHRlc3QpOworCisgICAgQVNTRVJUX0ZBTFNFKHRl
c3QuaXNJZGVudGl0eSgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgVHJhbnNm
b3JtTWF0cml4Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCgxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAg
ICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KG1hdHJpeCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEFz
c2lnbm1lbnQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAs
IDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXgoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAg
ICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAg
ICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3QgPSBtYXRyaXg7
CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7Cit9CisKK1RFU1QoVHJhbnNmb3Jt
YXRpb25NYXRyaXgsIElkZW50aXR5KQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBBU1NFUlRfRkFM
U0UodGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdC5tYWtlSWRlbnRpdHkoKTsKKworICAgIEFTU0VS
VF9UUlVFKHRlc3QuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdElkZW50aXR5KHRlc3QpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0QWZmaW5lVmVyc2lvbihXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZmZpbmVUcmFuc2Zvcm1NYXRyaXgpCit7CisgICAgQVNTRVJUX0ZBTFNFKGFmZmluZVRyYW5zZm9y
bU1hdHJpeC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRShhZmZpbmVUcmFuc2Zvcm1N
YXRyaXguaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUoYWZmaW5l
VHJhbnNmb3JtTWF0cml4LmlzQWZmaW5lKCkpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNi4w
LCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUu
MCwgYWZmaW5lVHJhbnNmb3JtTWF0cml4Lm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgYWZmaW5lVHJhbnNmb3JtTWF0cml4Lm0xMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgYWZmaW5lVHJhbnNmb3JtTWF0cml4Lm0xNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEy
LjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
MS4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTIyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTIzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTMxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTMyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MS4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTMzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTM0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
NC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTQxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
My4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTQyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTQzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MS4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTQ0KCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0
aW9uTWF0cml4LCBBZmZpbmVWZXJzaW9uKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IHRlc3QoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAg
ICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAg
ICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzQWZm
aW5lKCkpOworCisgICAgYXV0byBhZmZpbmVDb3B5ID0gdGVzdC50b0FmZmluZVRyYW5zZm9ybSgp
OworCisgICAgdGVzdEFmZmluZVZlcnNpb24oYWZmaW5lQ29weSk7CisKKyAgICB0ZXN0Lm1ha2VB
ZmZpbmUoKTsKKworICAgIHRlc3RBZmZpbmVWZXJzaW9uKHRlc3QpOworfQorCitURVNUKFRyYW5z
Zm9ybWF0aW9uTWF0cml4LCBNYXBGbG9hdFBvaW50KQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IHRlc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCgxMDAuMGYs
IDUwLjBmKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsK
KworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFBvaW50LngoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRQb2ludC55KCkpOworCisgICAgdGVzdC5zZXREKDIu
MCk7CisKKyAgICBhdXRvIG1hcHBlZFBvaW50MiA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQyLngoKSk7CisgICAgQVNTRVJU
X0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQyLnkoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41
KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQzID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFBvaW50My54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgxMDAuMGYsIG1hcHBlZFBvaW50My55KCkpOworCisgICAgdGVzdC5zZXRNMjIoMC41
KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQ0ID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFBvaW50NC54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgyNS4wZiwgbWFwcGVkUG9pbnQ0LnkoKSk7CisKKyAgICB0ZXN0LnNldE0xMSgyLjAp
OworCisgICAgYXV0byBtYXBwZWRQb2ludDUgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAg
IEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFBvaW50NS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgyNS4wZiwgbWFwcGVkUG9pbnQ1LnkoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRp
b25NYXRyaXgsIE1hcERvdWJsZXMpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggdGVzdDsKKyAgICBkb3VibGUgeCA9IDEwMC4wOworICAgIGRvdWJsZSB5ID0gNTAuMDsKKwor
ICAgIGRvdWJsZSBtYXBwZWRYID0gMDsKKyAgICBkb3VibGUgbWFwcGVkWSA9IDA7CisgICAgdGVz
dC5tYXAoeCwgeSwgbWFwcGVkWCwgbWFwcGVkWSk7CisKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDEw
MC4wLCBtYXBwZWRYKTsKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDUwLjAsIG1hcHBlZFkpOworCisg
ICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBtYXBwZWRYID0gMDsKKyAgICBtYXBwZWRZID0gMDsK
KyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZKTsKKworICAgIEFTU0VSVF9ET1VC
TEVfRVEoMTAwLjAsIG1hcHBlZFgpOworICAgIEFTU0VSVF9ET1VCTEVfRVEoMTAwLjAsIG1hcHBl
ZFkpOworCisgICAgdGVzdC5zZXRBKDAuNSk7CisKKyAgICBtYXBwZWRYID0gMDsKKyAgICBtYXBw
ZWRZID0gMDsKKyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZKTsKKworICAgIEFT
U0VSVF9ET1VCTEVfRVEoNTAuMCwgbWFwcGVkWCk7CisgICAgQVNTRVJUX0RPVUJMRV9FUSgxMDAu
MCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgbWFwcGVkWCA9IDA7
CisgICAgbWFwcGVkWSA9IDA7CisgICAgdGVzdC5tYXAoeCwgeSwgbWFwcGVkWCwgbWFwcGVkWSk7
CisKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDUwLjBmLCBtYXBwZWRYKTsKKyAgICBBU1NFUlRfRE9V
QkxFX0VRKDI1LjBmLCBtYXBwZWRZKTsKKworICAgIHRlc3Quc2V0TTExKDIuMCk7CisKKyAgICBt
YXBwZWRYID0gMDsKKyAgICBtYXBwZWRZID0gMDsKKyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRY
LCBtYXBwZWRZKTsKKworICAgIEFTU0VSVF9ET1VCTEVfRVEoMjAwLjBmLCBtYXBwZWRYKTsKKyAg
ICBBU1NFUlRfRE9VQkxFX0VRKDI1LjBmLCBtYXBwZWRZKTsKK30KKworVEVTVChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCwgTWFwSW50UG9pbnQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXggdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCgxMDAsIDUwKTsKKworICAg
IGF1dG8gbWFwcGVkUG9pbnQgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9F
USgxMDAsIG1hcHBlZFBvaW50LngoKSk7CisgICAgQVNTRVJUX0VRKDUwLCBtYXBwZWRQb2ludC55
KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFBvaW50MiA9IHRl
c3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQyLngo
KSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQyLnkoKSk7CisKKyAgICB0ZXN0LnNl
dEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQzID0gdGVzdC5tYXBQb2ludChwb2ludCk7
CisKKyAgICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50My54KCkpOworICAgIEFTU0VSVF9FUSgx
MDAsIG1hcHBlZFBvaW50My55KCkpOworCisgICAgdGVzdC5zZXRNMjIoMC41KTsKKworICAgIGF1
dG8gbWFwcGVkUG9pbnQ0ID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRVEo
NTAsIG1hcHBlZFBvaW50NC54KCkpOworICAgIEFTU0VSVF9FUSgyNSwgbWFwcGVkUG9pbnQ0Lnko
KSk7CisKKyAgICB0ZXN0LnNldE0xMSgyLjApOworCisgICAgYXV0byBtYXBwZWRQb2ludDUgPSB0
ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9FUSgyMDAsIG1hcHBlZFBvaW50NS54
KCkpOworICAgIEFTU0VSVF9FUSgyNSwgbWFwcGVkUG9pbnQ1LnkoKSk7Cit9CisKK1RFU1QoVHJh
bnNmb3JtYXRpb25NYXRyaXgsIE1hcEludFJlY3QpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXggdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMTAsIDIwLCAyMDAs
IDMwMCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3QgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAg
ICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3QueCgpKTsKKyAgICBBU1NFUlRfRVEoMjAsIG1hcHBl
ZFJlY3QueSgpKTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0LndpZHRoKCkpOworICAg
IEFTU0VSVF9FUSgzMDAsIG1hcHBlZFJlY3QuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXREKDIu
MCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3QyID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAg
QVNTRVJUX0VRKDEwLCBtYXBwZWRSZWN0Mi54KCkpOworICAgIEFTU0VSVF9FUSg0MCwgbWFwcGVk
UmVjdDIueSgpKTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0Mi53aWR0aCgpKTsKKyAg
ICBBU1NFUlRfRVEoNjAwLCBtYXBwZWRSZWN0Mi5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEEo
MC41KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDMgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAg
ICBBU1NFUlRfRVEoNSwgbWFwcGVkUmVjdDMueCgpKTsKKyAgICBBU1NFUlRfRVEoNDAsIG1hcHBl
ZFJlY3QzLnkoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUmVjdDMud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0VRKDYwMCwgbWFwcGVkUmVjdDMuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXRN
MjIoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDQgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisK
KyAgICBBU1NFUlRfRVEoNSwgbWFwcGVkUmVjdDQueCgpKTsKKyAgICBBU1NFUlRfRVEoMTAsIG1h
cHBlZFJlY3Q0LnkoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUmVjdDQud2lkdGgoKSk7
CisgICAgQVNTRVJUX0VRKDE1MCwgbWFwcGVkUmVjdDQuaGVpZ2h0KCkpOworCisgICAgdGVzdC5z
ZXRNMTEoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDUgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7
CisKKyAgICBBU1NFUlRfRVEoMjAsIG1hcHBlZFJlY3Q1LngoKSk7CisgICAgQVNTRVJUX0VRKDEw
LCBtYXBwZWRSZWN0NS55KCkpOworICAgIEFTU0VSVF9FUSgxMDAsIG1hcHBlZFJlY3Q0LndpZHRo
KCkpOworICAgIEFTU0VSVF9FUSgxNTAsIG1hcHBlZFJlY3Q0LmhlaWdodCgpKTsKK30KKworVEVT
VChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFwRmxvYXRSZWN0KQoreworICAgIFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4IHRlc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAu
ZiwgMjAuMGYsIDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdCA9IHRlc3Qu
bWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFwcGVkUmVjdC54
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdC55KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFJlY3Qud2lkdGgoKSk7CisgICAgQVNTRVJUX0ZM
T0FUX0VRKDMwMC4wZiwgbWFwcGVkUmVjdC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4w
KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBB
U1NFUlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3QyLngoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDQwLjBmLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYs
IG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg2MDAuMGYsIG1hcHBl
ZFJlY3QyLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBw
ZWRSZWN0MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1LjBm
LCBtYXBwZWRSZWN0My54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MC4wZiwgbWFwcGVkUmVj
dDMueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRSZWN0My53aWR0aCgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNjAwLjBmLCBtYXBwZWRSZWN0My5oZWlnaHQoKSk7CisK
KyAgICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRSZWN0NCA9IHRlc3QubWFw
UmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1LjBmLCBtYXBwZWRSZWN0NC54KCkp
OworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFwcGVkUmVjdDQueSgpKTsKKyAgICBBU1NF
UlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRSZWN0NC53aWR0aCgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTUwLjBmLCBtYXBwZWRSZWN0NC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldE0xMSgy
LjApOworCisgICAgYXV0byBtYXBwZWRSZWN0NSA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAg
IEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdDUueCgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTAuMGYsIG1hcHBlZFJlY3Q1LnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4w
ZiwgbWFwcGVkUmVjdDQud2lkdGgoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgbWFw
cGVkUmVjdDQuaGVpZ2h0KCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBNYXBG
bG9hdFF1YWQpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAwLjBmLCAxMDAuMGYs
IDEwMC4wZiwgNTAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkKHJlY3QpOworCisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZM
T0FUX0VRKDEwMC4wZiwgcXVhZC5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4w
ZiwgcXVhZC5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMigp
LnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMygpLngoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgcXVhZC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgcXVhZC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwg
cXVhZC5wNCgpLnkoKSk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0
OworICAgIGF1dG8gbWFwcGVkUXVhZCA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAgIEFTU0VS
VF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQucDEoKS54KCkpOworICAgIEFTU0VSVF9GTE9B
VF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQucDEoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgy
MDAuMGYsIG1hcHBlZFF1YWQucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYs
IG1hcHBlZFF1YWQucDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBl
ZFF1YWQucDMoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIG1hcHBlZFF1YWQu
cDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQucDQoKS54
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIG1hcHBlZFF1YWQucDQoKS55KCkpOwor
CisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFF1YWQyID0gdGVzdC5tYXBR
dWFkKHF1YWQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDIucDEo
KS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQyLnAxKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMi5wMigpLngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDIoKS55KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQyLnAzKCkueCgpKTsKKyAgICBBU1NFUlRf
RkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFkMi5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUXVhZDIucDQoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgz
MDAuMGYsIG1hcHBlZFF1YWQyLnA0KCkueSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisg
ICAgYXV0byBtYXBwZWRRdWFkMyA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAgIEFTU0VSVF9G
TE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDMucDEoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9F
USgyMDAuMGYsIG1hcHBlZFF1YWQzLnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAw
LjBmLCBtYXBwZWRRdWFkMy5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwg
bWFwcGVkUXVhZDMucDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBl
ZFF1YWQzLnAzKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFk
My5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkMy5wNCgp
LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUXVhZDMucDQoKS55KCkp
OworCisgICAgdGVzdC5zZXRNMjIoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUXVhZDQgPSB0ZXN0
Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQ0
LnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQ0LnAxKCku
eSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkNC5wMigpLngoKSk7
CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkNC5wMigpLnkoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDQucDMoKS54KCkpOworICAgIEFTU0VS
VF9GTE9BVF9FUSg3NS4wZiwgbWFwcGVkUXVhZDQucDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9B
VF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDQoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg3
NS4wZiwgbWFwcGVkUXVhZDQucDQoKS55KCkpOworCisgICAgdGVzdC5zZXRNMTEoMi4wKTsKKwor
ICAgIGF1dG8gbWFwcGVkUXVhZDUgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRf
RkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQ0LnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRf
RVEoNTAuMGYsIG1hcHBlZFF1YWQ0LnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAw
LjBmLCBtYXBwZWRRdWFkNC5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBt
YXBwZWRRdWFkNC5wMigpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVk
UXVhZDQucDMoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg3NS4wZiwgbWFwcGVkUXVhZDQu
cDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDQoKS54
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg3NS4wZiwgbWFwcGVkUXVhZDQucDQoKS55KCkpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0RG91YmxlZChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgdHJhbnNm
b3JtLmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCB0cmFuc2Zvcm0uYigpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLmMoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSg2LjAsIHRyYW5zZm9ybS5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0cmFu
c2Zvcm0uZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLmYoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RIYWx2ZWQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3Jt
LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRyYW5zZm9ybS5iKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMi4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuNSwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9y
bS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdERvdWJsZWQyKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzMi4wLCB0cmFuc2Zvcm0u
bTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzAuMCwgdHJhbnNmb3JtLm0xMigpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDI4LjAsIHRyYW5zZm9ybS5tMTMoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyNi4wLCB0cmFuc2Zvcm0ubTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjQu
MCwgdHJhbnNmb3JtLm0yMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIyLjAsIHRyYW5zZm9y
bS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMC4wLCB0cmFuc2Zvcm0ubTIzKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMTguMCwgdHJhbnNmb3JtLm0yNCgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDE2LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
NC4wLCB0cmFuc2Zvcm0ubTMyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgdHJhbnNm
b3JtLm0zMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9ybS5tMzQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSg2LjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0
LjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9y
bS5tNDQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RIYWx2ZWQyKGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4
LjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjUsIHRyYW5zZm9y
bS5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjAsIHRyYW5zZm9ybS5tMTMoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSg2LjUsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg2LjAsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjUs
IHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5t
MjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjUsIHRyYW5zZm9ybS5tMjQoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgzLjUsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRy
YW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRyYW5zZm9ybS5tMzQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxLjUsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjUsIHRyYW5z
Zm9ybS5tNDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE11bHRpcGx5KQor
eworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwg
My4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Qu
bXVsdGlwbHkoaWRlbnRpdHkpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVz
dCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkb3VibGVyKDIuMCwgMC4w
LCAwLjAsIDIuMCwgMC4wLCAwLjApOworCisgICAgdGVzdC5tdWx0aXBseShkb3VibGVyKTsKKwor
ICAgIHRlc3REb3VibGVkKHRlc3QpOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggaGFsdmVyKDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjApOworCisgICAgdGVzdC5tdWx0
aXBseShoYWx2ZXIpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisK
KyAgICB0ZXN0Lm11bHRpcGx5KGhhbHZlcik7CisKKyAgICB0ZXN0SGFsdmVkKHRlc3QpOworCisg
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDIoMTYuMCwgMTUuMCwgMTQuMCwg
MTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAgICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAs
IDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdDIp
OworCisgICAgdGVzdDIubXVsdGlwbHkoaWRlbnRpdHkpOworCisgICAgdGVzdFZhbHVlQ29uc3Ry
dWN0aW9uKHRlc3QyKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvdWJs
ZXIyKDIuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAyLjAsIDAuMCwgMC4wLAorICAgICAgICAwLjAs
IDAuMCwgMi4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDIuMCk7CisKKyAgICB0ZXN0Mi5tdWx0aXBs
eShkb3VibGVyMik7CisKKyAgICB0ZXN0RG91YmxlZDIodGVzdDIpOworCisgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggaGFsdmVyMigwLjUsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC41
LCAwLjAsIDAuMCwKKyAgICAgICAgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAw
LjUpOworCisgICAgdGVzdDIubXVsdGlwbHkoaGFsdmVyMik7CisKKyAgICB0ZXN0VmFsdWVDb25z
dHJ1Y3Rpb24odGVzdDIpOworCisgICAgdGVzdDIubXVsdGlwbHkoaGFsdmVyMik7CisKKyAgICB0
ZXN0SGFsdmVkMih0ZXN0Mik7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
ZXN0Myg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3QzICo9IGlkZW50
aXR5OworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdDMpOworCisgICAgdGVz
dDMgKj0gZG91YmxlcjsKKworICAgIHRlc3REb3VibGVkKHRlc3QzKTsKKworICAgIGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3Q0KDE2LjAsIDE1LjAsIDE0LjAsIDEzLjAs
IDEyLjAsIDExLjAsIDEwLjAsCisgICAgICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOworCisgICAgYXV0byByZXN1bHQxID0gdGVzdDQgKiBpZGVudGl0eTsK
KworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbihyZXN1bHQxKTsKKworICAgIGF1dG8gcmVzdWx0
MiA9IHRlc3Q0ICogZG91YmxlcjI7CisKKyAgICB0ZXN0RG91YmxlZDIocmVzdWx0Mik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RTY2FsZWRCeVR3byhjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzIuMCwgdHJhbnNm
b3JtLm0xMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMwLjAsIHRyYW5zZm9ybS5tMTIoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyOC4wLCB0cmFuc2Zvcm0ubTEzKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMjYuMCwgdHJhbnNmb3JtLm0xNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDI0LjAsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMi4wLCB0cmFu
c2Zvcm0ubTIyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjAuMCwgdHJhbnNmb3JtLm0yMygp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE4LjAsIHRyYW5zZm9ybS5tMjQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg3LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRyYW5z
Zm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5tMzQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgy
LjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9y
bS5tNDQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RTY2FsZWRCeUhhbGYoY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDguMCwgdHJhbnNmb3JtLm0xMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNSwgdHJh
bnNmb3JtLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuMCwgdHJhbnNmb3JtLm0xMygp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuNSwgdHJhbnNmb3JtLm0xNCgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm0yMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDUuNSwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNm
b3JtLm0yMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNSwgdHJhbnNmb3JtLm0yNCgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLm0zMSgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDcuMCwgdHJhbnNmb3JtLm0zMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYu
MCwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNmb3Jt
Lm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdHJhbnNmb3JtLm00MSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLm00MigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwg
dHJhbnNmb3JtLm00NCgpKTsKK30KKworCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBTY2Fs
ZSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0
LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVz
dCk7CisKKyAgICB0ZXN0LnNjYWxlKDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVj
dGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMi4wKTsKKworICAgIHRlc3REb3VibGVkKHRl
c3QpOworCisgICAgdGVzdC5zY2FsZSgwLjUpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0SGFsdmVkKHRl
c3QpOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDIoMTYuMCwgMTUu
MCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAgICAgICAgOS4wLCA4LjAsIDcuMCwg
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdDIpOworCisgICAgdGVzdDIuc2NhbGUoMi4wKTsKKworICAgIHRlc3RTY2FsZWRCeVR3
byh0ZXN0Mik7CisKKyAgICB0ZXN0Mi5zY2FsZSgwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3Ry
dWN0aW9uKHRlc3QyKTsKKworICAgIHRlc3QyLnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0U2NhbGVk
QnlIYWxmKHRlc3QyKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgU2NhbGVVbmlm
b3JtTm9uVW5pZm9ybSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0
KDE2LjAsIDE1LjAsIDE0LjAsIDEzLjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAgICAgIDkuMCwg
OC4wLCA3LjAsIDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVl
Q29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMS4wLCAxLjAp
OworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZU5v
blVuaWZvcm0oMi4wLCAyLjApOworCisgICAgdGVzdFNjYWxlZEJ5VHdvKHRlc3QpOworCisgICAg
dGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAg
dGVzdFNjYWxlZEJ5SGFsZih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwg
Um90YXRlKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1
LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0LnJvdGF0ZSgzNjAuMCk7CisKKyAg
ICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Qucm90YXRlKDE4
MC4wKTsKKworICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVYUEVD
VF9ORUFSKC02LjAsIHRlc3QuYSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS4wLCB0
ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTQuMCwgdGVzdC5jKCksIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKC0zLjAsIHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0
ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0ZSgtMTgwLjApOworCisgICAgdGVzdEFmZmluZUxp
a2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnJvdGF0ZSg5MC4wKTsKKworICAgIEVY
UEVDVF9ORUFSKDQuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDMuMCwg
dGVzdC5iKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC02LjAsIHRlc3QuYygpLCBlcHNp
bG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS4wLCB0ZXN0LmQoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwg
dGVzdC5mKCkpOworCisgICAgdGVzdC5yb3RhdGUoLTkwLjApOworCisgICAgdGVzdEFmZmluZUxp
a2VDb25zdHJ1Y3Rpb24odGVzdCk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIFJv
dGF0ZUZyb21WZWN0b3IpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVz
dCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3Qucm90YXRlRnJvbVZl
Y3RvcigwLjAsIDAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsK
KworICAgIHRlc3Qucm90YXRlRnJvbVZlY3RvcigtMTAuMCwgLTEwLjApOworCisgICAgc3RhdGlj
IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX05FQVIoLTcuMDcxMCwgdGVz
dC5hKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC01LjY1NjgsIHRlc3QuYigpLCBlcHNp
bG9uKTsKKyAgICBFWFBFQ1RfTkVBUigxLjQxNDIsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfTkVBUigxLjQxNDIsIHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7
CisKKyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoMTAuMCwgMTAuMCk7CisKKyAgICBFWFBFQ1Rf
TkVBUigtNC4wLCB0ZXN0LmEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTMuMCwgdGVz
dC5iKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDYuMCwgdGVzdC5jKCksIGVwc2lsb24p
OworICAgIEVYUEVDVF9ORUFSKDUuMCwgdGVzdC5kKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3Qu
ZigpKTsKKworICAgIHRlc3Qucm90YXRlRnJvbVZlY3RvcigtMTAuMCwgMTAuMCk7CisKKyAgICBF
WFBFQ1RfTkVBUig3LjA3MTAsIHRlc3QuYSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUig1
LjY1NjgsIHRlc3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtMS40MTQyLCB0ZXN0
LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTEuNDE0MiwgdGVzdC5kKCksIGVwc2ls
b24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlRnJvbVZlY3RvcigxMC4w
LCAtMTAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKwor
VEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgVHJhbnNsYXRlWFkpCit7CisgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsK
KworICAgIHRlc3QudHJhbnNsYXRlKDAuMCwgMC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29u
c3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC50cmFuc2xhdGUoNS4wLCAwLjApOworCisgICAg
RVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUu
MCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMy
LjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDI2LjAsIHRlc3QuZigpKTsKKwor
ICAgIHRlc3QudHJhbnNsYXRlKDAuMCwgLTEuMik7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYu
MCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMu
MCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjcuMiwgdGVzdC5lKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMjIuNCwgdGVzdC5mKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0
aW9uTWF0cml4LCBGbGlwWCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VD
b25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LmZsaXBYKCk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKC02LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3Qu
ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5m
bGlwWCgpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MjsKKworICAgIHRlc3RJZGVudGl0eSh0
ZXN0Mik7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VS
VF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxp
cFgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTEuMCwgdGVzdDIuYSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
dGVzdDIuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdDIuZCgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgdGVzdDIuZigpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOwor
ICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKworICAg
IHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworfQorCitU
RVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBGbGlwWSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAg
dGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0LmMoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkp
OworCisgICAgdGVzdC5mbGlwWSgpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24o
dGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MjsKKworICAg
IHRlc3RJZGVudGl0eSh0ZXN0Mik7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5
KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOwor
CisgICAgdGVzdDIuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0Mi5h
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5iKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0ZXN0Mi5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTEuMCwgdGVz
dDIuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZigpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5p
c0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xh
dGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBZKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5p
c0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0
aW9uKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBGbGlwWGFuZEZsaXBZKQog
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb207Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdG8oMi43MTMzNTkwOTM4LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDIuNDY0NTEzNzc2MSwgMC4w
LCAwLjAsIDAuMCwgMC4wLCAwLjAwLCAwLjAxLCAwLjAyLCAwLjAzLCAwLjA0LCAwLjA1KTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSB0bzsKLSAgICBy
ZXN1bHQuYmxlbmQoZnJvbSwgMC4yNSk7Ci0gICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IGZyb20p
OwotCi0gICAgcmVzdWx0ID0gdG87Ci0gICAgcmVzdWx0LmJsZW5kKGZyb20sIDAuNzUpOwotICAg
IEVYUEVDVF9UUlVFKHJlc3VsdCA9PSB0byk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RBZmZp
bmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgtNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNS4w
LCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4w
LCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAg
IHRlc3QuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTYuMCwgdGVzdC5hKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoLTQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTMuMCwgdGVzdC5kKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxpcFgoKTsKKworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKC0zLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVz
dC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0
LmZsaXBZKCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QyOworCisgICAgQVNTRVJUX1RSVUUo
dGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JU
cmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfRkFMU0Uo
dGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0eU9y
VHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOworCisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAgIEFTU0VSVF9GQUxT
RSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBZKCk7CisKKyAgICBBU1NFUlRfVFJV
RSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBTa2V3KQor
eworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwg
My4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsK
KworICAgIHRlc3Quc2tldygzNjAuMCwgMzYwLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25z
dHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMC4wLCAwLjApOworCisgICAgdGVzdEFm
ZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMTgwLjAsIDE4MC4w
KTsKKworICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfTkVBUig0LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0
ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRl
c3Quc2tldygtMTgwLjAsIC0xODAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlv
bih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgU2tld1gpCit7CisgICAg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIu
MCwgMS4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAg
dGVzdC5za2V3WCgzNjAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0
KTsKKworICAgIHRlc3Quc2tld1goMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9u
ID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3QuYSgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVz
dC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBTa2V3WSkK
K3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7
CisKKyAgICB0ZXN0LnNrZXdZKDM2MC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3WSgxODAuMCk7CisKKyAgICBzdGF0aWMgZG91Ymxl
IGVwc2lsb24gPSAwLjAwMDE7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX05FQVIo
NC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3Qu
ZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgs
IEludmVyc2UpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJbnZlcnRpYmxlKCkpOworCisgICAgYXV0byBpbnZlcnNl
ID0gdGVzdC5pbnZlcnNlKCk7CisKKyAgICBBU1NFUlQoaW52ZXJzZSk7CisKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
aW52ZXJzZS0+YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJzZS0+YygpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+ZCgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgaW52ZXJzZS0+ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52
ZXJzZS0+ZigpKTsKKworICAgIGF1dG8gdGVzdDIgPSB0ZXN0ICogaW52ZXJzZS52YWx1ZSgpOwor
CisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJp
eCwgQmxlbmQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVkOworICAgIHNjYWxl
ZC5zY2FsZSgyLjApOworCisgICAgdHJhbnNmb3JtLmJsZW5kKHNjYWxlZCwgNTApOworCisgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworICAgIEVYUEVDVF9ORUFSKC00
OC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJh
bnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5t
MTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTE0KCksIGVw
c2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMSgpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUigtNDguMCwgdHJhbnNmb3JtLm0yMigpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05F
QVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwg
dHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9y
bS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMS4wLCB0cmFuc2Zvcm0ubTMzKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zNCgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDEoKSwgZXBzaWxvbik7CisgICAg
RVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9O
RUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigxLjAs
IHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRy
aXgsIEJsZW5kMikKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZWQ7CisgICAgc2Nh
bGVkLnNjYWxlKDIuMCk7CisKKyAgICB0cmFuc2Zvcm0uYmxlbmQyKHNjYWxlZCwgMjApOworCisg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworICAgIEVYUEVDVF9ORUFS
KC0xOC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwg
dHJhbnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9y
bS5tMTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTE0KCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMSgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfTkVBUigtMTguMCwgdHJhbnNmb3JtLm0yMigpLCBlcHNpbG9uKTsKKyAg
ICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAu
MCwgdHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5z
Zm9ybS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMS4wLCB0cmFuc2Zvcm0ubTMz
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zNCgpLCBlcHNp
bG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDEoKSwgZXBzaWxvbik7Cisg
ICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCksIGVwc2lsb24pOworICAgIEVYUEVD
VF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigx
LjAsIHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25N
YXRyaXgsIEJsZW5kNCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZWQ7CisgICAg
c2NhbGVkLnNjYWxlKDIuMCk7CisKKyAgICB0cmFuc2Zvcm0uYmxlbmQ0KHNjYWxlZCwgMzApOwor
CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworICAgIEVYUEVDVF9O
RUFSKC0yOC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAu
MCwgdHJhbnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5z
Zm9ybS5tMTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTE0
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMSgpLCBlcHNp
bG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtMjguMCwgdHJhbnNmb3JtLm0yMigpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFS
KDAuMCwgdHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRy
YW5zZm9ybS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMS4wLCB0cmFuc2Zvcm0u
bTMzKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zNCgpLCBl
cHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDEoKSwgZXBzaWxvbik7
CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCksIGVwc2lsb24pOworICAgIEVY
UEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVB
UigxLjAsIHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRp
b25NYXRyaXgsIEVxdWFsaXR5KQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdGVzdDI7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdCA9PSB0ZXN0Mik7
CisgICAgQVNTRVJUX1RSVUUodGVzdCAhPSB0ZXN0Mik7CisKKyAgICB0ZXN0Lm1ha2VJZGVudGl0
eSgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdCA9PSB0ZXN0Mik7CisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QgIT0gdGVzdDIpOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVz
dDMoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAgICAgICAgOS4w
LCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDQodGVzdDMpOworCisgICAgQVNTRVJUX1RSVUUodGVz
dDMgPT0gdGVzdDQpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0MyAhPSB0ZXN0NCk7CisKKyAgICB0
ZXN0NC5zZXRNNDMoMTAwMi4yMik7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdDMgPT0gdGVzdDQp
OworICAgIEFTU0VSVF9UUlVFKHRlc3QzICE9IHRlc3Q0KTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFRyYW5zbGF0aW9uTWF0cml4KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tMTEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgwLjAsIG1hdHJpeC5tMTMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5t
MTQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMjEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgw
LjAsIG1hdHJpeC5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMjQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMzEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAs
IG1hdHJpeC5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMzQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCBtYXRyaXgubTQxKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMTUuMCwgbWF0cml4Lm00MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMwLjAs
IG1hdHJpeC5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tNDQoKSk7
Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENhc3RpbmcpCit7CisgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCgxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4w
LCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAs
IDIuMCwgMS4wKTsKKworI2lmIFVTRShDQSkKKyAgICBDQVRyYW5zZm9ybTNEIGNhVHJhbnNmb3Jt
ID0gQ0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbigxMC4wZiwgMTUuMGYsIDMwLjBmKTsKKwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21DQVRyYW5zZm9ybShjYVRyYW5z
Zm9ybSk7CisKKyAgICB0ZXN0VHJhbnNsYXRpb25NYXRyaXgoZnJvbUNBVHJhbnNmb3JtKTsKKwor
ICAgIENBVHJhbnNmb3JtM0QgY2FGcm9tV0sgPSB0ZXN0OworCisgICAgRVhQRUNUX0RPVUJMRV9F
USgxNi4wLCBjYUZyb21XSy5tMTEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUuMCwgY2FGcm9t
V0subTEyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE0LjAsIGNhRnJvbVdLLm0xMyk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMy4wLCBjYUZyb21XSy5tMTQpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMTIuMCwgY2FGcm9tV0subTIxKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIGNhRnJv
bVdLLm0yMik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCBjYUZyb21XSy5tMjMpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoOS4wLCBjYUZyb21XSy5tMjQpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoOC4wLCBjYUZyb21XSy5tMzEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNy4wLCBjYUZyb21X
Sy5tMzIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCBjYUZyb21XSy5tMzMpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoNS4wLCBjYUZyb21XSy5tMzQpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
NC4wLCBjYUZyb21XSy5tNDEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCBjYUZyb21XSy5t
NDIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCBjYUZyb21XSy5tNDMpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMS4wLCBjYUZyb21XSy5tNDQpOworI2VuZGlmCisKKyNpZiBVU0UoQ0cpCisg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY2dUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2Uo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggZnJvbUNHVHJhbnNmb3JtKGNnVHJhbnNmb3JtKTsKKworICAgIHRlc3RBZmZpbmVM
aWtlQ29uc3RydWN0aW9uKGZyb21DR1RyYW5zZm9ybSk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9y
bSBjZ0Zyb21XSyA9IHRlc3Q7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNi4wLCBjZ0Zyb21XSy5h
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGNnRnJvbVdLLmIpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMTIuMCwgY2dGcm9tV0suYyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4wLCBj
Z0Zyb21XSy5kKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgY2dGcm9tV0sudHgpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMy4wLCBjZ0Zyb21XSy50eSk7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikgfHwgKFBMQVRGT1JNKEdUSykgJiYgT1MoV0lORE9XUykpCisgICAgWEZPUk0gZ2Rp
RnJvbVdLID0gdGVzdDsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIGdkaUZyb21XSy5lTTEx
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGdkaUZyb21XSy5lTTEyKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEyLjAsIGdkaUZyb21XSy5lTTIxKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDExLjAsIGdkaUZyb21XSy5lTTIyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgZ2RpRnJv
bVdLLmVEeCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGdkaUZyb21XSy5lRHkpOworI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNm
b3JtID0gRDJEMTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tRDJEVHJhbnNmb3JtKGQyZFRyYW5z
Zm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbihmcm9tRDJEVHJhbnNmb3Jt
KTsKKworICAgIEQyRDFfTUFUUklYXzNYMl9GIGQyZEZyb21XSyA9IHRlc3Q7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxNi4wLCBkMmRGcm9tV0suXzExKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1
LjAsIGQyZEZyb21XSy5fMTIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgZDJkRnJvbVdL
Ll8yMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4wLCBkMmRGcm9tV0suXzIyKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDQuMCwgZDJkRnJvbVdLLl8zMSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgzLjAsIGQyZEZyb21XSy5fMzIpOworI2VuZGlmCit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25N
YXRyaXgsIE1ha2VNYXBCZXR3ZWVuUmVjdHMpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZyb21SZWN0KDEw
LjBmLCAxMC4wZiwgMTAwLjBmLCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0b1Jl
Y3QoNzAuMGYsIDcwLjBmLCAyMDAuMGYsIDUwLjBmKTsKKworICAgIGF1dG8gbWFwQmV0d2VlbiA9
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KGZyb21SZWN0LCB0b1Jl
Y3QpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIG1hcEJldHdlZW4uYSgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCBtYXBCZXR3ZWVuLmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjUsIG1hcEJl
dHdlZW4uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYwLjAsIG1hcEJldHdlZW4uZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYwLjAsIG1hcEJldHdlZW4uZigpKTsKKworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMi4wLCBtYXBCZXR3ZWVuLm0xMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDAuMCwgbWFwQmV0d2Vlbi5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJl
dHdlZW4ubTEzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm0xNCgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5tMjEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgwLjUsIG1hcEJldHdlZW4ubTIyKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCBtYXBCZXR3ZWVuLm0yMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFw
QmV0d2Vlbi5tMjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4ubTMx
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm0zMigpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWFwQmV0d2Vlbi5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgwLjAsIG1hcEJldHdlZW4ubTM0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNjAuMCwg
bWFwQmV0d2Vlbi5tNDEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2MC4wLCBtYXBCZXR3ZWVu
Lm00MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5tNDMoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hcEJldHdlZW4ubTQ0KCkpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288643</attachid>
            <date>2016-09-12 17:05:15 -0700</date>
            <delta_ts>2016-09-13 11:24:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161818-20160912170242.patch</filename>
            <type>text/plain</type>
            <size>186564</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE2LTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBQ
cm92aWRlIERpcmVjdDJELWJhc2VkIGdlb21ldHJ5IGFuZCB0cmFuc2Zvcm0gY2FzdCBvcGVyYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAgICAgQWRkIG5ldyBjYXN0aW5n
IG9wZXJhdG9ycyB0byBhbmQgZnJvbSB2YXJpb3VzIERpcmVjdDJEIGRhdGEgdHlwZXMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6
RmxvYXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ludFBvaW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpJbnRQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yRik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yVSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0Ojpv
cGVyYXRvciBEMkQxX1JFQ1RfRik6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRv
ciBEMkQxX1JFQ1RfVSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6SW50U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfVSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfRik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgRDJEMV9N
QVRSSVhfM1gyX0YpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBE
MkQxX01BVFJJWF8zWDJfRik6CisKIDIwMTYtMDktMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUuY2xp
Y2sgc2hvdWxkIGJlIEhUTUxFbGVtZW50LnByb3RvdHlwZS5jbGljawpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW4uY21ha2UJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VXRpbGl0aWVzLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAK
QEAgLTk5LDYgKzEwMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKICNlbmRp
ZgogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRl
IDxkMmQxLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVU
cmFuc2Zvcm07CkBAIC01Nyw3ICs2MSw3IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIGNsYXNzIEZs
b2F0UG9pbnQgewogcHVibGljOgotICAgIEZsb2F0UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsg
fQorICAgIEZsb2F0UG9pbnQoKSB7IH0KICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkp
IDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludChjb25z
dCBJbnRQb2ludCYpOwogICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBz
aXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CkBAIC0xNDgs
MTEgKzE1MiwxNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2lu
dCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRQb2ludChjb25zdCBEMkRfUE9JTlRfMkYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBv
cGVyYXRvciBEMkRfUE9JTlRfMkYoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRmxvYXRQb2ludCBt
YXRyaXhUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICBG
bG9hdFBvaW50IG1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX3gsIG1feTsKKyAgICBmbG9hdCBtX3ggeyAwIH07Cisg
ICAgZmxvYXQgbV95IHsgMCB9OwogfTsKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZWN0YW5nbGVfdDsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEludFJlY3Q7CkBAIC0xODIsNiArMTg2LDExIEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgc3RhdGljIEZsb2F0UmVjdCBpbmZpbml0ZVJlY3QoKTsKICAgICBib29sIGlzSW5m
aW5pdGUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMCBA
QCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKICNlbmRpZgogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRTaXplOwpAQCAtNTQsNyArNTgsNyBA
QCBjbGFzcyBUZXh0U3RyZWFtOwogCiBjbGFzcyBGbG9hdFNpemUgewogcHVibGljOgotICAgIEZs
b2F0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgRmxvYXRTaXplKCkg
eyB9CiAgICAgRmxvYXRTaXplKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIDogbV93aWR0aCh3
aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXpl
KGNvbnN0IEludFNpemUmKTsKIApAQCAtMTIwLDEzICsxMjQsMTggQEAgcHVibGljOgogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTKQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZsb2F0U2l6
ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdz
IGxvc3N5CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6
ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9w
ZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAg
V0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IEQyRDFfU0laRV9GJik7IC8v
IGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3Ig
RDJEMV9TSVpFX0YoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgotICAgIGZsb2F0IG1fd2lk
dGg7Ci0gICAgZmxvYXQgbV9oZWlnaHQ7CisgICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKKyAgICBm
bG9hdCBtX2hlaWdodCB7IDAgfTsKIH07CiAKIGlubGluZSBGbG9hdFNpemUmIG9wZXJhdG9yKz0o
RmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMyw2ICszMywxMCBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5
Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5k
aWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRp
ZgpAQCAtMTM1LDYgKzEzOSwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgUE9JTlQoKSBjb25z
dDsKICAgICBJbnRQb2ludChjb25zdCBQT0lOVFMmKTsKICAgICBvcGVyYXRvciBQT0lOVFMoKSBj
b25zdDsKKworICAgIEludFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMlUmKTsKKyAgICBleHBsaWNp
dCBJbnRQb2ludChjb25zdCBEMkQxX1BPSU5UXzJGJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgRDJEMV9QT0lOVF8yRigpIGNvbnN0
OworICAgIG9wZXJhdG9yIEQyRDFfUE9JTlRfMlUoKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKEVG
TCkKICAgICBleHBsaWNpdCBJbnRQb2ludChjb25zdCBFdmFzX1BvaW50Jik7CiAgICAgb3BlcmF0
b3IgRXZhc19Qb2ludCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBA
QAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogCisjaWYg
UExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiAjaWYgVVNFKENHKQog
dHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgpAQCAtMTcwLDYgKzE3NCwxMCBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFJlY3QoY29uc3QgUkVDVCYpOwog
ICAgIG9wZXJhdG9yIFJFQ1QoKSBjb25zdDsKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEQy
RDFfUkVDVF9GJik7CisgICAgSW50UmVjdChjb25zdCBEMkQxX1JFQ1RfVSYpOworICAgIG9wZXJh
dG9yIEQyRDFfUkVDVF9GKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgRDJEMV9SRUNUX1UoKSBjb25z
dDsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEVpbmFf
UmVjdGFuZ2xlJik7CiAgICAgb3BlcmF0b3IgRWluYV9SZWN0YW5nbGUoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgJKHJldmlzaW9uIDIw
NTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9t
ZXRyeS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgor
I2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dTaXplOwogI2Vu
ZGlmCkBAIC0xNTMsNiArMTU3LDEwIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShXSU4pCiAgICAg
SW50U2l6ZShjb25zdCBTSVpFJik7CiAgICAgb3BlcmF0b3IgU0laRSgpIGNvbnN0OworICAgIElu
dFNpemUoY29uc3QgRDJEMV9TSVpFX1UmKTsKKyAgICBleHBsaWNpdCBJbnRTaXplKGNvbnN0IEQy
RDFfU0laRV9GJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
OworICAgIG9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgRDJEMV9T
SVpFX0YoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5oCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgMjAxMCBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDYgKzM4LDExIEBA
IHR5cGVkZWYgc3RydWN0IENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW4KICNpbmNsdWRlIDxjYWly
by5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIHN0cnVjdCBEMkRfTUFU
UklYXzNYMl9GIEQyRF9NQVRSSVhfM1gyX0Y7Cit0eXBlZGVmIEQyRF9NQVRSSVhfM1gyX0YgRDJE
MV9NQVRSSVhfM1gyX0Y7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFBvaW50OwpAQCAtNjAsNiArNjUsMTAgQEAgcHVibGljOgogICAgIEFmZmluZVRyYW5zZm9y
bShjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4p
CisgICAgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJik7CisjZW5kaWYK
KwogICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJs
ZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOwogCiAgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJs
ZSB5LCBkb3VibGUmIHgyLCBkb3VibGUmIHkyKSBjb25zdDsKQEAgLTE3Miw2ICsxODEsMTAgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIGNhaXJvX21hdHJpeF90KCkgY29uc3Q7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0
OworI2VuZGlmCisKICAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uKGRvdWJs
ZSB4LCBkb3VibGUgeSkKICAgICB7CiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgMSwgeCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
CShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDExIEBAIHR5cGVkZWYgc3RydWN0IHRhZ1hGT1JNIFhGT1JNOwogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IEQyRF9NQVRSSVhfM1gyX0YgRDJE
X01BVFJJWF8zWDJfRjsKK3R5cGVkZWYgRDJEX01BVFJJWF8zWDJfRiBEMkQxX01BVFJJWF8zWDJf
RjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKQEAgLTM2MCw2ICszNjUsMTEgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIFhGT1JNKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYpOworICAgIG9wZXJhdG9yIEQyRDFfTUFUUklYXzNY
Ml9GKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIGJvb2wgaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWF0cml4WzBdWzBdID09IDEgJiYgbV9t
YXRyaXhbMF1bMV0gPT0gMCAmJiBtX21hdHJpeFswXVsyXSA9PSAwICYmIG1fbWF0cml4WzBdWzNd
ID09IDAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2lu
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ludFBvaW50V2luLmNwcAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAKKyNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVk
ZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw0ICs1NiwyNiBAQCBJ
bnRQb2ludDo6b3BlcmF0b3IgUE9JTlRTKCkgY29uc3QKICAgICByZXR1cm4gcDsKIH0KIAorSW50
UG9pbnQ6OkludFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMkYmIHApCisgICAgOiBtX3goY2xhbXBU
b0ludGVnZXIocC54KSkKKyAgICAsIG1feShjbGFtcFRvSW50ZWdlcihwLnkpKQoreworfQorCitJ
bnRQb2ludDo6SW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yVSYgcCkKKyAgICA6IG1feChwLngp
CisgICAgLCBtX3kocC55KQoreworfQorCitJbnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8y
RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQyRDE6OlBvaW50MkYobV94LCBtX3kpOworfQorCitJ
bnRQb2ludDo6b3BlcmF0b3IgRDJEMV9QT0lOVF8yVSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQy
RDE6OlBvaW50MlUobV94LCBtX3kpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCShyZXZpc2lvbiAyMDU4
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNs
dWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEludFJlY3Q6OkludFJlY3QoY29uc3QgUkVDVCYgcikKLSAgICA6IG1fbG9jYXRpb24oSW50
UG9pbnQoci5sZWZ0LCByLnRvcCkpLCBtX3NpemUoSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5i
b3R0b20tci50b3ApKQorICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChyLmxlZnQsIHIudG9wKSks
IG1fc2l6ZShJbnRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9tIC0gci50b3ApKQogewog
fQogCkBAIC00Miw0ICs0NCwyNiBAQCBJbnRSZWN0OjpvcGVyYXRvciBSRUNUKCkgY29uc3QKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAorSW50UmVjdDo6SW50UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYg
cikKKyAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoY2xhbXBUb0ludGVnZXIoci5sZWZ0KSwgY2xh
bXBUb0ludGVnZXIoci50b3ApKSkKKyAgICAsIG1fc2l6ZShJbnRTaXplKGNsYW1wVG9JbnRlZ2Vy
KHIucmlnaHQgLSByLmxlZnQpLCBjbGFtcFRvSW50ZWdlcihyLmJvdHRvbSAtIHIudG9wKSkpCit7
Cit9CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgRDJEMV9SRUNUX1UmIHIpCisgICAgOiBtX2xv
Y2F0aW9uKEludFBvaW50KHIubGVmdCwgci50b3ApKQorICAgICwgbV9zaXplKEludFNpemUoci5y
aWdodCAtIHIubGVmdCwgci5ib3R0b20gLSByLnRvcCkpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJh
dG9yIEQyRDFfUkVDVF9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6UmVjdEYoeCgpLCB5
KCksIG1heFgoKSwgbWF4WSgpKTsKK30KKworSW50UmVjdDo6b3BlcmF0b3IgRDJEMV9SRUNUX1Uo
KSBjb25zdAoreworICAgIHJldHVybiBEMkQxOjpSZWN0VSh4KCksIHkoKSwgbWF4WCgpLCBtYXhZ
KCkpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsNCArNDQsMjYgQEAg
SW50U2l6ZTo6b3BlcmF0b3IgU0laRSgpIGNvbnN0CiAgICAgcmV0dXJuIHM7CiB9CiAKK0ludFNp
emU6OkludFNpemUoY29uc3QgRDJEMV9TSVpFX1UmIHMpCisgICAgOiBtX3dpZHRoKHMud2lkdGgp
CisgICAgLCBtX2hlaWdodChzLmhlaWdodCkKK3sKK30KKworSW50U2l6ZTo6SW50U2l6ZShjb25z
dCBEMkQxX1NJWkVfRiYgcykKKyAgICA6IG1fd2lkdGgoY2xhbXBUb0ludGVnZXIocy53aWR0aCkp
CisgICAgLCBtX2hlaWdodChjbGFtcFRvSW50ZWdlcihzLmhlaWdodCkpCit7Cit9CisKK0ludFNp
emU6Om9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6U2l6
ZVUobV93aWR0aCwgbV9oZWlnaHQpOworfQorCitJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVf
RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQyRDE6OlNpemVGKG1fd2lkdGgsIG1faGVpZ2h0KTsK
K30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5z
Zm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KworI2lmIFBMQVRGT1JNKFdJTikKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorCisjaW5jbHVkZSA8ZDJkMS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgdCkKK3sKKyAgICBzZXRBKHQuXzExKTsKKyAgICBz
ZXRCKHQuXzEyKTsKKyAgICBzZXRDKHQuXzIxKTsKKyAgICBzZXREKHQuXzIyKTsKKyAgICBzZXRF
KHQuXzMxKTsKKyAgICBzZXRGKHQuXzMyKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9w
ZXJhdG9yIEQyRDFfTUFUUklYXzNYMl9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6TWF0
cml4M3gyRihuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGEoKSksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoYigpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjKCkpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGQoKSksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoZSgpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChmKCkpKTsK
K30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oY29uc3QgRDJEMV9NQVRSSVhf
M1gyX0YmIHQpCit7CisgICAgc2V0TWF0cml4KHQuXzExLCB0Ll8xMiwgdC5fMjEsIHQuXzIyLCB0
Ll8zMSwgdC5fMzIpOworfQorCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIEQyRDFfTUFUUklY
XzNYMl9GKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6TWF0cml4M3gyRihuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGEoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYigpKSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjKCkpLAorICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGQoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZSgpKSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChmKCkpKTsKK30KKworfQorCisjZW5kaWYg
Ly8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYt
MDktMTIgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dp
bl1bRGlyZWN0MkRdIFByb3ZpZGUgRGlyZWN0MkQtYmFzZWQgZ2VvbWV0cnkgYW5kIHRyYW5zZm9y
bSBjYXN0IG9wZXJhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6IExpbmsgdG8gRGlyZWN0MkQgb24gV2luZG93
cy4KKwogMjAxNi0wOS0wNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtYY29kZV0gV2ViS2l0TGVnYWN5LmZyYW1ld29yayBpcyByZS1zaWduZWQgb24gaW5jcmVt
ZW50YWwgYnVpbGQgZXZlbiBpZiBub3RoaW5n4oCZcyBjaGFuZ2VkCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm1XaW4uY21ha2UJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfTElCUkFSSUVTCiAgICAgUFJJVkFURSBDb21jdGwzMgogICAgIFBSSVZBVEUgQ29tc3Vw
cAogICAgIFBSSVZBVEUgQ3J5cHQzMgorICAgIFBSSVZBVEUgRDJkMQogICAgIFBSSVZBVEUgSXBo
bHBhcGkKICAgICBQUklWQVRFIFBzYXBpCiAgICAgUFJJVkFURSBScGNydDQKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0
MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisy
MDE2LTA5LTEyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFtXaW5dW0RpcmVjdDJEXSBQcm92aWRlIERpcmVjdDJELWJhc2VkIGdlb21ldHJ5IGFuZCB0cmFu
c2Zvcm0gY2FzdCBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjE4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc2V2ZXJhbCBuZXcgdGVzdCBzdWl0ZXMgZm9yIHRoZSB2YXJpb3Vz
IGdlb21ldHJpYyBwcmltaXRpdmVzIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1BsYXRmb3JtV2luLmNtYWtlOiBBZGQgbmV3IGZpbGVzIGZvciB0ZXN0IGNhc2VzLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5l
VHJhbnNmb3JtLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0Zsb2F0UG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvRmxvYXRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0Zsb2F0U2l6ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9JbnRQb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFNpemUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOiBBZGQgc29t
ZSBuZXcKKyAgICAgICAgV2luZG93cy1mb2N1c2VkIHRlc3QgY2FzZXMuCisKIDIwMTYtMDktMTIg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBV
UkxQYXJzZXI6IEZpeCByZWxhdGl2ZSBVUkxzIGNvbnRhaW5pbmcgb25seSBmcmFnbWVudHMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkocmV2aXNpb24gMjA1ODQwKQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQCBhZGRfZGVmaW5pdGlvbnMoLURXRUJDT1JFX0VYUE9SVD0pCiAKIHNl
dCh0ZXN0X3dlYmNvcmVfTElCUkFSSUVTCiAgICAgQ3J5cHQzMgorICAgIEQyZDEKICAgICBJcGhs
cGFwaQogICAgIFBzYXBpCiAgICAgU2hsd2FwaQpAQCAtNDAsMTMgKzQxLDIxIEBAIHNldCh0ZXN0
X3dlYmNvcmVfTElCUkFSSUVTCiBzZXQoVGVzdFdlYkNvcmVMaWJfU09VUkNFUwogICAgICR7dGVz
dF9tYWluX1NPVVJDRVN9CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVy
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNm
b3JtLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQ2FsY3VsYXRp
b25WYWx1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0NTU1Bh
cnNlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVj
dC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Zsb2F0UG9pbnQu
Y3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GbG9hdFNpemUuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9IVE1MUGFyc2VySWRpb21z
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSW50UmVjdC5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0ludFBvaW50LmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSW50U2l6ZS5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9UaW1lUmFuZ2VzLmNwcAorICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9VUkwuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS93aW4vRElCUGl4ZWxEYXRhLmNwcApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksNiArMTQ5LDEzIEBACiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBX
aWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRT
dWJtaXRFdmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBGMUZBREQg
LyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0
by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKIAkJN0ExNDU4RkMxQUQ1QzA3MDAwRTA2Nzcy
IC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMTQ1OEZCMUFENUMwMzUwMEUwNjc3MiAvKiBt
b3VzZS1idXR0b24tbGlzdGVuZXIuaHRtbCAqLzsgfTsKKwkJN0E5MDlBN0QxRDg3NzQ4MDAwN0Ux
MEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZmaW5lVHJhbnNm
b3JtLmNwcCAqLzsgfTsKKwkJN0E5MDlBN0UxRDg3NzQ4MDAwN0UxMEY4IC8qIEZsb2F0UG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5MDlB
NzAxRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UG9pbnQuY3BwICovOyB9OworCQk3QTkwOUE3RjFE
ODc3NDgwMDA3RTEwRjggLyogRmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTA5QTcxMUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFJl
Y3QuY3BwICovOyB9OworCQk3QTkwOUE4MDFEODc3NDgwMDA3RTEwRjggLyogRmxvYXRTaXplLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTA5QTcy
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwICovOyB9OworCQk3QTkwOUE4MTFEODc3
NDgwMDA3RTEwRjggLyogSW50UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E5MDlBNzMxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFBvaW50LmNw
cCAqLzsgfTsKKwkJN0E5MDlBODIxRDg3NzQ4MDAwN0UxMEY4IC8qIEludFJlY3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5MDlBNzQxRDg3NzQ3
NTAwN0UxMEY4IC8qIEludFJlY3QuY3BwICovOyB9OworCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEw
RjggLyogSW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTkwOUE3NTFEODc3NDc1MDA3RTEwRjggLyogSW50U2l6ZS5jcHAgKi87IH07CiAJ
CTdBRDNGRThFMUQ3NjEzMTIwMEIxNjlBNCAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUQzRkU4RDFENzVG
QjhEMDBCMTY5QTQgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwICovOyB9OwogCQk3QUU5RTUw
OTFBRTVBRThCMDBDRjg3NEIgLyogdGVzdC5wZGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFOUU1MDgxQUU1QUU4QjAwQ0Y4NzRCIC8qIHRl
c3QucGRmICovOyB9OwogCQk3QzM5NjUwNjFDREQ3NEY5MDA5NERCQjggLyogQ29sb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzOTY1MDUxQ0RE
NzRGOTAwOTREQkI4IC8qIENvbG9yLmNwcCAqLzsgfTsKQEAgLTg5OCw2ICs5MDUsMTMgQEAKIAkJ
N0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8q
IEhhc2hDb3VudGVkU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhhc2hDb3VudGVkU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E1NjIz
MTAxQUQ1QUYzRTAwOTZCOTIwIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E5MDlBNkYxRDg3NzQ3NTAwN0UxMEY4
IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QTkwOUE3MDFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0E5MDlBNzExRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFJlY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTkwOUE3MjFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTczMUQ4Nzc0NzUwMDdFMTBG
OCAvKiBJbnRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTc0MUQ4Nzc0
NzUwMDdFMTBGOCAvKiBJbnRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEludFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTkwOUE3
NTFEODc3NDc1MDA3RTEwRjggLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0E5OUQ5OTMxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVR5cGVzRm9yTW91c2VF
dmVudHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTAyMUJBMUFCMDlFQTcw
MDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTZBMTUx
MUFBQzBCMzEwMDJCMkVEMyAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzNjUsNiArMTM3OSwxMyBAQAogCQk0NDBBMUQzNjE0QTAxMDAwMDA4QTY2RjIgLyogV2Vi
Q29yZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0E5
MDlBNkYxRDg3NzQ3NTAwN0UxMEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCisJCQkJN0E5
MDlBNzAxRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UG9pbnQuY3BwICovLAorCQkJCTdBOTA5QTcx
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFJlY3QuY3BwICovLAorCQkJCTdBOTA5QTcyMUQ4Nzc0
NzUwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwICovLAorCQkJCTdBOTA5QTczMUQ4Nzc0NzUwMDdF
MTBGOCAvKiBJbnRQb2ludC5jcHAgKi8sCisJCQkJN0E5MDlBNzQxRDg3NzQ3NTAwN0UxMEY4IC8q
IEludFJlY3QuY3BwICovLAorCQkJCTdBOTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXpl
LmNwcCAqLywKIAkJCQlDRDg5RDAzNzFDNEVEQjEzMDAwNDBBMDQgLyogY29jb2EgKi8sCiAJCQkJ
OTNBNzIwRTUxOEYxQTBFODAwQTg0OEUxIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAogCQkJ
CTdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvci5jcHAgKi8sCkBAIC0yMjQ3LDYgKzIy
NjgsNyBAQAogCQkJCTdDQ0U3RjI5MUE0MTFCMTAwMDQ0N0M0QyAvKiBDdXN0b21Qcm90b2NvbHNJ
bnZhbGlkU2NoZW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMkExQTQxMUIxMDAwNDQ3
QzRDIC8qIEN1c3RvbVByb3RvY29sc1N5bmNYSFJUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0NDRTdGMkIxQTQxMUIxMDAwNDQ3QzRDIC8qIEN1c3RvbVByb3RvY29sc1Rlc3QubW0gaW4gU291
cmNlcyAqLywKKwkJCQk3QTkwOUE4MDFEODc3NDgwMDA3RTEwRjggLyogRmxvYXRTaXplLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJEQzRDRjc3MUQyRDlERDgwMEVDQ0M5NCAvKiBEYXRhRGV0ZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxNjQ2RTIxRDE4NjJDRDAwMDE1QTFBIC8qIERl
ZmVycmVkVmlld0luV2luZG93U3RhdGVDaGFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VCOTFBNDExQTdFMDA0NDdDNEMgLyogRGV2aWNlU2NhbGVGYWN0b3JJbkRhc2hib2FyZFJlZ2lv
bnMubW0gaW4gU291cmNlcyAqLywKQEAgLTIyNjcsNiArMjI4OSw3IEBACiAJCQkJN0NDRTdFQkUx
QTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNEZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUUwMUE0MTFBOUEwMDQ0N0M0QyAvKiBFZGl0b3JDb21tYW5kcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJGMUE0MTFBN0UwMDQ0N0M0QyAvKiBFbGVtZW50QXRQ
b2ludEluV2ViRnJhbWUubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE4MzFEODc3NDgwMDA3
RTEwRjggLyogSW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRjFBNDExQUU2
MDA0NDdDNEMgLyogRXBoZW1lcmFsU2Vzc2lvblB1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYwMUE0MTFBRTYwMDQ0N0M0QyAvKiBFdmFsdWF0
ZUphdmFTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRjExQTQxMUFFNjAwNDQ3
QzRDIC8qIEZhaWxlZExvYWQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzQyLDggKzIzNjUsMTAg
QEAKIAkJCQk3Q0NFN0VBNjFBNDExQTBGMDA0NDdDNEMgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBNzFBNDExQTEzMDA0NDdDNEMgLyogUGxhdGZv
cm1XZWJWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMjYxQTQxMUFGNjAwNDQ3
QzRDIC8qIFByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBODIxRDg3NzQ4
MDAwN0UxMEY4IC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEIxQTQx
MUFFNjAwNDQ3QzRDIC8qIFByZXZlbnRFbXB0eVVzZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0YyQzFBNDExQjEwMDA0NDdDNEMgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRv
UmVzaXppbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE3RTFEODc3NDgwMDA3RTEwRjgg
LyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwQzFBNDExQUU2MDA0
NDdDNEMgLyogUHJpdmF0ZUJyb3dzaW5nUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQzExRDBBNjUyRjAwRkVCQ0YzIC8qIFByb3Zpc2lvbmFs
VVJMTm90Q2hhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQzgxQTQxMUE3RTAwNDQ3
QzRDIC8qIFB1YmxpY1N1ZmZpeC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjM1MSwxMyArMjM3Niwx
NiBAQAogCQkJCTdDQ0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0ZXJDcmFz
aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTBDMzFEMEE2NTNBMDBGRUJDRjMgLyogUmVt
b3RlT2JqZWN0UmVnaXN0cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDOTFBNDExQTdF
MDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJN0E5MDlBN0QxRDg3NzQ4MDAwN0UxMEY4IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VDQTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZy
b21ET01SYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMEM0MUQwQTY1NDIwMEZFQkNG
MyAvKiBSZXF1aXJlc1VzZXJBY3Rpb25Gb3JQbGF5YmFjay5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTdDQ0U3RjBFMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZXNpemVSZXZlcnNlUGFnaW5hdGVkV2ViVmll
dy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwRjFBNDExQUU2MDA0NDdDNEMgLyogUmVz
aXplV2luZG93QWZ0ZXJDcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxMDFBNDEx
QUU2MDA0NDdDNEMgLyogUmVzcG9uc2l2ZW5lc3NUaW1lckRvZXNudEZpcmVFYXJseS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3Q0NFN0YxMTFBNDExQUU2MDA0NDdDNEMgLyogUmVzdG9yZVNlc3Np
b25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE4
MTFEODc3NDgwMDA3RTEwRjggLyogSW50UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM1
Q0Y5NjcxRDI1RkNENjAwMUE2NUQ0IC8qIFJlc3RvcmVTZXNzaW9uU3RhdGVXaXRob3V0TmF2aWdh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTkwOUE3RjFEODc3NDgwMDA3RTEwRjggLyog
RmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjEyMUE0MTFBRTYwMDQ0N0M0
QyAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUNCMUE0MTFBN0UwMDQ0N0M0QyAvKiBTZXRBbmRVcGRhdGVDYWNoZU1vZGVsLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NDRTdFQ0MxQTQxMUE3RTAwNDQ3QzRDIC8qIFNldERvY3VtZW50VVJJLm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
QWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZv
aWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9y
bSkKK3sKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0QSgxLjEpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMS4xLCBhZmZpbmVUcmFuc2Zvcm0uYSgpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0Qigy
LjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4yLCBhZmZpbmVUcmFuc2Zvcm0uYigpKTsKKyAg
ICBhZmZpbmVUcmFuc2Zvcm0uc2V0QygzLjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4zLCBh
ZmZpbmVUcmFuc2Zvcm0uYygpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0RCg0LjQpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC40LCBhZmZpbmVUcmFuc2Zvcm0uZCgpKTsKKyAgICBhZmZpbmVU
cmFuc2Zvcm0uc2V0RSg1LjUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCBhZmZpbmVUcmFu
c2Zvcm0uZSgpKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm0uc2V0Rig2LjYpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi42LCBhZmZpbmVUcmFuc2Zvcm0uZigpKTsKKworICAgIGFmZmluZVRyYW5zZm9y
bS5zZXRNYXRyaXgoOS45LCA4LjgsIDcuNywgNi42LCA1LjUsIDQuNCk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg5LjksIGFmZmluZVRyYW5zZm9ybS5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
OC44LCBhZmZpbmVUcmFuc2Zvcm0uYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNywgYWZm
aW5lVHJhbnNmb3JtLmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjYsIGFmZmluZVRyYW5z
Zm9ybS5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCBhZmZpbmVUcmFuc2Zvcm0uZSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgYWZmaW5lVHJhbnNmb3JtLmYoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RJZGVudGl0eShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLmEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwg
dHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChB
ZmZpbmVUcmFuc2Zvcm0sIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRlc3Q7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVzdCk7CisgICAgdGVzdEdl
dEFuZFNldCh0ZXN0KTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJh
bnNmb3JtLmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5iKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDMuMCwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRy
YW5zZm9ybS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdERvdWJsZWQoY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0u
YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9y
bS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEhhbHZlZChjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLmEoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMi4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuNSwgdHJh
bnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZh
bHVlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7CisKKyAgICBB
U1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LnBy
ZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSk7Cit9CisKKyNpZiBVU0UoQ0cpCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24pCit7CisgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gY2dUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoY2dU
cmFuc2Zvcm0pOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RH
ZXRBbmRTZXQodGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOwor
fQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRDJE
MU1hdHJpeENvbnN0cnVjdGlvbikKK3sKKyAgICBEMkQxX01BVFJJWF8zWDJfRiBkMmRUcmFuc2Zv
cm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KGQyZFRyYW5zZm9ybSk7CisKKyAgICB0ZXN0
VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9CisjZW5kaWYKKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIElkZW50aXR5KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgQVNTRVJUX0ZBTFNFKHRl
c3QuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbigpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bk9yRmxpcHBlZCgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25t
ZW50KCkpOworCisgICAgdGVzdC5tYWtlSWRlbnRpdHkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRl
c3QuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50
KCkpOworCisgICAgdGVzdElkZW50aXR5KHRlc3QpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9y
bSwgTWFwRmxvYXRQb2ludCkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KDEwMC4wZiwgNTAuMGYpOworCisgICAgYXV0
byBtYXBwZWRQb2ludCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYs
IG1hcHBlZFBvaW50LnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFw
cGVkUG9pbnQyID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MTAwLjBmLCBtYXBwZWRQb2ludDIueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBt
YXBwZWRQb2ludDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBw
ZWRQb2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1
MC4wZiwgbWFwcGVkUG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFw
cGVkUG9pbnQzLnkoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBEb3VibGVzKQor
eworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIGRvdWJsZSB4ID0gMTAw
LjA7CisgICAgZG91YmxlIHkgPSA1MC4wOworCisgICAgZG91YmxlIG1hcHBlZFggPSAwOworICAg
IGRvdWJsZSBtYXBwZWRZID0gMDsKKyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZ
KTsKKworICAgIEFTU0VSVF9ET1VCTEVfRVEoMTAwLjAsIG1hcHBlZFgpOworICAgIEFTU0VSVF9E
T1VCTEVfRVEoNTAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIG1h
cHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHksIG1hcHBlZFgs
IG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWCk7CisgICAg
QVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsK
KworICAgIG1hcHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHks
IG1hcHBlZFgsIG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSg1MC4wLCBtYXBwZWRY
KTsKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDEwMC4wLCBtYXBwZWRZKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIE1hcEludFBvaW50KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0ZXN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50KDEwMCwgNTApOworCisgICAgYXV0
byBtYXBwZWRQb2ludCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEw
MCwgbWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50LnkoKSk7
CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQyID0gdGVzdC5t
YXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRVEoMTAwLCBtYXBwZWRQb2ludDIueCgpKTsK
KyAgICBBU1NFUlRfRVEoMTAwLCBtYXBwZWRQb2ludDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgw
LjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKwor
ICAgIEFTU0VSVF9FUSg1MCwgbWFwcGVkUG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwg
bWFwcGVkUG9pbnQzLnkoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBJbnRTaXpl
KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSgyMDAsIDMwMCk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUgPSB0ZXN0Lm1hcFNp
emUoc2l6ZSk7CisKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRTaXplLndpZHRoKCkpOworICAg
IEFTU0VSVF9FUSgzMDAsIG1hcHBlZFNpemUuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXREKDIu
MCk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUyID0gdGVzdC5tYXBTaXplKHNpemUpOworCisgICAg
QVNTRVJUX0VRKDIwMCwgbWFwcGVkU2l6ZTIud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMCwg
bWFwcGVkU2l6ZTIuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXRBKDAuNSk7CisKKyAgICBhdXRv
IG1hcHBlZFNpemUzID0gdGVzdC5tYXBTaXplKHNpemUpOworCisgICAgQVNTRVJUX0VRKDEwMCwg
bWFwcGVkU2l6ZTMud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMCwgbWFwcGVkU2l6ZTMuaGVp
Z2h0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgTWFwRmxvYXRTaXplKQoreworICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBz
aXplKDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVkU2l6ZSA9IHRlc3QubWFwU2l6
ZShzaXplKTsKKworICAgIEFTU0VSVF9FUSgyMDAuMGYsIG1hcHBlZFNpemUud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0VRKDMwMC4wZiwgbWFwcGVkU2l6ZS5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNl
dEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkU2l6ZTIgPSB0ZXN0Lm1hcFNpemUoc2l6ZSk7CisK
KyAgICBBU1NFUlRfRVEoMjAwLjBmLCBtYXBwZWRTaXplMi53aWR0aCgpKTsKKyAgICBBU1NFUlRf
RVEoNjAwLjBmLCBtYXBwZWRTaXplMi5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsK
KworICAgIGF1dG8gbWFwcGVkU2l6ZTMgPSB0ZXN0Lm1hcFNpemUoc2l6ZSk7CisKKyAgICBBU1NF
UlRfRVEoMTAwLjBmLCBtYXBwZWRTaXplMy53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLjBm
LCBtYXBwZWRTaXplMy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBJ
bnRSZWN0KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdCgxMCwgMjAsIDIwMCwgMzAwKTsKKworICAgIGF1dG8gbWFwcGVkUmVj
dCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSgxMCwgbWFwcGVkUmVjdC54
KCkpOworICAgIEFTU0VSVF9FUSgyMCwgbWFwcGVkUmVjdC55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3Qud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDMwMCwgbWFwcGVkUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIg
PSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3QyLngo
KSk7CisgICAgQVNTRVJUX0VRKDQwLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9FUSg2MDAsIG1hcHBlZFJlY3Qy
LmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRSZWN0
MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSg1LCBtYXBwZWRSZWN0My54
KCkpOworICAgIEFTU0VSVF9FUSg0MCwgbWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRVEo
MTAwLCBtYXBwZWRSZWN0My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLCBtYXBwZWRSZWN0
My5oZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBGbG9hdFJlY3QpCit7
CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QoMTAuZiwgMjAuMGYsIDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVk
UmVjdCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwg
bWFwcGVkUmVjdC54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdC55
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFJlY3Qud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUmVjdC5oZWlnaHQoKSk7CisKKyAgICB0
ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIgPSB0ZXN0Lm1hcFJlY3QocmVj
dCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3QyLngoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDQwLjBmLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9GTE9B
VF9FUSgyMDAuMGYsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg2
MDAuMGYsIG1hcHBlZFJlY3QyLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisg
ICAgYXV0byBtYXBwZWRSZWN0MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9G
TE9BVF9FUSg1LjBmLCBtYXBwZWRSZWN0My54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MC4w
ZiwgbWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRS
ZWN0My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNjAwLjBmLCBtYXBwZWRSZWN0My5o
ZWlnaHQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBGbG9hdFF1YWQpCit7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAwLjBmLCAxMDAuMGYsIDEwMC4wZiwgNTAuMGYp
OworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkKHJlY3QpOworCisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgcXVhZC5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwg
cXVhZC5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMigpLngo
KSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMigpLnkoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDE1MC4wZiwgcXVhZC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVh
ZC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgcXVhZC5wNCgpLnkoKSk7
CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKyAgICBhdXRvIG1hcHBlZFF1
YWQgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBt
YXBwZWRRdWFkLnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRR
dWFkLnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkLnAy
KCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkLnAyKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkLnAzKCkueCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBtYXBwZWRRdWFkLnAzKCkueSgpKTsKKyAgICBBU1NF
UlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkLnA0KCkueCgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTUwLjBmLCBtYXBwZWRRdWFkLnA0KCkueSgpKTsKKworICAgIHRlc3Quc2V0RCgyLjAp
OworCisgICAgYXV0byBtYXBwZWRRdWFkMiA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAgIEFT
U0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQyLnAxKCkueCgpKTsKKyAgICBBU1NFUlRf
RkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMi5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgy
MDAuMGYsIG1hcHBlZFF1YWQyLnAyKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBm
LCBtYXBwZWRRdWFkMi5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFw
cGVkUXVhZDIucDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1
YWQyLnA0KCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFkMi5w
NCgpLnkoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUXVhZDMg
PSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBl
ZFF1YWQzLnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFk
My5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDMucDIo
KS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQzLnAyKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMy5wMygpLngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUXVhZDMucDMoKS55KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDMucDQoKS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQzLnA0KCkueSgpKTsKK30KKworVEVTVChBZmZpbmVU
cmFuc2Zvcm0sIE11bHRpcGx5KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSBpZGVudGl0eTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAg
IHRlc3QubXVsdGlwbHkoaWRlbnRpdHkpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRl
c3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGRvdWJsZXIoMi4wLCAwLjAsIDAu
MCwgMi4wLCAwLjAsIDAuMCk7CisKKyAgICB0ZXN0Lm11bHRpcGx5KGRvdWJsZXIpOworCisgICAg
dGVzdERvdWJsZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gaGFsdmVy
KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjApOworCisgICAgdGVzdC5tdWx0aXBseShoYWx2
ZXIpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5tdWx0
aXBseShoYWx2ZXIpOworCisgICAgdGVzdEhhbHZlZCh0ZXN0KTsKK30KKworVEVTVChBZmZpbmVU
cmFuc2Zvcm0sIFNjYWxlKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYu
MCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgyLjApOworCisgICAgdGVzdERvdWJsZWQodGVz
dCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24o
dGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0SGFsdmVkKHRlc3QpOwor
fQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgU2NhbGVYWSkKK3sKKyAgICBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMS4wLCAxLjApOwor
CisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgyLjAs
IDIuMCk7CisKKyAgICB0ZXN0RG91YmxlZCh0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMC41LCAw
LjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2Fs
ZSgwLjUsIDAuNSk7CisKKyAgICB0ZXN0SGFsdmVkKHRlc3QpOworfQorCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgU2NhbGVVbmlmb3JtTm9uVW5pZm9ybSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RW
YWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDEuMCwg
MS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2Nh
bGVOb25Vbmlmb3JtKDIuMCwgMi4wKTsKKworICAgIHRlc3REb3VibGVkKHRlc3QpOworCisgICAg
dGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMC41LCAwLjUpOworCisgICAg
dGVzdEhhbHZlZCh0ZXN0KTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFNjYWxlTm9uVW5p
Zm9ybSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4w
LCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKwor
ICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDEuMCwgMi4wKTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5zY2FsZU5v
blVuaWZvcm0oMS4wLCAwLjUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgdGVzdC5zY2FsZU5vblVuaWZvcm0oMi4wLCAxLjApOworCisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxMi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCB0ZXN0LmIo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Quc2Nh
bGVOb25Vbmlmb3JtKDAuNSwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0
KTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDAuNSwgMi4wKTsKKworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMy4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjUsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3Qu
ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFm
ZmluZVRyYW5zZm9ybSwgU2NhbGVGbG9hdFNpemUpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZmlyc3QoMS4w
ZiwgMi4wZik7CisKKyAgICB0ZXN0LnNjYWxlKGZpcnN0KTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIHNlY29uZCgxLjBmLCAwLjVmKTsKKworICAgIHRlc3Quc2NhbGUoc2Vjb25kKTsKKwor
ICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSB0aGlyZCgyLjBmLCAxLjBmKTsKKworICAgIHRlc3Quc2NhbGUodGhpcmQpOworCisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxMi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4w
LCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4w
LCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3VydGgoMC41ZiwgMS4wZik7CisKKyAgICB0ZXN0LnNjYWxl
KGZvdXJ0aCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFNpemUgZmlmdGgoMC41ZiwgMi4wZik7CisKKyAgICB0ZXN0LnNjYWxlKGZpZnRo
KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjUsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdGVzdC5j
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5m
KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgUm90YXRlKQoreworICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisg
ICAgdGVzdC5yb3RhdGUoMzYwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3Qp
OworCisgICAgdGVzdC5yb3RhdGUoMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9u
ID0gMC4wMDAxOworCisgICAgRVhQRUNUX05FQVIoLTYuMCwgdGVzdC5hKCksIGVwc2lsb24pOwor
ICAgIEVYUEVDVF9ORUFSKC01LjAsIHRlc3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVB
UigtNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTMuMCwgdGVzdC5k
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlKC0xODAu
MCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnJvdGF0
ZSg5MC4wKTsKKworICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKDMuMCwgdGVzdC5iKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC02
LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS4wLCB0ZXN0LmQoKSwg
ZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5yb3RhdGUoLTkwLjApOwor
CisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQorCitURVNUKEFmZmluZVRyYW5z
Zm9ybSwgUm90YXRlRnJvbVZlY3RvcikKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
dGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3Qucm90YXRlRnJv
bVZlY3RvcigwLjAsIDAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisK
KyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoLTEwLjAsIC0xMC4wKTsKKworICAgIHN0YXRpYyBk
b3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVYUEVDVF9ORUFSKC03LjA3MTAsIHRlc3Qu
YSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS42NTY4LCB0ZXN0LmIoKSwgZXBzaWxv
bik7CisgICAgRVhQRUNUX05FQVIoMS40MTQyLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX05FQVIoMS40MTQyLCB0ZXN0LmQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOwor
CisgICAgdGVzdC5yb3RhdGVGcm9tVmVjdG9yKDEwLjAsIDEwLjApOworCisgICAgRVhQRUNUX05F
QVIoLTQuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0zLjAsIHRlc3Qu
YigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUig2LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUig1LjAsIHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYo
KSk7CisKKyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoLTEwLjAsIDEwLjApOworCisgICAgRVhQ
RUNUX05FQVIoNy4wNzEwLCB0ZXN0LmEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoNS42
NTY4LCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTEuNDE0MiwgdGVzdC5j
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0xLjQxNDIsIHRlc3QuZCgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0ZUZyb21WZWN0b3IoMTAuMCwg
LTEwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQorCitURVNUKEFm
ZmluZVRyYW5zZm9ybSwgVHJhbnNsYXRlWFkpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0LnRyYW5z
bGF0ZSgwLjAsIDAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAg
ICB0ZXN0LnRyYW5zbGF0ZSg1LjAsIDAuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwg
dGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwg
dGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzIuMCwgdGVzdC5lKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMjYuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC50cmFuc2xhdGUoMC4w
LCAtMS4yKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwg
dGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyNy4yLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMi40
LCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUcmFuc2xhdGVGbG9hdFBv
aW50KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBub25lOworICAgIHRl
c3QudHJhbnNsYXRlKG5vbmUpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmaXJzdCg1LjBmLCAwLjBmKTsKKworICAgIHRlc3Qu
dHJhbnNsYXRlKGZpcnN0KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgyNi4wLCB0ZXN0LmYoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNlY29uZCgw
LjBmLCAtMS4yZik7CisKKyAgICB0ZXN0LnRyYW5zbGF0ZShzZWNvbmQpOworCisgICAgc3RhdGlj
IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRl
c3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRl
c3QuZCgpKTsKKyAgICBFWFBFQ1RfTkVBUigyNy4yLCB0ZXN0LmUoKSwgZXBzaWxvbik7CisgICAg
RVhQRUNUX05FQVIoMjIuNCwgdGVzdC5mKCksIGVwc2lsb24pOworCisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgp
KTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAg
ICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsK
KworICAgIHRlc3QyLnRyYW5zbGF0ZShzZWNvbmQpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qy
LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNs
YXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBTaGVhcikKK3sKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4w
KTsKKworICAgIHRlc3Quc2hlYXIoMC4wLCAwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5zaGVhcigyLjAsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDE0LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIHRlc3Qu
YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDEzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVz
dC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0
LnNoZWFyKC0xLjAsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQ2LjAsIHRlc3QuYSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDM3LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRmxpcFgp
Cit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4w
LCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0
ZXN0LmZsaXBYKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC02LjAsIHRlc3QuYSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAgdGVzdFZhbHVlQ29u
c3RydWN0aW9uKHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QyOwor
CisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBw
ZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMS4w
LCB0ZXN0Mi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MS4wLCB0ZXN0Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5lKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkpOworCisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uKCkpOworICAgIC8vICdGbGlwcGVkJyBqdXN0IG1lYW5zIGluIHRoZSBZIGRp
cmVjdGlvbgorICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0
Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRmxpcFkpCit7CisgICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEu
MCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LmZsaXBZ
KCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0
LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVz
dC5mKCkpOworCisgICAgdGVzdC5mbGlwWSgpOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgdGVz
dElkZW50aXR5KHRlc3QyKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7
CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAg
QVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisK
KyAgICB0ZXN0Mi5mbGlwWSgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QyLmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QyLmIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIHRlc3QyLmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMS4wLCB0ZXN0
Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5lKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlz
SWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0
aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3Qy
LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNs
YXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBGbGlwWGFuZEZsaXBZKQor
eworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwg
Mi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVz
dC5mbGlwWCgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNi4wLCB0ZXN0LmEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgtNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0
LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVf
RVEoLTYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoLTMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxp
cFgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00LjAsIHRl
c3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC0zLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0
ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDI7CisKKyAgICBB
U1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0
Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOwor
CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIC8vIEZhbHNlIGhlcmUgYmVj
YXVzZSBYIGlzIGFsc28gZmxpcHBlZC4KKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qy
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVz
dDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNm
b3JtLCBTa2V3KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4w
LCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3Qp
OworCisgICAgdGVzdC5za2V3KDM2MC4wLCAzNjAuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMC4wLCAwLjApOworCisgICAgdGVzdFZhbHVl
Q29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3KDE4MC4wLCAxODAuMCk7CisKKyAg
ICBzdGF0aWMgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7Cisg
ICAgRVhQRUNUX05FQVIoNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnNrZXco
LTE4MC4wLCAtMTgwLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworfQor
CitURVNUKEFmZmluZVRyYW5zZm9ybSwgU2tld1gpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXdYKDM2MC4wKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2tld1goMTgwLjApOworCisg
ICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9F
USg2LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOwor
ICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmlu
ZVRyYW5zZm9ybSwgU2tld1kpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXdZKDM2MC4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0
cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2tld1koMTgwLjApOworCisgICAgc3RhdGljIGRv
dWJsZSBlcHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3Qu
YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9O
RUFSKDQuMCwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0
ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwg
WGFuZFlTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIEVYUEVDVF9ORUFSKDcuODEwMiwgdGVzdC54
U2NhbGUoKSwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUig1LjAsIHRlc3QueVNjYWxlKCksIDAu
MDAwMSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBFcXVhbGl0eSkKK3sKKyAgICBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDI7CisKKyAgICBBU1NFUlRfRkFMU0Uo
dGVzdCA9PSB0ZXN0Mik7CisgICAgQVNTRVJUX1RSVUUodGVzdCAhPSB0ZXN0Mik7CisKKyAgICB0
ZXN0Lm1ha2VJZGVudGl0eSgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdCA9PSB0ZXN0Mik7Cisg
ICAgQVNTRVJUX0ZBTFNFKHRlc3QgIT0gdGVzdDIpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9y
bSwgSW52ZXJzZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKworICAg
IEFTU0VSVF9UUlVFKHRlc3QuaXNJbnZlcnRpYmxlKCkpOworCisgICAgYXV0byBpbnZlcnNlID0g
dGVzdC5pbnZlcnNlKCk7CisKKyAgICBBU1NFUlQoaW52ZXJzZSk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEuMCwgaW52ZXJzZS0+YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52
ZXJzZS0+YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJzZS0+YygpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+ZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDAuMCwgaW52ZXJzZS0+ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJz
ZS0+ZigpKTsKKworICAgIGF1dG8gdGVzdDIgPSB0ZXN0ICogaW52ZXJzZS52YWx1ZSgpOworCisg
ICAgdGVzdElkZW50aXR5KHRlc3QyKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIEJsZW5k
KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0OworCisgICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIHRlc3QyOworICAgIHRlc3QyLnNjYWxlKDIuMCk7CisKKyAgICB0ZXN0
LmJsZW5kKHRlc3QyLCA1MCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00OC4wLCB0ZXN0LmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTQ4LjAsIHRlc3Qu
ZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUcmFu
c2xhdGlvbikKK3sKKyAgICBhdXRvIHRlc3QgPSBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnRy
YW5zbGF0aW9uKC01LjAsIC03LjApOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNS4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgtNy4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBUb1Ry
YW5zZm9ybWF0aW9uTWF0cml4KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNm
b3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4w
LCBtYXRyaXgubTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTEyKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTEzKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCBtYXRyaXgubTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBt
YXRyaXgubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBtYXRyaXgubTIyKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTIzKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMC4wLCBtYXRyaXgubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRy
aXgubTMxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXRyaXgubTMyKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBtYXRyaXgubTMzKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCBtYXRyaXgubTM0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgTWFrZU1h
cEJldHdlZW5SZWN0cykKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZyb21SZWN0KDEwLjBmLCAxMC4wZiwgMTAwLjBm
LCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0b1JlY3QoNzAuMGYsIDcwLjBmLCAy
MDAuMGYsIDUwLjBmKTsKKworICAgIGF1dG8gbWFwQmV0d2VlbiA9IFdlYkNvcmU6Om1ha2VNYXBC
ZXR3ZWVuUmVjdHMoZnJvbVJlY3QsIHRvUmVjdCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIu
MCwgbWFwQmV0d2Vlbi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVu
LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4uYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDAuNSwgbWFwQmV0d2Vlbi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNjAuMCwgbWFwQmV0d2Vlbi5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNjAuMCwgbWFw
QmV0d2Vlbi5mKCkpOworfQorCisjaWYgVVNFKENHKQorVEVTVChBZmZpbmVUcmFuc2Zvcm0sIENv
cmVHcmFwaGljc0Nhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0
ZXN0MiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4w
KTsKKworICAgIEFTU0VSVF9UUlVFKENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSh0
ZXN0LCB0ZXN0MikpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QzOworCisg
ICAgQVNTRVJUX0ZBTFNFKENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSh0ZXN0LCB0
ZXN0MykpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCitURVNUKEFmZmluZVRyYW5z
Zm9ybSwgRGlyZWN0MkRDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0oNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBEMkQxX01BVFJJ
WF8zWDJfRiB0ZXN0ID0gdHJhbnNmb3JtOworICAgIEQyRDFfTUFUUklYXzNYMl9GIHRlc3QyID0g
RDJEMTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMDAwMTsKKworICAgIEVYUEVDVF9ORUFS
KHRlc3QuXzExLCB0ZXN0Mi5fMTEsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzEy
LCB0ZXN0Mi5fMTIsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIxLCB0ZXN0Mi5f
MjEsIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIyLCB0ZXN0Mi5fMjIsIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKHRlc3QuXzMxLCB0ZXN0Mi5fMzEsIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKHRlc3QuXzMyLCB0ZXN0Mi5fMzIsIGVwc2lsb24pOworfQorI2VuZGlmCisK
K30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRQ
b2ludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVU
cmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9u
TWF0cml4Lmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZvaWQgdGVzdEdl
dEFuZFNldChXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQoreworICAgIHBvaW50LnNldFgoMS4x
Zik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMWYsIHBvaW50LngoKSk7CisgICAgcG9pbnQuc2V0
WSgyLjJmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4yZiwgcG9pbnQueSgpKTsKKworICAgIHBv
aW50LnNldCg5LjlmLCA4LjhmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOS45ZiwgcG9pbnQueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOC44ZiwgcG9pbnQueSgpKTsKK30KKworVEVTVChGbG9h
dFBvaW50LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
dGVzdDsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIHRlc3QueSgpKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RF
U1QoRmxvYXRQb2ludCwgVmFsdWVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0ZXN0KDkuOWYsIDguOGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDkuOWYsIHRlc3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOC44ZiwgdGVzdC55KCkpOworCisgICAgdGVzdEdl
dEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChGbG9hdFBvaW50LCBaZXJvQ29uc3RydWN0aW9uKQor
eworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdCA9IFdlYkNvcmU6OkZsb2F0UG9pbnQ6Onpl
cm8oKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIHRlc3QueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBJbnRQb2ludENvbnN0
cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0SW5wdXQoMjAwMywgMTk5Nyk7
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0ID0gV2ViQ29yZTo6RmxvYXRQb2ludCh0ZXN0
SW5wdXQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMDMuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMTk5Ny4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQs
IEZsb2F0U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdElu
cHV0KDUwMC43ZiwgMzAwLjJmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QgPSBXZWJD
b3JlOjpGbG9hdFBvaW50KHRlc3RJbnB1dCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAwLjcs
IHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjIsIHRlc3QueSgpKTsKK30KKwor
VEVTVChGbG9hdFBvaW50LCBOYXJyb3dQcmVjaXNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB0ZXN0WCA9IDEuMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM7CisgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSB0ZXN0WSA9IDIuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU7CisKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IHRlc3QgPSBXZWJDb3JlOjpGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24o
dGVzdFgsIDIuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzKTsKKworICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgZXBzaWxvbiA9IDAuMDAwMDE7CisKKyAgICBFWFBFQ1RfTkVBUigxLjEyMzQ1NiwgdGVzdC54
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDIuMzQ1Njc4LCB0ZXN0LnkoKSwgZXBzaWxv
bik7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgTW92ZUJ5RmxvYXQpCit7CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoMjAuMmYsIDMwLjNmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoLTgxLjNmLCAxMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MzguOWYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoMTEuMWYsIC0zMy4yZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NTAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA3LjFmLCB0ZXN0LnkoKSk7
CisKKyAgICB0ZXN0Lm1vdmUoLTUuNmYsIC05LjhmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0
NC40ZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTcuM2YsIHRlc3QueSgpKTsK
K30KKworVEVTVChGbG9hdFBvaW50LCBNb3ZlQnlJbnRTaXplKQoreworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkpOwor
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBmaXJzdCgyMCwgMzApOworCisgICAgdGVzdC5tb3ZlKGZp
cnN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjMwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNl
Y29uZCgtODEsIDEwKTsKKworICAgIHRlc3QubW92ZShzZWNvbmQpOworCisgICAgRVhQRUNUX0ZM
T0FUX0VRKDM5LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4wZiwgdGVz
dC55KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB0aGlyZCgxMSwgLTMzKTsKKworICAgIHRl
c3QubW92ZSh0aGlyZCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIHRlc3QueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA3LjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIGZvdXJ0aCgtNiwgLTEwKTsKKworICAgIHRlc3QubW92ZShmb3VydGgpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDQ0LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5
Ny4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIE1vdmVCeUZsb2F0U2l6ZSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QoMTAwLjBmLCAyMDAuMGYpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
MDAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmaXJzdCgyMC4yZiwg
MzAuM2YpOworCisgICAgdGVzdC5tb3ZlKGZpcnN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7
CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2Vjb25kKC04MS4zZiwgMTAuMGYpOworCisgICAg
dGVzdC5tb3ZlKHNlY29uZCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzguOWYsIHRlc3QueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgdGhpcmQoMTEuMWYsIC0zMy4yZik7CisKKyAgICB0ZXN0Lm1vdmUodGhpcmQp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDIwNy4xZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZvdXJ0
aCgtNS42ZiwgLTkuOGYpOworCisgICAgdGVzdC5tb3ZlKGZvdXJ0aCk7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNDQuNGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjNmLCB0
ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgTW92ZUJ5SW50UG9pbnQpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0
ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmaXJzdCgyMCwgMzApOworCisgICAg
dGVzdC5tb3ZlQnkoZmlyc3QpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgdGVzdC54
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMzAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNv
cmU6OkludFBvaW50IHNlY29uZCgtODEsIDEwKTsKKworICAgIHRlc3QubW92ZUJ5KHNlY29uZCk7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzkuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjQwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0aGlyZCgx
MSwgLTMzKTsKKworICAgIHRlc3QubW92ZUJ5KHRoaXJkKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USg1MC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDcuMGYsIHRlc3QueSgp
KTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGZvdXJ0aCgtNiwgLTEwKTsKKworICAgIHRlc3Qu
bW92ZUJ5KGZvdXJ0aCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDQuMGYsIHRlc3QueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjBmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQ
b2ludCwgTW92ZUJ5RmxvYXRQb2ludCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3Qo
MTAwLjBmLCAyMDAuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueSgpKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgZmlyc3QoMjAuMmYsIDMwLjNmKTsKKworICAgIHRlc3QubW92ZUJ5KGZpcnN0
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMmYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjMwLjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNl
Y29uZCgtODEuM2YsIDEwLjBmKTsKKworICAgIHRlc3QubW92ZUJ5KHNlY29uZCk7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMzguOWYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQw
LjNmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRoaXJkKDExLjFmLCAt
MzMuMmYpOworCisgICAgdGVzdC5tb3ZlQnkodGhpcmQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VR
KDUwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwNy4xZiwgdGVzdC55KCkp
OworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmb3VydGgoLTUuNmYsIC05LjhmKTsKKworICAg
IHRlc3QubW92ZUJ5KGZvdXJ0aCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDQuNGYsIHRlc3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjNmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1Qo
RmxvYXRQb2ludCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4w
ZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICB0ZXN0LnNjYWxlKDIu
MGYsIDIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYsIHRlc3QueSgpKTsKKworICAgIHRlc3Quc2NhbGUoMC41
ZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LngoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkpOworCisgICAgdGVzdC5zY2FsZSgxLjBm
LCAwLjVmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwg
Tm9ybWFsaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgzMC4wZiwgNDAuMGYpOwor
CisgICAgYS5ub3JtYWxpemUoKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjYsIGEueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC44LCBhLnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwg
RG90KQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuMGYsIDIwMC4wZik7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBiKDIuMGYsIDQuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgYygxLjBmLCAwLjVmKTsKKworICAgIEVYUEVDVF9ORUFSKDEwMDAuMGYsIGEuZG90KGIpLCAw
LjAwMDFmKTsKKyAgICBFWFBFQ1RfTkVBUigyMDAuMGYsIGEuZG90KGMpLCAwLjAwMDFmKTsKK30K
KworCitURVNUKEZsb2F0UG9pbnQsIFNsb3BlQW5nbGVSYWRpYW5zKQoreworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MS4xMDcxNDg4ZiwgdGVzdC5zbG9wZUFuZ2xlUmFkaWFucygpKTsKK30KKworVEVTVChGbG9hdFBv
aW50LCBMZW5ndGgpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAw
LjBmKTsKKworICAgIEVYUEVDVF9ORUFSKDIyMy42MDY3OTc3NWYsIHRlc3QubGVuZ3RoKCksIDAu
MDAwMWYpOworfQorCitURVNUKEZsb2F0UG9pbnQsIExlbmd0aFNxdWFyZWQpCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0
LnkoKSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAwMDAuMGYsIHRlc3QubGVuZ3RoU3F1YXJl
ZCgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBDb25zdHJhaW5lZEJldHdlZW4pCit7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBsZWZ0KDEwLjBmLCAyMC4wZik7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCByaWdodCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHRlc3QxKDUwLjBmLCA4MC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0Mig4LjBm
LCA4MC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0Myg1MC4wZiwgMjIwLjBmKTsK
KworICAgIGF1dG8gY29uc3RyYWluZWQxID0gdGVzdDEuY29uc3RyYWluZWRCZXR3ZWVuKGxlZnQs
IHJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIGNvbnN0cmFpbmVkMS54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg4MC4wZiwgY29uc3RyYWluZWQxLnkoKSk7CisKKyAgICBhdXRv
IGNvbnN0cmFpbmVkMiA9IHRlc3QyLmNvbnN0cmFpbmVkQmV0d2VlbihsZWZ0LCByaWdodCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBjb25zdHJhaW5lZDIueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoODAuMGYsIGNvbnN0cmFpbmVkMi55KCkpOworCisgICAgYXV0byBjb25zdHJhaW5l
ZDMgPSB0ZXN0My5jb25zdHJhaW5lZEJldHdlZW4obGVmdCwgcmlnaHQpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg1MC4wZiwgY29uc3RyYWluZWQzLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIw
MC4wZiwgY29uc3RyYWluZWQzLnkoKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgU2hydW5rVG8p
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBiaWcoMTAwLjBmLCAyMDAuMGYpOworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgc21hbGxlcigxMC4wZiwgODAuMGYpOworCisgICAgYXV0byBzaHJ1
bmtUbyA9IGJpZy5zaHJ1bmtUbyhzbWFsbGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4w
Ziwgc2hydW5rVG8ueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoODAuMGYsIHNocnVua1RvLnko
KSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJpZ2lzaCg4LjBmLCAyMDAuMGYpOworCisg
ICAgYXV0byBzaHJ1bmtUbzIgPSBiaWdpc2guc2hydW5rVG8oc21hbGxlcik7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoOC4wZiwgc2hydW5rVG8yLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgw
LjBmLCBzaHJ1bmtUbzIueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBFeHBhbmRlZFRvKQor
eworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYmlnKDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHNtYWxsZXIoMTAuMGYsIDgwLjBmKTsKKworICAgIGF1dG8gZXhwYW5k
ZWRUbyA9IHNtYWxsZXIuZXhwYW5kZWRUbyhiaWcpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MC4wZiwgZXhwYW5kZWRUby54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIGV4cGFu
ZGVkVG8ueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYmlnaXNoKDguMGYsIDMwMC4w
Zik7CisKKyAgICBhdXRvIGV4cGFuZGVkVG8yID0gYmlnaXNoLmV4cGFuZGVkVG8oYmlnKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIGV4cGFuZGVkVG8yLngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMwMC4wZiwgZXhwYW5kZWRUbzIueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBUcmFuc3Bvc2UpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAw
LjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBhdXRvIHRyYW5zcG9zZWQgPSB0
ZXN0LnRyYW5zcG9zZWRQb2ludCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdHJh
bnNwb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRyYW5zcG9zZWQueSgp
KTsKK30KKworVEVTVChGbG9hdFBvaW50LCBUcmFuc2Zvcm1zKQoreworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gYWZmaW5lOworCisgICAgYXV0byB0cmFuc2Zvcm1lZDEgPSB0ZXN0Lm1hdHJpeFRyYW5z
Zm9ybShhZmZpbmUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdHJhbnNmb3JtZWQx
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdHJhbnNmb3JtZWQxLnkoKSk7CisK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lMigyLjAsIDAuMCwgMC4wLCAyLjAs
IDAuMCwgMC4wKTsKKworICAgIGF1dG8gdHJhbnNmb3JtZWQyID0gdGVzdC5tYXRyaXhUcmFuc2Zv
cm0oYWZmaW5lMik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc2Zvcm1lZDIu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAwLjBmLCB0cmFuc2Zvcm1lZDIueSgpKTsKKwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIGF1dG8gdHJh
bnNmb3JtZWQzID0gdGVzdC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAuMGYsIHRyYW5zZm9ybWVkMy54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
MDAuMGYsIHRyYW5zZm9ybWVkMy55KCkpOworCisgICAgYXV0byB0cmFuc2Zvcm1lZDQgPSB0ZXN0
Lm1hdHJpeFRyYW5zZm9ybShhZmZpbmUyLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc2Zvcm1lZDQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNDAwLjBmLCB0cmFuc2Zvcm1lZDQueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBNYXRoKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuMGYsIDIwMC4wZik7Cisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBiKDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGEgKz0gYjsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIGEueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNDAwLjBmLCBhLnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYyg1MC4wZiwgNTAu
MGYpOworCisgICAgYSArPSBjOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDI1MC4wZiwgYS54KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0NTAuMGYsIGEueSgpKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSBkKDEwLjBmLCAyMDAuMGYpOworCisgICAgYSAtPSBkOworCisgICAgRVhQRUNUX0ZM
T0FUX0VRKDI0MC4wZiwgYS54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNTAuMGYsIGEueSgp
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBlKDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGF1
dG8gZiA9IGIgKyBlOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgZi54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYsIGYueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgZygxMC4wZiwgMjAuMGYpOworCisgICAgYXV0byBoID0gYiArIGc7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMTEwLjBmLCBoLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgaC55
KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGkgPSBiIC0gZzsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSg5MC4wZiwgaS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTgwLjBmLCBp
LmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgaiA9IGIgLSBlOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAuMGYsIGoueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwg
ai55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBuZWdhdGVkID0gLWI7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoLTEwMC4wZiwgbmVnYXRlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgtMjAwLjBmLCBuZWdhdGVkLnkoKSk7CisKKyAgICBmbG9hdCB2YWx1ZSA9IGIgKiBnOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDUwMDAuMGYsIHZhbHVlKTsKK30KKworVEVTVChGbG9hdFBvaW50
LCBFcXVhbGl0eSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGEoMTAwLjBmLCAyMDAuMGYp
OworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYigxMDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBjKDEwLjBmLCAyMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShhID09IGIp
OworICAgIEFTU0VSVF9GQUxTRShhID09IGMpOworICAgIEFTU0VSVF9GQUxTRShhICE9IGIpOwor
ICAgIEFTU0VSVF9UUlVFKGEgIT0gYyk7CisKKyAgICBBU1NFUlRfVFJVRShXZWJDb3JlOjphcmVF
c3NlbnRpYWxseUVxdWFsKGEsIGIpKTsKKyAgICBBU1NFUlRfRkFMU0UoV2ViQ29yZTo6YXJlRXNz
ZW50aWFsbHlFcXVhbChhLCBjKSk7Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgRmxvb3JzKQorewor
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuNmYsIDE5OS45Zik7CisKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIGZsb29yZWRTaXplID0gV2ViQ29yZTo6Zmxvb3JlZEludFNpemUoYSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMCwgZmxvb3JlZFNpemUud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDE5OSwgZmxvb3JlZFNpemUuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50UG9p
bnQgZmxvb3JlZFBvaW50ID0gV2ViQ29yZTo6Zmxvb3JlZEludFBvaW50KGEpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDAsIGZsb29yZWRQb2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
OTksIGZsb29yZWRQb2ludC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBmbG9vcmVk
UG9pbnQxeCA9IFdlYkNvcmU6OmZsb29yUG9pbnRUb0RldmljZVBpeGVscyhhLCAxLjApOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIGZsb29yZWRQb2ludDF4LngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDE5OS4wZiwgZmxvb3JlZFBvaW50MXgueSgpKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgZmxvb3JlZFBvaW50MnggPSBXZWJDb3JlOjpmbG9vclBvaW50VG9EZXZpY2VQaXhl
bHMoYSwgMi4wKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjVmLCBmbG9vcmVkUG9pbnQyeC54
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTkuNWYsIGZsb29yZWRQb2ludDJ4LnkoKSk7Cit9
CisKK1RFU1QoRmxvYXRQb2ludCwgUm91bmRpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBhKDEwMC40ZiwgMTk5LjlmKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IHJvdW5kZWRQb2lu
dCA9IFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChhKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LCByb3VuZGVkUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLCByb3VuZGVkUG9p
bnQueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBDZWlsaW5nKQoreworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgYSgxMDAuNGYsIDE5OS45Zik7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBj
ZWlsaW5nUG9pbnQgPSBXZWJDb3JlOjpjZWlsZWRJbnRQb2ludChhKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAxLCBjZWlsaW5nUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLCBj
ZWlsaW5nUG9pbnQueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY2VpbGluZ1BvaW50
MXggPSBXZWJDb3JlOjpjZWlsUG9pbnRUb0RldmljZVBpeGVscyhhLCAxLjApOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDEuMGYsIGNlaWxpbmdQb2ludDF4LngoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDIwMC4wZiwgY2VpbGluZ1BvaW50MXgueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgY2VpbGluZ1BvaW50MnggPSBXZWJDb3JlOjpjZWlsUG9pbnRUb0RldmljZVBpeGVscyhhLCAy
LjApOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuNWYsIGNlaWxpbmdQb2ludDJ4LngoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgY2VpbGluZ1BvaW50MngueSgpKTsKK30KKworVEVT
VChGbG9hdFBvaW50LCBDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAu
NGYsIDE5OS45Zik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZmxvYXRTaXplID0gV2ViQ29y
ZTo6dG9GbG9hdFNpemUoYSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40ZiwgZmxvYXRTaXpl
LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTkuOWYsIGZsb2F0U2l6ZS5oZWlnaHQo
KSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYig5OS42ZiwgMjk5LjFmKTsKKworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgZmxvYXRQb2ludCA9IFdlYkNvcmU6OnRvRmxvYXRQb2ludChiKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoOTkuNmYsIGZsb2F0UG9pbnQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjk5LjFmLCBmbG9hdFBvaW50LnkoKSk7CisKKyNpZiBVU0UoQ0cpCisgICAgQ0dQ
b2ludCBjZ1BvaW50ID0gYTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuNGYsIGNnUG9pbnQu
eCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5OS45ZiwgY2dQb2ludC55KTsKKworICAgIENHUG9p
bnQgY2dQb2ludDIgPSBDR1BvaW50TWFrZSgtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdGVzdENHKGNnUG9pbnQyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIu
M2YsIHRlc3RDRy54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdENHLnkoKSk7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBEMkRfUE9JTlRfMkYgZDJkUG9pbnQg
PSBhOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40ZiwgZDJkUG9pbnQueCk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE5OS45ZiwgZDJkUG9pbnQueSk7CisKKyAgICBEMkRfUE9JTlRfMkYgZDJk
UG9pbnQyID0gRDJEMTo6UG9pbnQyRigtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVzdEQyRChkMmRQb2ludDIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4z
ZiwgdGVzdEQyRC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdEQyRC55KCkp
OworI2VuZGlmCit9CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9GbG9hdFJlY3QuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgor
CisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCit7CisgICAgcmVjdC5zZXRYKDEuMWYpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxLjFmLCByZWN0LngoKSk7CisgICAgcmVjdC5zZXRZKDIuMmYpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLjJmLCByZWN0LnkoKSk7CisgICAgcmVjdC5zZXRXaWR0aCgyMDMuMmYp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDMuMmYsIHJlY3Qud2lkdGgoKSk7CisgICAgcmVjdC5z
ZXRIZWlnaHQoNzIuOWYpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3Mi45ZiwgcmVjdC5oZWlnaHQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RFbXB0eVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCByZWN0LngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVjdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVjdC5oZWlnaHQoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgcmVj
dC5tYXhZKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZWN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkp
OworfQorCitURVNUKEZsb2F0UmVjdCwgRGVmYXVsdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgdGVzdDsKKworICAgIHRlc3RFbXB0eVJlY3QodGVzdCk7CisKKyAgICB0
ZXN0R2V0QW5kU2V0KHRlc3QpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRpb24o
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgbG9jYXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFZhbHVlQ29uc3RydWN0
aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXN0KDEwLjBmLCAyMC4wZiwgMTAwLjBm
LCA1MC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHRlc3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAw
LjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgdGVzdC5oZWln
aHQoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDExMC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg3MC4wZiwgdGVzdC5tYXhZKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworICAgIEVYUEVD
VF9GQUxTRSh0ZXN0LmlzSW5maW5pdGUoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5s
b2NhdGlvbigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgbG9jYXRpb24ueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGxvY2F0aW9uLnkoKSk7CisKKyAgICBhdXRvIHNpemUg
PSB0ZXN0LnNpemUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCBzaXplLndpZHRoKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
RmxvYXRSZWN0LCBQb2ludFNpemVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBsb2NhdGlvbigyMC4wZiwgMzAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXpl
KDEwMC4wZiwgNTAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRlc3QobG9jYXRpb24s
IHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMwLjBmLCB0ZXN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4w
ZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIHRlc3QuaGVpZ2h0
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRlc3QubWF4WCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoODAuMGYsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodGVzdC5pc0luZmluaXRlKCkpOworCisgICAgYXV0byBsb2NhdGlvbjIgPSB0ZXN0Lmxv
Y2F0aW9uKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBsb2NhdGlvbjIueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIGxvY2F0aW9uMi55KCkpOworCisgICAgYXV0byBzaXpl
MiA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHNpemUyLndpZHRo
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgc2l6ZTIuaGVpZ2h0KCkpOworfQorCitU
RVNUKEZsb2F0UmVjdCwgVHdvUG9pbnRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBwb2ludDEoMjAuMGYsIDMwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBv
aW50MigxNTAuMGYsIDI1MC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdGVzdChwb2lu
dDEsIHBvaW50Mik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTMwLjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMjAuMGYsIHRlc3Qu
aGVpZ2h0KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHRlc3QubWF4WCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjUwLjBmLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc1plcm8oKSk7CisgICAg
RVhQRUNUX1RSVUUodGVzdC5pc0V4cHJlc3NpYmxlQXNJbnRSZWN0KCkpOworICAgIEVYUEVDVF9G
QUxTRSh0ZXN0LmlzSW5maW5pdGUoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5sb2Nh
dGlvbigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgbG9jYXRpb24ueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMzAuMGYsIGxvY2F0aW9uLnkoKSk7CisKKyAgICBhdXRvIHNpemUgPSB0
ZXN0LnNpemUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBmLCBzaXplLndpZHRoKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyMjAuMGYsIHNpemUuaGVpZ2h0KCkpOworfQorCitURVNUKEZs
b2F0UmVjdCwgSW50UmVjdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJl
Y3QoMjAsIDMwLCAxNTAsIDMwMCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdGVzdChyZWN0
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMC4wZiwgdGVzdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHRl
c3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwMC4wZiwgdGVzdC5oZWlnaHQoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE3MC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMzAuMGYsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1RfVFJV
RSh0ZXN0LmlzRXhwcmVzc2libGVBc0ludFJlY3QoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3Qu
aXNJbmZpbml0ZSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9uKCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgzMC4wZiwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHNpemUud2lkdGgoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMwMC4wZiwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBT
ZXRMb2NhdGlvbkFuZFNpemUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Q7CisKKyAg
ICB0ZXN0RW1wdHlSZWN0KHJlY3QpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlv
bigxMC4wZiwgMjAuMGYpOworCisgICAgcmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBm
LCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9UUlVFKHJlY3QuaXNaZXJvKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFeHByZXNz
aWJsZUFzSW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOwor
CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUoMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVj
dC5zZXRTaXplKHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCByZWN0LngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDEwMC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTEwLjBmLCByZWN0Lm1heFgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9G
QUxTRShyZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNaZXJvKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgQ2VudGVy
KQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAy
MDAuMGYpOworCisgICAgYXV0byBjZW50ZXIgPSByZWN0LmNlbnRlcigpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDcwLjBmLCBjZW50ZXIueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBm
LCBjZW50ZXIueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIE1vdmUpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgZGVsdGEoMTAuMGYsIDIwLjBmKTsKKworICAgIHJlY3QubW92ZShk
ZWx0YSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNTAuMGYsIHJlY3QueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
ZGVsdGFQb2ludCgtMjAuMGYsIC00MC4wZik7CisKKyAgICByZWN0Lm1vdmVCeShkZWx0YVBvaW50
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMC4wZiwgcmVjdC55KCkpOworCisgICAgcmVjdC5tb3ZlKC0xMC4wZiwgMjIuMGYp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMzIuMGYsIHJlY3QueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIEV4cGFuZCkKK3sK
KyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBm
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKDEwMC4wZiwgMTAwLjBmKTsKKworICAg
IHJlY3QuZXhwYW5kKHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgcmVjdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjBmLCByZWN0LmhlaWdodCgpKTsKKwor
ICAgIHJlY3QuZXhwYW5kKDU1LjBmLCAyMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjU1
LjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMjIuMGYsIHJlY3QuaGVp
Z2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUyKC0xMC4wZiwgLTIwLjBmKTsK
KworICAgIHJlY3QuZXhwYW5kKHNpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDUuMGYs
IHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwMi4wZiwgcmVjdC5oZWlnaHQo
KSk7CisKKyAgICByZWN0LmV4cGFuZCgtNS4wZiwgLTIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FU
X0VRKDI0MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAwLjBmLCBy
ZWN0LmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzSW5maW5pdGUoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBDb250cmFjdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBzaXplKDUwLjBmLCAxMDAuMGYpOworCisgICAgcmVjdC5jb250cmFjdChzaXplKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLjBmLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3QuY29udHJhY3QoMjUuMGYs
IDIyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyNS4wZiwgcmVjdC53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNzguMGYsIHJlY3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIHNpemUyKC0xMC4wZiwgLTIwLjBmKTsKKworICAgIHJlY3QuY29udHJhY3Qoc2l6
ZTIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDM1LjBmLCByZWN0LndpZHRoKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg5OC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmNvbnRyYWN0
KC01LjBmLCAtMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBF
WFBFQ1RfRkFMU0UocmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgU2hp
ZnRYRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEw
MC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3Quc2hpZnRYRWRnZVRvKDc3LjBmKTsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSg3Ny4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAu
MGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3QueSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDQzLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYs
IHJlY3QuaGVpZ2h0KCkpOworCisgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8oMjAwLjBmKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg3Ny4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMDAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3Qu
eSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEyMy4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFNoaWZ0WUVkZ2Up
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIw
MC4wZik7CisKKyAgICByZWN0LnNoaWZ0WUVkZ2VUbyg1OS4wZik7CisKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0
Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDU5LjBmLCByZWN0LnkoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIzMC4wZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MDAuMGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE3MS4wZiwgcmVjdC5o
ZWlnaHQoKSk7CisKKyAgICByZWN0LnNoaWZ0TWF4WUVkZ2VUbygyNzAuMGYpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4w
ZiwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1OS4wZiwgcmVjdC55KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyNzAuMGYsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMTEuMGYs
IHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgSW5mbGF0ZSkKK3sKKyAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKwor
ICAgIHJlY3QuaW5mbGF0ZVgoNS4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTUuMGYsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTI1LjBmLCByZWN0Lm1heFgoKSk7CisKKyAg
ICByZWN0LmluZmxhdGVZKDQuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDI2LjBmLCByZWN0
LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzNC4wZiwgcmVjdC5tYXhZKCkpOworCisgICAg
cmVjdC5pbmZsYXRlKDEwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg1LjBmLCByZWN0Lngo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEzNS4wZiwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxNi4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDQuMGYs
IHJlY3QubWF4WSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzSW5maW5pdGUoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBDb3JuZXJzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0b3BMZWZ0ID0gcmVjdC5taW5YTWluWUNvcm5lcigpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMC4wZiwgdG9wTGVmdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdG9wTGVm
dC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BSaWdodCA9IHJlY3QubWF4WE1p
bllDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCB0b3BSaWdodC54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdG9wUmlnaHQueSgpKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgYm90dG9tTGVmdCA9IHJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMjAuMGYsIGJvdHRvbUxlZnQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjMwLjBmLCBib3R0b21MZWZ0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJvdHRv
bVJpZ2h0ID0gcmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAu
MGYsIGJvdHRvbVJpZ2h0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgYm90dG9t
UmlnaHQueSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIENvbnRhaW5zKQoreworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRhaW5lZCgzMC4wZiwgNDAuMGYsIDUwLjBmLCAxMDAuMGYp
OworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhjb250YWluZWQpKTsKKworICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBvdXRzaWRlKDEyMC4wZiwgMjMwLjBmLCA1MC4wZiwgMTAwLjBmKTsK
KworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKG91dHNpZGUpKTsKKworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBpbnRlcnNlY3RzKDEwLjBmLCAyMC4wZiwgOTAuMGYsIDE4MC4wZik7CisK
KyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucyhpbnRlcnNlY3RzKSk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHBvaW50SW5zaWRlKDYwLjBmLCA3MC4wZik7CisKKyAgICBBU1NFUlRf
VFJVRShyZWN0LmNvbnRhaW5zKHBvaW50SW5zaWRlKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5j
b250YWlucyhwb2ludEluc2lkZSwgV2ViQ29yZTo6RmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0
cm9rZSkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludE91dHNpZGUoMTYwLjBmLCAy
NzAuMGYpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9pbnRPdXRzaWRlKSk7
CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9pbnRPdXRzaWRlLCBXZWJDb3JlOjpG
bG9hdFJlY3Q6Okluc2lkZUJ1dE5vdE9uU3Ryb2tlKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IHBvaW50T25MaW5lKDIwLjBmLCAzMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0LmNv
bnRhaW5zKHBvaW50T25MaW5lKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9p
bnRPdXRzaWRlLCBXZWJDb3JlOjpGbG9hdFJlY3Q6Okluc2lkZUJ1dE5vdE9uU3Ryb2tlKSk7CisK
KyAgICBBU1NFUlRfVFJVRShyZWN0LmNvbnRhaW5zKDYwLjBmLCA3MC4wZikpOworICAgIEFTU0VS
VF9GQUxTRShyZWN0LmNvbnRhaW5zKDE2MC4wZiwgMjcwLjBmKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBJbnRlcnNlY3RzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAz
MC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRhaW5l
ZCgzMC4wZiwgNDAuMGYsIDUwLjBmLCAxMDAuMGYpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5p
bnRlcnNlY3RzKGNvbnRhaW5lZCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG91dHNpZGUo
MTIwLjBmLCAyMzAuMGYsIDUwLjBmLCAxMDAuMGYpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3Qu
aW50ZXJzZWN0cyhvdXRzaWRlKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgaW50ZXJzZWN0
cygxMC4wZiwgMjAuMGYsIDkwLjBmLCAxODAuMGYpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5p
bnRlcnNlY3RzKGludGVyc2VjdHMpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEludGVyc2VjdFJl
c3VsdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDcwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC5t
YXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4MC4wZiwgcmVjdC55KCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyMzAuMGYsIHJlY3QubWF4WSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIElu
dGVyc2VjdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEEoMjAuMGYsIDMwLjBmLCAx
MDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RCKDcwLjBmLCA4MC4w
ZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVjdEEuaW50ZXJzZWN0KHJlY3RCKTsKKworICAg
IHRlc3RJbnRlcnNlY3RSZXN1bHQocmVjdEEpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3RDKDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgYXV0byBpbnRlcnNlY3Rl
ZCA9IFdlYkNvcmU6OmludGVyc2VjdGlvbihyZWN0QywgcmVjdEIpOworCisgICAgdGVzdEludGVy
c2VjdFJlc3VsdChpbnRlcnNlY3RlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RVbml0ZWRSZWN0
cyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHVuaXRlZCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMjAuMGYsIHVuaXRlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNzAuMGYsIHVuaXRl
ZC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdW5pdGVkLnkoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDI4MC4wZiwgdW5pdGVkLm1heFkoKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBVbml0ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEEoMjAuMGYsIDMwLjBm
LCAxMDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RCKDcwLjBmLCA4
MC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVjdEEudW5pdGUocmVjdEIpOworCisgICAg
dGVzdFVuaXRlZFJlY3RzKHJlY3RBKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Qygy
MC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGF1dG8gdW5pdGVkID0gV2ViQ29y
ZTo6dW5pb25SZWN0KHJlY3RDLCByZWN0Qik7CisKKyAgICB0ZXN0VW5pdGVkUmVjdHModW5pdGVk
KTsKK30KKworVEVTVChGbG9hdFJlY3QsIEV4dGVuZCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IHBvaW50KDE3MC4wZiwgMjgwLjBmKTsKKworICAgIHJlY3QuZXh0ZW5kKHBvaW50KTsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgxNzAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJl
Y3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjgwLjBmLCByZWN0Lm1heFkoKSk7Cit9CisK
K1RFU1QoRmxvYXRSZWN0LCBPdmVybGFwcykKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEFTU0VSVF9GQUxTRShyZWN0
Lm92ZXJsYXBzWFJhbmdlKDAuMGYsIDEwLjBmKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5vdmVy
bGFwc1hSYW5nZSgxMC4wZiwgMzAuMGYpKTsKKyAgICBBU1NFUlRfVFJVRShyZWN0Lm92ZXJsYXBz
WFJhbmdlKDQwLjBmLCA3MC4wZikpOworICAgIEFTU0VSVF9UUlVFKHJlY3Qub3ZlcmxhcHNYUmFu
Z2UoMTEwLjBmLCAxMzAuMGYpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5vdmVybGFwc1hSYW5n
ZSgxNDAuMGYsIDYwMC4wZikpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3Qub3ZlcmxhcHNZUmFu
Z2UoMC4wZiwgMTAuMGYpKTsKKyAgICBBU1NFUlRfVFJVRShyZWN0Lm92ZXJsYXBzWVJhbmdlKDEw
LjBmLCA0MC4wZikpOworICAgIEFTU0VSVF9UUlVFKHJlY3Qub3ZlcmxhcHNZUmFuZ2UoNDAuMGYs
IDcwLjBmKSk7CisgICAgQVNTRVJUX1RSVUUocmVjdC5vdmVybGFwc1lSYW5nZSgyMjAuMGYsIDI1
MC4wZikpOworICAgIEFTU0VSVF9GQUxTRShyZWN0Lm92ZXJsYXBzWVJhbmdlKDI1MC4wZiwgNjAw
LjBmKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3Quc2Nh
bGUoMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjQwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDYwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ2MC4wZiwgcmVjdC5tYXhZ
KCkpOworCisgICAgcmVjdC5zY2FsZSgwLjVmLCAyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHJlY3QubWF4
WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDkyMC4wZiwgcmVjdC5tYXhZKCkpOworCisgICAgcmVjdC5zY2FsZSgxLjBmLCAw
LjI1Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMw
LjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgcmVjdC5tYXhZKCkp
OworfQorCitURVNUKEZsb2F0UmVjdCwgVHJhbnNwb3NlKQoreworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgYXV0byB0cmFu
c3Bvc2VkID0gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDMw
LjBmLCB0cmFuc3Bvc2VkLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgdHJhbnNw
b3NlZC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgdHJhbnNwb3NlZC55KCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRyYW5zcG9zZWQubWF4WSgpKTsKK30KKwor
VEVTVChGbG9hdFJlY3QsIEZpdFRvUG9pbnRzKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KDEwLjBmLCAyMC4wZiwgMzAuMGYsIDQwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgcDAoMjAuMGYsIDMwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAxKDcwLjBmLCAx
MzAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcDIoNTAuMGYsIDIwLjBmKTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IHAzKDkwLjBmLCAxOTAuMGYpOworCisgICAgcmVjdC5maXRUb1Bv
aW50cyhwMCwgcDEpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LngoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDcwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEzMC4wZiwgcmVjdC5t
YXhZKCkpOworCisgICAgcmVjdC5maXRUb1BvaW50cyhwMCwgcDEsIHAyKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3MC4wZiwg
cmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC55KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMzAuMGYsIHJlY3QubWF4WSgpKTsKKworICAgIHJlY3QuZml0VG9Q
b2ludHMocDAsIHAxLCBwMiwgcDMpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDkwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5MC4w
ZiwgcmVjdC5tYXhZKCkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja0Nhc3RSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAu
MGYsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVT
VChGbG9hdFJlY3QsIENhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAu
MGYsIDIwLjBmLCAzMC4wZiwgNDAuMGYpOworCisjaWYgVVNFKENHKQorICAgIENHUmVjdCBjZ1Jl
Y3QgPSByZWN0OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBjZ1JlY3Qub3JpZ2luLngp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgY2dSZWN0Lm9yaWdpbi55KTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMzAuMGYsIGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNDAuMGYsIGNnUmVjdC5zaXplLmhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdEZyb21DR1JlY3QoY2dSZWN0KTsKKworICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21DR1Jl
Y3QpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9SRUNUX0YgZDJkUmVj
dCA9IHJlY3Q7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGQyZFJlY3QubGVmdCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBkMmRSZWN0LnRvcCk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQwLjBmLCBkMmRSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAuMGYsIGQy
ZFJlY3QuYm90dG9tKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0RnJvbUQyRFJlY3Qo
ZDJkUmVjdCk7CisKKyAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tRDJEUmVjdCk7CisjZW5kaWYK
K30KKworc3RhdGljIHZvaWQgY2hlY2tBZGRpdGlvblJlc3VsdDEoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMzAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjIwLjBmLCByZWN0
Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZv
aWQgY2hlY2tBZGRpdGlvblJlc3VsdDIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQor
eworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyNTAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJl
Y3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLjBmLCByZWN0Lm1heFkoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDI0MC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMjIwLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIEFkZGl0aW9u
KQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMTAwLjBmLCAx
MDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByaWdodFNpZGUoMC4wZiwgMC4wZiwgMjAu
MGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdHRvbSgwLjBmLCAwLjBmLCAx
MjAuMGYsIDIwLjBmKTsKKworICAgIGF1dG8gY29tYmluZWQgPSByZWN0ICsgcmlnaHRTaWRlOwor
CisgICAgY2hlY2tBZGRpdGlvblJlc3VsdDEoY29tYmluZWQpOworCisgICAgYXV0byBjb21iaW5l
ZDIgPSBjb21iaW5lZCArIGJvdHRvbTsKKworICAgIGNoZWNrQWRkaXRpb25SZXN1bHQyKGNvbWJp
bmVkMik7CisKKyAgICByZWN0ICs9IHJpZ2h0U2lkZTsKKyAgICByZWN0ICs9IGJvdHRvbTsKKwor
ICAgIGNoZWNrQWRkaXRpb25SZXN1bHQyKHJlY3QpOworfQorCitURVNUKEZsb2F0UmVjdCwgRXF1
YWxpdHkpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAuMGYsIDIwLjBmLCAxMDAu
MGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QyKDEwLjBmLCAyMC4wZiwg
MTAwLjBmLCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByaWdodFNpZGUoMTEwLjBm
LCAyMC4wZiwgMjAuMGYsIDEwMC4wZik7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0ID09IHJlY3Qy
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdCAhPSByZWN0Mik7CisgICAgQVNTRVJUX1RSVUUocmVj
dCAhPSByaWdodFNpZGUpOworICAgIEFTU0VSVF9GQUxTRShyZWN0ID09IHJpZ2h0U2lkZSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBJbmZpbml0ZVJlY3QpCit7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGluZmluaXRlID0gV2ViQ29yZTo6RmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8gMiwg
aW5maW5pdGUueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKSAvIDIsIGluZmluaXRlLnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgaW5maW5pdGUud2lkdGgoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgaW5maW5p
dGUuaGVpZ2h0KCkpOworCisgICAgLy8gRklYTUU6IFdlIGhhdmUgYW4gdW51c3VhbCByZXByZXNl
bnRhdGlvbiBmb3Igb3VyIGluZmluaXRlIHJlY3QuCisgICAgLy8gV2ViQ29yZTo6RmxvYXQ6Omlu
ZmluaXRlUmVjdCBpcyAobmVnYXRpdmUgaW5maW5pdHkpLzIgZm9yIHRoZSB1cHBlciBsZWZ0IGNv
cm5lciwKKyAgICAvLyB3aGlsZSBDb3JlR3JhcGhpY3MgYW5kIEQyRCB1c2UgKG5lZ2F0aXZlIGlu
ZmluaXR5KS4KKworI2lmIFVTRShDRykKKyAgICBDR1JlY3QgY2dJbmZpbml0ZVJlY3QgPSBDR1Jl
Y3RJbmZpbml0ZTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueCk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGNnSW5maW5pdGVSZWN0Lm9y
aWdpbi55KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueCArIGNnSW5maW5pdGVSZWN0LnNpemUud2lk
dGgpOworICAgIEVYUEVDVF9GTE9BVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCksIGNnSW5maW5pdGVSZWN0Lm9yaWdpbi55ICsgY2dJbmZpbml0ZVJlY3Quc2l6ZS5oZWlnaHQp
OworICAgIC8vIEFTU0VSVF9UUlVFKGluZmluaXRlID09IGNnSW5maW5pdGVSZWN0KTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEQyRDFfUkVDVF9GIGQyZEluZmluaXRlUmVjdCA9
IEQyRDE6OkluZmluaXRlUmVjdCgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC1zdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5sZWZ0KTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgZDJkSW5maW5p
dGVSZWN0LnRvcCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjptYXgoKSwgZDJkSW5maW5pdGVSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZpbml0ZVJlY3QuYm90dG9t
KTsKKyAgICAvLyBBU1NFUlRfVFJVRShpbmZpbml0ZSA9PSBkMmRJbmZpbml0ZVJlY3QpOworI2Vu
ZGlmCit9CisKK1RFU1QoRmxvYXRSZWN0LCBFbmNsb3NpbmdBbmRSb3VuZGluZykKK3sKKyAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgxMC4wZiwgMjAuMGYsIDEwMjQuM2YsIDc2OC4zZik7CisK
KyAgICBhdXRvIGVuY2xvc2VkID0gV2ViQ29yZTo6ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhy
ZWN0LCAxLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgZW5jbG9zZWQueCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGVuY2xvc2VkLnkoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDEwMzUuMGYsIGVuY2xvc2VkLm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4
OS4wZiwgZW5jbG9zZWQubWF4WSgpKTsKKworICAgIGF1dG8gZW5jbG9zZWQyID0gV2ViQ29yZTo6
ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhyZWN0LCAyLjBmKTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMC4wZiwgZW5jbG9zZWQyLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBl
bmNsb3NlZDIueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAzNC41ZiwgZW5jbG9zZWQyLm1h
eFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4OC41ZiwgZW5jbG9zZWQyLm1heFkoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBFbmNsb3NpbmdJbnRSZWN0KQoreworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMTAyNC4zZiwgNzY4LjZmKTsKKworICAgIGF1dG8g
ZW5jbG9zZWQgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEwLCBlbmNsb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMCwgZW5j
bG9zZWQueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAzNSwgZW5jbG9zZWQubWF4WCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNzg5LCBlbmNsb3NlZC5tYXhZKCkpOworfQorCitURVNUKEZs
b2F0UmVjdCwgUm91bmRlZEludFJlY3QpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Qo
MTAuMGYsIDIwLjBmLCAxMDI0LjNmLCA3NjguNmYpOworCisgICAgYXV0byBlbmNsb3NlZCA9IFdl
YkNvcmU6OnJvdW5kZWRJbnRSZWN0KHJlY3QpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLCBl
bmNsb3NlZC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMCwgZW5jbG9zZWQueSgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAzNCwgZW5jbG9zZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoNzg5LCBlbmNsb3NlZC5tYXhZKCkpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6RmxvYXRTaXpl
IHNpemUpCit7CisgICAgc2l6ZS5zZXRXaWR0aCgxMDEuMWYpOworICAgIEVYUEVDVF9GTE9BVF9F
USgxMDEuMWYsIHNpemUud2lkdGgoKSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoMjE4LjJmKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjE4LjJmLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9h
dFNpemUsIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRl
c3Q7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc1plcm8oKSk7CisgICAgQVNTRVJUX1RSVUUo
dGVzdC5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0
KTsKK30KKworVEVTVChGbG9hdFNpemUsIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSB0ZXN0KDEwMjQuMGYsIDc2OC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMTAyNC4wZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0
ZXN0LmhlaWdodCgpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNFeHBy
ZXNzaWJsZUFzSW50U2l6ZSgpKTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBlcHNpbG9uID0g
MC4wMDAxZjsKKyAgICBFWFBFQ1RfTkVBUigxLjMzMzNmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVw
c2lsb24pOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB0ZXN0MigxMDI0LjhmLCA3NjguM2YpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBJbnRTaXplQ29uc3Ry
dWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgxMDI0LCA3NjgpOworICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KHNpemUpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQu
MGYsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5oZWln
aHQoKSk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9G
QUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzRXhwcmVzc2libGVB
c0ludFNpemUoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7
CisgICAgRVhQRUNUX05FQVIoMS4zMzMzZiwgdGVzdC5hc3BlY3RSYXRpbygpLCBlcHNpbG9uKTsK
KworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBTY2FsZSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAg
dGVzdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCB0ZXN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTM2LjBmLCB0ZXN0LmhlaWdodCgpKTsKKwor
ICAgIHRlc3Quc2NhbGUoMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgdGVz
dC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0ZXN0LmhlaWdodCgpKTsK
KworICAgIHRlc3Quc2NhbGUoMi4wZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA0
OC4wZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzg0LjBmLCB0ZXN0Lmhl
aWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIEV4cGFuZCkKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MjQuMGYsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5o
ZWlnaHQoKSk7CisKKyAgICB0ZXN0LmV4cGFuZCgxMDAuMGYsIDUwLjBmKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgxMTI0LjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
MTguMGYsIHRlc3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG90aGVyKDIw
NDguMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIGV4cGFuZGVkID0gdGVzdC5leHBhbmRlZFRvKG90
aGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCBleHBhbmRlZC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoODE4LjBmLCBleHBhbmRlZC5oZWlnaHQoKSk7Cit9CisKK1RF
U1QoRmxvYXRTaXplLCBTaHJpbmspCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRlc3QoMTAy
NC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgb3RoZXIoMTAwMC4wZiwgNzAw
LjBmKTsKKworICAgIGF1dG8gc2hydW5rZW4gPSB0ZXN0LnNocnVua1RvKG90aGVyKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAwLjBmLCBzaHJ1bmtlbi53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNzAwLjBmLCBzaHJ1bmtlbi5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFNpemUgb3RoZXIyKDIwMDAuMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIHNocnVua2VuMiA9IHRl
c3Quc2hydW5rVG8ob3RoZXIyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBzaHJ1
bmtlbjIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDcwMC4wZiwgc2hydW5rZW4yLmhl
aWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIERpYWdvbmFsTGVuZ3RoQW5kQXJlYSkKK3sK
KyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEyODAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGgoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDE2Mzg0MDAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg3ODY0MzIuMGYsIHRlc3QuYXJlYSgpKTsKK30KKworVEVTVChGbG9h
dFNpemUsIFRyYW5zcG9zZWRTaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KDEw
MjQuMGYsIDc2OC4wZik7CisKKyAgICBhdXRvIHRyYW5zcG9zZWRTaXplID0gdGVzdC50cmFuc3Bv
c2VkU2l6ZSgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQuMGYsIHRlc3Qud2lkdGgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVzdC5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
RmxvYXRTaXplLCBDYXN0aW5nKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KDEwMjQu
MGYsIDc2OC4wZik7CisKKyNpZiBVU0UoQ0cpCisgICAgQ0dTaXplIGNnU2l6ZSA9IHRlc3Q7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgY2dTaXplLndpZHRoKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNzY4LjBmLCBjZ1NpemUuaGVpZ2h0KTsKKworICAgIENHU2l6ZSBjZ1NpemUyID0g
Q0dTaXplTWFrZSgtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0
Q0coY2dTaXplMik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLTIyLjNmLCB0ZXN0Q0cud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0Q0cuaGVpZ2h0KCkpOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9TSVpFX0YgZDJkU2l6ZSA9IHRlc3Q7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgZDJkU2l6ZS53aWR0aCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDc2OC4wZiwgZDJkU2l6ZS5oZWlnaHQpOworCisgICAgRDJEMV9TSVpFX0YgZDJk
U2l6ZTIgPSBEMkQxOjpTaXplRigtMjIuM2YsIDE0LjJmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB0ZXN0RDJEKGQyZFNpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIuM2YsIHRl
c3REMkQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0RDJELmhlaWdo
dCgpKTsKKyNlbmRpZgorfQorCitURVNUKEZsb2F0U2l6ZSwgQWRkU3VidHJhY3QpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIGEoNTEyLjBmLCAzODQuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBiKDEwMC4wZiwgMTAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjID0gYSAr
IGI7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjEyLjBmLCBjLndpZHRoKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg0ODQuMGYsIGMuaGVpZ2h0KCkpOworCisgICAgYSArPSBiOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDYxMi4wZiwgYS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDg0
LjBmLCBhLmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhMig1MTIuMGYsIDM4
NC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZCA9IGEyIC0gYjsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSg0MTIuMGYsIGQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI4NC4w
ZiwgZC5oZWlnaHQoKSk7CisKKyAgICBhMiAtPSBiOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQx
Mi4wZiwgYTIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI4NC4wZiwgYTIuaGVpZ2h0
KCkpOworfQorCitURVNUKEZsb2F0U2l6ZSwgTmVnYXRpb24pCit7CisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIGEoNTEyLjBmLCAzODQuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG5lZ2F0
ZWQgPSAtYTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgtNTEyLjBmLCBuZWdhdGVkLndpZHRoKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgtMzg0LjBmLCBuZWdhdGVkLmhlaWdodCgpKTsKK30KKwor
VEVTVChGbG9hdFNpemUsIE11bHRpcGx5KQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDUx
Mi4wZiwgMzg0LjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtdWx0aXBsaWVkID0gYSAq
IDIuMGY7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgbXVsdGlwbGllZC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCBtdWx0aXBsaWVkLmhlaWdodCgpKTsKKwor
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtdWx0aXBsaWVkMiA9IDMuMGYgKiBhOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE1MzYuMGYsIG11bHRpcGxpZWQyLndpZHRoKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMTUyLjBmLCBtdWx0aXBsaWVkMi5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpG
bG9hdFNpemUgYigxMDI0LjBmLCA3NjguMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG11
bHRpcGxpZWQzID0gYSAqIGI7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTI0Mjg4LjBmLCBtdWx0
aXBsaWVkMy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjk0OTEyLjBmLCBtdWx0aXBs
aWVkMy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBEaXZpZGUpCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIGEoMTAyNC4wZiwgNzY4LjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBkaXZpZGVkID0gYSAvIDIuMGY7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTEyLjBmLCBk
aXZpZGVkLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzODQuMGYsIGRpdmlkZWQuaGVp
Z2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGIoNTEyLjBmLCAyNTYuMGYpOworCisg
ICAgV2ViQ29yZTo6RmxvYXRTaXplIGRpdmlkZWQyID0gMTAyNC4wZiAvIGI7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMi4wZiwgZGl2aWRlZDIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQuMGYsIGRpdmlkZWQyLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIEVxdWFsaXR5
KQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDEwMjQuMGYsIDc2OC4wZik7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIGIoMTAyNC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNp
emUgYyg3NjguMGYsIDUzNC4wRik7CisKKyAgICBBU1NFUlRfVFJVRShhID09IGIpOworICAgIEFT
U0VSVF9GQUxTRShhICE9IGIpOworICAgIEFTU0VSVF9GQUxTRShhID09IGMpOworICAgIEFTU0VS
VF9UUlVFKGEgIT0gYyk7CisKKyAgICBBU1NFUlRfVFJVRShXZWJDb3JlOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGEsIGIpKTsKKyAgICBBU1NFUlRfRkFMU0UoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlF
cXVhbChhLCBjKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBGbG9vcnMpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIGEoMTAyNC40ZiwgNzY4LjhmKTsKKworICAgIFdlYkNvcmU6OkludFNpemUg
Zmxvb3JTaXplID0gV2ViQ29yZTo6Zmxvb3JlZEludFNpemUoYSk7CisKKyAgICBFWFBFQ1RfRVEo
MTAyNCwgZmxvb3JTaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGZsb29yU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmbG9vclBvaW50ID0gV2ViQ29yZTo6
Zmxvb3JlZEludFBvaW50KGEpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIGZsb29yUG9pbnQueCgp
KTsKKyAgICBFWFBFQ1RfRVEoNzY4LCBmbG9vclBvaW50LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRT
aXplLCBSb3VuZGVkKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBhKDEwMjQuNGYsIDc2OC44
Zik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWRTaXplID0gV2ViQ29yZTo6cm91bmRl
ZEludFNpemUoYSk7CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgcm91bmRlZFNpemUud2lkdGgoKSk7
CisgICAgRVhQRUNUX0VRKDc2OSwgcm91bmRlZFNpemUuaGVpZ2h0KCkpOworCisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBleHBhbmRlZFNpemUgPSBXZWJDb3JlOjpleHBhbmRlZEludFNpemUoYSk7CisK
KyAgICBFWFBFQ1RfRVEoMTAyNSwgZXhwYW5kZWRTaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9F
USg3NjksIGV4cGFuZGVkU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30KSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFBvaW50LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQpCit7CisgICAgcG9pbnQuc2V0WCgxKTsKKyAgICBFWFBFQ1RfRVEoMSwgcG9pbnQueCgp
KTsKKyAgICBwb2ludC5zZXRZKDIpOworICAgIEVYUEVDVF9FUSgyLCBwb2ludC55KCkpOworfQor
CitURVNUKEludFBvaW50LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6Oklu
dFBvaW50IHRlc3Q7CisKKyAgICBFWFBFQ1RfRVEoMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9F
USgwLCB0ZXN0LnkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc1plcm8oKSk7CisKKyAgICB0
ZXN0R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEludFBvaW50LCBWYWx1ZUNvbnN0cnVjdGlv
bikKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0KDEwLCA5KTsKKworICAgIEVYUEVDVF9F
USgxMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9FUSg5LCB0ZXN0LnkoKSk7CisKKyAgICB0ZXN0
R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEludFBvaW50LCBaZXJvQ29uc3RydWN0aW9uKQor
eworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3QgPSBXZWJDb3JlOjpJbnRQb2ludDo6emVybygp
OworCisgICAgRVhQRUNUX0VRKDAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgdGVzdC55
KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNaZXJvKCkpOworfQorCitURVNUKEludFBvaW50
LCBJbnRTaXplQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdElucHV0
KDIwMDMsIDE5OTcpOworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3QodGVzdElucHV0KTsKKwor
ICAgIEVYUEVDVF9FUSgyMDAzLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDE5OTcsIHRlc3Qu
eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc1plcm8oKSk7Cit9CisKK1RFU1QoSW50UG9p
bnQsIEZsb2F0UG9pbnRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0
ZXN0SW5wdXQoMjAwMy4yZiwgMTk5Ny4zZik7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdGVzdCh0
ZXN0SW5wdXQpOworCisgICAgRVhQRUNUX0VRKDIwMDMsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTk5NywgdGVzdC55KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKK30K
KworVEVTVChJbnRQb2ludCwgTW92ZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0KDEw
LCAyMCk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKDMwLCA1MCk7CisKKyAgICB0ZXN0Lm1v
dmUoc2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEoNDAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEo
NzAsIHRlc3QueSgpKTsKKworICAgIHRlc3QubW92ZSgtMiwgOCk7CisKKyAgICBFWFBFQ1RfRVEo
MzgsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoNzgsIHRlc3QueSgpKTsKKworICAgIFdlYkNv
cmU6OkludFBvaW50IG9mZnNldCgxMDAsIDEwMCk7CisKKyAgICB0ZXN0Lm1vdmVCeShvZmZzZXQp
OworCisgICAgRVhQRUNUX0VRKDEzOCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9FUSgxNzgsIHRl
c3QueSgpKTsKK30KKworVEVTVChJbnRQb2ludCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgdGVzdCgxMCwgMjApOworCisgICAgdGVzdC5zY2FsZSgyLjApOworCisgICAgRVhQRUNU
X0VRKDIwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDQwLCB0ZXN0LnkoKSk7CisKKyAgICB0
ZXN0LnNjYWxlKDMuMCwgMS41KTsKKworICAgIEVYUEVDVF9FUSg2MCwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9FUSg2MCwgdGVzdC55KCkpOworfQorCitURVNUKEludFBvaW50LCBFeHBhbmQpCit7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworICAgIFdlYkNvcmU6OkludFBvaW50
IGIoMjAsIDQwKTsKKworICAgIGF1dG8gYyA9IGEuZXhwYW5kZWRUbyhiKTsKKworICAgIEVYUEVD
VF9FUSgyMCwgYy54KCkpOworICAgIEVYUEVDVF9FUSg0MCwgYy55KCkpOworfQorCitURVNUKElu
dFBvaW50LCBTaHJpbmspCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworICAg
IFdlYkNvcmU6OkludFBvaW50IGIoMjAsIDQwKTsKKworICAgIGF1dG8gYyA9IGIuc2hydW5rVG8o
YSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIGMueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGMueSgp
KTsKK30KKworLyoKKworSW50UG9pbnQgY29uc3RyYWluZWRCZXR3ZWVuKGNvbnN0IEludFBvaW50
JiBtaW4sIGNvbnN0IEludFBvaW50JiBtYXgpIGNvbnN0OworCitpbnQgZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCit2b2lkIGNsYW1wTmVnYXRpdmVUb1pl
cm8oKQoreworKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7Cit9CisqLworCitURVNUKEludFBv
aW50LCBUcmFuc3Bvc2UpCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworCisg
ICAgYXV0byBiID0gYS50cmFuc3Bvc2VkUG9pbnQoKTsKKworICAgIEVYUEVDVF9FUSgyMCwgYi54
KCkpOworICAgIEVYUEVDVF9FUSgxMCwgYi55KCkpOworfQorCitURVNUKEludFBvaW50LCBDYXN0
KQoreworICAgIFdlYkNvcmU6OkludFBvaW50IGEoMTAsIDIwKTsKKworICAgIFdlYkNvcmU6Oklu
dFNpemUgYXMgPSBXZWJDb3JlOjp0b0ludFNpemUoYSk7CisgICAgRVhQRUNUX0VRKDEwLCBhcy53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGFzLmhlaWdodCgpKTsKKworI2lmIFVTRShDRykK
KyAgICBDR1BvaW50IGNnUG9pbnQgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBj
Z1BvaW50LngpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgY2dQb2ludC55KTsKKworICAg
IFdlYkNvcmU6OkludFBvaW50IGZyb21DR1BvaW50KGNnUG9pbnQpOworICAgIEVYUEVDVF9FUSgx
MCwgZnJvbUNHUG9pbnQueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZyb21DR1BvaW50LnkoKSk7
CisgICAgQVNTRVJUX1RSVUUoYSA9PSBmcm9tQ0dQb2ludCk7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICBQT0lOVCBnZGlQb2ludCA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MTAuMGYsIGdkaVBvaW50LngpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgZ2RpUG9pbnQu
eSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tR0RJUG9pbnQoZ2RpUG9pbnQpOworICAg
IEVYUEVDVF9FUSgxMCwgZnJvbUdESVBvaW50LngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBmcm9t
R0RJUG9pbnQueSgpKTsKKyAgICBBU1NFUlRfVFJVRShhID09IGZyb21HRElQb2ludCk7CisKKyAg
ICBEMkQxX1BPSU5UXzJGIGQyZFBvaW50RiA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAu
MGYsIGQyZFBvaW50Ri54KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAuMGYsIGQyZFBvaW50Ri55
KTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGZyb21EMkRQb2ludEYoZDJkUG9pbnRGKTsKKyAg
ICBFWFBFQ1RfRVEoMTAsIGZyb21EMkRQb2ludEYueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZy
b21EMkRQb2ludEYueSgpKTsKKyAgICBBU1NFUlRfVFJVRShhID09IGZyb21EMkRQb2ludEYpOwor
CisgICAgRDJEMV9QT0lOVF8yVSBkMmRQb2ludFUgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VR
KDEwLjBmLCBkMmRQb2ludFUueCk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwLjBmLCBkMmRQb2lu
dFUueSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tRDJEUG9pbnRVKGQyZFBvaW50VSk7
CisgICAgRVhQRUNUX0VRKDEwLCBmcm9tRDJEUG9pbnRVLngoKSk7CisgICAgRVhQRUNUX0VRKDIw
LCBmcm9tRDJEUG9pbnRVLnkoKSk7CisgICAgQVNTRVJUX1RSVUUoYSA9PSBmcm9tRDJEUG9pbnRV
KTsKKyNlbmRpZgorfQorCitURVNUKEludFBvaW50LCBBZGRpdGlvbikKK3sKKyAgICBXZWJDb3Jl
OjpJbnRQb2ludCBhKDEwLCAyMCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwgNjApOwor
ICAgIFdlYkNvcmU6OkludFNpemUgYnMoNTAsIDYwKTsKKworICAgIGF1dG8gYyA9IGEgKyBiOwor
CisgICAgRVhQRUNUX0VRKDYwLCBjLngoKSk7CisgICAgRVhQRUNUX0VRKDgwLCBjLnkoKSk7CisK
KyAgICBhICs9IGJzOworCisgICAgRVhQRUNUX0VRKDYwLCBhLngoKSk7CisgICAgRVhQRUNUX0VR
KDgwLCBhLnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIFN1YnRyYWN0aW9uKQoreworICAgIFdl
YkNvcmU6OkludFBvaW50IGEoMTAwLCA4MCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwg
NjApOworICAgIFdlYkNvcmU6OkludFNpemUgYnMoNTAsIDYwKTsKKworICAgIFdlYkNvcmU6Oklu
dFNpemUgYyA9IGEgLSBiOworCisgICAgRVhQRUNUX0VRKDUwLCBjLndpZHRoKCkpOworICAgIEVY
UEVDVF9FUSgyMCwgYy5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBkID0gYSAt
IGJzOworCisgICAgRVhQRUNUX0VRKDUwLCBkLngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBkLnko
KSk7CisKKyAgICBhIC09IGJzOworCisgICAgRVhQRUNUX0VRKDUwLCBhLngoKSk7CisgICAgRVhQ
RUNUX0VRKDIwLCBhLnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIE5lZ2F0aW9uKQoreworICAg
IFdlYkNvcmU6OkludFBvaW50IGEoMTAwLCA4MCk7CisgICAgYXV0byBiID0gLWE7CisKKyAgICBF
WFBFQ1RfRVEoLTEwMCwgYi54KCkpOworICAgIEVYUEVDVF9FUSgtODAsIGIueSgpKTsKK30KKwor
VEVTVChJbnRQb2ludCwgRXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMDAs
IDgwKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBiKDcwLCA1MCk7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgYygxMDAsIDgwKTsKKworICAgIEFTU0VSVF9UUlVFKGEgPT0gYyk7CisgICAgQVNTRVJU
X0ZBTFNFKGEgPT0gYik7CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYyk7CisgICAgQVNTRVJUX1RS
VUUoYSAhPSBiKTsKK30KKworVEVTVChJbnRQb2ludCwgRGlzdGFuY2VTcXVhcmVkKQoreworICAg
IFdlYkNvcmU6OkludFBvaW50IGEoMTAsIDIwKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBiKDMw
LCA1MCk7CisKKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVkID0gYS5kaXN0YW5jZVNxdWFyZWRUb1Bv
aW50KGIpOworCisgICAgQVNTRVJUX0VRKDEzMDAsIGRpc3RhbmNlU3F1YXJlZCk7Cit9CisKK30K
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UmVjdC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKworI2lmIFVTRShDRykKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJ
TikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkludFJlY3QgcmVjdCkKK3sK
KyAgICByZWN0LnNldFgoMSk7CisgICAgRVhQRUNUX0VRKDEsIHJlY3QueCgpKTsKKyAgICByZWN0
LnNldFkoMik7CisgICAgRVhQRUNUX0VRKDIsIHJlY3QueSgpKTsKKyAgICByZWN0LnNldFdpZHRo
KDIwMyk7CisgICAgRVhQRUNUX0VRKDIwMywgcmVjdC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhl
aWdodCg3Myk7CisgICAgRVhQRUNUX0VRKDczLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEVtcHR5UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IEVYUEVDVF9FUSgwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3QueSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC5oZWln
aHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
cmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVT
VChJbnRSZWN0LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFJlY3Qg
dGVzdDsKKworICAgIHRlc3RFbXB0eVJlY3QodGVzdCk7CisKKyAgICB0ZXN0R2V0QW5kU2V0KHRl
c3QpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRpb24oKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgbG9jYXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbG9jYXRpb24ueSgpKTsKKwor
ICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9FUSgwLCBzaXplLndpZHRo
KCkpOworICAgIEVYUEVDVF9FUSgwLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0
LCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRlc3QoMTAsIDIw
LCAxMDAsIDUwKTsKKworICAgIEVYUEVDVF9FUSgxMCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9F
USgyMCwgdGVzdC55KCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHRlc3Qud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDUwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMTEwLCB0ZXN0Lm1h
eFgoKSk7CisgICAgRVhQRUNUX0VRKDcwLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3QuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9uKCk7
CisgICAgRVhQRUNUX0VRKDEwLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9FUSgyMCwgbG9j
YXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9F
USgxMDAsIHNpemUud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzaXplLmhlaWdodCgpKTsK
K30KKworVEVTVChJbnRSZWN0LCBQb2ludFNpemVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbG9jYXRpb24oMjAsIDMwKTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUo
MTAwLCA1MCk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRlc3QobG9jYXRpb24sIHNpemUpOwor
CisgICAgRVhQRUNUX0VRKDIwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDMwLCB0ZXN0Lnko
KSk7CisgICAgRVhQRUNUX0VRKDEwMCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTAs
IHRlc3QuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUSgxMjAsIHRlc3QubWF4WCgpKTsKKyAgICBF
WFBFQ1RfRVEoODAsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5
KCkpOworCisgICAgYXV0byBsb2NhdGlvbjIgPSB0ZXN0LmxvY2F0aW9uKCk7CisgICAgRVhQRUNU
X0VRKDIwLCBsb2NhdGlvbjIueCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIGxvY2F0aW9uMi55KCkp
OworCisgICAgYXV0byBzaXplMiA9IHRlc3Quc2l6ZSgpOworICAgIEVYUEVDVF9FUSgxMDAsIHNp
emUyLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2l6ZTIuaGVpZ2h0KCkpOworfQorCitU
RVNUKEludFJlY3QsIEZsb2F0UmVjdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDE1MC4wZiwgMzAwLjBmKTsKKworICAgIFdlYkNvcmU6
OkludFJlY3QgdGVzdChyZWN0KTsKKworICAgIEVYUEVDVF9FUSgyMCwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9FUSgzMCwgdGVzdC55KCkpOworICAgIEVYUEVDVF9FUSgxNTAsIHRlc3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDMwMCwgdGVzdC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDE3
MCwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgzMzAsIHRlc3QubWF4WSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3Qu
bG9jYXRpb24oKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGxvY2F0aW9uLngoKSk7CisgICAgRVhQRUNU
X0VRKDMwLCBsb2NhdGlvbi55KCkpOworCisgICAgYXV0byBzaXplID0gdGVzdC5zaXplKCk7Cisg
ICAgRVhQRUNUX0VRKDE1MCwgc2l6ZS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAwLCBzaXpl
LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBTZXRMb2NhdGlvbkFuZFNpemUpCit7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0OworCisgICAgdGVzdEVtcHR5UmVjdChyZWN0KTsKKwor
ICAgIFdlYkNvcmU6OkludFBvaW50IGxvY2F0aW9uKDEwLCAyMCk7CisKKyAgICByZWN0LnNldExv
Y2F0aW9uKGxvY2F0aW9uKTsKKworICAgIEVYUEVDVF9FUSgxMCwgcmVjdC54KCkpOworICAgIEVY
UEVDVF9FUSgyMCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSgwLCByZWN0LndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMTAsIHJlY3Qu
bWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZWN0LmlzRW1wdHkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoMTAwLCAyMDAp
OworCisgICAgcmVjdC5zZXRTaXplKHNpemUpOworCisgICAgRVhQRUNUX0VRKDEwLCByZWN0Lngo
KSk7CisgICAgRVhQRUNUX0VRKDIwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVj
dC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBF
Q1RfRVEoMTEwLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDIyMCwgcmVjdC5tYXhZKCkp
OworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwg
Q2VudGVyKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgNDAsIDEwMCwgMjAwKTsK
KworICAgIGF1dG8gY2VudGVyID0gcmVjdC5jZW50ZXIoKTsKKworICAgIEVYUEVDVF9FUSg3MCwg
Y2VudGVyLngoKSk7CisgICAgRVhQRUNUX0VRKDE0MCwgY2VudGVyLnkoKSk7Cit9CisKK1RFU1Qo
SW50UmVjdCwgTW92ZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAs
IDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGRlbHRhKDEwLCAyMCk7CisKKyAgICByZWN0
Lm1vdmUoZGVsdGEpOworCisgICAgRVhQRUNUX0VRKDMwLCByZWN0LngoKSk7CisgICAgRVhQRUNU
X0VRKDUwLCByZWN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBkZWx0YVBvaW50KC0y
MCwgLTQwKTsKKworICAgIHJlY3QubW92ZUJ5KGRlbHRhUG9pbnQpOworCisgICAgRVhQRUNUX0VR
KDEwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDEwLCByZWN0LnkoKSk7CisKKyAgICByZWN0
Lm1vdmUoLTEwLCAyMik7CisKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC54KCkpOworICAgIEVYUEVD
VF9FUSgzMiwgcmVjdC55KCkpOworfQorCitURVNUKEludFJlY3QsIEV4cGFuZCkKK3sKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHNpemUoMTAwLCAxMDApOworCisgICAgcmVjdC5leHBhbmQoc2l6ZSk7CisKKyAgICBF
WFBFQ1RfRVEoMjAwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgzMDAsIHJlY3QuaGVp
Z2h0KCkpOworCisgICAgcmVjdC5leHBhbmQoNTUsIDIyKTsKKworICAgIEVYUEVDVF9FUSgyNTUs
IHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDMyMiwgcmVjdC5oZWlnaHQoKSk7CisKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIHNpemUyKC0xMCwgLTIwKTsKKworICAgIHJlY3QuZXhwYW5kKHNp
emUyKTsKKworICAgIEVYUEVDVF9FUSgyNDUsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KDMwMiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmV4cGFuZCgtNSwgLTIpOworCisgICAg
RVhQRUNUX0VRKDI0MCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAwLCByZWN0Lmhl
aWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDb250cmFjdCkKK3sKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emUoNTAsIDEwMCk7CisKKyAgICByZWN0LmNvbnRyYWN0KHNpemUpOworCisgICAgRVhQRUNUX0VR
KDUwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3QuaGVpZ2h0KCkpOwor
CisgICAgcmVjdC5jb250cmFjdCgyNSwgMjIpOworCisgICAgRVhQRUNUX0VRKDI1LCByZWN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9FUSg3OCwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIHNpemUyKC0xMCwgLTIwKTsKKworICAgIHJlY3QuY29udHJhY3Qoc2l6ZTIpOwor
CisgICAgRVhQRUNUX0VRKDM1LCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg5OCwgcmVj
dC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmNvbnRyYWN0KC01LCAtMik7CisKKyAgICBFWFBFQ1Rf
RVEoNDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKK1RFU1QoSW50UmVjdCwgU2hpZnRYRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICByZWN0LnNoaWZ0WEVkZ2VUbyg3Nyk7CisK
KyAgICBFWFBFQ1RfRVEoNzcsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCByZWN0Lm1h
eFgoKSk7CisgICAgRVhQRUNUX0VRKDMwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwg
cmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSg0MywgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoMjAwLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKDIw
MCk7CisKKyAgICBFWFBFQ1RfRVEoNzcsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCBy
ZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDMwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VR
KDIzMCwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgxMjMsIHJlY3Qud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKDIwMCwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgU2hp
ZnRZRWRnZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7
CisKKyAgICByZWN0LnNoaWZ0WUVkZ2VUbyg1OS4wZik7CisKKyAgICBFWFBFQ1RfRVEoMjAsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VR
KDU5LCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwgcmVjdC5tYXhZKCkpOworICAgIEVY
UEVDVF9FUSgxMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE3MSwgcmVjdC5oZWln
aHQoKSk7CisKKyAgICByZWN0LnNoaWZ0TWF4WUVkZ2VUbygyNzAuMGYpOworCisgICAgRVhQRUNU
X0VRKDIwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDEyMCwgcmVjdC5tYXhYKCkpOworICAg
IEVYUEVDVF9FUSg1OSwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSgyNzAsIHJlY3QubWF4WSgp
KTsKKyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgyMTEs
IHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3QsIEluZmxhdGUpCit7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisgICAgcmVjdC5pbmZsYXRl
WCg1KTsKKworICAgIEVYUEVDVF9FUSgxNSwgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgxMjUs
IHJlY3QubWF4WCgpKTsKKworICAgIHJlY3QuaW5mbGF0ZVkoNCk7CisKKyAgICBFWFBFQ1RfRVEo
MjYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoMjM0LCByZWN0Lm1heFkoKSk7CisKKyAgICBy
ZWN0LmluZmxhdGUoMTApOworCisgICAgRVhQRUNUX0VRKDUsIHJlY3QueCgpKTsKKyAgICBFWFBF
Q1RfRVEoMTM1LCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCByZWN0LnkoKSk7Cisg
ICAgRVhQRUNUX0VRKDI0NCwgcmVjdC5tYXhZKCkpOworfQorCitURVNUKEludFJlY3QsIENvcm5l
cnMpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BMZWZ0ID0gcmVjdC5taW5YTWluWUNvcm5lcigpOwor
ICAgIEVYUEVDVF9FUSgyMCwgdG9wTGVmdC54KCkpOworICAgIEVYUEVDVF9FUSgzMCwgdG9wTGVm
dC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BSaWdodCA9IHJlY3QubWF4WE1p
bllDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCB0b3BSaWdodC54KCkpOworICAgIEVYUEVD
VF9FUSgzMCwgdG9wUmlnaHQueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYm90dG9t
TGVmdCA9IHJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGJvdHRvbUxl
ZnQueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjMwLCBib3R0b21MZWZ0LnkoKSk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGJvdHRvbVJpZ2h0ID0gcmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAg
IEVYUEVDVF9FUSgxMjAsIGJvdHRvbVJpZ2h0LngoKSk7CisgICAgRVhQRUNUX0VRKDIzMCwgYm90
dG9tUmlnaHQueSgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDb250YWlucykKK3sKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNvbnRhaW5lZCgzMCwgNDAsIDUwLCAxMDApOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5j
b250YWlucyhjb250YWluZWQpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3Qgb3V0c2lkZSgxMjAs
IDIzMCwgNTAsIDEwMCk7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucyhvdXRzaWRl
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGludGVyc2VjdHMoMTAsIDIwLCA5MCwgMTgwKTsK
KworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKGludGVyc2VjdHMpKTsKKworICAgIFdl
YkNvcmU6OkludFBvaW50IHBvaW50SW5zaWRlKDYwLCA3MCk7CisKKyAgICBBU1NFUlRfVFJVRShy
ZWN0LmNvbnRhaW5zKHBvaW50SW5zaWRlKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dE91dHNpZGUoMTYwLCAyNzApOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMocG9p
bnRPdXRzaWRlKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludE9uTGluZSgyMCwgMzAp
OworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhwb2ludE9uTGluZSkpOworCisgICAg
QVNTRVJUX1RSVUUocmVjdC5jb250YWlucyg2MCwgNzApKTsKKyAgICBBU1NFUlRfRkFMU0UocmVj
dC5jb250YWlucygxNjAsIDI3MCkpOworfQorCitURVNUKEludFJlY3QsIEludGVyc2VjdHMpCit7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisgICAgV2Vi
Q29yZTo6SW50UmVjdCBjb250YWluZWQoMzAsIDQwLCA1MCwgMTAwKTsKKworICAgIEFTU0VSVF9U
UlVFKHJlY3QuaW50ZXJzZWN0cyhjb250YWluZWQpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3Qg
b3V0c2lkZSgxMjAsIDIzMCwgNTAsIDEwMCk7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5pbnRl
cnNlY3RzKG91dHNpZGUpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgaW50ZXJzZWN0cygxMCwg
MjAsIDkwLCAxODApOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5pbnRlcnNlY3RzKGludGVyc2Vj
dHMpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEludGVyc2VjdFJlc3VsdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9FUSg3MCwgcmVjdC54KCkpOworICAgIEVY
UEVDVF9FUSgxMjAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoODAsIHJlY3QueSgpKTsK
KyAgICBFWFBFQ1RfRVEoMjMwLCByZWN0Lm1heFkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgSW50
ZXJzZWN0KQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEEoMjAsIDMwLCAxMDAsIDIwMCk7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0Qig3MCwgODAsIDEwMCwgMjAwKTsKKworICAgIHJl
Y3RBLmludGVyc2VjdChyZWN0Qik7CisKKyAgICB0ZXN0SW50ZXJzZWN0UmVzdWx0KHJlY3RBKTsK
KworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEMoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBh
dXRvIGludGVyc2VjdGVkID0gV2ViQ29yZTo6aW50ZXJzZWN0aW9uKHJlY3RDLCByZWN0Qik7CisK
KyAgICB0ZXN0SW50ZXJzZWN0UmVzdWx0KGludGVyc2VjdGVkKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFVuaXRlZFJlY3RzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHVuaXRlZCkKK3sKKyAgICBF
WFBFQ1RfRVEoMjAsIHVuaXRlZC54KCkpOworICAgIEVYUEVDVF9FUSgxNzAsIHVuaXRlZC5tYXhY
KCkpOworICAgIEVYUEVDVF9FUSgzMCwgdW5pdGVkLnkoKSk7CisgICAgRVhQRUNUX0VRKDI4MCwg
dW5pdGVkLm1heFkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgVW5pdGUpCit7CisgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0QSgyMCwgMzAsIDEwMCwgMjAwKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3RCKDcwLCA4MCwgMTAwLCAyMDApOworCisgICAgcmVjdEEudW5pdGUocmVjdEIpOworCisg
ICAgdGVzdFVuaXRlZFJlY3RzKHJlY3RBKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEMo
MjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICBhdXRvIHVuaXRlZCA9IFdlYkNvcmU6OnVuaW9uUmVj
dChyZWN0QywgcmVjdEIpOworCisgICAgdGVzdFVuaXRlZFJlY3RzKHVuaXRlZCk7Cit9CisKK1RF
U1QoSW50UmVjdCwgU2NhbGUpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCAzMCwg
MTAwLCAyMDApOworCisgICAgcmVjdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9FUSg0MCwg
cmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgyNDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1Rf
RVEoNjAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoNDYwLCByZWN0Lm1heFkoKSk7Cit9CisK
K1RFU1QoSW50UmVjdCwgVHJhbnNwb3NlKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgy
MCwgMzAsIDEwMCwgMjAwKTsKKworICAgIGF1dG8gdHJhbnNwb3NlZCA9IHJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKKworICAgIEVYUEVDVF9FUSgzMCwgdHJhbnNwb3NlZC54KCkpOworICAgIEVYUEVD
VF9FUSgyMzAsIHRyYW5zcG9zZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHRyYW5zcG9z
ZWQueSgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCB0cmFuc3Bvc2VkLm1heFkoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrQ2FzdFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBFWFBFQ1RfRVEoMTAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoNDAsIHJlY3QubWF4
WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoNjAsIHJl
Y3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDQwLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBDYXN0aW5nKQorewor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgxMCwgMjAsIDMwLCA0MCk7CisKKyNpZiBVU0UoQ0cp
CisgICAgQ0dSZWN0IGNnUmVjdCA9IENHUmVjdE1ha2UoMTAuMCwgMjAuMCwgMzAuMCwgNDAuMCk7
CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tQ0dSZWN0KGNnUmVjdCk7CisKKyAgICBj
aGVja0Nhc3RSZWN0KHJlY3RGcm9tQ0dSZWN0KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lO
KQorICAgIFJFQ1QgZ2RpUmVjdCA9IHJlY3Q7CisKKyAgICBFWFBFQ1RfRVEoMTAsIGdkaVJlY3Qu
bGVmdCk7CisgICAgRVhQRUNUX0VRKDIwLCBnZGlSZWN0LnRvcCk7CisgICAgRVhQRUNUX0VRKDQw
LCBnZGlSZWN0LnJpZ2h0KTsKKyAgICBFWFBFQ1RfRVEoNjAsIGdkaVJlY3QuYm90dG9tKTsKKwor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21HRElSZWN0KGdkaVJlY3QpOworCisgICAgY2hl
Y2tDYXN0UmVjdChyZWN0RnJvbUdESVJlY3QpOworCisgICAgRDJEMV9SRUNUX1UgZDJkUmVjdFUg
PSByZWN0OworCisgICAgRVhQRUNUX0VRKDEwLCBkMmRSZWN0VS5sZWZ0KTsKKyAgICBFWFBFQ1Rf
RVEoMjAsIGQyZFJlY3RVLnRvcCk7CisgICAgRVhQRUNUX0VRKDQwLCBkMmRSZWN0VS5yaWdodCk7
CisgICAgRVhQRUNUX0VRKDYwLCBkMmRSZWN0VS5ib3R0b20pOworCisgICAgV2ViQ29yZTo6SW50
UmVjdCByZWN0RnJvbUQyRFJlY3RVKGQyZFJlY3RVKTsKKworICAgIGNoZWNrQ2FzdFJlY3QocmVj
dEZyb21EMkRSZWN0VSk7CisKKyAgICBEMkQxX1JFQ1RfRiBkMmRSZWN0RiA9IHJlY3Q7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGQyZFJlY3RGLmxlZnQpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyMC4wZiwgZDJkUmVjdEYudG9wKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIGQy
ZFJlY3RGLnJpZ2h0KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjAuMGYsIGQyZFJlY3RGLmJvdHRv
bSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tRDJEUmVjdEYoZDJkUmVjdEYpOwor
CisgICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUQyRFJlY3RGKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgdm9pZCBjaGVja1N1YnRyYWN0aW9uUmVzdWx0MShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIEVYUEVDVF9FUSgtMTAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoOTAs
IHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoLTEwLCByZWN0LnkoKSk7CisgICAgRVhQRUNU
X0VRKDkwLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQgY2hl
Y2tTdWJ0cmFjdGlvblJlc3VsdDIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBFWFBFQ1RfRVEoLTQwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDYwLCByZWN0Lm1heFgo
KSk7CisgICAgRVhQRUNUX0VRKC01MCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSg1MCwgcmVj
dC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDEwMCwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgU3VidHJhY3Rpb24p
Cit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDEwLCAyMCwgMTAwLCAxMDApOworICAgIFdl
YkNvcmU6OkludFBvaW50IHJpZ2h0U2lkZSgyMCwgMzApOworCisgICAgcmVjdCAtPSByaWdodFNp
ZGU7CisKKyAgICBjaGVja1N1YnRyYWN0aW9uUmVzdWx0MShyZWN0KTsKKworICAgIGF1dG8gcmVj
dDIgPSByZWN0IC0gV2ViQ29yZTo6SW50UG9pbnQoMzAsIDQwKTsKKyAgICBjaGVja1N1YnRyYWN0
aW9uUmVzdWx0MihyZWN0Mik7Cit9CisKK1RFU1QoSW50UmVjdCwgRXF1YWxpdHkpCit7CisgICAg
V2ViQ29yZTo6SW50UmVjdCByZWN0KDEwLCAyMCwgMTAwLCAxMDApOworICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdDIoMTAsIDIwLCAxMDAsIDEwMCk7CisgICAgV2ViQ29yZTo6SW50UmVjdCByaWdo
dFNpZGUoMTEwLCAyMCwgMjAsIDEwMCk7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0ID09IHJlY3Qy
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdCAhPSByZWN0Mik7CisgICAgQVNTRVJUX1RSVUUocmVj
dCAhPSByaWdodFNpZGUpOworICAgIEFTU0VSVF9GQUxTRShyZWN0ID09IHJpZ2h0U2lkZSk7Cit9
CisKK3N0YXRpYyB2b2lkIGNoZWNrRW5jbG9zaW5nSW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIEVYUEVDVF9FUSgxMCwgcmVjdC54KCkpOworICAgIEVYUEVDVF9F
USg0MSwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgyMSwgcmVjdC55KCkpOworICAgIEVY
UEVDVF9FUSg2MiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgzMSwgcmVjdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoNDEsIHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3Qs
IEVuY2xvc2luZ0ludFJlY3QpCit7CisjaWYgVVNFKENHKQorICAgIENHUmVjdCBjZ1JlY3QgPSBD
R1JlY3RNYWtlKDEwLjUsIDIxLjMsIDMwLjEsIDQwLjApOworCisgICAgV2ViQ29yZTo6SW50UmVj
dCBlbmNsb3NpbmdDRyA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QoY2dSZWN0KTsKKworICAg
IGNoZWNrRW5jbG9zaW5nSW50UmVjdChlbmNsb3NpbmdDRyk7CisjZW5kaWYKK30KKworVEVTVChJ
bnRSZWN0LCBBcmVhQW5kRGlzdGFuY2VzKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgx
MCwgMjAsIDEwMCwgMTAwKTsKKworICAgIEVYUEVDVF9FUSgxMDAwMCwgcmVjdC5hcmVhKCkpOwor
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQoMTIwLCAxMzApOworCisgICAgV2ViQ29yZTo6
SW50U2l6ZSBkaXN0YW5jZSA9IHJlY3QuZGlmZmVyZW5jZVRvUG9pbnQocG9pbnQpOworICAgIEVY
UEVDVF9FUSgtMTAsIGRpc3RhbmNlLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgtMTAsIGRpc3Rh
bmNlLmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9FUSgyMDAsIHJlY3QuZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChwb2ludCkpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSW50U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0ludFNpemUuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKwor
I2lmIFVTRShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNv
cmU6OkludFNpemUgcmVjdCkKK3sKKyAgICByZWN0LnNldFdpZHRoKDIwMyk7CisgICAgRVhQRUNU
X0VRKDIwMywgcmVjdC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhlaWdodCg3Myk7CisgICAgRVhQ
RUNUX0VRKDczLCByZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEVtcHR5U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiByZWN0KQoreworICAgIEVYUEVDVF9FUSgwLCByZWN0
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc1plcm8oKSk7Cit9
CisKK1RFU1QoSW50U2l6ZSwgRGVmYXVsdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHRlc3Q7CisKKyAgICB0ZXN0RW1wdHlTaXplKHRlc3QpOworCisgICAgdGVzdEdldEFu
ZFNldCh0ZXN0KTsKK30KKworVEVTVChJbnRTaXplLCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAwLCAyMDApOworCisgICAgRVhQRUNUX0VRKDEwMCwg
dGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVy
bygpKTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBlcHNpbG9uID0gMC4wMDAxZjsKKyAgICBF
WFBFQ1RfTkVBUigwLjVmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVwc2lsb24pOworfQorCitURVNU
KEludFNpemUsIEZsb2F0U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNp
emUgc2l6ZSgxMDI0LjIsIDc2Ny44KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3Qoc2l6ZSk7
CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY3
LCB0ZXN0LmhlaWdodCgpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBlcHNpbG9uID0gMC4wMDE7CisgICAgRVhQRUNUX05FQVIoMS4zMzVmLCB0ZXN0LmFzcGVjdFJh
dGlvKCksIGVwc2lsb24pOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChJ
bnRTaXplLCBEaWFnb25hbExlbmd0aEFuZEFyZWEpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0
ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBFWFBFQ1RfRVEoMTYzODQwMCwgdGVzdC5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKSk7CisgICAgRVhQRUNUX0VRKDc4NjQzMiwgdGVzdC5hcmVhKCkpOworfQor
CitURVNUKEludFNpemUsIFNjYWxlKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdCgxMDI0
LCA3NjgpOworCisgICAgdGVzdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9FUSgyMDQ4LCB0
ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNTM2LCB0ZXN0LmhlaWdodCgpKTsKKworICAg
IHRlc3Quc2NhbGUoMC41Zik7CisKKyAgICBFWFBFQ1RfRVEoMTAyNCwgdGVzdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoNzY4LCB0ZXN0LmhlaWdodCgpKTsKKworICAgIHRlc3Quc2NhbGUoMi4w
ZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRVEoMjA0OCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoMzg0LCB0ZXN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRTaXplLCBFeHBhbmQpCit7
CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBFWFBFQ1RfRVEo
MTAyNCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY4LCB0ZXN0LmhlaWdodCgpKTsK
KworICAgIHRlc3QuZXhwYW5kKDEwMCwgNTApOworCisgICAgRVhQRUNUX0VRKDExMjQsIHRlc3Qu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDgxOCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIG90aGVyKDIwNDgsIDcwMCk7CisKKyAgICBhdXRvIGV4cGFuZGVkID0gdGVz
dC5leHBhbmRlZFRvKG90aGVyKTsKKworICAgIEVYUEVDVF9FUSgyMDQ4LCBleHBhbmRlZC53aWR0
aCgpKTsKKyAgICBFWFBFQ1RfRVEoODE4LCBleHBhbmRlZC5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
SW50U2l6ZSwgU2hyaW5rKQoreworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdCgxMDI0LCA3Njgp
OworICAgIFdlYkNvcmU6OkludFNpemUgb3RoZXIoMTAwMCwgNzAwKTsKKworICAgIGF1dG8gc2hy
dW5rZW4gPSB0ZXN0LnNocnVua1RvKG90aGVyKTsKKworICAgIEVYUEVDVF9FUSgxMDAwLCBzaHJ1
bmtlbi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzAwLCBzaHJ1bmtlbi5oZWlnaHQoKSk7CisK
KyAgICBXZWJDb3JlOjpJbnRTaXplIG90aGVyMigyMDAwLjBmLCA3MDAuMGYpOworCisgICAgYXV0
byBzaHJ1bmtlbjIgPSB0ZXN0LnNocnVua1RvKG90aGVyMik7CisKKyAgICBFWFBFQ1RfRVEoMTAy
NCwgc2hydW5rZW4yLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3MDAsIHNocnVua2VuMi5oZWln
aHQoKSk7Cit9CisKK1RFU1QoSW50U2l6ZSwgVHJhbnNwb3NlZFNpemUpCit7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSB0ZXN0KDEwMjQsIDc2OCk7CisKKyAgICBhdXRvIHRyYW5zcG9zZWRTaXplID0g
dGVzdC50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIHRlc3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDc2OCwgdGVzdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50U2l6
ZSwgQ2FzdGluZykKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAyNCwgNzY4KTsKKwor
I2lmIFVTRShDRykKKyAgICBDR1NpemUgY2dTaXplID0gdGVzdDsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgxMDI0LjBmLCBjZ1NpemUud2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYs
IGNnU2l6ZS5oZWlnaHQpOworCisgICAgQ0dTaXplIGNnU2l6ZTIgPSBDR1NpemVNYWtlKC0yMi4z
ZiwgMTQuNmYpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0Q0coY2dTaXplMik7CisKKyAg
ICBFWFBFQ1RfRVEoLTIyLCB0ZXN0Q0cud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE0LCB0ZXN0
Q0cuaGVpZ2h0KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9TSVpF
X1UgZDJkU2l6ZVUgPSB0ZXN0OworICAgIEVYUEVDVF9FUSgxMDI0LCBkMmRTaXplVS53aWR0aCk7
CisgICAgRVhQRUNUX0VRKDc2OCwgZDJkU2l6ZVUuaGVpZ2h0KTsKKworICAgIEQyRDFfU0laRV9G
IGQyZFNpemVGID0gdGVzdDsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgZDJkU2l6ZUYu
d2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGQyZFNpemVGLmhlaWdodCk7CisK
KyAgICBEMkQxX1NJWkVfRiBkMmRTaXplRjIgPSBEMkQxOjpTaXplRigtMjIuM2YsIDE0LjZmKTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdEQyRChkMmRTaXplRjIpOworCisgICAgRVhQRUNU
X0VRKC0yMiwgdGVzdEQyRC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTQsIHRlc3REMkQuaGVp
Z2h0KCkpOworCisgICAgRDJEMV9TSVpFX0YgZDJkU2l6ZVUyID0gRDJEMTo6U2l6ZUYoLTIzLCAx
Nik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3REMkQyKGQyZFNpemVVMik7CisKKyAgICBF
WFBFQ1RfRVEoLTIzLCB0ZXN0RDJEMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIHRlc3RE
MkQyLmhlaWdodCgpKTsKKyNlbmRpZgorfQorCitURVNUKEludFNpemUsIEFkZFN1YnRyYWN0KQor
eworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisgICAgV2ViQ29yZTo6SW50U2l6
ZSBiKDEwMCwgMTAwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYyA9IGEgKyBiOworCisgICAg
RVhQRUNUX0VRKDYxMiwgYy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNDg0LCBjLmhlaWdodCgp
KTsKKworICAgIGEgKz0gYjsKKworICAgIEVYUEVDVF9FUSg2MTIsIGEud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDQ4NCwgYS5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGEyKDUx
MiwgMzg0KTsKKworICAgIFdlYkNvcmU6OkludFNpemUgZCA9IGEyIC0gYjsKKworICAgIEVYUEVD
VF9FUSg0MTIsIGQud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDI4NCwgZC5oZWlnaHQoKSk7CisK
KyAgICBhMiAtPSBiOworCisgICAgRVhQRUNUX0VRKDQxMiwgYTIud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0VRKDI4NCwgYTIuaGVpZ2h0KCkpOworfQorCitURVNUKEludFNpemUsIE5lZ2F0aW9uKQor
eworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG5lZ2F0ZWQgPSAtYTsKKworICAgIEVYUEVDVF9FUSgtNTEyLCBuZWdhdGVkLndpZHRoKCkp
OworICAgIEVYUEVDVF9FUSgtMzg0LCBuZWdhdGVkLmhlaWdodCgpKTsKK30KKworVEVTVChJbnRT
aXplLCBFcXVhbGl0eSkKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIGEoMTAyNCwgNzY4KTsKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIGIoMTAyNCwgNzY4KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIGMo
NzY4LCA1MzQpOworCisgICAgQVNTRVJUX1RSVUUoYSA9PSBiKTsKKyAgICBBU1NFUlRfRkFMU0Uo
YSAhPSBiKTsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBjKTsKKyAgICBBU1NFUlRfVFJVRShhICE9
IGMpOworfQorCitURVNUKEludFNpemUsIENvbnRyYWN0KQoreworICAgIFdlYkNvcmU6OkludFNp
emUgYSgxMDI0LCA3NjgpOworCisgICAgYS5jb250cmFjdCgxMDAsIDUwKTsKKworICAgIEVYUEVD
VF9FUSg5MjQsIGEud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDcxOCwgYS5oZWlnaHQoKSk7Cit9
CisKK1RFU1QoSW50U2l6ZSwgQ2xhbXApCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBhKDEwMjQs
IDc2OCk7CisKKyAgICBhLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEVYUEVDVF9FUSgx
MDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGEuaGVpZ2h0KCkpOworCisgICAg
V2ViQ29yZTo6SW50U2l6ZSBiKC0xMDI0LCAtNzY4KTsKKworICAgIGIuY2xhbXBOZWdhdGl2ZVRv
WmVybygpOworCisgICAgRVhQRUNUX0VRKDAsIGIud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDAs
IGIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtU2l6ZSgxMDI0LCAx
MDAwKTsKKworICAgIGEuY2xhbXBUb01pbmltdW1TaXplKG1pbmltdW1TaXplKTsKKworICAgIEVY
UEVDVF9FUSgxMDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxMDAwLCBhLmhlaWdodCgp
KTsKK30KKworVEVTVChJbnRTaXplLCBDb25zdHJhaW5lZEJldHdlZW4pCit7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBtaW5pbXVtU2l6ZSgzODQsIDI1Nik7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBt
YXhpbXVtU2l6ZSgyMDQ4LCAxNTM2KTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYSgxMDI0LCA3
NjgpOworCisgICAgYXV0byBjb25zdHJhaW5lZDEgPSBhLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5p
bXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIGNvbnN0cmFpbmVk
MS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY4LCBjb25zdHJhaW5lZDEuaGVpZ2h0KCkpOwor
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBiKDIwMCwgMTAwKTsKKworICAgIGF1dG8gY29uc3RyYWlu
ZWQyID0gYi5jb25zdHJhaW5lZEJldHdlZW4obWluaW11bVNpemUsIG1heGltdW1TaXplKTsKKwor
ICAgIEVYUEVDVF9FUSgzODQsIGNvbnN0cmFpbmVkMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
MjU2LCBjb25zdHJhaW5lZDIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBjKDUw
MDAsIDIwMDApOworCisgICAgYXV0byBjb25zdHJhaW5lZDMgPSBjLmNvbnN0cmFpbmVkQmV0d2Vl
bihtaW5pbXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDIwNDgsIGNvbnN0
cmFpbmVkMy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTUzNiwgY29uc3RyYWluZWQzLmhlaWdo
dCgpKTsKK30KKworLyoKKworSW50U2l6ZSBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgSW50U2l6
ZSYgbWluLCBjb25zdCBJbnRTaXplJiBtYXgpIGNvbnN0OworCisqLworCit9CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTMgKzEsMTQ4MiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMywgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UXVhZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgorCisjaWYgVVNFKENBKQorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgor
I2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwg
Tm9uSW52ZXJ0YWJsZUJsZW5kKQorc3RhdGljIHZvaWQgdGVzdElkZW50aXR5KGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxLjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRy
YW5zZm9ybS5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMTMo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5z
Zm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMjQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9y
bS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAs
IHRyYW5zZm9ybS5tNDQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICB0cmFuc2Zvcm0uc2V0
QSgxLjEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4xLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICB0
cmFuc2Zvcm0uc2V0QigyLjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4yLCB0cmFuc2Zvcm0u
YigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0QygzLjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4z
LCB0cmFuc2Zvcm0uYygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0RCg0LjQpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNC40LCB0cmFuc2Zvcm0uZCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0RSg1LjUpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCB0cmFuc2Zvcm0uZSgpKTsKKyAgICB0cmFuc2Zvcm0u
c2V0Rig2LjYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0uZigpKTsKKwor
ICAgIHRyYW5zZm9ybS5zZXRNMTEoMS4xKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMSwgdHJh
bnNmb3JtLm0xMSgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTEyKDIuMik7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjIsIHRyYW5zZm9ybS5tMTIoKSk7CisgICAgdHJhbnNmb3JtLnNldE0xMygzLjMp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4zLCB0cmFuc2Zvcm0ubTEzKCkpOworICAgIHRyYW5z
Zm9ybS5zZXRNMTQoNC40KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgdHJhbnNmb3JtLm0x
NCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTIxKDUuNSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1
LjUsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgdHJhbnNmb3JtLnNldE0yMig2LjYpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0ubTIyKCkpOworICAgIHRyYW5zZm9ybS5zZXRN
MjMoNy43KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNywgdHJhbnNmb3JtLm0yMygpKTsKKyAg
ICB0cmFuc2Zvcm0uc2V0TTI0KDguOCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjgsIHRyYW5z
Zm9ybS5tMjQoKSk7CisgICAgdHJhbnNmb3JtLnNldE0zMSg5LjkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoOS45LCB0cmFuc2Zvcm0ubTMxKCkpOworICAgIHRyYW5zZm9ybS5zZXRNMzIoMTAuMTAp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMTAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgdHJh
bnNmb3JtLnNldE0zMygxMS4xMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4xMSwgdHJhbnNm
b3JtLm0zMygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTM0KDEyLjEyKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEyLjEyLCB0cmFuc2Zvcm0ubTM0KCkpOworICAgIHRyYW5zZm9ybS5zZXRNNDEoMTMu
MTMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTMuMTMsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAg
dHJhbnNmb3JtLnNldE00MigxNC4xNCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNC4xNCwgdHJh
bnNmb3JtLm00MigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTQzKDE1LjE1KTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDE1LjE1LCB0cmFuc2Zvcm0ubTQzKCkpOworICAgIHRyYW5zZm9ybS5zZXRNNDQo
MTYuMTYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMTYsIHRyYW5zZm9ybS5tNDQoKSk7CisK
KyAgICB0cmFuc2Zvcm0uc2V0TWF0cml4KDkuOSwgOC44LCA3LjcsIDYuNiwgNS41LCA0LjQpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoOS45LCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDguOCwgdHJhbnNmb3JtLmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjcsIHRy
YW5zZm9ybS5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0uZCgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuNSwgdHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg0LjQsIHRyYW5zZm9ybS5mKCkpOworCisgICAgdHJhbnNmb3JtLnNldE1hdHJpeCgx
Ni4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLCA5LjAsCisgICAgICAgIDgu
MCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDE2LjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCB0
cmFuc2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgdHJhbnNmb3JtLm0x
MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEzLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMTEuMCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAs
IHRyYW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIHRyYW5zZm9ybS5t
MjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSg3LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSg2LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRy
YW5zZm9ybS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5tNDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgs
IERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggdGVzdDsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0KTsKKworICAgIHRlc3RHZXRBbmRTZXQo
dGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0
cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNmb3JtLmIoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5jKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMy4wLCB0cmFuc2Zvcm0uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwg
dHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5mKCkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24oY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDE2LjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCB0cmFu
c2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgdHJhbnNmb3JtLm0xMygp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEzLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMTEuMCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRy
YW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIHRyYW5zZm9ybS5tMjQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg3LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg2LjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5z
Zm9ybS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRyYW5zZm9ybS5tNDQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRyYW5zZm9ybS5pc0FmZmlu
ZSgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgVmFsdWVDb25zdHJ1Y3Rpb24p
Cit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDEoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0
MSk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdDEuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0MS5pc0FmZmluZSgpKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRlc3QyKDE2LjAsIDE1LjAsIDE0LjAsIDEzLjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAg
ICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAg
dGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QyKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdDIp
OworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QyLmlzQWZmaW5lKCkpOworCisgICAgdGVzdDIubWFrZUlkZW50aXR5KCk7CisKKyAg
ICB0ZXN0SWRlbnRpdHkodGVzdDIpOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0
eSgpKTsKK30KKworI2lmIFVTRShDRykKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENHQWZm
aW5lVHJhbnNmb3JtQ29uc3RydWN0aW9uKQogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZy
b207Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG8oMi43MTMzNTkwOTM4LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDIuNDY0NTEzNzc2MSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAwLCAwLjAxLCAw
LjAyLCAwLjAzLCAwLjA0LCAwLjA1KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7
CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY2dUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2UoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXggdGVzdChjZ1RyYW5zZm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0
cnVjdGlvbih0ZXN0KTsKKyAgICB0ZXN0R2V0QW5kU2V0KHRlc3QpOworCisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QuaXNJZGVudGl0eSgpKTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQor
VEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgRDJEMU1hdHJpeENvbnN0cnVjdGlvbikKK3sKKyAg
ICBEMkQxX01BVFJJWF8zWDJfRiBkMmRUcmFuc2Zvcm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwg
NS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRlc3QoZDJkVHJhbnNmb3JtKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9u
KHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVz
dC5pc0lkZW50aXR5KCkpOworfQorI2VuZGlmCisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgs
IEFmZmluZVRyYW5zZm9ybUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gYWZmaW5lVHJhbnNmb3JtKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoYWZmaW5lVHJhbnNmb3JtKTsKKwor
ICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQo
dGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworfQorCitURVNU
KFRyYW5zZm9ybWF0aW9uTWF0cml4LCBUcmFuc2Zvcm1NYXRyaXhDb25zdHJ1Y3Rpb24pCit7Cisg
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KDE2LjAsIDE1LjAsIDE0LjAs
IDEzLjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAgICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4w
LCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRlc3QobWF0cml4KTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKwor
VEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgQXNzaWdubWVudCkKK3sKKyAgICBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCgxNi4wLCAxNS4wLCAxNC4w
LCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgdGVzdCA9IG1hdHJpeDsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlv
bih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgSWRlbnRpdHkpCit7Cisg
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAs
IDIuMCwgMS4wKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7CisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0
Lm1ha2VJZGVudGl0eSgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdC5pc0lkZW50aXR5KCkpOwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0
ZXN0SWRlbnRpdHkodGVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBZmZpbmVWZXJzaW9uKFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZVRyYW5zZm9ybU1hdHJpeCkKK3sKKyAg
ICBBU1NFUlRfRkFMU0UoYWZmaW5lVHJhbnNmb3JtTWF0cml4LmlzSWRlbnRpdHkoKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGFmZmluZVRyYW5zZm9ybU1hdHJpeC5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bigpKTsKKyAgICBBU1NFUlRfVFJVRShhZmZpbmVUcmFuc2Zvcm1NYXRyaXguaXNBZmZpbmUoKSk7
CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMTEo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTEy
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTEz
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTE0
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgYWZmaW5lVHJhbnNmb3JtTWF0cml4Lm0y
MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
MzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
NDEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
NDIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
NDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5t
NDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEFmZmluZVZlcnNpb24pCit7
CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCgxNi4wLCAxNS4wLCAxNC4w
LCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRp
dHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7
CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNBZmZpbmUoKSk7CisKKyAgICBhdXRvIGFmZmluZUNv
cHkgPSB0ZXN0LnRvQWZmaW5lVHJhbnNmb3JtKCk7CisKKyAgICB0ZXN0QWZmaW5lVmVyc2lvbihh
ZmZpbmVDb3B5KTsKKworICAgIHRlc3QubWFrZUFmZmluZSgpOworCisgICAgdGVzdEFmZmluZVZl
cnNpb24odGVzdCk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1hcEZsb2F0UG9p
bnQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHBvaW50KDEwMC4wZiwgNTAuMGYpOworCisgICAgYXV0byBtYXBwZWRQ
b2ludCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4w
ZiwgbWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFBv
aW50LnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQy
ID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBt
YXBwZWRQb2ludDIueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRQb2lu
dDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDMg
PSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFw
cGVkUG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQz
LnkoKSk7CisKKyAgICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDQg
PSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFw
cGVkUG9pbnQ0LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDI1LjBmLCBtYXBwZWRQb2ludDQu
eSgpKTsKKworICAgIHRlc3Quc2V0TTExKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFBvaW50NSA9
IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFw
cGVkUG9pbnQ1LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDI1LjBmLCBtYXBwZWRQb2ludDUu
eSgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFwRG91YmxlcykKK3sKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0OworICAgIGRvdWJsZSB4ID0gMTAw
LjA7CisgICAgZG91YmxlIHkgPSA1MC4wOworCisgICAgZG91YmxlIG1hcHBlZFggPSAwOworICAg
IGRvdWJsZSBtYXBwZWRZID0gMDsKKyAgICB0ZXN0Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZ
KTsKKworICAgIEFTU0VSVF9ET1VCTEVfRVEoMTAwLjAsIG1hcHBlZFgpOworICAgIEFTU0VSVF9E
T1VCTEVfRVEoNTAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIG1h
cHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHksIG1hcHBlZFgs
IG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWCk7CisgICAg
QVNTRVJUX0RPVUJMRV9FUSgxMDAuMCwgbWFwcGVkWSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsK
KworICAgIG1hcHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAwOworICAgIHRlc3QubWFwKHgsIHks
IG1hcHBlZFgsIG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RPVUJMRV9FUSg1MC4wLCBtYXBwZWRY
KTsKKyAgICBBU1NFUlRfRE9VQkxFX0VRKDEwMC4wLCBtYXBwZWRZKTsKKworICAgIHRlc3Quc2V0
TTIyKDAuNSk7CisKKyAgICBtYXBwZWRYID0gMDsKKyAgICBtYXBwZWRZID0gMDsKKyAgICB0ZXN0
Lm1hcCh4LCB5LCBtYXBwZWRYLCBtYXBwZWRZKTsKKworICAgIEFTU0VSVF9ET1VCTEVfRVEoNTAu
MGYsIG1hcHBlZFgpOworICAgIEFTU0VSVF9ET1VCTEVfRVEoMjUuMGYsIG1hcHBlZFkpOworCisg
ICAgdGVzdC5zZXRNMTEoMi4wKTsKKworICAgIG1hcHBlZFggPSAwOworICAgIG1hcHBlZFkgPSAw
OworICAgIHRlc3QubWFwKHgsIHksIG1hcHBlZFgsIG1hcHBlZFkpOworCisgICAgQVNTRVJUX0RP
VUJMRV9FUSgyMDAuMGYsIG1hcHBlZFgpOworICAgIEFTU0VSVF9ET1VCTEVfRVEoMjUuMGYsIG1h
cHBlZFkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBNYXBJbnRQb2ludCkKK3sK
KyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0OworICAgIFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50KDEwMCwgNTApOworCisgICAgYXV0byBtYXBwZWRQb2ludCA9IHRlc3QubWFw
UG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQueCgpKTsKKyAg
ICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50LnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsK
KworICAgIGF1dG8gbWFwcGVkUG9pbnQyID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBB
U1NFUlRfRVEoMTAwLCBtYXBwZWRQb2ludDIueCgpKTsKKyAgICBBU1NFUlRfRVEoMTAwLCBtYXBw
ZWRQb2ludDIueSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRQ
b2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9FUSg1MCwgbWFwcGVk
UG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQzLnkoKSk7CisKKyAg
ICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDQgPSB0ZXN0Lm1hcFBv
aW50KHBvaW50KTsKKworICAgIEFTU0VSVF9FUSg1MCwgbWFwcGVkUG9pbnQ0LngoKSk7CisgICAg
QVNTRVJUX0VRKDI1LCBtYXBwZWRQb2ludDQueSgpKTsKKworICAgIHRlc3Quc2V0TTExKDIuMCk7
CisKKyAgICBhdXRvIG1hcHBlZFBvaW50NSA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAg
QVNTRVJUX0VRKDIwMCwgbWFwcGVkUG9pbnQ1LngoKSk7CisgICAgQVNTRVJUX0VRKDI1LCBtYXBw
ZWRQb2ludDUueSgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFwSW50UmVj
dCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0OworICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdCgxMCwgMjAsIDIwMCwgMzAwKTsKKworICAgIGF1dG8gbWFwcGVkUmVj
dCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSgxMCwgbWFwcGVkUmVjdC54
KCkpOworICAgIEFTU0VSVF9FUSgyMCwgbWFwcGVkUmVjdC55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3Qud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDMwMCwgbWFwcGVkUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIg
PSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3QyLngo
KSk7CisgICAgQVNTRVJUX0VRKDQwLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9FUSgy
MDAsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9FUSg2MDAsIG1hcHBlZFJlY3Qy
LmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRSZWN0
MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSg1LCBtYXBwZWRSZWN0My54
KCkpOworICAgIEFTU0VSVF9FUSg0MCwgbWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRVEo
MTAwLCBtYXBwZWRSZWN0My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLCBtYXBwZWRSZWN0
My5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRS
ZWN0NCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSg1LCBtYXBwZWRSZWN0
NC54KCkpOworICAgIEFTU0VSVF9FUSgxMCwgbWFwcGVkUmVjdDQueSgpKTsKKyAgICBBU1NFUlRf
RVEoMTAwLCBtYXBwZWRSZWN0NC53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoMTUwLCBtYXBwZWRS
ZWN0NC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldE0xMSgyLjApOworCisgICAgYXV0byBtYXBw
ZWRSZWN0NSA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9FUSgyMCwgbWFwcGVk
UmVjdDUueCgpKTsKKyAgICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3Q1LnkoKSk7CisgICAgQVNT
RVJUX0VRKDEwMCwgbWFwcGVkUmVjdDQud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDE1MCwgbWFw
cGVkUmVjdDQuaGVpZ2h0KCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBNYXBG
bG9hdFJlY3QpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKyAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgxMC5mLCAyMC4wZiwgMjAwLjBmLCAzMDAuMGYpOwor
CisgICAgYXV0byBtYXBwZWRSZWN0ID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAgQVNTRVJU
X0ZMT0FUX0VRKDEwLjBmLCBtYXBwZWRSZWN0LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIw
LjBmLCBtYXBwZWRSZWN0LnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVk
UmVjdC53aWR0aCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRSZWN0Lmhl
aWdodCgpKTsKKworICAgIHRlc3Quc2V0RCgyLjApOworCisgICAgYXV0byBtYXBwZWRSZWN0MiA9
IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFwcGVk
UmVjdDIueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNDAuMGYsIG1hcHBlZFJlY3QyLnkoKSk7
CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUmVjdDIud2lkdGgoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDYwMC4wZiwgbWFwcGVkUmVjdDIuaGVpZ2h0KCkpOworCisgICAgdGVz
dC5zZXRBKDAuNSk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3QzID0gdGVzdC5tYXBSZWN0KHJlY3Qp
OworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDUuMGYsIG1hcHBlZFJlY3QzLngoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDQwLjBmLCBtYXBwZWRSZWN0My55KCkpOworICAgIEFTU0VSVF9GTE9BVF9F
USgxMDAuMGYsIG1hcHBlZFJlY3QzLndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg2MDAu
MGYsIG1hcHBlZFJlY3QzLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0TTIyKDAuNSk7CisKKyAg
ICBhdXRvIG1hcHBlZFJlY3Q0ID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAgQVNTRVJUX0ZM
T0FUX0VRKDUuMGYsIG1hcHBlZFJlY3Q0LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBm
LCBtYXBwZWRSZWN0NC55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFJl
Y3Q0LndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIG1hcHBlZFJlY3Q0Lmhl
aWdodCgpKTsKKworICAgIHRlc3Quc2V0TTExKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3Q1
ID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwLjBmLCBtYXBw
ZWRSZWN0NS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFwcGVkUmVjdDUueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRSZWN0NC53aWR0aCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBtYXBwZWRSZWN0NC5oZWlnaHQoKSk7Cit9CisKK1RF
U1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1hcEZsb2F0UXVhZCkKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCgxMDAuMGYsIDEwMC4wZiwgMTAwLjBmLCA1MC4wZik7CisgICAgV2ViQ29y
ZTo6RmxvYXRRdWFkIHF1YWQocmVjdCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBx
dWFkLnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBxdWFkLnAxKCkueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBxdWFkLnAyKCkueCgpKTsKKyAgICBBU1NF
UlRfRkxPQVRfRVEoMTAwLjBmLCBxdWFkLnAyKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MjAwLjBmLCBxdWFkLnAzKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBxdWFk
LnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBxdWFkLnA0KCkueCgpKTsK
KyAgICBBU1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBxdWFkLnA0KCkueSgpKTsKKworICAgIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3Q7CisgICAgYXV0byBtYXBwZWRRdWFkID0gdGVz
dC5tYXBRdWFkKHF1YWQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVh
ZC5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wMSgp
LnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZC5wMigpLngoKSk7
CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wMigpLnkoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZC5wMygpLngoKSk7CisgICAgQVNTRVJU
X0ZMT0FUX0VRKDE1MC4wZiwgbWFwcGVkUXVhZC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1
MC4wZiwgbWFwcGVkUXVhZC5wNCgpLnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAg
IGF1dG8gbWFwcGVkUXVhZDIgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMi5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDIwMC4wZiwgbWFwcGVkUXVhZDIucDEoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAu
MGYsIG1hcHBlZFF1YWQyLnAyKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBt
YXBwZWRRdWFkMi5wMigpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVk
UXVhZDIucDMoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQy
LnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMi5wNCgp
LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUXVhZDIucDQoKS55KCkp
OworCisgICAgdGVzdC5zZXRBKDAuNSk7CisKKyAgICBhdXRvIG1hcHBlZFF1YWQzID0gdGVzdC5t
YXBRdWFkKHF1YWQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkMy5w
MSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZDMucDEoKS55
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQzLnAyKCkueCgpKTsK
KyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMy5wMigpLnkoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDMucDMoKS54KCkpOworICAgIEFTU0VS
VF9GTE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQzLnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQzLnA0KCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MzAwLjBmLCBtYXBwZWRRdWFkMy5wNCgpLnkoKSk7CisKKyAgICB0ZXN0LnNldE0yMigwLjUpOwor
CisgICAgYXV0byBtYXBwZWRRdWFkNCA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAgIEFTU0VS
VF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDEoKS54KCkpOworICAgIEFTU0VSVF9GTE9B
VF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDEoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgx
MDAuMGYsIG1hcHBlZFF1YWQ0LnAyKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYs
IG1hcHBlZFF1YWQ0LnAyKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBw
ZWRRdWFkNC5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDc1LjBmLCBtYXBwZWRRdWFk
NC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkNC5wNCgp
LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDc1LjBmLCBtYXBwZWRRdWFkNC5wNCgpLnkoKSk7
CisKKyAgICB0ZXN0LnNldE0xMSgyLjApOworCisgICAgYXV0byBtYXBwZWRRdWFkNSA9IHRlc3Qu
bWFwUXVhZChxdWFkKTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQu
cDEoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDEoKS55
KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQ0LnAyKCkueCgpKTsK
KyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQ0LnAyKCkueSgpKTsKKyAgICBB
U1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkNC5wMygpLngoKSk7CisgICAgQVNTRVJU
X0ZMT0FUX0VRKDc1LjBmLCBtYXBwZWRRdWFkNC5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDUwLjBmLCBtYXBwZWRRdWFkNC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDc1
LjBmLCBtYXBwZWRRdWFkNC5wNCgpLnkoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3VibGVk
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDEwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFu
c2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEhhbHZlZChj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMy4wLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDIuNSwgdHJhbnNmb3JtLmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9y
bS5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS41LCB0cmFuc2Zvcm0uZCgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRyYW5zZm9ybS5mKCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG91YmxlZDIoY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDMyLjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgzMC4wLCB0cmFuc2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjguMCwgdHJh
bnNmb3JtLm0xMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDI2LjAsIHRyYW5zZm9ybS5tMTQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyNC4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMjIuMCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDIwLjAsIHRyYW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxOC4wLCB0
cmFuc2Zvcm0ubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMCwgdHJhbnNmb3JtLm0z
MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE0LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0ubTMzKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMTAuMCwgdHJhbnNmb3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwg
dHJhbnNmb3JtLm00MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm00
MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEhhbHZlZDIoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLm0xMSgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDcuNSwgdHJhbnNmb3JtLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDcuMCwgdHJhbnNmb3JtLm0xMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuNSwgdHJh
bnNmb3JtLm0xNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm0yMSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuNSwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNmb3JtLm0yMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDQuNSwgdHJhbnNmb3JtLm0yNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdHJhbnNm
b3JtLm0zMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuNSwgdHJhbnNmb3JtLm0zMigpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDIuNSwgdHJhbnNmb3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIu
MCwgdHJhbnNmb3JtLm00MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuNSwgdHJhbnNmb3Jt
Lm00MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDAuNSwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworVEVTVChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCwgTXVsdGlwbHkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29u
c3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5tdWx0aXBseShpZGVudGl0eSk7CisKKyAgICB0
ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IGRvdWJsZXIoMi4wLCAwLjAsIDAuMCwgMi4wLCAwLjAsIDAuMCk7CisKKyAg
ICB0ZXN0Lm11bHRpcGx5KGRvdWJsZXIpOworCisgICAgdGVzdERvdWJsZWQodGVzdCk7CisKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBoYWx2ZXIoMC41LCAwLjAsIDAuMCwgMC41
LCAwLjAsIDAuMCk7CisKKyAgICB0ZXN0Lm11bHRpcGx5KGhhbHZlcik7CisKKyAgICB0ZXN0QWZm
aW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3QubXVsdGlwbHkoaGFsdmVyKTsK
KworICAgIHRlc3RIYWx2ZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0ZXN0MigxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAg
ICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAg
IHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0Mi5tdWx0aXBseShpZGVu
dGl0eSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdDIpOworCisgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZG91YmxlcjIoMi4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDIuMCwgMC4wLCAwLjAsCisgICAgICAgIDAuMCwgMC4wLCAyLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCwgMi4wKTsKKworICAgIHRlc3QyLm11bHRpcGx5KGRvdWJsZXIyKTsKKworICAgIHRlc3REb3Vi
bGVkMih0ZXN0Mik7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBoYWx2ZXIy
KDAuNSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC4wLAorICAgICAgICAwLjAsIDAu
MCwgMC41LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuNSk7CisKKyAgICB0ZXN0Mi5tdWx0aXBseSho
YWx2ZXIyKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0
Mi5tdWx0aXBseShoYWx2ZXIyKTsKKworICAgIHRlc3RIYWx2ZWQyKHRlc3QyKTsKKworICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QzKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4w
LCAxLjApOworCisgICAgdGVzdDMgKj0gaWRlbnRpdHk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNv
bnN0cnVjdGlvbih0ZXN0Myk7CisKKyAgICB0ZXN0MyAqPSBkb3VibGVyOworCisgICAgdGVzdERv
dWJsZWQodGVzdDMpOworCisgICAgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
dGVzdDQoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAgICAgICAg
OS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBhdXRv
IHJlc3VsdDEgPSB0ZXN0NCAqIGlkZW50aXR5OworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9u
KHJlc3VsdDEpOworCisgICAgYXV0byByZXN1bHQyID0gdGVzdDQgKiBkb3VibGVyMjsKIAorICAg
IHRlc3REb3VibGVkMihyZXN1bHQyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFNjYWxlZEJ5VHdv
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgzMi4wLCB0cmFuc2Zvcm0ubTExKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMzAuMCwgdHJhbnNmb3JtLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDI4LjAs
IHRyYW5zZm9ybS5tMTMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyNi4wLCB0cmFuc2Zvcm0u
bTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjQuMCwgdHJhbnNmb3JtLm0yMSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDIyLjAsIHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyMC4wLCB0cmFuc2Zvcm0ubTIzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTgu
MCwgdHJhbnNmb3JtLm0yNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3Jt
Lm0zMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuMCwgdHJhbnNmb3JtLm0zMigpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDUuMCwgdHJhbnNmb3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwg
dHJhbnNmb3JtLm00MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLm00
MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFNjYWxlZEJ5SGFsZihjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0ubTExKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNy41LCB0cmFuc2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNy4wLCB0cmFuc2Zvcm0ubTEzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi41
LCB0cmFuc2Zvcm0ubTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0cmFuc2Zvcm0u
bTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCB0cmFuc2Zvcm0ubTIyKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0cmFuc2Zvcm0ubTIzKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoNC41LCB0cmFuc2Zvcm0ubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCB0
cmFuc2Zvcm0ubTMxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNy4wLCB0cmFuc2Zvcm0ubTMy
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0cmFuc2Zvcm0ubTMzKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoNS4wLCB0cmFuc2Zvcm0ubTM0KCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNC4wLCB0cmFuc2Zvcm0ubTQxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0cmFu
c2Zvcm0ubTQyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0cmFuc2Zvcm0ubTQzKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0ubTQ0KCkpOworfQorCisKK1RF
U1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIFNjYWxlKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0
ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMS4wKTsK
KworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2Fs
ZSgyLjApOworCisgICAgdGVzdERvdWJsZWQodGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7
CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2Nh
bGUoMC41KTsKKworICAgIHRlc3RIYWx2ZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0ZXN0MigxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAx
MC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4w
KTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0Mi5zY2Fs
ZSgyLjApOworCisgICAgdGVzdFNjYWxlZEJ5VHdvKHRlc3QyKTsKKworICAgIHRlc3QyLnNjYWxl
KDAuNSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdDIpOworCisgICAgdGVzdDIu
c2NhbGUoMC41KTsKKworICAgIHRlc3RTY2FsZWRCeUhhbGYodGVzdDIpOworfQorCitURVNUKFRy
YW5zZm9ybWF0aW9uTWF0cml4LCBTY2FsZVVuaWZvcm1Ob25Vbmlmb3JtKQoreworICAgIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIu
MCwgMTEuMCwgMTAuMCwKKyAgICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4w
LCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0
ZXN0LnNjYWxlTm9uVW5pZm9ybSgxLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rp
b24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgyLjAsIDIuMCk7CisKKyAgICB0
ZXN0U2NhbGVkQnlUd28odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgwLjUsIDAu
NSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxl
Tm9uVW5pZm9ybSgwLjUsIDAuNSk7CisKKyAgICB0ZXN0U2NhbGVkQnlIYWxmKHRlc3QpOworfQor
CitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBSb3RhdGUpCit7CisgICAgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKwor
ICAgIHRlc3Qucm90YXRlKDM2MC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9u
KHRlc3QpOworCisgICAgdGVzdC5yb3RhdGUoMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBl
cHNpbG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX05FQVIoLTYuMCwgdGVzdC5hKCksIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKC01LjAsIHRlc3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBF
Q1RfTkVBUigtNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTMuMCwg
dGVzdC5kKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRl
KC0xODAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAg
IHRlc3Qucm90YXRlKDkwLjApOworCisgICAgRVhQRUNUX05FQVIoNC4wLCB0ZXN0LmEoKSwgZXBz
aWxvbik7CisgICAgRVhQRUNUX05FQVIoMy4wLCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX05FQVIoLTYuMCwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC01LjAs
IHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0
ZSgtOTAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKwor
VEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgUm90YXRlRnJvbVZlY3RvcikKK3sKKyAgICBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAx
LjApOworCisgICAgdGVzdC5yb3RhdGVGcm9tVmVjdG9yKDAuMCwgMC4wKTsKKworICAgIHRlc3RB
ZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5yb3RhdGVGcm9tVmVjdG9y
KC0xMC4wLCAtMTAuMCk7CisKKyAgICBzdGF0aWMgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisK
KyAgICBFWFBFQ1RfTkVBUigtNy4wNzEwLCB0ZXN0LmEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoLTUuNjU2OCwgdGVzdC5iKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDEuNDE0
MiwgdGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDEuNDE0MiwgdGVzdC5kKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlRnJvbVZlY3Rv
cigxMC4wLCAxMC4wKTsKKworICAgIEVYUEVDVF9ORUFSKC00LjAsIHRlc3QuYSgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfTkVBUigtMy4wLCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoNi4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoNS4wLCB0ZXN0
LmQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5yb3RhdGVGcm9t
VmVjdG9yKC0xMC4wLCAxMC4wKTsKKworICAgIEVYUEVDVF9ORUFSKDcuMDcxMCwgdGVzdC5hKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDUuNjU2OCwgdGVzdC5iKCksIGVwc2lsb24pOwor
ICAgIEVYUEVDVF9ORUFSKC0xLjQxNDIsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1Rf
TkVBUigtMS40MTQyLCB0ZXN0LmQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgy
LjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisg
ICAgdGVzdC5yb3RhdGVGcm9tVmVjdG9yKDEwLjAsIC0xMC4wKTsKKworICAgIHRlc3RBZmZpbmVM
aWtlQ29uc3RydWN0aW9uKHRlc3QpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBU
cmFuc2xhdGVYWSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYu
MCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdC50cmFuc2xhdGUoMC4wLCAw
LjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0
LnRyYW5zbGF0ZSg1LjAsIDAuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5h
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5k
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMjYuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC50cmFuc2xhdGUoMC4wLCAtMS4y
KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdGVzdC5j
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyNy4yLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMi40LCB0ZXN0
LmYoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEZsaXBYKQoreworICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAs
IDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRl
c3QuZmxpcFgoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTYuMCwgdGVzdC5hKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
NC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBYKCk7CisKKyAgICB0ZXN0QWZmaW5lTGlr
ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRlc3QyOworCisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKKworICAgIEFTU0VSVF9UUlVFKHRl
c3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eU9yVHJh
bnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAgRVhQRUNUX0RPVUJMRV9F
USgtMS4wLCB0ZXN0Mi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5iKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5jKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0ZXN0Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5l
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkpOworCisgICAgQVNTRVJU
X0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAgIEFTU0VS
VF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb24oKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEZs
aXBZKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAs
IDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0
ZXN0KTsKKworICAgIHRlc3QuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0
ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKC00LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC0zLjAs
IHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisKKyAg
ICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRlc3QyOworCisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKKworICAg
IEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIu
aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOworCisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QyLmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgw
LjAsIHRlc3QyLmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QyLmMoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgtMS4wLCB0ZXN0Mi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCB0ZXN0Mi5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5mKCkp
OworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFko
KTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RS
VUUodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7Cit9CisKK1RFU1QoVHJhbnNmb3Jt
YXRpb25NYXRyaXgsIEZsaXBYYW5kRmxpcFkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RB
ZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAg
RVhQRUNUX0RPVUJMRV9FUSgtNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgt
NS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
Mi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKwor
ICAgIHRlc3QuZmxpcFkoKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTYuMCwgdGVzdC5hKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoLTQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTMuMCwgdGVzdC5k
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxpcFgoKTsKKworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRl
c3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00LjAsIHRlc3QuYygpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKC0zLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwg
dGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0
ZXN0LmZsaXBZKCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKwor
ICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QyOworCisgICAgQVNTRVJUX1RS
VUUodGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfRkFM
U0UodGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0
eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOworCisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAgIEFTU0VSVF9G
QUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50
aXR5T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBZKCk7CisKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBTa2V3
KQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0
KTsKKworICAgIHRlc3Quc2tldygzNjAuMCwgMzYwLjApOworCisgICAgdGVzdEFmZmluZUxpa2VD
b25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMC4wLCAwLjApOworCisgICAgdGVz
dEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMTgwLjAsIDE4
MC4wKTsKKworICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRl
c3QuYigpKTsKKyAgICBFWFBFQ1RfTkVBUig0LjAsIHRlc3QuYygpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4w
LCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAg
IHRlc3Quc2tldygtMTgwLjAsIC0xODAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVj
dGlvbih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgU2tld1gpCit7Cisg
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAs
IDIuMCwgMS4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisg
ICAgdGVzdC5za2V3WCgzNjAuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0
ZXN0KTsKKworICAgIHRlc3Quc2tld1goMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNp
bG9uID0gMC4wMDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3QuYSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ORUFSKDQuMCwg
dGVzdC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDEuMCwgdGVzdC5mKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBTa2V3
WSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0
LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVz
dCk7CisKKyAgICB0ZXN0LnNrZXdZKDM2MC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3Ry
dWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3WSgxODAuMCk7CisKKyAgICBzdGF0aWMgZG91
YmxlIGVwc2lsb24gPSAwLjAwMDE7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5h
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX05F
QVIoNC4wLCB0ZXN0LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRl
c3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRy
aXgsIEludmVyc2UpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsK
KworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJbnZlcnRpYmxlKCkpOworCisgICAgYXV0byBpbnZl
cnNlID0gdGVzdC5pbnZlcnNlKCk7CisKKyAgICBBU1NFUlQoaW52ZXJzZSk7CisKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgaW52ZXJzZS0+YigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgaW52ZXJzZS0+Yygp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgaW52ZXJzZS0+ZCgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDAuMCwgaW52ZXJzZS0+ZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
aW52ZXJzZS0+ZigpKTsKKworICAgIGF1dG8gdGVzdDIgPSB0ZXN0ICogaW52ZXJzZS52YWx1ZSgp
OworCisgICAgdGVzdElkZW50aXR5KHRlc3QyKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1h
dHJpeCwgTm9uSW52ZXJ0YWJsZUJsZW5kKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IGZyb207CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdG8oMi43MTMz
NTkwOTM4LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDIuNDY0NTEzNzc2MSwgMC4wLCAwLjAsIDAuMCwg
MC4wLCAwLjAwLCAwLjAxLCAwLjAyLCAwLjAzLCAwLjA0LCAwLjA1KTsKKyAgICBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7CisgICAgCiAgICAgcmVzdWx0ID0gdG87CiAgICAg
cmVzdWx0LmJsZW5kKGZyb20sIDAuMjUpOwogICAgIEVYUEVDVF9UUlVFKHJlc3VsdCA9PSBmcm9t
KTsKLQorICAgIAogICAgIHJlc3VsdCA9IHRvOwogICAgIHJlc3VsdC5ibGVuZChmcm9tLCAwLjc1
KTsKICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0gdG8pOwogfQogCitURVNUKFRyYW5zZm9ybWF0
aW9uTWF0cml4LCBCbGVuZCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZWQ7Cisg
ICAgc2NhbGVkLnNjYWxlKDIuMCk7CisKKyAgICB0cmFuc2Zvcm0uYmxlbmQoc2NhbGVkLCA1MCk7
CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisgICAgRVhQRUNU
X05FQVIoLTQ4LjAsIHRyYW5zZm9ybS5tMTEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIo
MC4wLCB0cmFuc2Zvcm0ubTEyKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJh
bnNmb3JtLm0xMygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5t
MTQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTIxKCksIGVw
c2lsb24pOworICAgIEVYUEVDVF9ORUFSKC00OC4wLCB0cmFuc2Zvcm0ubTIyKCksIGVwc2lsb24p
OworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMygpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05F
QVIoMC4wLCB0cmFuc2Zvcm0ubTMxKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwg
dHJhbnNmb3JtLm0zMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigxLjAsIHRyYW5zZm9y
bS5tMzMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTM0KCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MSgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDIoKSwgZXBzaWxvbik7CisgICAg
RVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQzKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9O
RUFSKDEuMCwgdHJhbnNmb3JtLm00NCgpLCBlcHNpbG9uKTsKK30KKworVEVTVChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCwgQmxlbmQyKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlZDsK
KyAgICBzY2FsZWQuc2NhbGUoMi4wKTsKKworICAgIHRyYW5zZm9ybS5ibGVuZDIoc2NhbGVkLCAy
MCk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisgICAgRVhQ
RUNUX05FQVIoLTE4LjAsIHRyYW5zZm9ybS5tMTEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05F
QVIoMC4wLCB0cmFuc2Zvcm0ubTEyKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwg
dHJhbnNmb3JtLm0xMygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9y
bS5tMTQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTIxKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0xOC4wLCB0cmFuc2Zvcm0ubTIyKCksIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMygpLCBlcHNpbG9uKTsKKyAg
ICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoMC4wLCB0cmFuc2Zvcm0ubTMxKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAu
MCwgdHJhbnNmb3JtLm0zMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigxLjAsIHRyYW5z
Zm9ybS5tMzMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTM0
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MSgpLCBlcHNp
bG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDIoKSwgZXBzaWxvbik7Cisg
ICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQzKCksIGVwc2lsb24pOworICAgIEVYUEVD
VF9ORUFSKDEuMCwgdHJhbnNmb3JtLm00NCgpLCBlcHNpbG9uKTsKK30KKworVEVTVChUcmFuc2Zv
cm1hdGlvbk1hdHJpeCwgQmxlbmQ0KQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxl
ZDsKKyAgICBzY2FsZWQuc2NhbGUoMi4wKTsKKworICAgIHRyYW5zZm9ybS5ibGVuZDQoc2NhbGVk
LCAzMCk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisgICAg
RVhQRUNUX05FQVIoLTI4LjAsIHRyYW5zZm9ybS5tMTEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoMC4wLCB0cmFuc2Zvcm0ubTEyKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAu
MCwgdHJhbnNmb3JtLm0xMygpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5z
Zm9ybS5tMTQoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTIx
KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0yOC4wLCB0cmFuc2Zvcm0ubTIyKCksIGVw
c2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0yMygpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjQoKSwgZXBzaWxvbik7CisgICAgRVhQ
RUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTMxKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFS
KDAuMCwgdHJhbnNmb3JtLm0zMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigxLjAsIHRy
YW5zZm9ybS5tMzMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0u
bTM0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MSgpLCBl
cHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDIoKSwgZXBzaWxvbik7
CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQzKCksIGVwc2lsb24pOworICAgIEVY
UEVDVF9ORUFSKDEuMCwgdHJhbnNmb3JtLm00NCgpLCBlcHNpbG9uKTsKK30KKworVEVTVChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCwgRXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MjsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0ID09
IHRlc3QyKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0ICE9IHRlc3QyKTsKKworICAgIHRlc3QubWFr
ZUlkZW50aXR5KCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0ID09IHRlc3QyKTsKKyAgICBBU1NF
UlRfRkFMU0UodGVzdCAhPSB0ZXN0Mik7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0ZXN0MygxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAg
ICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0NCh0ZXN0Myk7CisKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0MyA9PSB0ZXN0NCk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QzICE9IHRlc3Q0KTsK
KworICAgIHRlc3Q0LnNldE00MygxMDAyLjIyKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0MyA9
PSB0ZXN0NCk7CisgICAgQVNTRVJUX1RSVUUodGVzdDMgIT0gdGVzdDQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0VHJhbnNsYXRpb25NYXRyaXgoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWF0cml4Lm0xMSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0cml4Lm0xMigpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDAuMCwgbWF0cml4Lm0xMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
bWF0cml4Lm0xNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0cml4Lm0yMSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWF0cml4Lm0yMigpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgbWF0cml4Lm0yMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0
cml4Lm0yNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0cml4Lm0zMSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0cml4Lm0zMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDEuMCwgbWF0cml4Lm0zMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWF0cml4
Lm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIG1hdHJpeC5tNDEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxNS4wLCBtYXRyaXgubTQyKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMzAuMCwgbWF0cml4Lm00MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWF0cml4
Lm00NCgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgQ2FzdGluZykKK3sKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDE2LjAsIDE1LjAsIDE0LjAsIDEz
LjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAgICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4wLCA0
LjAsIDMuMCwgMi4wLCAxLjApOworCisjaWYgVVNFKENBKQorICAgIENBVHJhbnNmb3JtM0QgY2FU
cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKDEwLjBmLCAxNS4wZiwgMzAu
MGYpOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbUNBVHJhbnNmb3Jt
KGNhVHJhbnNmb3JtKTsKKworICAgIHRlc3RUcmFuc2xhdGlvbk1hdHJpeChmcm9tQ0FUcmFuc2Zv
cm0pOworCisgICAgQ0FUcmFuc2Zvcm0zRCBjYUZyb21XSyA9IHRlc3Q7CisKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDE2LjAsIGNhRnJvbVdLLm0xMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4w
LCBjYUZyb21XSy5tMTIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgY2FGcm9tV0subTEz
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEzLjAsIGNhRnJvbVdLLm0xNCk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxMi4wLCBjYUZyb21XSy5tMjEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTEu
MCwgY2FGcm9tV0subTIyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIGNhRnJvbVdLLm0y
Myk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIGNhRnJvbVdLLm0yNCk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSg4LjAsIGNhRnJvbVdLLm0zMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjAs
IGNhRnJvbVdLLm0zMik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIGNhRnJvbVdLLm0zMyk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIGNhRnJvbVdLLm0zNCk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg0LjAsIGNhRnJvbVdLLm00MSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGNh
RnJvbVdLLm00Mik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIGNhRnJvbVdLLm00Myk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIGNhRnJvbVdLLm00NCk7CisjZW5kaWYKKworI2lmIFVT
RShDRykKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjZ1RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNm
b3JtTWFrZSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBmcm9tQ0dUcmFuc2Zvcm0oY2dUcmFuc2Zvcm0pOworCisgICAgdGVz
dEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24oZnJvbUNHVHJhbnNmb3JtKTsKKworICAgIENHQWZmaW5l
VHJhbnNmb3JtIGNnRnJvbVdLID0gdGVzdDsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIGNn
RnJvbVdLLmEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUuMCwgY2dGcm9tV0suYik7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMi4wLCBjZ0Zyb21XSy5jKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDExLjAsIGNnRnJvbVdLLmQpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCBjZ0Zyb21XSy50
eCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGNnRnJvbVdLLnR5KTsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oR1RLKSAmJiBPUyhXSU5ET1dTKSkKKyAgICBY
Rk9STSBnZGlGcm9tV0sgPSB0ZXN0OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMCwgZ2RpRnJv
bVdLLmVNMTEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUuMCwgZ2RpRnJvbVdLLmVNMTIpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgZ2RpRnJvbVdLLmVNMjEpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMTEuMCwgZ2RpRnJvbVdLLmVNMjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4w
LCBnZGlGcm9tV0suZUR4KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgZ2RpRnJvbVdLLmVE
eSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBEMkQxX01BVFJJWF8zWDJfRiBk
MmRUcmFuc2Zvcm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAx
LjApOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21EMkRUcmFuc2Zvcm0o
ZDJkVHJhbnNmb3JtKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKGZyb21EMkRU
cmFuc2Zvcm0pOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgZDJkRnJvbVdLID0gdGVzdDsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIGQyZEZyb21XSy5fMTEpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMTUuMCwgZDJkRnJvbVdLLl8xMik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMi4wLCBk
MmRGcm9tV0suXzIxKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIGQyZEZyb21XSy5fMjIp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCBkMmRGcm9tV0suXzMxKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDMuMCwgZDJkRnJvbVdLLl8zMik7CisjZW5kaWYKK30KKworVEVTVChUcmFuc2Zv
cm1hdGlvbk1hdHJpeCwgTWFrZU1hcEJldHdlZW5SZWN0cykKK3sKKyAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJv
bVJlY3QoMTAuMGYsIDEwLjBmLCAxMDAuMGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHRvUmVjdCg3MC4wZiwgNzAuMGYsIDIwMC4wZiwgNTAuMGYpOworCisgICAgYXV0byBtYXBC
ZXR3ZWVuID0gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoZnJvbVJl
Y3QsIHRvUmVjdCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgbWFwQmV0d2Vlbi5hKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLmIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
NSwgbWFwQmV0d2Vlbi5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNjAuMCwgbWFwQmV0d2Vl
bi5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNjAuMCwgbWFwQmV0d2Vlbi5mKCkpOworCisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIG1hcEJldHdlZW4ubTExKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgbWFwQmV0d2Vlbi5tMTMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdl
ZW4ubTE0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm0yMSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuNSwgbWFwQmV0d2Vlbi5tMjIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4ubTIzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBtYXBCZXR3ZWVuLm0yNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0
d2Vlbi5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4ubTMyKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBtYXBCZXR3ZWVuLm0zMygpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg2MC4wLCBtYXBCZXR3ZWVuLm00MSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYwLjAsIG1h
cEJldHdlZW4ubTQyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm00
MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWFwQmV0d2Vlbi5tNDQoKSk7Cit9CisK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288705</attachid>
            <date>2016-09-13 11:24:07 -0700</date>
            <delta_ts>2016-09-13 12:35:20 -0700</delta_ts>
            <desc>Patch (Style red due to MS naming)</desc>
            <filename>bug-161818-20160913112133.patch</filename>
            <type>text/plain</type>
            <size>196378</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBQ
cm92aWRlIERpcmVjdDJELWJhc2VkIGdlb21ldHJ5IGFuZCB0cmFuc2Zvcm0gY2FzdCBvcGVyYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAgICAgQWRkIG5ldyBjYXN0aW5n
IG9wZXJhdG9ycyB0byBhbmQgZnJvbSB2YXJpb3VzIERpcmVjdDJEIGRhdGEgdHlwZXMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6
RmxvYXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbnRQb2ludFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6SW50UG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Om9wZXJhdG9yIEQyRDFfUE9JTlRfMkYpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Om9wZXJhdG9yIEQyRDFfUE9JTlRfMlUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludFJlY3Q6OkludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6b3Bl
cmF0b3IgRDJEMV9SRUNUX0YpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6b3BlcmF0b3Ig
RDJEMV9SRUNUX1UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRTaXplV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OkludFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX1UpOgorICAgICAgICAoV2ViQ29yZTo6
SW50U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX0YpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIEQyRDFfTUFU
UklYXzNYMl9GKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgRDJE
MV9NQVRSSVhfM1gyX0YpOgorCiAyMDE2LTA5LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLmNsaWNr
IHNob3VsZCBiZSBIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2sKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0
aWxpdGllcy5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCkBA
IC05OSw2ICsxMDIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiAjZW5kaWYK
ICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwpAQCAtNTcsNyArNjEsNyBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBjbGFzcyBGbG9h
dFBvaW50IHsKIHB1YmxpYzoKLSAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0K
KyAgICBGbG9hdFBvaW50KCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6
IG1feCh4KSwgbV95KHkpIHsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQoY29uc3Qg
SW50UG9pbnQmKTsKICAgICBleHBsaWNpdCBGbG9hdFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQpAQCAtMTA3LDcg
KzExMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV95ICo9IHN5OwogICAgIH0KIAotICAgIHZvaWQg
bm9ybWFsaXplKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBub3JtYWxpemUoKTsKIAogICAg
IGZsb2F0IGRvdChjb25zdCBGbG9hdFBvaW50JiBhKSBjb25zdAogICAgIHsKQEAgLTE0OCwxMSAr
MTUyLDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBOU1BvaW50KCkg
Y29uc3Q7CiAjZW5kaWYKIAotICAgIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBtYXRyaXhUcmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CisjaWYgUExBVEZPUk0oV0lOKQorICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQoY29uc3QgRDJEX1BPSU5UXzJGJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEX1BPSU5UXzJGKCkgY29uc3Q7CisjZW5kaWYKKworICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludCBtYXRy
aXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgZmxvYXQgbV94LCBtX3k7CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0IG1feSB7
IDAgfTsKIH07CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmgJKHJldmlzaW9uIDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCB0
eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19yZWN0
YW5nbGUgY2Fpcm9fcmVjdGFuZ2xlX3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
bnRSZWN0OwpAQCAtMTM4LDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGVFdmVuSWZFbXB0eShj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIHZvaWQgZXh0ZW5kKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGV4dGVuZChjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICAvLyBOb3RlLCB0aGlz
IGRvZXNuJ3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRo
ZSBpbnQgdmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQg
b2YgMXgxIHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KQEAg
LTE2Myw5ICsxNjcsOSBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1f
c2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCiAgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyBy
ZWN0YW5nbGUgdG8gZml0IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCi0gICAgdm9pZCBmaXRU
b1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOwotICAg
IHZvaWQgZml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQm
IHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMik7Ci0gICAgdm9pZCBmaXRUb1BvaW50cyhjb25zdCBG
bG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAy
LCBjb25zdCBGbG9hdFBvaW50JiBwMyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXRUb1Bv
aW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMyk7CiAKICNp
ZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0KGNvbnN0IENHUmVjdCYpOwpA
QCAtMTgyLDYgKzE4NiwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgY2Fpcm9fcmVjdGFuZ2xl
X3QoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYpOworICAgIFdFQkNPUkVfRVhQT1JUIG9w
ZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHN0YXRpYyBGbG9hdFJl
Y3QgaW5maW5pdGVSZWN0KCk7CiAgICAgYm9vbCBpc0luZmluaXRlKCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lv
biAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6
ZSBOU1NpemU7CiAjZW5kaWYKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9S
TShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSW50U2l6ZTsKQEAgLTU0LDcgKzU4LDcgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAog
Y2xhc3MgRmxvYXRTaXplIHsKIHB1YmxpYzoKLSAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCks
IG1faGVpZ2h0KDApIHsgfQorICAgIEZsb2F0U2l6ZSgpIHsgfQogICAgIEZsb2F0U2l6ZShmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQp
IHsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZShjb25zdCBJbnRTaXplJik7CiAKQEAg
LTEyMCwxMyArMTI0LDE4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKLSAg
ICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGbG9hdFNpemUoY29uc3QgTlNTaXplICYpOyAvLyBk
b24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIFdFQkNPUkVfRVhQ
T1JUIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1NpemUoKSBjb25zdDsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IEZsb2F0U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0
bHkgc2luY2UgaXQncyBsb3NzeQorICAgIG9wZXJhdG9yIEQyRDFfU0laRV9GKCkgY29uc3Q7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKLSAgICBmbG9hdCBtX3dpZHRoOwotICAgIGZsb2F0IG1faGVpZ2h0
OworICAgIGZsb2F0IG1fd2lkdGggeyAwIH07CisgICAgZmxvYXQgbV9oZWlnaHQgeyAwIH07CiB9
OwogCiBpbmxpbmUgRmxvYXRTaXplJiBvcGVyYXRvcis9KEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxv
YXRTaXplJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5oCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsMTAg
QEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBl
ZGVmIHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7CiAjZW5kaWYKQEAgLTYyLDggKzY2LDggQEAgY2xh
c3MgSW50UG9pbnQgewogcHVibGljOgogICAgIEludFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7
IH0KICAgICBJbnRQb2ludChpbnQgeCwgaW50IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Ci0gICAg
ZXhwbGljaXQgSW50UG9pbnQoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgp
KSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQotICAgIGV4cGxpY2l0IEludFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kK
KyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJbnRQb2ludChjb25zdCBJbnRTaXplJiBzaXpl
KSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOyAvLyBkb24ndCBk
byB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogCiAgICAgc3RhdGljIEludFBvaW50
IHplcm8oKSB7IHJldHVybiBJbnRQb2ludCgpOyB9CiAgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7
IHJldHVybiAhbV94ICYmICFtX3k7IH0KQEAgLTEwNCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH07CiAgICAgfQogCi0gICAgSW50UG9pbnQgY29uc3RyYWluZWRCZXR3ZWVuKGNvbnN0IElu
dFBvaW50JiBtaW4sIGNvbnN0IEludFBvaW50JiBtYXgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIEludFBvaW50IGNvbnN0cmFpbmVkQmV0d2Vlbihjb25zdCBJbnRQb2ludCYgbWluLCBjb25z
dCBJbnRQb2ludCYgbWF4KSBjb25zdDsKIAogICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50
KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKQEAgLTEzNSw2ICsxMzksMTEgQEAgcHVibGljOgog
ICAgIG9wZXJhdG9yIFBPSU5UKCkgY29uc3Q7CiAgICAgSW50UG9pbnQoY29uc3QgUE9JTlRTJik7
CiAgICAgb3BlcmF0b3IgUE9JTlRTKCkgY29uc3Q7CisKKyAgICBJbnRQb2ludChjb25zdCBEMkQx
X1BPSU5UXzJVJik7CisgICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yRiYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIG9wZXJh
dG9yIEQyRDFfUE9JTlRfMkYoKSBjb25zdDsKKyAgICBvcGVyYXRvciBEMkQxX1BPSU5UXzJVKCkg
Y29uc3Q7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3Qg
RXZhc19Qb2ludCYpOwogICAgIG9wZXJhdG9yIEV2YXNfUG9pbnQoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDIwNTg0
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIkxheW91dFVuaXQuaCIKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+
CisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CiAj
ZW5kaWYKQEAgLTE3MCw2ICsxNzQsMTAgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBJbnRSZWN0KGNvbnN0IFJFQ1QmKTsKICAgICBvcGVyYXRvciBSRUNUKCkgY29uc3Q7CisgICAg
ZXhwbGljaXQgSW50UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYpOworICAgIEludFJlY3QoY29uc3Qg
RDJEMV9SRUNUX1UmKTsKKyAgICBvcGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0OworICAgIG9w
ZXJhdG9yIEQyRDFfUkVDVF9VKCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgZXhw
bGljaXQgSW50UmVjdChjb25zdCBFaW5hX1JlY3RhbmdsZSYpOwogICAgIG9wZXJhdG9yIEVpbmFf
UmVjdGFuZ2xlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50U2l6ZS5oCShyZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEwIEBACiAj
aW1wb3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0cnkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiAjaWYgVVNFKENHKQogdHlwZWRlZiBz
dHJ1Y3QgQ0dTaXplIENHU2l6ZTsKICNlbmRpZgpAQCAtMTIzLDcgKzEyNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CiAgICAgfQogCi0g
ICAgSW50U2l6ZSBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgSW50U2l6ZSYgbWluLCBjb25zdCBJ
bnRTaXplJiBtYXgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEludFNpemUgY29uc3RyYWlu
ZWRCZXR3ZWVuKGNvbnN0IEludFNpemUmIG1pbiwgY29uc3QgSW50U2l6ZSYgbWF4KSBjb25zdDsK
IAogICAgIHVuc2lnbmVkIGFyZWEoKSBjb25zdAogICAgIHsKQEAgLTE1Myw2ICsxNTcsMTAgQEAg
cHVibGljOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICBJbnRTaXplKGNvbnN0IFNJWkUmKTsKICAg
ICBvcGVyYXRvciBTSVpFKCkgY29uc3Q7CisgICAgSW50U2l6ZShjb25zdCBEMkQxX1NJWkVfVSYp
OworICAgIGV4cGxpY2l0IEludFNpemUoY29uc3QgRDJEMV9TSVpFX0YmKTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3k7CisgICAgb3BlcmF0b3IgRDJEMV9TSVpF
X1UoKSBjb25zdDsKKyAgICBvcGVyYXRvciBEMkQxX1NJWkVfRigpIGNvbnN0OwogI2VuZGlmCiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDIwNTg0
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogICAgICAgICAgICAgICAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzgsNiArMzgsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZpbmVU
cmFuc2Zvcm0gQ0dBZmZpbgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IEQyRF9NQVRSSVhfM1gyX0YgRDJEX01BVFJJWF8zWDJf
RjsKK3R5cGVkZWYgRDJEX01BVFJJWF8zWDJfRiBEMkQxX01BVFJJWF8zWDJfRjsKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC01Nyw3ICs2Miwx
MSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBh
LCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOwogCiAj
aWYgVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybShjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybShjb25zdCBDR0FmZmluZVRyYW5z
Zm9ybSYpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgQWZmaW5lVHJhbnNmb3Jt
KGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJik7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0TWF0cml4
KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91Ymxl
IGYpOwpAQCAtNjksMTYgKzc4LDE2IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZs
b2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCi0gICAgSW50U2l6
ZSBtYXBTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRT
aXplIG1hcFNpemUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogCi0gICAgRmxvYXRTaXplIG1hcFNp
emUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXpl
IG1hcFNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CiAKICAgICAvLyBSb3VuZHMgdGhlIHJl
c3VsdGluZyBtYXBwZWQgcmVjdGFuZ2xlIG91dC4gVGhpcyBpcyBoZWxwZnVsIGZvciBib3VuZGlu
ZwogICAgIC8vIGJveCBjb21wdXRhdGlvbnMgYnV0IG1heSBub3QgYmUgd2hhdCBpcyB3YW50ZWQg
aW4gb3RoZXIgY29udGV4dHMuCi0gICAgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYp
IGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxv
YXRSZWN0JikgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgRmxvYXRR
dWFkJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzSWRlbnRpdHkoKSBjb25z
dDsKIApAQCAtOTUsMjEgKzEwNCwyMSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGYoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybVs1XTsgfQogICAgIHZvaWQgc2V0Rihkb3VibGUgZikgeyBtX3Ry
YW5zZm9ybVs1XSA9IGY7IH0KIAotICAgIHZvaWQgbWFrZUlkZW50aXR5KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtYWtlSWRlbnRpdHkoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEFmZmlu
ZVRyYW5zZm9ybSYgbXVsdGlwbHkoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZShkb3VibGUpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSYgc2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpOyAKLSAgICBBZmZpbmVUcmFu
c2Zvcm0mIHNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSk7Ci0gICAgQWZmaW5l
VHJhbnNmb3JtJiBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0m
IHJvdGF0ZShkb3VibGUgZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtJiBz
Y2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIFdFQkNPUkVfRVhQT1JU
IEFmZmluZVRyYW5zZm9ybSYgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgQWZmaW5lVHJhbnNmb3JtJiByb3RhdGUoZG91YmxlKTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0mIHJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICBXRUJDT1JFX0VY
UE9SVCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSk7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIEFm
ZmluZVRyYW5zZm9ybSYgc2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpOwotICAgIEFmZmluZVRy
YW5zZm9ybSYgZmxpcFgoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zbGF0ZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJh
bnNmb3JtJiBzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
QWZmaW5lVHJhbnNmb3JtJiBmbGlwWCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5z
Zm9ybSYgZmxpcFkoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXcoZG91YmxlIGFuZ2xlWCwg
ZG91YmxlIGFuZ2xlWSk7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtJiBza2V3
KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgc2tl
d1goZG91YmxlIGFuZ2xlKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdZKGRvdWJsZSBhbmds
ZSk7CiAKQEAgLTEyMSw5ICsxMzAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ludmVydGlibGUo
KSBjb25zdDsgLy8gSWYgeW91IGNhbGwgdGhpcyB0aGlzLCB5b3UncmUgcHJvYmFibHkgZG9pbmcg
aXQgd3JvbmcuCiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBp
bnZlcnNlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
ZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJsZW5kKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkg
Y29uc3Q7CiAKICAgICBib29sIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKICAgICB7
CkBAIC0xNjcsMTEgKzE3NiwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKENHKQotICAg
IG9wZXJhdG9yIENHQWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
b3BlcmF0b3IgQ0dBZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKICNlbGlmIFVTRShDQUlSTykKICAg
ICBvcGVyYXRvciBjYWlyb19tYXRyaXhfdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgb3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdDsKKyNlbmRpZgor
CiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbihkb3VibGUgeCwgZG91Ymxl
IHkpCiAgICAgewogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIDEsIHgs
IHkpOwpAQCAtMTkyLDcgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxkb3VibGUs
IDY+IG1fdHJhbnNmb3JtOwogfTsKIAotQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVj
dHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCk7CitXRUJD
T1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KTsKIAogV0VCQ09SRV9FWFBPUlQg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtYXRpb25NYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9u
IDIwNTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtYXRpb25NYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTEgQEAg
dHlwZWRlZiBzdHJ1Y3QgdGFnWEZPUk0gWEZPUk07CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oV0lOKQordHlwZWRlZiBzdHJ1Y3QgRDJEX01BVFJJWF8zWDJfRiBEMkRfTUFUUklYXzNY
Ml9GOwordHlwZWRlZiBEMkRfTUFUUklYXzNYMl9GIEQyRDFfTUFUUklYXzNYMl9GOworI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtNzgs
NyArODMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkg
eyBtYWtlSWRlbnRpdHkoKTsgfQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgVHJhbnNmb3JtYXRpb25NYXRyaXgo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIHsgKnRoaXMgPSB0OyB9CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBl
LCBkb3VibGUgZikgeyBzZXRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZik7IH0KICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkb3VibGUgbTExLCBkb3VibGUgbTEyLCBkb3VibGUgbTEzLCBkb3VibGUg
bTE0LApAQCAtMTM2LDcgKzE0MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE1hcHMgYSAyRCBwb2lu
dCB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0sIHJldHVybmluZyBhIDJEIHBvaW50LgogICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlnbm9yZXMgdGhlIHogY29tcG9uZW50LCBlZmZlY3RpdmVseSBwcm9qZWN0
aW5nIHRoZSBwb2ludCBpbnRvIHRoZSB6PTAgcGxhbmUuCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2lu
dCBtYXBQb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBMaWtlIHRoZSB2
ZXJzaW9uIGFib3ZlLCBleGNlcHQgdGhhdCBpdCByb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0
aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IElu
dFBvaW50JiBwKSBjb25zdApAQCAtMTU1LDcgKzE2MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIElm
IHRoZSBtYXRyaXggaGFzIDNEIGNvbXBvbmVudHMsIHRoZSB6IGNvbXBvbmVudCBvZiB0aGUgcmVz
dWx0IGlzCiAgICAgLy8gZHJvcHBlZCwgZWZmZWN0aXZlbHkgcHJvamVjdGluZyB0aGUgcXVhZCBp
bnRvIHRoZSB6PTAgcGxhbmUuCi0gICAgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgRmxvYXRRdWFk
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgRmxv
YXRRdWFkJikgY29uc3Q7CiAKICAgICAvLyBNYXBzIGEgcG9pbnQgb24gdGhlIHo9MCBwbGFuZSBp
bnRvIGEgcG9pbnQgb24gdGhlIHBsYW5lIHdpdGggd2l0aCB0aGUgdHJhbnNmb3JtIGFwcGxpZWQs
IGJ5CiAgICAgLy8gZXh0ZW5kaW5nIGEgcmF5IHBlcnBlbmRpY3VsYXIgdG8gdGhlIHNvdXJjZSBw
bGFuZSBhbmQgY29tcHV0aW5nIHRoZSBsb2NhbCB4LHkgcG9zaXRpb24gb2YKQEAgLTIxOSwxNiAr
MjI0LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEYoZG91YmxlIGYpIHsgbV9tYXRyaXhbM11b
MV0gPSBmOyB9CiAKICAgICAvLyB0aGlzID0gbWF0ICogdGhpcy4KLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbXVsdGlwbHkoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbXVsdGlwbHkoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBzY2FsZShkb3VibGUpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZU5vblVuaWZv
cm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBzY2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZTNkKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUg
c3opOwogCiAgICAgLy8gQW5nbGUgaXMgaW4gZGVncmVlcy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcm90YXRlKGRvdWJsZSBkKSB7IHJldHVybiByb3RhdGUzZCgwLCAwLCBkKTsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGUoZG91YmxlIGQpIHsg
cmV0dXJuIHJvdGF0ZTNkKDAsIDAsIGQpOyB9CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJv
dGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcm90YXRlM2QoZG91YmxlIHJ4LCBkb3VibGUgcnksIGRvdWJsZSByeik7CisgICAgV0VC
Q09SRV9FWFBPUlQgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJvdGF0ZTNkKGRvdWJsZSByeCwgZG91
YmxlIHJ5LCBkb3VibGUgcnopOwogICAgIAogICAgIC8vIFRoZSB2ZWN0b3IgKHgseSx6KSBpcyBu
b3JtYWxpemVkIGlmIGl0J3Mgbm90IGFscmVhZHkuIEEgdmVjdG9yIG9mICgwLDAsMCkgdXNlcyBh
IHZlY3RvciBvZiAoMCwwLDEpLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGUzZChk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgYW5nbGUpOwpAQCAtMjQwLDkgKzI0
NSw5IEBAIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNsYXRlUmlnaHQo
ZG91YmxlIHR4LCBkb3VibGUgdHkpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2xh
dGVSaWdodDNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopOwogICAgIAotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmbGlwWCgpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBm
bGlwWSgpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3KGRvdWJsZSBhbmdsZVgsIGRv
dWJsZSBhbmdsZVkpOworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBm
bGlwWCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmbGlwWSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3KGRvdWJsZSBh
bmdsZVgsIGRvdWJsZSBhbmdsZVkpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3WChk
b3VibGUgYW5nbGUpIHsgcmV0dXJuIHNrZXcoYW5nbGUsIDApOyB9CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHNrZXdZKGRvdWJsZSBhbmdsZSkgeyByZXR1cm4gc2tldygwLCBhbmdsZSk7IH0K
IApAQCAtMjUwLDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BlcnNwZWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bM10gIT0gMC4wZjsgfQogCiAgICAgLy8gUmV0dXJu
cyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBhIHJlY3QgdG8gYSByZWN0LgotICAgIHN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZWN0VG9SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCByZWN0VG9SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAg
ICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsgLy8gSWYgeW91IGNhbGwgdGhpcyB0aGlzLCB5
b3UncmUgcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8VHJhbnNmb3JtYXRpb25NYXRyaXg+IGludmVyc2UoKSBjb25zdDsKQEAgLTI5NSw4ICszMDAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvbXBvc2U0KGNvbnN0IERlY29tcG9zZWQ0VHlwZSYp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBibGVuZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKLSAgICB2b2lkIGJsZW5kMihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKLSAgICB2b2lkIGJsZW5k
NChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJsZW5kMihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJsZW5kNChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKIAogICAg
IGJvb2wgaXNBZmZpbmUoKSBjb25zdAogICAgIHsKQEAgLTMwNSw5ICszMTAsOSBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgLy8gVGhyb3cgYXdheSB0aGUgbm9uLWFmZmluZSBwYXJ0cyBvZiB0aGUg
bWF0cml4IChsb3NzeSEpLgotICAgIHZvaWQgbWFrZUFmZmluZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbWFrZUFmZmluZSgpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRvQWZmaW5lVHJh
bnNmb3JtKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIHRvQWZm
aW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG0yKSBjb25zdAogICAgIHsKQEAgLTM0NiwxMiArMzUxLDEyIEBAIHB1
YmxpYzoKICAgICB9CiAKICNpZiBVU0UoQ0EpCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29u
c3QgQ0FUcmFuc2Zvcm0zRCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9uTWF0
cml4KGNvbnN0IENBVHJhbnNmb3JtM0QmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBD
QVRyYW5zZm9ybTNEKCkgY29uc3Q7CiAjZW5kaWYKICNpZiBVU0UoQ0cpCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgoY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBvcGVyYXRvciBDR0Fm
ZmluZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9u
TWF0cml4KGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7CisgICAgV0VCQ09SRV9FWFBPUlQgb3Bl
cmF0b3IgQ0dBZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKICNlbGlmIFVTRShDQUlSTykKICAgICBv
cGVyYXRvciBjYWlyb19tYXRyaXhfdCgpIGNvbnN0OwogI2VuZGlmCkBAIC0zNjAsNiArMzY1LDEx
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBYRk9STSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhf
M1gyX0YmKTsKKyAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0OworI2VuZGlm
CisKICAgICBib29sIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX21hdHJpeFswXVswXSA9PSAxICYmIG1fbWF0cml4WzBdWzFdID09IDAgJiYg
bV9tYXRyaXhbMF1bMl0gPT0gMCAmJiBtX21hdHJpeFswXVszXSA9PSAwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2lu
dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNp
ZiBQTEFURk9STShXSU4pCisKKyNpbmNsdWRlIDxkMmQxLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBEMkRfUE9JTlRfMkYmIHApCisgICAg
OiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30KKworRmxvYXRQb2ludDo6b3BlcmF0b3Ig
RDJEX1BPSU5UXzJGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6UG9pbnQyRihtX3gsIG1f
eSk7Cit9CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVj
dDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisjaWYgUExBVEZPUk0oV0lO
KQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYg
cikKKyAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludChyLmxlZnQsIHIudG9wKSkKKyAgICAsIG1f
c2l6ZShGbG9hdFNpemUoci5yaWdodCAtIHIubGVmdCwgci5ib3R0b20gLSByLnRvcCkpCit7Cit9
CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdAoreworICAgIHJldHVy
biBEMkQxOjpSZWN0Rih4KCksIHkoKSwgbWF4WCgpLCBtYXhZKCkpOworfQorCit9CisKKyNlbmRp
ZiAvLyBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKworI2luY2x1ZGUg
PGQyZDEuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFNpemU6OkZsb2F0U2l6ZShj
b25zdCBEMkQxX1NJWkVfRiYgcykKKyAgICA6IG1fd2lkdGgocy53aWR0aCkKKyAgICAsIG1faGVp
Z2h0KHMuaGVpZ2h0KQoreworfQorCitGbG9hdFNpemU6Om9wZXJhdG9yIEQyRDFfU0laRV9GKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6U2l6ZUYobV93aWR0aCwgbV9oZWlnaHQpOworfQor
Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdpbi5jcHAJKHJldmlzaW9uIDIw
NTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDkgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCisj
aW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTQsNCArNTYsMjYgQEAgSW50UG9pbnQ6Om9wZXJhdG9yIFBPSU5UUygpIGNvbnN0
CiAgICAgcmV0dXJuIHA7CiB9CiAKK0ludFBvaW50OjpJbnRQb2ludChjb25zdCBEMkQxX1BPSU5U
XzJGJiBwKQorICAgIDogbV94KGNsYW1wVG9JbnRlZ2VyKHAueCkpCisgICAgLCBtX3koY2xhbXBU
b0ludGVnZXIocC55KSkKK3sKK30KKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEQyRDFfUE9J
TlRfMlUmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30KKworSW50UG9p
bnQ6Om9wZXJhdG9yIEQyRDFfUE9JTlRfMkYoKSBjb25zdAoreworICAgIHJldHVybiBEMkQxOjpQ
b2ludDJGKG1feCwgbV95KTsKK30KKworSW50UG9pbnQ6Om9wZXJhdG9yIEQyRDFfUE9JTlRfMlUo
KSBjb25zdAoreworICAgIHJldHVybiBEMkQxOjpQb2ludDJVKG1feCwgbV95KTsKK30KKwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRS
ZWN0V2luLmNwcAkocmV2aXNpb24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcs
MTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKKyNpbmNs
dWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IFJFQ1Qm
IHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHIubGVmdCwgci50b3ApKSwgbV9zaXplKElu
dFNpemUoci5yaWdodC1yLmxlZnQsIHIuYm90dG9tLXIudG9wKSkKKyAgICA6IG1fbG9jYXRpb24o
SW50UG9pbnQoci5sZWZ0LCByLnRvcCkpLCBtX3NpemUoSW50U2l6ZShyLnJpZ2h0IC0gci5sZWZ0
LCByLmJvdHRvbSAtIHIudG9wKSkKIHsKIH0KIApAQCAtNDIsNCArNDQsMjYgQEAgSW50UmVjdDo6
b3BlcmF0b3IgUkVDVCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKK0ludFJlY3Q6Oklu
dFJlY3QoY29uc3QgRDJEMV9SRUNUX0YmIHIpCisgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KGNs
YW1wVG9JbnRlZ2VyKHIubGVmdCksIGNsYW1wVG9JbnRlZ2VyKHIudG9wKSkpCisgICAgLCBtX3Np
emUoSW50U2l6ZShjbGFtcFRvSW50ZWdlcihyLnJpZ2h0IC0gci5sZWZ0KSwgY2xhbXBUb0ludGVn
ZXIoci5ib3R0b20gLSByLnRvcCkpKQoreworfQorCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEQy
RDFfUkVDVF9VJiByKQorICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChyLmxlZnQsIHIudG9wKSkK
KyAgICAsIG1fc2l6ZShJbnRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9tIC0gci50b3Ap
KQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEQyRDE6OlJlY3RGKHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSk7Cit9CisKK0ludFJl
Y3Q6Om9wZXJhdG9yIEQyRDFfUkVDVF9VKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6UmVj
dFUoeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAkocmV2aXNp
b24gMjA1ODQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNp
emVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgor
I2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQyLDQgKzQ0LDI2IEBAIEludFNpemU6Om9wZXJhdG9yIFNJWkUoKSBjb25zdAog
ICAgIHJldHVybiBzOwogfQogCitJbnRTaXplOjpJbnRTaXplKGNvbnN0IEQyRDFfU0laRV9VJiBz
KQorICAgIDogbV93aWR0aChzLndpZHRoKQorICAgICwgbV9oZWlnaHQocy5oZWlnaHQpCit7Cit9
CisKK0ludFNpemU6OkludFNpemUoY29uc3QgRDJEMV9TSVpFX0YmIHMpCisgICAgOiBtX3dpZHRo
KGNsYW1wVG9JbnRlZ2VyKHMud2lkdGgpKQorICAgICwgbV9oZWlnaHQoY2xhbXBUb0ludGVnZXIo
cy5oZWlnaHQpKQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfVSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEQyRDE6OlNpemVVKG1fd2lkdGgsIG1faGVpZ2h0KTsKK30KKworSW50
U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX0YoKSBjb25zdAoreworICAgIHJldHVybiBEMkQxOjpT
aXplRihtX3dpZHRoLCBtX2hlaWdodCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3Jt
YXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpZiBQTEFURk9STShXSU4pCisKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKworI2lu
Y2x1ZGUgPGQyZDEuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhfM1gyX0YmIHQpCit7
CisgICAgc2V0QSh0Ll8xMSk7CisgICAgc2V0Qih0Ll8xMik7CisgICAgc2V0Qyh0Ll8yMSk7Cisg
ICAgc2V0RCh0Ll8yMik7CisgICAgc2V0RSh0Ll8zMSk7CisgICAgc2V0Rih0Ll8zMik7Cit9CisK
K1RyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChh
KCkpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoYygpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChk
KCkpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoZigpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJh
bnNmb3JtKGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQoreworICAgIHNldE1hdHJpeCh0Ll8x
MSwgdC5fMTIsIHQuXzIxLCB0Ll8yMiwgdC5fMzEsIHQuXzMyKTsKK30KKworQWZmaW5lVHJhbnNm
b3JtOjpvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQy
RDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChhKCkpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
YygpKSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkKCkpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
ZigpKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDU4NDApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTEyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBQcm92aWRlIERpcmVjdDJELWJh
c2VkIGdlb21ldHJ5IGFuZCB0cmFuc2Zvcm0gY2FzdCBvcGVyYXRpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOiBM
aW5rIHRvIERpcmVjdDJEIG9uIFdpbmRvd3MuCisKIDIwMTYtMDktMDYgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBbWGNvZGVdIFdlYktpdExlZ2FjeS5mcmFtZXdv
cmsgaXMgcmUtc2lnbmVkIG9uIGluY3JlbWVudGFsIGJ1aWxkIGV2ZW4gaWYgbm90aGluZ+KAmXMg
Y2hhbmdlZApJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyMDU4NDApCisr
KyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00MjAs
NiArNDIwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0xJQlJBUklFUwogICAgIFBSSVZBVEUgQ29t
Y3RsMzIKICAgICBQUklWQVRFIENvbXN1cHAKICAgICBQUklWQVRFIENyeXB0MzIKKyAgICBQUklW
QVRFIEQyZDEKICAgICBQUklWQVRFIElwaGxwYXBpCiAgICAgUFJJVkFURSBQc2FwaQogICAgIFBS
SVZBVEUgUnBjcnQ0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDU4NDApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNi0wOS0xMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXVtEaXJlY3QyRF0gUHJvdmlkZSBEaXJlY3Qy
RC1iYXNlZCBnZW9tZXRyeSBhbmQgdHJhbnNmb3JtIGNhc3Qgb3BlcmF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxODE4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNldmVyYWwgbmV3IHRl
c3Qgc3VpdGVzIGZvciB0aGUgdmFyaW91cyBnZW9tZXRyaWMgcHJpbWl0aXZlcyBpbiBXZWJDb3Jl
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZTogQWRkIG5ldyBm
aWxlcyBmb3IgdGVzdCBjYXNlcy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHA6IEFkZGVkLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNwcDogQWRkZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFNpemUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9pbnQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UmVjdC5jcHA6
IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRTaXplLmNw
cDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmNwcDogQWRkIHNvbWUgbmV3CisgICAgICAgIFdpbmRvd3MtZm9jdXNlZCB0
ZXN0IGNhc2VzLgorCiAyMDE2LTA5LTEyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyOiBGaXggcmVsYXRpdmUgVVJMcyBjb250
YWluaW5nIG9ubHkgZnJhZ21lbnRzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
V2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4u
Y21ha2UJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1X
aW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgYWRkX2RlZmluaXRpb25z
KC1EV0VCQ09SRV9FWFBPUlQ9KQogCiBzZXQodGVzdF93ZWJjb3JlX0xJQlJBUklFUwogICAgIENy
eXB0MzIKKyAgICBEMmQxCiAgICAgSXBobHBhcGkKICAgICBQc2FwaQogICAgIFNobHdhcGkKQEAg
LTQwLDEzICs0MSwyMSBAQCBzZXQodGVzdF93ZWJjb3JlX0xJQlJBUklFUwogc2V0KFRlc3RXZWJD
b3JlTGliX1NPVVJDRVMKICAgICAke3Rlc3RfbWFpbl9TT1VSQ0VTfQogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV2ViQ29yZS9DU1NQYXJzZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3QuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XZWJDb3JlL0ludFJlY3QuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V2ViQ29yZS9JbnRQb2ludC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJD
b3JlL0ludFNpemUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9M
YXlvdXRVbml0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvUGFy
c2VkQ29udGVudFJhbmdlLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvU2hhcmVkQnVmZmVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvVGltZVJhbmdlcy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dlYkNvcmUvVVJMLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
VVJMUGFyc2VyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvd2lu
L0RJQlBpeGVsRGF0YS5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDU4NDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCwxNiBAQAogCQk3Njcz
NDk5RDE5MzBDNUJCMDBFNDRERjkgLyogU3RvcExvYWRpbmdEdXJpbmdEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkX2J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NjczNDk5QTE5MzAxODJFMDBFNDRERjkgLyogU3RvcExvYWRpbmdEdXJpbmdEaWRG
YWlsUHJvdmlzaW9uYWxMb2FkX2J1bmRsZS5jcHAgKi87IH07CiAJCTc2RTE4MkREMTU0NzU2OTEw
MEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQg
LyogV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2
N0U2MDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBG
MUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKKwkJN0EwMTBCQ0IxRDg3
N0MwNTAwRURFNzJBIC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTAxMEJDQTFEODc3QzA1MDBFREU3MkEg
LyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayAqLzsgfTsKKwkJN0EwMTBCQ0QxRDg3N0MwRDAwRURF
NzJBIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0EwMTBCQ0MxRDg3N0MwRDAwRURFNzJBIC8qIFF1YXJ0ekNv
cmUuZnJhbWV3b3JrICovOyB9OwogCQk3QTE0NThGQzFBRDVDMDcwMDBFMDY3NzIgLyogbW91c2Ut
YnV0dG9uLWxpc3RlbmVyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRv
bi1saXN0ZW5lci5odG1sICovOyB9OworCQk3QTkwOUE3RDFEODc3NDgwMDA3RTEwRjggLyogQWZm
aW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBOTA5QTZGMUQ4Nzc0NzUwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICov
OyB9OworCQk3QTkwOUE3RTFEODc3NDgwMDA3RTEwRjggLyogRmxvYXRQb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkwOUE3MDFEODc3NDc1
MDA3RTEwRjggLyogRmxvYXRQb2ludC5jcHAgKi87IH07CisJCTdBOTA5QTdGMUQ4Nzc0ODAwMDdF
MTBGOCAvKiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0E5MDlBNzExRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UmVjdC5jcHAgKi87
IH07CisJCTdBOTA5QTgwMUQ4Nzc0ODAwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5MDlBNzIxRDg3NzQ3NTAw
N0UxMEY4IC8qIEZsb2F0U2l6ZS5jcHAgKi87IH07CisJCTdBOTA5QTgxMUQ4Nzc0ODAwMDdFMTBG
OCAvKiBJbnRQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTkwOUE3MzFEODc3NDc1MDA3RTEwRjggLyogSW50UG9pbnQuY3BwICovOyB9Owor
CQk3QTkwOUE4MjFEODc3NDgwMDA3RTEwRjggLyogSW50UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkwOUE3NDFEODc3NDc1MDA3RTEwRjgg
LyogSW50UmVjdC5jcHAgKi87IH07CisJCTdBOTA5QTgzMUQ4Nzc0ODAwMDdFMTBGOCAvKiBJbnRT
aXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
OTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXplLmNwcCAqLzsgfTsKIAkJN0FEM0ZFOEUx
RDc2MTMxMjAwQjE2OUE0IC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRDNGRThEMUQ3NUZCOEQwMEIxNjlB
NCAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgKi87IH07CiAJCTdBRTlFNTA5MUFFNUFFOEIw
MENGODc0QiAvKiB0ZXN0LnBkZiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUU5RTUwODFBRTVBRThCMDBDRjg3NEIgLyogdGVzdC5wZGYgKi87
IH07CiAJCTdDMzk2NTA2MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM5NjUwNTFDREQ3NEY5MDA5NERC
QjggLyogQ29sb3IuY3BwICovOyB9OwpAQCAtODk1LDkgKzkwNCwxOCBAQAogCQk3NkUxODJEOTE1
NDc1NTAxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZFMTgyREMxNTQ3NTY5MTAwRjFGQUREIC8qIFdpbGxTZW5k
U3VibWl0RXZlbnRfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdpbGxTZW5kU3VibWl0RXZlbnRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzZFMTgyREUxNTQ3NUE4MzAwRjFGQUREIC8qIGF1dG8tc3VibWl0dGluZy1mb3Jt
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0by1zdWJtaXR0aW5nLWZvcm0u
aHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBMDEwQkNBMUQ4NzdDMDUwMEVE
RTcyQSAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlR3Jh
cGhpY3MuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlR3Jh
cGhpY3MuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJN0EwMTBCQ0MxRDg3
N0MwRDAwRURFNzJBIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBR
dWFydHpDb3JlLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVh
cnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQk3QTE0NThGQjFB
RDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAibW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QTM4RDdFNTFDNzUyRDVGMDA0RjE1N0QgLyogSGFzaENvdW50
ZWRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaENvdW50
ZWRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU2MjMxMDFBRDVBRjNF
MDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyogQWZmaW5l
VHJhbnNmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFmZmlu
ZVRyYW5zZm9ybS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTcwMUQ4
Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QTkwOUE3MTFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdBOTA5QTcyMUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFNpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E5MDlBNzMxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E5MDlBNzQxRDg3NzQ3NTAwN0UxMEY4
IC8qIEludFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50
UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBOTA5QTc1MUQ4Nzc0NzUw
MDdFMTBGOCAvKiBJbnRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEludFNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTk5RDk5MzFB
RDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8q
IERhdGVNYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVN
YXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBNkExNTExQUFDMEIzMTAw
MkIyRUQzIC8qIFdvcmtRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXb3JrUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE4OCw2
ICsxMjA2LDggQEAKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTdBMDEwQkNEMUQ4NzdD
MEQwMEVERTcyQSAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJ
CTdBMDEwQkNCMUQ4NzdDMDUwMEVERTcyQSAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xMzY1LDYgKzEzODUsMTMgQEAKIAkJNDQwQTFEMzYxNEEwMTAwMDAw
OEE2NkYyIC8qIFdlYkNvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTdBOTA5QTZGMUQ4Nzc0NzUwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3Bw
ICovLAorCQkJCTdBOTA5QTcwMUQ4Nzc0NzUwMDdFMTBGOCAvKiBGbG9hdFBvaW50LmNwcCAqLywK
KwkJCQk3QTkwOUE3MTFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRSZWN0LmNwcCAqLywKKwkJCQk3
QTkwOUE3MjFEODc3NDc1MDA3RTEwRjggLyogRmxvYXRTaXplLmNwcCAqLywKKwkJCQk3QTkwOUE3
MzFEODc3NDc1MDA3RTEwRjggLyogSW50UG9pbnQuY3BwICovLAorCQkJCTdBOTA5QTc0MUQ4Nzc0
NzUwMDdFMTBGOCAvKiBJbnRSZWN0LmNwcCAqLywKKwkJCQk3QTkwOUE3NTFEODc3NDc1MDA3RTEw
RjggLyogSW50U2l6ZS5jcHAgKi8sCiAJCQkJQ0Q4OUQwMzcxQzRFREIxMzAwMDQwQTA0IC8qIGNv
Y29hICovLAogCQkJCTkzQTcyMEU1MThGMUEwRTgwMEE4NDhFMSAvKiBDYWxjdWxhdGlvblZhbHVl
LmNwcCAqLywKIAkJCQk3QzM5NjUwNTFDREQ3NEY5MDA5NERCQjggLyogQ29sb3IuY3BwICovLApA
QCAtMTM5OSw2ICsxNDI2LDggQEAKIAkJN0M4M0UwMjgxRDBBNUNERjAwRkVCQ0YzIC8qIEZyYW1l
d29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdB
MDEwQkNDMUQ4NzdDMEQwMEVERTcyQSAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKKwkJCQk3
QTAxMEJDQTFEODc3QzA1MDBFREU3MkEgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayAqLywKIAkJ
CQk3QzgzRTAzMzFEMEE1RjI3MDBGRUJDRjMgLyogbGliaWN1Y29yZS5keWxpYiAqLywKIAkJCQk3
QzgzRTAyOTFEMEE1Q0RGMDBGRUJDRjMgLyogbGliV1RGLmEgKi8sCiAJCQkpOwpAQCAtMjI0Nyw2
ICsyMjc2LDcgQEAKIAkJCQk3Q0NFN0YyOTFBNDExQjEwMDA0NDdDNEMgLyogQ3VzdG9tUHJvdG9j
b2xzSW52YWxpZFNjaGVtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjJBMUE0MTFCMTAw
MDQ0N0M0QyAvKiBDdXN0b21Qcm90b2NvbHNTeW5jWEhSVGVzdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RjJCMUE0MTFCMTAwMDQ0N0M0QyAvKiBDdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBODAxRDg3NzQ4MDAwN0UxMEY4IC8qIEZsb2F0U2l6ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyREM0Q0Y3NzFEMkQ5REQ4MDBFQ0NDOTQgLyogRGF0YURl
dGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMTY0NkUyMUQxODYyQ0QwMDAxNUExQSAv
KiBEZWZlcnJlZFZpZXdJbldpbmRvd1N0YXRlQ2hhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0NDRTdFQjkxQTQxMUE3RTAwNDQ3QzRDIC8qIERldmljZVNjYWxlRmFjdG9ySW5EYXNoYm9hcmRS
ZWdpb25zLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yMjY3LDYgKzIyOTcsNyBAQAogCQkJCTdDQ0U3
RUJFMUE0MTFBN0UwMDQ0N0M0QyAvKiBEeW5hbWljRGV2aWNlU2NhbGVGYWN0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VFMDFBNDExQTlBMDA0NDdDNEMgLyogRWRpdG9yQ29tbWFuZHMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCRjFBNDExQTdFMDA0NDdDNEMgLyogRWxlbWVu
dEF0UG9pbnRJbldlYkZyYW1lLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBODMxRDg3NzQ4
MDAwN0UxMEY4IC8qIEludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRUYxQTQx
MUFFNjAwNDQ3QzRDIC8qIEVwaGVtZXJhbFNlc3Npb25QdXNoU3RhdGVOb0hpc3RvcnlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VGMDFBNDExQUU2MDA0NDdDNEMgLyogRXZh
bHVhdGVKYXZhU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYxMUE0MTFBRTYw
MDQ0N0M0QyAvKiBGYWlsZWRMb2FkLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjM0Miw4ICsyMzcz
LDEwIEBACiAJCQkJN0NDRTdFQTYxQTQxMUEwRjAwNDQ3QzRDIC8qIFBsYXRmb3JtVXRpbGl0aWVz
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTcxQTQxMUExMzAwNDQ3QzRDIC8qIFBs
YXRmb3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjI2MUE0MTFBRjYw
MDQ0N0M0QyAvKiBQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdBOTA5QTgyMUQ4
Nzc0ODAwMDdFMTBGOCAvKiBJbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjBC
MUE0MTFBRTYwMDQ0N0M0QyAvKiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdGMkMxQTQxMUIxMDAwNDQ3QzRDIC8qIFByZXZlbnRJbWFnZUxvYWRXaXRo
QXV0b1Jlc2l6aW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBN0UxRDg3NzQ4MDAwN0Ux
MEY4IC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEMxQTQxMUFF
NjAwNDQ3QzRDIC8qIFByaXZhdGVCcm93c2luZ1B1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMEMxMUQwQTY1MkYwMEZFQkNGMyAvKiBQcm92aXNp
b25hbFVSTE5vdENoYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUM4MUE0MTFBN0Uw
MDQ0N0M0QyAvKiBQdWJsaWNTdWZmaXgubW0gaW4gU291cmNlcyAqLywKQEAgLTIzNTEsMTMgKzIz
ODQsMTYgQEAKIAkJCQk3Q0NFN0YwRDFBNDExQUU2MDA0NDdDNEMgLyogUmVsb2FkUGFnZUFmdGVy
Q3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQzMxRDBBNjUzQTAwRkVCQ0YzIC8q
IFJlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQzkxQTQx
MUE3RTAwNDQ3QzRDIC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NTm9kZS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTdBOTA5QTdEMUQ4Nzc0ODAwMDdFMTBGOCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0ExQTQxMUE3RTAwNDQ3QzRDIC8qIFJlbmRlcmVkSW1h
Z2VGcm9tRE9NUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTBDNDFEMEE2NTQyMDBG
RUJDRjMgLyogUmVxdWlyZXNVc2VyQWN0aW9uRm9yUGxheWJhY2subW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyogUmVzaXplUmV2ZXJzZVBhZ2luYXRlZFdl
YlZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYxQTQxMUFFNjAwNDQ3QzRDIC8q
IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMTAx
QTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMTExQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3RvcmVT
ZXNzaW9uU3RhdGVDb250YWluaW5nRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5
MDlBODExRDg3NzQ4MDAwN0UxMEY4IC8qIEludFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTgzNUNGOTY3MUQyNUZDRDYwMDFBNjVENCAvKiBSZXN0b3JlU2Vzc2lvblN0YXRlV2l0aG91dE5h
dmlnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0E5MDlBN0YxRDg3NzQ4MDAwN0UxMEY4
IC8qIEZsb2F0UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxMjFBNDExQUU2MDA0
NDdDNEMgLyogU2Nyb2xsUGlubmluZ0JlaGF2aW9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0VDQjFBNDExQTdFMDA0NDdDNEMgLyogU2V0QW5kVXBkYXRlQ2FjaGVNb2RlbC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTdDQ0U3RUNDMUE0MTFBN0UwMDQ0N0M0QyAvKiBTZXREb2N1bWVudFVS
SS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1
ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRp
YyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFu
c2Zvcm0pCit7CisgICAgYWZmaW5lVHJhbnNmb3JtLnNldEEoMS4xKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEuMSwgYWZmaW5lVHJhbnNmb3JtLmEoKSk7CisgICAgYWZmaW5lVHJhbnNmb3JtLnNl
dEIoMi4yKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMiwgYWZmaW5lVHJhbnNmb3JtLmIoKSk7
CisgICAgYWZmaW5lVHJhbnNmb3JtLnNldEMoMy4zKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMu
MywgYWZmaW5lVHJhbnNmb3JtLmMoKSk7CisgICAgYWZmaW5lVHJhbnNmb3JtLnNldEQoNC40KTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgYWZmaW5lVHJhbnNmb3JtLmQoKSk7CisgICAgYWZm
aW5lVHJhbnNmb3JtLnNldEUoNS41KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuNSwgYWZmaW5l
VHJhbnNmb3JtLmUoKSk7CisgICAgYWZmaW5lVHJhbnNmb3JtLnNldEYoNi42KTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDYuNiwgYWZmaW5lVHJhbnNmb3JtLmYoKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RJZGVudGl0eShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
K3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLmEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4w
LCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLmQo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5lKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMC4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zv
cm0sIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IHRlc3Q7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVzdCk7CisgICAgdGVzdEdldEFuZFNldCh0ZXN0
KTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLmEoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwg
dHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdERvdWJsZWQoY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMi4wLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoOC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNm
b3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEhhbHZlZChjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLmEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyLjUsIHRyYW5zZm9ybS5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0
cmFuc2Zvcm0uYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuNSwgdHJhbnNmb3JtLmQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5lKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMS4wLCB0cmFuc2Zvcm0uZigpKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0s
IFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7CisKKyAgICBBU1NFUlRfRkFMU0Uo
dGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LnByZXNlcnZlc0F4aXNB
bGlnbm1lbnQoKSk7Cit9CisKKyNpZiBVU0UoQ0cpCitURVNUKEFmZmluZVRyYW5zZm9ybSwgQ0dB
ZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24pCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY2dU
cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAs
IDEuMCk7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoY2dUcmFuc2Zvcm0pOwor
CisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworICAgIHRlc3RHZXRBbmRTZXQodGVz
dCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworfQorI2VuZGlmCisK
KyNpZiBQTEFURk9STShXSU4pCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRDJEMU1hdHJpeENvbnN0
cnVjdGlvbikKK3sKKyAgICBEMkQxX01BVFJJWF8zWDJfRiBkMmRUcmFuc2Zvcm0gPSBEMkQxOjpN
YXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSB0ZXN0KGQyZFRyYW5zZm9ybSk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1
Y3Rpb24odGVzdCk7CisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAgIEFTU0VSVF9GQUxT
RSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9CisjZW5kaWYKKworVEVTVChBZmZpbmVUcmFuc2Zvcm0s
IElkZW50aXR5KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4w
LCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0
eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsK
KyAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgp
KTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkpOworCisg
ICAgdGVzdC5tYWtlSWRlbnRpdHkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJZGVudGl0
eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOwor
ICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7
CisgICAgQVNTRVJUX1RSVUUodGVzdC5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkpOworCisgICAg
dGVzdElkZW50aXR5KHRlc3QpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgTWFwRmxvYXRQ
b2ludCkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IHBvaW50KDEwMC4wZiwgNTAuMGYpOworCisgICAgYXV0byBtYXBwZWRQb2lu
dCA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwg
bWFwcGVkUG9pbnQueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFBvaW50
LnkoKSk7CisKKyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQyID0g
dGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBw
ZWRQb2ludDIueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRQb2ludDIu
eSgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDMgPSB0
ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVk
UG9pbnQzLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQzLnko
KSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNYXBJbnRQb2ludCkKK3sKKyAgICBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCgx
MDAsIDUwKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsK
KworICAgIEFTU0VSVF9FUSgxMDAsIG1hcHBlZFBvaW50LngoKSk7CisgICAgQVNTRVJUX0VRKDUw
LCBtYXBwZWRQb2ludC55KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1h
cHBlZFBvaW50MiA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEwMCwg
bWFwcGVkUG9pbnQyLngoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQyLnkoKSk7
CisKKyAgICB0ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQzID0gdGVzdC5t
YXBQb2ludChwb2ludCk7CisKKyAgICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50My54KCkpOwor
ICAgIEFTU0VSVF9FUSgxMDAsIG1hcHBlZFBvaW50My55KCkpOworfQorCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgTWFwSW50U2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVz
dDsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoMjAwLCAzMDApOworCisgICAgYXV0byBtYXBw
ZWRTaXplID0gdGVzdC5tYXBTaXplKHNpemUpOworCisgICAgQVNTRVJUX0VRKDIwMCwgbWFwcGVk
U2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlRfRVEoMzAwLCBtYXBwZWRTaXplLmhlaWdodCgpKTsK
KworICAgIHRlc3Quc2V0RCgyLjApOworCisgICAgYXV0byBtYXBwZWRTaXplMiA9IHRlc3QubWFw
U2l6ZShzaXplKTsKKworICAgIEFTU0VSVF9FUSgyMDAsIG1hcHBlZFNpemUyLndpZHRoKCkpOwor
ICAgIEFTU0VSVF9FUSg2MDAsIG1hcHBlZFNpemUyLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0
QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRTaXplMyA9IHRlc3QubWFwU2l6ZShzaXplKTsKKwor
ICAgIEFTU0VSVF9FUSgxMDAsIG1hcHBlZFNpemUzLndpZHRoKCkpOworICAgIEFTU0VSVF9FUSg2
MDAsIG1hcHBlZFNpemUzLmhlaWdodCgpKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIE1h
cEZsb2F0U2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDsKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgyMDAuMGYsIDMwMC4wZik7CisKKyAgICBhdXRvIG1hcHBl
ZFNpemUgPSB0ZXN0Lm1hcFNpemUoc2l6ZSk7CisKKyAgICBBU1NFUlRfRVEoMjAwLjBmLCBtYXBw
ZWRTaXplLndpZHRoKCkpOworICAgIEFTU0VSVF9FUSgzMDAuMGYsIG1hcHBlZFNpemUuaGVpZ2h0
KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUyID0gdGVz
dC5tYXBTaXplKHNpemUpOworCisgICAgQVNTRVJUX0VRKDIwMC4wZiwgbWFwcGVkU2l6ZTIud2lk
dGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMC4wZiwgbWFwcGVkU2l6ZTIuaGVpZ2h0KCkpOworCisg
ICAgdGVzdC5zZXRBKDAuNSk7CisKKyAgICBhdXRvIG1hcHBlZFNpemUzID0gdGVzdC5tYXBTaXpl
KHNpemUpOworCisgICAgQVNTRVJUX0VRKDEwMC4wZiwgbWFwcGVkU2l6ZTMud2lkdGgoKSk7Cisg
ICAgQVNTRVJUX0VRKDYwMC4wZiwgbWFwcGVkU2l6ZTMuaGVpZ2h0KCkpOworfQorCitURVNUKEFm
ZmluZVRyYW5zZm9ybSwgTWFwSW50UmVjdCkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0gdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMTAsIDIwLCAyMDAsIDMwMCk7CisK
KyAgICBhdXRvIG1hcHBlZFJlY3QgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NFUlRf
RVEoMTAsIG1hcHBlZFJlY3QueCgpKTsKKyAgICBBU1NFUlRfRVEoMjAsIG1hcHBlZFJlY3QueSgp
KTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0LndpZHRoKCkpOworICAgIEFTU0VSVF9F
USgzMDAsIG1hcHBlZFJlY3QuaGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAg
ICBhdXRvIG1hcHBlZFJlY3QyID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAgQVNTRVJUX0VR
KDEwLCBtYXBwZWRSZWN0Mi54KCkpOworICAgIEFTU0VSVF9FUSg0MCwgbWFwcGVkUmVjdDIueSgp
KTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0Mi53aWR0aCgpKTsKKyAgICBBU1NFUlRf
RVEoNjAwLCBtYXBwZWRSZWN0Mi5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNldEEoMC41KTsKKwor
ICAgIGF1dG8gbWFwcGVkUmVjdDMgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NFUlRf
RVEoNSwgbWFwcGVkUmVjdDMueCgpKTsKKyAgICBBU1NFUlRfRVEoNDAsIG1hcHBlZFJlY3QzLnko
KSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUmVjdDMud2lkdGgoKSk7CisgICAgQVNTRVJU
X0VRKDYwMCwgbWFwcGVkUmVjdDMuaGVpZ2h0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9y
bSwgTWFwRmxvYXRSZWN0KQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0Owor
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDEwLmYsIDIwLjBmLCAyMDAuMGYsIDMwMC4wZik7
CisKKyAgICBhdXRvIG1hcHBlZFJlY3QgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7CisKKyAgICBBU1NF
UlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3QueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEo
MjAuMGYsIG1hcHBlZFJlY3QueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBw
ZWRSZWN0LndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgzMDAuMGYsIG1hcHBlZFJlY3Qu
aGVpZ2h0KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3Qy
ID0gdGVzdC5tYXBSZWN0KHJlY3QpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBtYXBw
ZWRSZWN0Mi54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MC4wZiwgbWFwcGVkUmVjdDIueSgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRSZWN0Mi53aWR0aCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoNjAwLjBmLCBtYXBwZWRSZWN0Mi5oZWlnaHQoKSk7CisKKyAgICB0
ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDMgPSB0ZXN0Lm1hcFJlY3QocmVj
dCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoNS4wZiwgbWFwcGVkUmVjdDMueCgpKTsKKyAgICBB
U1NFUlRfRkxPQVRfRVEoNDAuMGYsIG1hcHBlZFJlY3QzLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUmVjdDMud2lkdGgoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDYw
MC4wZiwgbWFwcGVkUmVjdDMuaGVpZ2h0KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwg
TWFwRmxvYXRRdWFkKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDEwMC4wZiwgMTAw
LjBmLCAxMDAuMGYsIDUwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZChyZWN0KTsK
KworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIHF1YWQucDEoKS54KCkpOworICAgIEFTU0VS
VF9GTE9BVF9FUSgxMDAuMGYsIHF1YWQucDEoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgy
MDAuMGYsIHF1YWQucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIHF1YWQu
cDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIHF1YWQucDMoKS54KCkpOwor
ICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIHF1YWQucDMoKS55KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgxMDAuMGYsIHF1YWQucDQoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAu
MGYsIHF1YWQucDQoKS55KCkpOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Q7
CisgICAgYXV0byBtYXBwZWRRdWFkID0gdGVzdC5tYXBRdWFkKHF1YWQpOworCisgICAgQVNTRVJU
X0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIw
MC4wZiwgbWFwcGVkUXVhZC5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwg
bWFwcGVkUXVhZC5wMigpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVk
UXVhZC5wMygpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgbWFwcGVkUXVhZC5w
MygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZC5wNCgpLngo
KSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgbWFwcGVkUXVhZC5wNCgpLnkoKSk7CisK
KyAgICB0ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUXVhZDIgPSB0ZXN0Lm1hcFF1
YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMi5wMSgp
LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDEoKS55KCkp
OworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQyLnAyKCkueCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMi5wMigpLnkoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDMoKS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQyLnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRf
RVEoMTAwLjBmLCBtYXBwZWRRdWFkMi5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMw
MC4wZiwgbWFwcGVkUXVhZDIucDQoKS55KCkpOworCisgICAgdGVzdC5zZXRBKDAuNSk7CisKKyAg
ICBhdXRvIG1hcHBlZFF1YWQzID0gdGVzdC5tYXBRdWFkKHF1YWQpOworCisgICAgQVNTRVJUX0ZM
T0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkMy5wMSgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDIwMC4wZiwgbWFwcGVkUXVhZDMucDEoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAu
MGYsIG1hcHBlZFF1YWQzLnAyKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBt
YXBwZWRRdWFkMy5wMigpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVk
UXVhZDMucDMoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQz
LnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1YWQzLnA0KCku
eCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFkMy5wNCgpLnkoKSk7
Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBNdWx0aXBseSkKK3sKKyAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0Lm11bHRpcGx5KGlkZW50aXR5KTsKKworICAgIHRlc3RW
YWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBk
b3VibGVyKDIuMCwgMC4wLCAwLjAsIDIuMCwgMC4wLCAwLjApOworCisgICAgdGVzdC5tdWx0aXBs
eShkb3VibGVyKTsKKworICAgIHRlc3REb3VibGVkKHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIGhhbHZlcigwLjUsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC4wKTsKKworICAg
IHRlc3QubXVsdGlwbHkoaGFsdmVyKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0
KTsKKworICAgIHRlc3QubXVsdGlwbHkoaGFsdmVyKTsKKworICAgIHRlc3RIYWx2ZWQodGVzdCk7
Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMS4wKTsKKworICAg
IHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMi4wKTsKKwor
ICAgIHRlc3REb3VibGVkKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgwLjUpOworCisgICAgdGVz
dFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgwLjUpOworCisgICAg
dGVzdEhhbHZlZCh0ZXN0KTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFNjYWxlVW5pZm9y
bU5vblVuaWZvcm0pCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1
LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVz
dCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgxLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgyLjAsIDIu
MCk7CisKKyAgICB0ZXN0RG91YmxlZCh0ZXN0KTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3Jt
KDAuNSwgMC41KTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRl
c3Quc2NhbGVOb25Vbmlmb3JtKDAuNSwgMC41KTsKKworICAgIHRlc3RIYWx2ZWQodGVzdCk7Cit9
CisKK1RFU1QoQWZmaW5lVHJhbnNmb3JtLCBTY2FsZU5vblVuaWZvcm0pCit7CisgICAgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisK
KyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5p
Zm9ybSgxLjAsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg4LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5kKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Quc2NhbGVOb25Vbmlmb3JtKDEuMCwgMC41KTsK
KworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGVOb25V
bmlmb3JtKDIuMCwgMS4wKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgdGVzdC5hKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgwLjUsIDEu
MCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxl
Tm9uVW5pZm9ybSgwLjUsIDIuMCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5h
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi41LCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg4LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5k
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFNjYWxl
RmxvYXRTaXplKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4w
LCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3Qp
OworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZpcnN0KDEuMGYsIDIuMGYpOworCisgICAgdGVz
dC5zY2FsZShmaXJzdCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg4LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5kKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxLjAsIHRlc3QuZigpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzZWNvbmQoMS4wZiwg
MC41Zik7CisKKyAgICB0ZXN0LnNjYWxlKHNlY29uZCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGhpcmQoMi4wZiwgMS4wZik7
CisKKyAgICB0ZXN0LnNjYWxlKHRoaXJkKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwg
dGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMCwgdGVzdC5iKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAs
IHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUg
Zm91cnRoKDAuNWYsIDEuMGYpOworCisgICAgdGVzdC5zY2FsZShmb3VydGgpOworCisgICAgdGVz
dFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZpZnRo
KDAuNWYsIDIuMGYpOworCisgICAgdGVzdC5zY2FsZShmaWZ0aCk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDMuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi41LCB0ZXN0LmIo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDYuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIFJvdGF0ZSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVz
dCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3Qucm90YXRlKDM2MC4w
KTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Qucm90YXRl
KDE4MC4wKTsKKworICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKworICAgIEVY
UEVDVF9ORUFSKC02LjAsIHRlc3QuYSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNS4w
LCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTQuMCwgdGVzdC5jKCksIGVw
c2lsb24pOworICAgIEVYUEVDVF9ORUFSKC0zLjAsIHRlc3QuZCgpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4w
LCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0ZSgtMTgwLjApOworCisgICAgdGVzdFZhbHVl
Q29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5yb3RhdGUoOTAuMCk7CisKKyAgICBFWFBF
Q1RfTkVBUig0LjAsIHRlc3QuYSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigzLjAsIHRl
c3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNi4wLCB0ZXN0LmMoKSwgZXBzaWxv
bik7CisgICAgRVhQRUNUX05FQVIoLTUuMCwgdGVzdC5kKCksIGVwc2lsb24pOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRl
c3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlKC05MC4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0
cnVjdGlvbih0ZXN0KTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFRyYW5zbGF0ZVhZKQor
eworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwg
Mi4wLCAxLjApOworCisgICAgdGVzdC50cmFuc2xhdGUoMC4wLCAwLjApOworCisgICAgdGVzdFZh
bHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC50cmFuc2xhdGUoNS4wLCAwLjApOwor
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDMyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDI2LjAsIHRlc3QuZigp
KTsKKworICAgIHRlc3QudHJhbnNsYXRlKDAuMCwgLTEuMik7CisKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjcuMiwgdGVzdC5lKCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjIuNCwgdGVzdC5mKCkpOworfQorCitURVNUKEFmZmlu
ZVRyYW5zZm9ybSwgVHJhbnNsYXRlRmxvYXRQb2ludCkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIFdlYkNv
cmU6OkZsb2F0UG9pbnQgbm9uZTsKKyAgICB0ZXN0LnRyYW5zbGF0ZShub25lKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgZmly
c3QoNS4wZiwgMC4wZik7CisKKyAgICB0ZXN0LnRyYW5zbGF0ZShmaXJzdCk7CisKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0
ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzIuMCwg
dGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjYuMCwgdGVzdC5mKCkpOworCisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBzZWNvbmQoMC4wZiwgLTEuMmYpOworCisgICAgdGVzdC50cmFu
c2xhdGUoc2Vjb25kKTsKKworICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMTsKKwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg1LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdGVzdC5jKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX05FQVIoMjcu
MiwgdGVzdC5lKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDIyLjQsIHRlc3QuZigpLCBl
cHNpbG9uKTsKKworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0MjsKKworICAgIEFT
U0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi50cmFuc2xhdGUoc2Vjb25k
KTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9U
UlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRl
c3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworfQorCitURVNUKEFmZmlu
ZVRyYW5zZm9ybSwgU2hlYXIpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0LnNoZWFyKDAuMCwgMC4w
KTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2hlYXIo
Mi4wLCAyLjApOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNC4wLCB0ZXN0LmEoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgxMS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
Ni4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMy4wLCB0ZXN0LmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5zaGVhcigtMS4wLCAyLjApOworCisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg0Ni4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzNy4w
LCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4w
LCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKK30KKwor
VEVTVChBZmZpbmVUcmFuc2Zvcm0sIEZsaXBYKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVl
Q29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAgRVhQRUNUX0RP
VUJMRV9FUSgtNi4wLCB0ZXN0LmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNS4wLCB0ZXN0
LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0
LmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qu
ZmxpcFgoKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0MjsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0Mik7CisK
KyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRl
c3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsK
KworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTEuMCwgdGVzdDIuYSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDAuMCwgdGVzdDIuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIu
YygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdDIuZCgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDAuMCwgdGVzdDIuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVz
dDIuZigpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFT
U0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICAvLyAnRmxp
cHBlZCcganVzdCBtZWFucyBpbiB0aGUgWSBkaXJlY3Rpb24KKyAgICBBU1NFUlRfRkFMU0UodGVz
dDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisKKyAgICB0ZXN0Mi5mbGlw
WCgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKK30KKworVEVTVChBZmZp
bmVUcmFuc2Zvcm0sIEZsaXBZKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QpOworCisgICAgdGVzdC5mbGlwWSgpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2
LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoLTQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
LTMuMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QuZmxpcFkoKTsK
KworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSB0ZXN0MjsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0Mik7CisKKyAgICBBU1NF
UlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0Mi5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4w
LCB0ZXN0Mi5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0Mi5jKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoLTEuMCwgdGVzdDIuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDAuMCwgdGVzdDIuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZigpKTsK
KworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxT
RSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0
Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKKworICAgIHRlc3QyLmZsaXBZ
KCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9U
UlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworICAgIEFTU0VSVF9UUlVFKHRl
c3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworfQorCitURVNUKEFmZmlu
ZVRyYW5zZm9ybSwgRmxpcFhhbmRGbGlwWSkKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNv
bnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3QuZmxpcFgoKTsKKworICAgIEVYUEVDVF9ET1VC
TEVfRVEoLTYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTUuMCwgdGVzdC5i
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5l
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZs
aXBZKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC02LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC00LjAs
IHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC0zLjAsIHRlc3QuZCgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4w
LCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBYKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5mbGlwWSgp
OworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgp
KTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAg
ICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsK
KworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0
eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7
CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lk
ZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bigpKTsKKyAgICAvLyBGYWxzZSBoZXJlIGJlY2F1c2UgWCBpcyBhbHNvIGZsaXBwZWQuCisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwor
CisgICAgdGVzdDIuZmxpcFgoKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5
KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsK
KyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgp
KTsKKworICAgIHRlc3QyLmZsaXBZKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50
aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkp
OworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpOworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgU2tldykKK3sKKyAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAg
IHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2tldygzNjAuMCwgMzYw
LjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3
KDAuMCwgMC4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRl
c3Quc2tldygxODAuMCwgMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uID0gMC4w
MDAxOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ORUFSKDQuMCwgdGVzdC5jKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwg
dGVzdC5mKCkpOworCisgICAgdGVzdC5za2V3KC0xODAuMCwgLTE4MC4wKTsKKworICAgIHRlc3RW
YWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIFhhbmRZ
U2NhbGUpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQu
MCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBFWFBFQ1RfTkVBUig3LjgxMDIsIHRlc3QueFNjYWxl
KCksIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoNS4wLCB0ZXN0LnlTY2FsZSgpLCAwLjAwMDEp
OworfQorCitURVNUKEFmZmluZVRyYW5zZm9ybSwgRXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QyOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qg
PT0gdGVzdDIpOworICAgIEFTU0VSVF9UUlVFKHRlc3QgIT0gdGVzdDIpOworCisgICAgdGVzdC5t
YWtlSWRlbnRpdHkoKTsKKworICAgIEFTU0VSVF9UUlVFKHRlc3QgPT0gdGVzdDIpOworICAgIEFT
U0VSVF9GQUxTRSh0ZXN0ICE9IHRlc3QyKTsKK30KKworVEVTVChBZmZpbmVUcmFuc2Zvcm0sIElu
dmVyc2UpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Q7CisKKyAgICBhdXRv
IGludmVyc2UgPSB0ZXN0LmludmVyc2UoKTsKKworICAgIEFTU0VSVChpbnZlcnNlKTsKKworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBpbnZlcnNlLT5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMC4wLCBpbnZlcnNlLT5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBpbnZlcnNl
LT5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBpbnZlcnNlLT5kKCkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoMC4wLCBpbnZlcnNlLT5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MC4wLCBpbnZlcnNlLT5mKCkpOworCisgICAgYXV0byB0ZXN0MiA9IHRlc3QgKiBpbnZlcnNlLnZh
bHVlKCk7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVzdDIpOworfQorCitURVNUKEFmZmluZVRyYW5z
Zm9ybSwgQmxlbmQpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3Q7CisKKyAg
ICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdDI7CisgICAgdGVzdDIuc2NhbGUoMi4wKTsK
KworICAgIHRlc3QuYmxlbmQodGVzdDIsIDUwKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTQ4
LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdC5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgt
NDguMCwgdGVzdC5kKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0LmUoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRlc3QuZigpKTsKK30KKworVEVTVChBZmZpbmVUcmFu
c2Zvcm0sIFRyYW5zbGF0aW9uKQoreworICAgIGF1dG8gdGVzdCA9IFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybTo6dHJhbnNsYXRpb24oLTUuMCwgLTcuMCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdC5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuZSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKC03LjAsIHRlc3QuZigpKTsKK30KKworVEVTVChBZmZpbmVUcmFu
c2Zvcm0sIFRvVHJhbnNmb3JtYXRpb25NYXRyaXgpCit7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXggPSB0cmFuc2Zvcm0udG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworCisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxLjAsIG1hdHJpeC5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1h
dHJpeC5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMTMoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMTQoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgwLjAsIG1hdHJpeC5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJp
eC5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMjMoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgwLjAsIG1hdHJpeC5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5t
MzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tMzMoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMzQoKSk7Cit9CisKK1RFU1QoQWZmaW5lVHJhbnNm
b3JtLCBNYWtlTWFwQmV0d2VlblJlY3RzKQoreworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm07CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJvbVJlY3QoMTAuMGYsIDEw
LjBmLCAxMDAuMGYsIDEwMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRvUmVjdCg3MC4w
ZiwgNzAuMGYsIDIwMC4wZiwgNTAuMGYpOworCisgICAgYXV0byBtYXBCZXR3ZWVuID0gV2ViQ29y
ZTo6bWFrZU1hcEJldHdlZW5SZWN0cyhmcm9tUmVjdCwgdG9SZWN0KTsKKworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMi4wLCBtYXBCZXR3ZWVuLmEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAs
IG1hcEJldHdlZW4uYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5j
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC41LCBtYXBCZXR3ZWVuLmQoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSg2MC4wLCBtYXBCZXR3ZWVuLmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg2MC4wLCBtYXBCZXR3ZWVuLmYoKSk7Cit9CisKKyNpZiBVU0UoQ0cpCitURVNUKEFmZmluZVRy
YW5zZm9ybSwgQ29yZUdyYXBoaWNzQ2FzdGluZykKK3sKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIENHQWZmaW5l
VHJhbnNmb3JtIHRlc3QyID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDYuMCwgNS4wLCA0LjAsIDMu
MCwgMi4wLCAxLjApOworCisgICAgQVNTRVJUX1RSVUUoQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRv
VHJhbnNmb3JtKHRlc3QsIHRlc3QyKSk7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
dGVzdDM7CisKKyAgICBBU1NFUlRfRkFMU0UoQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNm
b3JtKHRlc3QsIHRlc3QzKSk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK1RFU1Qo
QWZmaW5lVHJhbnNmb3JtLCBEaXJlY3QyRENhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAg
IEQyRDFfTUFUUklYXzNYMl9GIHRlc3QgPSB0cmFuc2Zvcm07CisgICAgRDJEMV9NQVRSSVhfM1gy
X0YgdGVzdDIgPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjAp
OworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAwMDAxOworCisgICAg
RVhQRUNUX05FQVIodGVzdC5fMTEsIHRlc3QyLl8xMSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05F
QVIodGVzdC5fMTIsIHRlc3QyLl8xMiwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIodGVzdC5f
MjEsIHRlc3QyLl8yMSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIodGVzdC5fMjIsIHRlc3Qy
Ll8yMiwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIodGVzdC5fMzEsIHRlc3QyLl8zMSwgZXBz
aWxvbik7CisgICAgRVhQRUNUX05FQVIodGVzdC5fMzIsIHRlc3QyLl8zMiwgZXBzaWxvbik7Cit9
CisjZW5kaWYKKworfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zs
b2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9GbG9hdFBvaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRmxvYXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0FmZmluZVRyYW5zZm9ybS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2lu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVHJh
bnNmb3JtYXRpb25NYXRyaXguaD4KKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRl
IDxkMmQxLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMg
dm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCit7CisgICAgcG9p
bnQuc2V0WCgxLjFmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4xZiwgcG9pbnQueCgpKTsKKyAg
ICBwb2ludC5zZXRZKDIuMmYpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLjJmLCBwb2ludC55KCkp
OworCisgICAgcG9pbnQuc2V0KDkuOWYsIDguOGYpOworICAgIEVYUEVDVF9GTE9BVF9FUSg5Ljlm
LCBwb2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LjhmLCBwb2ludC55KCkpOworfQor
CitURVNUKEZsb2F0UG9pbnQsIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCB0ZXN0OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgdGVzdC55KCkpOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0
KTsKK30KKworVEVTVChGbG9hdFBvaW50LCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IHRlc3QoOS45ZiwgOC44Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
OS45ZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LjhmLCB0ZXN0LnkoKSk7CisK
KyAgICB0ZXN0R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEZsb2F0UG9pbnQsIFplcm9Db25z
dHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0ID0gV2ViQ29yZTo6Rmxv
YXRQb2ludDo6emVybygpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIElu
dFBvaW50Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3RJbnB1dCgy
MDAzLCAxOTk3KTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QgPSBXZWJDb3JlOjpGbG9h
dFBvaW50KHRlc3RJbnB1dCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwMy4wZiwgdGVzdC54
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxOTk3LjBmLCB0ZXN0LnkoKSk7Cit9CisKK1RFU1Qo
RmxvYXRQb2ludCwgRmxvYXRTaXplQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB0ZXN0SW5wdXQoNTAwLjdmLCAzMDAuMmYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
dGVzdCA9IFdlYkNvcmU6OkZsb2F0UG9pbnQodGVzdElucHV0KTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSg1MDAuNywgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMDAuMiwgdGVzdC55
KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIE1vdmVCeUZsb2F0KQoreworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTAwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkp
OworCisgICAgdGVzdC5tb3ZlKDIwLjJmLCAzMC4zZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTIwLjJmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4zZiwgdGVzdC55KCkp
OworCisgICAgdGVzdC5tb3ZlKC04MS4zZiwgMTAuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VR
KDM4LjlmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4zZiwgdGVzdC55KCkp
OworCisgICAgdGVzdC5tb3ZlKDExLjFmLCAtMzMuMmYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VR
KDUwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwNy4xZiwgdGVzdC55KCkp
OworCisgICAgdGVzdC5tb3ZlKC01LjZmLCAtOS44Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NDQuNGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk3LjNmLCB0ZXN0LnkoKSk7
Cit9CisKK1RFU1QoRmxvYXRQb2ludCwgTW92ZUJ5SW50U2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IHRlc3QoMTAwLjBmLCAyMDAuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueSgpKTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgZmlyc3QoMjAsIDMwKTsKKworICAgIHRlc3QubW92ZShm
aXJzdCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIzMC4wZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBz
ZWNvbmQoLTgxLCAxMCk7CisKKyAgICB0ZXN0Lm1vdmUoc2Vjb25kKTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgzOS4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAuMGYsIHRl
c3QueSgpKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgdGhpcmQoMTEsIC0zMyk7CisKKyAgICB0
ZXN0Lm1vdmUodGhpcmQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCB0ZXN0LngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwNy4wZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6
SW50U2l6ZSBmb3VydGgoLTYsIC0xMCk7CisKKyAgICB0ZXN0Lm1vdmUoZm91cnRoKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSg0NC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
OTcuMGYsIHRlc3QueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBNb3ZlQnlGbG9hdFNpemUp
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZmlyc3QoMjAuMmYs
IDMwLjNmKTsKKworICAgIHRlc3QubW92ZShmaXJzdCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTIwLjJmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4zZiwgdGVzdC55KCkp
OworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNlY29uZCgtODEuM2YsIDEwLjBmKTsKKworICAg
IHRlc3QubW92ZShzZWNvbmQpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDM4LjlmLCB0ZXN0Lngo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4zZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIHRoaXJkKDExLjFmLCAtMzMuMmYpOworCisgICAgdGVzdC5tb3ZlKHRoaXJk
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMDcuMWYsIHRlc3QueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3Vy
dGgoLTUuNmYsIC05LjhmKTsKKworICAgIHRlc3QubW92ZShmb3VydGgpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDQ0LjRmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5Ny4zZiwg
dGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIE1vdmVCeUludFBvaW50KQoreworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdCgxMDAuMGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMTAwLjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwg
dGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgZmlyc3QoMjAsIDMwKTsKKworICAg
IHRlc3QubW92ZUJ5KGZpcnN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHRlc3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBzZWNvbmQoLTgxLCAxMCk7CisKKyAgICB0ZXN0Lm1vdmVCeShzZWNvbmQp
OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDM5LjBmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDI0MC4wZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgdGhpcmQo
MTEsIC0zMyk7CisKKyAgICB0ZXN0Lm1vdmVCeSh0aGlyZCk7CisKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNTAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjA3LjBmLCB0ZXN0Lnko
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmb3VydGgoLTYsIC0xMCk7CisKKyAgICB0ZXN0
Lm1vdmVCeShmb3VydGgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ0LjBmLCB0ZXN0LngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5Ny4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0
UG9pbnQsIE1vdmVCeUZsb2F0UG9pbnQpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0
KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3QueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IGZpcnN0KDIwLjJmLCAzMC4zZik7CisKKyAgICB0ZXN0Lm1vdmVCeShmaXJz
dCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjJmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIzMC4zZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBz
ZWNvbmQoLTgxLjNmLCAxMC4wZik7CisKKyAgICB0ZXN0Lm1vdmVCeShzZWNvbmQpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDM4LjlmLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0
MC4zZiwgdGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0aGlyZCgxMS4xZiwg
LTMzLjJmKTsKKworICAgIHRlc3QubW92ZUJ5KHRoaXJkKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USg1MC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDcuMWYsIHRlc3QueSgp
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgZm91cnRoKC01LjZmLCAtOS44Zik7CisKKyAg
ICB0ZXN0Lm1vdmVCeShmb3VydGgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ0LjRmLCB0ZXN0
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5Ny4zZiwgdGVzdC55KCkpOworfQorCitURVNU
KEZsb2F0UG9pbnQsIFNjYWxlKQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdCgxMDAu
MGYsIDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LngoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdGVzdC55KCkpOworCisgICAgdGVzdC5zY2FsZSgy
LjBmLCAyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNDAwLjBmLCB0ZXN0LnkoKSk7CisKKyAgICB0ZXN0LnNjYWxlKDAu
NWYsIDAuNWYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueSgpKTsKKworICAgIHRlc3Quc2NhbGUoMS4w
ZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0LngoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQs
IE5vcm1hbGl6ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGEoMzAuMGYsIDQwLjBmKTsK
KworICAgIGEubm9ybWFsaXplKCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42LCBhLngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuOCwgYS55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQs
IERvdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGEoMTAwLjBmLCAyMDAuMGYpOworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgYigyLjBmLCA0LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IGMoMS4wZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfTkVBUigxMDAwLjBmLCBhLmRvdChiKSwg
MC4wMDAxZik7CisgICAgRVhQRUNUX05FQVIoMjAwLjBmLCBhLmRvdChjKSwgMC4wMDAxZik7Cit9
CisKK1RFU1QoRmxvYXRQb2ludCwgTGVuZ3RoU3F1YXJlZCkKK3sKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IHRlc3QoMTAwLjBmLCAyMDAuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4w
ZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRlc3QueSgpKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg1MDAwMC4wZiwgdGVzdC5sZW5ndGhTcXVhcmVkKCkpOworfQor
CitURVNUKEZsb2F0UG9pbnQsIENvbnN0cmFpbmVkQmV0d2VlbikKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IGxlZnQoMTAuMGYsIDIwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHJp
Z2h0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdDEoNTAu
MGYsIDgwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QyKDguMGYsIDgwLjBmKTsK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QzKDUwLjBmLCAyMjAuMGYpOworCisgICAgYXV0
byBjb25zdHJhaW5lZDEgPSB0ZXN0MS5jb25zdHJhaW5lZEJldHdlZW4obGVmdCwgcmlnaHQpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgY29uc3RyYWluZWQxLngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDgwLjBmLCBjb25zdHJhaW5lZDEueSgpKTsKKworICAgIGF1dG8gY29uc3RyYWlu
ZWQyID0gdGVzdDIuY29uc3RyYWluZWRCZXR3ZWVuKGxlZnQsIHJpZ2h0KTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMTAuMGYsIGNvbnN0cmFpbmVkMi54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
MC4wZiwgY29uc3RyYWluZWQyLnkoKSk7CisKKyAgICBhdXRvIGNvbnN0cmFpbmVkMyA9IHRlc3Qz
LmNvbnN0cmFpbmVkQmV0d2VlbihsZWZ0LCByaWdodCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUw
LjBmLCBjb25zdHJhaW5lZDMueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCBjb25z
dHJhaW5lZDMueSgpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBTaHJ1bmtUbykKK3sKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IGJpZygxMDAuMGYsIDIwMC4wZik7CisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBzbWFsbGVyKDEwLjBmLCA4MC4wZik7CisKKyAgICBhdXRvIHNocnVua1RvID0gYmln
LnNocnVua1RvKHNtYWxsZXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBzaHJ1bmtU
by54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4MC4wZiwgc2hydW5rVG8ueSgpKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgYmlnaXNoKDguMGYsIDIwMC4wZik7CisKKyAgICBhdXRvIHNo
cnVua1RvMiA9IGJpZ2lzaC5zaHJ1bmtUbyhzbWFsbGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USg4LjBmLCBzaHJ1bmtUbzIueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoODAuMGYsIHNocnVu
a1RvMi55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIEV4cGFuZGVkVG8pCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBiaWcoMTAwLjBmLCAyMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgc21hbGxlcigxMC4wZiwgODAuMGYpOworCisgICAgYXV0byBleHBhbmRlZFRvID0gc21h
bGxlci5leHBhbmRlZFRvKGJpZyk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCBleHBh
bmRlZFRvLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgZXhwYW5kZWRUby55KCkp
OworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBiaWdpc2goOC4wZiwgMzAwLjBmKTsKKworICAg
IGF1dG8gZXhwYW5kZWRUbzIgPSBiaWdpc2guZXhwYW5kZWRUbyhiaWcpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEwMC4wZiwgZXhwYW5kZWRUbzIueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MzAwLjBmLCBleHBhbmRlZFRvMi55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIFRyYW5zcG9z
ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3QoMTAwLjBmLCAyMDAuMGYpOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMDAuMGYsIHRlc3QueSgpKTsKKworICAgIGF1dG8gdHJhbnNwb3NlZCA9IHRlc3QudHJhbnNw
b3NlZFBvaW50KCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc3Bvc2VkLngo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgdHJhbnNwb3NlZC55KCkpOworfQorCitU
RVNUKEZsb2F0UG9pbnQsIFRyYW5zZm9ybXMpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0
ZXN0KDEwMC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBhZmZp
bmU7CisKKyAgICBhdXRvIHRyYW5zZm9ybWVkMSA9IHRlc3QubWF0cml4VHJhbnNmb3JtKGFmZmlu
ZSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0cmFuc2Zvcm1lZDEueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCB0cmFuc2Zvcm1lZDEueSgpKTsKKworICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSBhZmZpbmUyKDIuMCwgMC4wLCAwLjAsIDIuMCwgMC4wLCAwLjAp
OworCisgICAgYXV0byB0cmFuc2Zvcm1lZDIgPSB0ZXN0Lm1hdHJpeFRyYW5zZm9ybShhZmZpbmUy
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAuMGYsIHRyYW5zZm9ybWVkMi54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYsIHRyYW5zZm9ybWVkMi55KCkpOworCisgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworCisgICAgYXV0byB0cmFuc2Zvcm1lZDMg
PSB0ZXN0Lm1hdHJpeFRyYW5zZm9ybShtYXRyaXgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MC4wZiwgdHJhbnNmb3JtZWQzLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgdHJh
bnNmb3JtZWQzLnkoKSk7CisKKyAgICBhdXRvIHRyYW5zZm9ybWVkNCA9IHRlc3QubWF0cml4VHJh
bnNmb3JtKGFmZmluZTIudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMDAuMGYsIHRyYW5zZm9ybWVkNC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0
MDAuMGYsIHRyYW5zZm9ybWVkNC55KCkpOworfQorCitURVNUKEZsb2F0UG9pbnQsIE1hdGgpCit7
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBhKDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IGIoMTAwLjBmLCAyMDAuMGYpOworCisgICAgYSArPSBiOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwMC4wZiwgYS54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0MDAuMGYs
IGEueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjKDUwLjBmLCA1MC4wZik7CisKKyAg
ICBhICs9IGM7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjUwLjBmLCBhLngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDQ1MC4wZiwgYS55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGQo
MTAuMGYsIDIwMC4wZik7CisKKyAgICBhIC09IGQ7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQw
LjBmLCBhLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI1MC4wZiwgYS55KCkpOworCisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIGUoMTAwLjBmLCAyMDAuMGYpOworCisgICAgYXV0byBmID0gYiAr
IGU7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCBmLngoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDQwMC4wZiwgZi55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBnKDEwLjBm
LCAyMC4wZik7CisKKyAgICBhdXRvIGggPSBiICsgZzsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MTAuMGYsIGgueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjIwLjBmLCBoLnkoKSk7CisKKyAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgaSA9IGIgLSBnOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDkw
LjBmLCBpLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxODAuMGYsIGkuaGVpZ2h0KCkp
OworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBqID0gYiAtIGU7CisKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMC4wZiwgai54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjBmLCBqLnkoKSk7CisK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG5lZ2F0ZWQgPSAtYjsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgtMTAwLjBmLCBuZWdhdGVkLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMDAuMGYs
IG5lZ2F0ZWQueSgpKTsKKworICAgIGZsb2F0IHZhbHVlID0gYiAqIGc7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNTAwMC4wZiwgdmFsdWUpOworfQorCitURVNUKEZsb2F0UG9pbnQsIEVxdWFsaXR5
KQoreworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgYSgxMDAuMGYsIDIwMC4wZik7CisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBiKDEwMC4wZiwgMjAwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IGMoMTAuMGYsIDIwLjBmKTsKKworICAgIEFTU0VSVF9UUlVFKGEgPT0gYik7CisgICAgQVNT
RVJUX0ZBTFNFKGEgPT0gYyk7CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYik7CisgICAgQVNTRVJU
X1RSVUUoYSAhPSBjKTsKKworICAgIEFTU0VSVF9UUlVFKFdlYkNvcmU6OmFyZUVzc2VudGlhbGx5
RXF1YWwoYSwgYikpOworICAgIEFTU0VSVF9GQUxTRShXZWJDb3JlOjphcmVFc3NlbnRpYWxseUVx
dWFsKGEsIGMpKTsKK30KKworVEVTVChGbG9hdFBvaW50LCBGbG9vcnMpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBhKDEwMC42ZiwgMTk5LjlmKTsKKworICAgIFdlYkNvcmU6OkludFNpemUg
Zmxvb3JlZFNpemUgPSBXZWJDb3JlOjpmbG9vcmVkSW50U2l6ZShhKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLCBmbG9vcmVkU2l6ZS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTk5
LCBmbG9vcmVkU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBmbG9vcmVk
UG9pbnQgPSBXZWJDb3JlOjpmbG9vcmVkSW50UG9pbnQoYSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMCwgZmxvb3JlZFBvaW50LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5OSwgZmxvb3Jl
ZFBvaW50LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGZsb29yZWRQb2ludDF4ID0g
V2ViQ29yZTo6Zmxvb3JQb2ludFRvRGV2aWNlUGl4ZWxzKGEsIDEuMCk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDEwMC4wZiwgZmxvb3JlZFBvaW50MXgueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTk5LjBmLCBmbG9vcmVkUG9pbnQxeC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBm
bG9vcmVkUG9pbnQyeCA9IFdlYkNvcmU6OmZsb29yUG9pbnRUb0RldmljZVBpeGVscyhhLCAyLjAp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuNWYsIGZsb29yZWRQb2ludDJ4LngoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDE5OS41ZiwgZmxvb3JlZFBvaW50MngueSgpKTsKK30KKworVEVTVChG
bG9hdFBvaW50LCBSb3VuZGluZykKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGEoMTAwLjRm
LCAxOTkuOWYpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgcm91bmRlZFBvaW50ID0gV2ViQ29y
ZTo6cm91bmRlZEludFBvaW50KGEpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIHJvdW5kZWRQ
b2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAsIHJvdW5kZWRQb2ludC55KCkpOwor
fQorCitURVNUKEZsb2F0UG9pbnQsIENlaWxpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBhKDEwMC40ZiwgMTk5LjlmKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGNlaWxpbmdQb2lu
dCA9IFdlYkNvcmU6OmNlaWxlZEludFBvaW50KGEpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDEs
IGNlaWxpbmdQb2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDAsIGNlaWxpbmdQb2lu
dC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjZWlsaW5nUG9pbnQxeCA9IFdlYkNv
cmU6OmNlaWxQb2ludFRvRGV2aWNlUGl4ZWxzKGEsIDEuMCk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMS4wZiwgY2VpbGluZ1BvaW50MXgueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBm
LCBjZWlsaW5nUG9pbnQxeC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjZWlsaW5n
UG9pbnQyeCA9IFdlYkNvcmU6OmNlaWxQb2ludFRvRGV2aWNlUGl4ZWxzKGEsIDIuMCk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwMC41ZiwgY2VpbGluZ1BvaW50MngueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjAwLjBmLCBjZWlsaW5nUG9pbnQyeC55KCkpOworfQorCitURVNUKEZsb2F0UG9p
bnQsIENhc3RpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBhKDEwMC40ZiwgMTk5Ljlm
KTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmbG9hdFNpemUgPSBXZWJDb3JlOjp0b0Zsb2F0
U2l6ZShhKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjRmLCBmbG9hdFNpemUud2lkdGgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE5OS45ZiwgZmxvYXRTaXplLmhlaWdodCgpKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBiKDk5LjZmLCAyOTkuMWYpOworCisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBmbG9hdFBvaW50ID0gV2ViQ29yZTo6dG9GbG9hdFBvaW50KGIpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg5OS42ZiwgZmxvYXRQb2ludC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
OTkuMWYsIGZsb2F0UG9pbnQueSgpKTsKKworI2lmIFVTRShDRykKKyAgICBDR1BvaW50IGNnUG9p
bnQgPSBhOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40ZiwgY2dQb2ludC54KTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMTk5LjlmLCBjZ1BvaW50LnkpOworCisgICAgQ0dQb2ludCBjZ1BvaW50
MiA9IENHUG9pbnRNYWtlKC0yMi4zZiwgMTQuMmYpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCB0ZXN0Q0coY2dQb2ludDIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4zZiwgdGVzdENH
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0Q0cueSgpKTsKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIEQyRF9QT0lOVF8yRiBkMmRQb2ludCA9IGE7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjRmLCBkMmRQb2ludC54KTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMTk5LjlmLCBkMmRQb2ludC55KTsKKworICAgIEQyRF9QT0lOVF8yRiBkMmRQb2ludDIgPSBE
MkQxOjpQb2ludDJGKC0yMi4zZiwgMTQuMmYpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0
ZXN0RDJEKGQyZFBvaW50Mik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLTIyLjNmLCB0ZXN0RDJE
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0RDJELnkoKSk7CisjZW5kaWYK
K30KKworfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zs
b2F0UmVjdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKKyNpZiBVU0Uo
Q0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZvaWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKK3sKKyAgICByZWN0LnNldFgoMS4xZik7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMWYsIHJlY3QueCgpKTsKKyAgICByZWN0LnNldFkoMi4yZik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDIuMmYsIHJlY3QueSgpKTsKKyAgICByZWN0LnNldFdpZHRoKDIwMy4yZik7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwMy4yZiwgcmVjdC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhlaWdodCg3
Mi45Zik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDcyLjlmLCByZWN0LmhlaWdodCgpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEVtcHR5UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCByZWN0LndpZHRoKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCByZWN0Lm1heFkoKSk7
CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHJlY3Qu
aXNaZXJvKCkpOworICAgIEVYUEVDVF9GQUxTRShyZWN0LmlzSW5maW5pdGUoKSk7Cit9CisKK1RF
U1QoRmxvYXRSZWN0LCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCB0ZXN0OworCisgICAgdGVzdEVtcHR5UmVjdCh0ZXN0KTsKKworICAgIHRlc3RHZXRBbmRT
ZXQodGVzdCk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5sb2NhdGlvbigpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBs
b2NhdGlvbi55KCkpOworCisgICAgYXV0byBzaXplID0gdGVzdC5zaXplKCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIHNpemUud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHNpemUu
aGVpZ2h0KCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgVmFsdWVDb25zdHJ1Y3Rpb24pCit7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRlc3QoMTAuMGYsIDIwLjBmLCAxMDAuMGYsIDUwLjBmKTsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyMC4wZiwgdGVzdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHRlc3Qu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCB0ZXN0LmhlaWdodCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTEwLjBmLCB0ZXN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDcwLjBmLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3QuaXNFbXB0eSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc1plcm8oKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRl
c3QuaXNJbmZpbml0ZSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9uKCk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMC4wZiwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Quc2l6
ZSgpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHNpemUud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDUwLjBmLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJlY3Qs
IFBvaW50U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0
aW9uKDIwLjBmLCAzMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUoMTAwLjBmLCA1
MC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdGVzdChsb2NhdGlvbiwgc2l6ZSk7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMzAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCB0ZXN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MC4wZiwgdGVzdC5oZWlnaHQoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4MC4wZiwgdGVzdC5tYXhZKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHRlc3QuaXNaZXJvKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0
LmlzSW5maW5pdGUoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uMiA9IHRlc3QubG9jYXRpb24oKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGxvY2F0aW9uMi54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMC4wZiwgbG9jYXRpb24yLnkoKSk7CisKKyAgICBhdXRvIHNpemUyID0gdGVzdC5z
aXplKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgc2l6ZTIud2lkdGgoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCBzaXplMi5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBUd29Qb2ludENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBv
aW50MSgyMC4wZiwgMzAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKDE1MC4w
ZiwgMjUwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXN0KHBvaW50MSwgcG9pbnQy
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgdGVzdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzMC4wZiwgdGVzdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMzAuMGYsIHRl
c3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgdGVzdC5oZWlnaHQoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDE1MC4wZiwgdGVzdC5tYXhYKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyNTAuMGYsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKyAgICBFWFBFQ1RfRkFM
U0UodGVzdC5pc0luZmluaXRlKCkpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRp
b24oKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGxvY2F0aW9uLngoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMwLjBmLCBsb2NhdGlvbi55KCkpOworCisgICAgYXV0byBzaXplID0gdGVz
dC5zaXplKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEzMC4wZiwgc2l6ZS53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjIwLjBmLCBzaXplLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9h
dFJlY3QsIEludFJlY3RDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0
KDIwLCAzMCwgMTUwLCAzMDApOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRlc3QocmVjdCk7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMzAuMGYsIHRlc3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTUwLjBmLCB0ZXN0
LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMDAuMGYsIHRlc3QuaGVpZ2h0KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxNzAuMGYsIHRlc3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMzMwLjBmLCB0ZXN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3QuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdC5pc1plcm8oKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3QuaXNJbmZpbml0ZSgpKTsKKworICAgIGF1dG8gbG9jYXRpb24gPSB0ZXN0LmxvY2F0aW9u
KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgzMC4wZiwgbG9jYXRpb24ueSgpKTsKKworICAgIGF1dG8gc2l6ZSA9IHRlc3Qu
c2l6ZSgpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTAuMGYsIHNpemUud2lkdGgoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDMwMC4wZiwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRS
ZWN0LCBTZXRMb2NhdGlvbkFuZFNpemUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Q7
CisKKyAgICB0ZXN0RW1wdHlSZWN0KHJlY3QpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBs
b2NhdGlvbigxMC4wZiwgMjAuMGYpOworCisgICAgcmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHJlY3QuaXNaZXJvKCkpOworICAgIEVYUEVDVF9GQUxTRShyZWN0Lmlz
SW5maW5pdGUoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgxMDAuMGYsIDIwMC4w
Zik7CisKKyAgICByZWN0LnNldFNpemUoc2l6ZSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAu
MGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueSgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyMDAuMGYsIHJlY3QuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMTAuMGYs
IHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjIwLjBmLCByZWN0Lm1heFkoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVj
dC5pc1plcm8oKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNJbmZpbml0ZSgpKTsKK30KKwor
VEVTVChGbG9hdFJlY3QsIENlbnRlcikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgy
MC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIGF1dG8gY2VudGVyID0gcmVjdC5j
ZW50ZXIoKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg3MC4wZiwgY2VudGVyLngoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEzMC4wZiwgY2VudGVyLnkoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0
LCBNb3ZlKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTAw
LjBmLCAyMDAuMGYpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGRlbHRhKDEwLjBmLCAyMC4w
Zik7CisKKyAgICByZWN0Lm1vdmUoZGVsdGEpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwLjBm
LCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjBmLCByZWN0LnkoKSk7CisKKyAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IGRlbHRhUG9pbnQoLTIwLjBmLCAtNDAuMGYpOworCisgICAg
cmVjdC5tb3ZlQnkoZGVsdGFQb2ludCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJlY3QueSgpKTsKKworICAgIHJl
Y3QubW92ZSgtMTAuMGYsIDIyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjBmLCByZWN0
LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMyLjBmLCByZWN0LnkoKSk7Cit9CisKK1RFU1Qo
RmxvYXRSZWN0LCBFeHBhbmQpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYs
IDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgx
MDAuMGYsIDEwMC4wZik7CisKKyAgICByZWN0LmV4cGFuZChzaXplKTsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMDAuMGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwMC4w
ZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmV4cGFuZCg1NS4wZiwgMjIuMGYpOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDI1NS4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMzIyLjBmLCByZWN0LmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBz
aXplMigtMTAuMGYsIC0yMC4wZik7CisKKyAgICByZWN0LmV4cGFuZChzaXplMik7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjQ1LjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzMDIuMGYsIHJlY3QuaGVpZ2h0KCkpOworCisgICAgcmVjdC5leHBhbmQoLTUuMGYsIC0yLjBm
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAuMGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMwMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uo
cmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgQ29udHJhY3QpCit7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7
CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSg1MC4wZiwgMTAwLjBmKTsKKworICAgIHJl
Y3QuY29udHJhY3Qoc2l6ZSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMGYsIHJlY3Qud2lk
dGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgcmVjdC5oZWlnaHQoKSk7CisKKyAg
ICByZWN0LmNvbnRyYWN0KDI1LjBmLCAyMi4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjUu
MGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4LjBmLCByZWN0LmhlaWdo
dCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplMigtMTAuMGYsIC0yMC4wZik7CisK
KyAgICByZWN0LmNvbnRyYWN0KHNpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgzNS4wZiwg
cmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOTguMGYsIHJlY3QuaGVpZ2h0KCkp
OworCisgICAgcmVjdC5jb250cmFjdCgtNS4wZiwgLTIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAuMGYsIHJl
Y3QuaGVpZ2h0KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNJbmZpbml0ZSgpKTsKK30K
KworVEVTVChGbG9hdFJlY3QsIFNoaWZ0WEVkZ2UpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisKKyAgICByZWN0LnNoaWZ0WEVk
Z2VUbyg3Ny4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzcuMGYsIHJlY3QueCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgcmVjdC5t
YXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0My4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3Quc2hpZnRN
YXhYRWRnZVRvKDIwMC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzcuMGYsIHJlY3QueCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwg
cmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjMuMGYsIHJlY3Qud2lkdGgoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1Qo
RmxvYXRSZWN0LCBTaGlmdFlFZGdlKQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KDIw
LjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworCisgICAgcmVjdC5zaGlmdFlFZGdlVG8oNTku
MGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1OS4w
ZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMzAuMGYsIHJlY3QubWF4WSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxNzEuMGYsIHJlY3QuaGVpZ2h0KCkpOworCisgICAgcmVjdC5zaGlmdE1heFlFZGdl
VG8oMjcwLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMjAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNTkuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjcwLjBmLCByZWN0Lm1h
eFkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC4wZiwgcmVjdC53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjExLjBmLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFJl
Y3QsIEluZmxhdGUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBm
LCAxMDAuMGYsIDIwMC4wZik7CisKKyAgICByZWN0LmluZmxhdGVYKDUuMGYpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE1LjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyNS4w
ZiwgcmVjdC5tYXhYKCkpOworCisgICAgcmVjdC5pbmZsYXRlWSg0LjBmKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgyNi4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMzQuMGYs
IHJlY3QubWF4WSgpKTsKKworICAgIHJlY3QuaW5mbGF0ZSgxMC4wZik7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNS4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMzUuMGYsIHJl
Y3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTYuMGYsIHJlY3QueSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjQ0LjBmLCByZWN0Lm1heFkoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uo
cmVjdC5pc0luZmluaXRlKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgQ29ybmVycykKK3sKKyAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsK
KworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG9wTGVmdCA9IHJlY3QubWluWE1pbllDb3JuZXIo
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHRvcExlZnQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMzAuMGYsIHRvcExlZnQueSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
dG9wUmlnaHQgPSByZWN0Lm1heFhNaW5ZQ29ybmVyKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEy
MC4wZiwgdG9wUmlnaHQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAuMGYsIHRvcFJpZ2h0
LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGJvdHRvbUxlZnQgPSByZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBib3R0b21MZWZ0LngoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIzMC4wZiwgYm90dG9tTGVmdC55KCkpOworCisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBib3R0b21SaWdodCA9IHJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCBib3R0b21SaWdodC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMzAuMGYsIGJvdHRvbVJpZ2h0LnkoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBD
b250YWlucykKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEw
MC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb250YWluZWQoMzAuMGYs
IDQwLjBmLCA1MC4wZiwgMTAwLjBmKTsKKworICAgIEFTU0VSVF9UUlVFKHJlY3QuY29udGFpbnMo
Y29udGFpbmVkKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb3V0c2lkZSgxMjAuMGYsIDIz
MC4wZiwgNTAuMGYsIDEwMC4wZik7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucyhv
dXRzaWRlKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgaW50ZXJzZWN0cygxMC4wZiwgMjAu
MGYsIDkwLjBmLCAxODAuMGYpOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMoaW50
ZXJzZWN0cykpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludEluc2lkZSg2MC4wZiwg
NzAuMGYpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhwb2ludEluc2lkZSkpOwor
ICAgIEFTU0VSVF9UUlVFKHJlY3QuY29udGFpbnMocG9pbnRJbnNpZGUsIFdlYkNvcmU6OkZsb2F0
UmVjdDo6SW5zaWRlQnV0Tm90T25TdHJva2UpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
cG9pbnRPdXRzaWRlKDE2MC4wZiwgMjcwLjBmKTsKKworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNv
bnRhaW5zKHBvaW50T3V0c2lkZSkpOworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKHBv
aW50T3V0c2lkZSwgV2ViQ29yZTo6RmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0cm9rZSkpOwor
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludE9uTGluZSgyMC4wZiwgMzAuMGYpOworCisg
ICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyhwb2ludE9uTGluZSkpOworICAgIEFTU0VSVF9G
QUxTRShyZWN0LmNvbnRhaW5zKHBvaW50T3V0c2lkZSwgV2ViQ29yZTo6RmxvYXRSZWN0OjpJbnNp
ZGVCdXROb3RPblN0cm9rZSkpOworCisgICAgQVNTRVJUX1RSVUUocmVjdC5jb250YWlucyg2MC4w
ZiwgNzAuMGYpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlucygxNjAuMGYsIDI3MC4w
ZikpOworfQorCitURVNUKEZsb2F0UmVjdCwgSW50ZXJzZWN0cykKK3sKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb250YWluZWQoMzAuMGYsIDQwLjBmLCA1MC4wZiwgMTAwLjBmKTsKKwor
ICAgIEFTU0VSVF9UUlVFKHJlY3QuaW50ZXJzZWN0cyhjb250YWluZWQpKTsKKworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBvdXRzaWRlKDEyMC4wZiwgMjMwLjBmLCA1MC4wZiwgMTAwLjBmKTsKKwor
ICAgIEFTU0VSVF9GQUxTRShyZWN0LmludGVyc2VjdHMob3V0c2lkZSkpOworCisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IGludGVyc2VjdHMoMTAuMGYsIDIwLjBmLCA5MC4wZiwgMTgwLjBmKTsKKwor
ICAgIEFTU0VSVF9UUlVFKHJlY3QuaW50ZXJzZWN0cyhpbnRlcnNlY3RzKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RJbnRlcnNlY3RSZXN1bHQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0
KQoreworICAgIEVYUEVDVF9GTE9BVF9FUSg3MC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMjAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoODAuMGYs
IHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjMwLjBmLCByZWN0Lm1heFkoKSk7Cit9
CisKK1RFU1QoRmxvYXRSZWN0LCBJbnRlcnNlY3QpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3RBKDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0Qig3MC4wZiwgODAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3RBLmlu
dGVyc2VjdChyZWN0Qik7CisKKyAgICB0ZXN0SW50ZXJzZWN0UmVzdWx0KHJlY3RBKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0QygyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAwLjBmKTsK
KworICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBXZWJDb3JlOjppbnRlcnNlY3Rpb24ocmVjdEMsIHJl
Y3RCKTsKKworICAgIHRlc3RJbnRlcnNlY3RSZXN1bHQoaW50ZXJzZWN0ZWQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0VW5pdGVkUmVjdHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB1bml0ZWQp
Cit7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCB1bml0ZWQueCgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMTcwLjBmLCB1bml0ZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzAu
MGYsIHVuaXRlZC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyODAuMGYsIHVuaXRlZC5tYXhZ
KCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgVW5pdGUpCit7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3RBKDIwLjBmLCAzMC4wZiwgMTAwLjBmLCAyMDAuMGYpOworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0Qig3MC4wZiwgODAuMGYsIDEwMC4wZiwgMjAwLjBmKTsKKworICAgIHJlY3RB
LnVuaXRlKHJlY3RCKTsKKworICAgIHRlc3RVbml0ZWRSZWN0cyhyZWN0QSk7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdEMoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisKKyAg
ICBhdXRvIHVuaXRlZCA9IFdlYkNvcmU6OnVuaW9uUmVjdChyZWN0QywgcmVjdEIpOworCisgICAg
dGVzdFVuaXRlZFJlY3RzKHVuaXRlZCk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBFeHRlbmQpCit7
CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4w
Zik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCgxNzAuMGYsIDI4MC4wZik7CisKKyAg
ICByZWN0LmV4dGVuZChwb2ludCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTcwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI4MC4w
ZiwgcmVjdC5tYXhZKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgT3ZlcmxhcHMpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIwMC4wZik7CisK
KyAgICBBU1NFUlRfRkFMU0UocmVjdC5vdmVybGFwc1hSYW5nZSgwLjBmLCAxMC4wZikpOworICAg
IEFTU0VSVF9UUlVFKHJlY3Qub3ZlcmxhcHNYUmFuZ2UoMTAuMGYsIDMwLjBmKSk7CisgICAgQVNT
RVJUX1RSVUUocmVjdC5vdmVybGFwc1hSYW5nZSg0MC4wZiwgNzAuMGYpKTsKKyAgICBBU1NFUlRf
VFJVRShyZWN0Lm92ZXJsYXBzWFJhbmdlKDExMC4wZiwgMTMwLjBmKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHJlY3Qub3ZlcmxhcHNYUmFuZ2UoMTQwLjBmLCA2MDAuMGYpKTsKKworICAgIEFTU0VSVF9G
QUxTRShyZWN0Lm92ZXJsYXBzWVJhbmdlKDAuMGYsIDEwLjBmKSk7CisgICAgQVNTRVJUX1RSVUUo
cmVjdC5vdmVybGFwc1lSYW5nZSgxMC4wZiwgNDAuMGYpKTsKKyAgICBBU1NFUlRfVFJVRShyZWN0
Lm92ZXJsYXBzWVJhbmdlKDQwLjBmLCA3MC4wZikpOworICAgIEFTU0VSVF9UUlVFKHJlY3Qub3Zl
cmxhcHNZUmFuZ2UoMjIwLjBmLCAyNTAuMGYpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5vdmVy
bGFwc1lSYW5nZSgyNTAuMGYsIDYwMC4wZikpOworfQorCitURVNUKEZsb2F0UmVjdCwgU2NhbGUp
Cit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMjAuMGYsIDMwLjBmLCAxMDAuMGYsIDIw
MC4wZik7CisKKyAgICByZWN0LnNjYWxlKDIuMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQw
LjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4wZiwgcmVjdC5tYXhYKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg2MC4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg0NjAuMGYsIHJlY3QubWF4WSgpKTsKKworICAgIHJlY3Quc2NhbGUoMC41ZiwgMi4wZik7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMTIwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwg
cmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg5MjAuMGYsIHJlY3QubWF4WSgpKTsKKwor
ICAgIHJlY3Quc2NhbGUoMS4wZiwgMC4yNWYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBm
LCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMC4wZiwgcmVjdC5tYXhYKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyMzAuMGYsIHJlY3QubWF4WSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFRyYW5zcG9zZSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgyMC4wZiwgMzAuMGYsIDEwMC4wZiwgMjAw
LjBmKTsKKworICAgIGF1dG8gdHJhbnNwb3NlZCA9IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgdHJhbnNwb3NlZC54KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyMzAuMGYsIHRyYW5zcG9zZWQubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAuMGYsIHRyYW5zcG9zZWQueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLjBmLCB0cmFu
c3Bvc2VkLm1heFkoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBGaXRUb1BvaW50cykKK3sKKyAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgxMC4wZiwgMjAuMGYsIDMwLjBmLCA0MC4wZik7CisK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAwKDIwLjBmLCAzMC4wZik7CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBwMSg3MC4wZiwgMTMwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAy
KDUwLjBmLCAyMC4wZik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwMyg5MC4wZiwgMTkwLjBm
KTsKKworICAgIHJlY3QuZml0VG9Qb2ludHMocDAsIHAxKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3MC4wZiwgcmVjdC5tYXhY
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzMC4wZiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMzAuMGYsIHJlY3QubWF4WSgpKTsKKworICAgIHJlY3QuZml0VG9Qb2ludHMocDAs
IHAxLCBwMik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIHJlY3QueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNzAuMGYsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAuMGYsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBmLCByZWN0Lm1heFko
KSk7CisKKyAgICByZWN0LmZpdFRvUG9pbnRzKHAwLCBwMSwgcDIsIHAzKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgyMC4wZiwgcmVjdC54KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg5MC4wZiwg
cmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgcmVjdC55KCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxOTAuMGYsIHJlY3QubWF4WSgpKTsKK30KKworc3RhdGljIHZvaWQg
Y2hlY2tDYXN0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEwLjBmLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBm
LCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDYwLjBmLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMwLjBmLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0MC4wZiwgcmVj
dC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRSZWN0LCBDYXN0aW5nKQoreworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMzAuMGYsIDQwLjBmKTsKKworI2lmIFVT
RShDRykKKyAgICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
MC4wZiwgY2dSZWN0Lm9yaWdpbi54KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGNnUmVj
dC5vcmlnaW4ueSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMwLjBmLCBjZ1JlY3Quc2l6ZS53aWR0
aCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBmLCBjZ1JlY3Quc2l6ZS5oZWlnaHQpOworCisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGcm9tQ0dSZWN0KGNnUmVjdCk7CisKKyAgICBjaGVj
a0Nhc3RSZWN0KHJlY3RGcm9tQ0dSZWN0KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
LjBmLCBkMmRSZWN0LmxlZnQpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgZDJkUmVjdC50
b3ApOworICAgIEVYUEVDVF9GTE9BVF9FUSg0MC4wZiwgZDJkUmVjdC5yaWdodCk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDYwLjBmLCBkMmRSZWN0LmJvdHRvbSk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdEZyb21EMkRSZWN0KGQyZFJlY3QpOworCisgICAgY2hlY2tDYXN0UmVjdChyZWN0
RnJvbUQyRFJlY3QpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQWRkaXRpb25SZXN1
bHQxKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMTAuMGYsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTMwLjBmLCByZWN0Lm1h
eFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIyMC4wZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAu
MGYsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwMC4wZiwgcmVjdC5oZWln
aHQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQWRkaXRpb25SZXN1bHQyKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIHJlY3Qu
eCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjUwLjBmLCByZWN0Lm1heFgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIwLjBmLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI0MC4w
ZiwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAuMGYsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIyMC4wZiwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RF
U1QoRmxvYXRSZWN0LCBBZGRpdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgx
MC4wZiwgMjAuMGYsIDEwMC4wZiwgMTAwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgcmln
aHRTaWRlKDAuMGYsIDAuMGYsIDIwLjBmLCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBib3R0b20oMC4wZiwgMC4wZiwgMTIwLjBmLCAyMC4wZik7CisKKyAgICBhdXRvIGNvbWJpbmVk
ID0gcmVjdCArIHJpZ2h0U2lkZTsKKworICAgIGNoZWNrQWRkaXRpb25SZXN1bHQxKGNvbWJpbmVk
KTsKKworICAgIGF1dG8gY29tYmluZWQyID0gY29tYmluZWQgKyBib3R0b207CisKKyAgICBjaGVj
a0FkZGl0aW9uUmVzdWx0Mihjb21iaW5lZDIpOworCisgICAgcmVjdCArPSByaWdodFNpZGU7Cisg
ICAgcmVjdCArPSBib3R0b207CisKKyAgICBjaGVja0FkZGl0aW9uUmVzdWx0MihyZWN0KTsKK30K
KworVEVTVChGbG9hdFJlY3QsIEVxdWFsaXR5KQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KDEwLjBmLCAyMC4wZiwgMTAwLjBmLCAxMDAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0MigxMC4wZiwgMjAuMGYsIDEwMC4wZiwgMTAwLjBmKTsKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgcmlnaHRTaWRlKDExMC4wZiwgMjAuMGYsIDIwLjBmLCAxMDAuMGYpOworCisgICAgQVNT
RVJUX1RSVUUocmVjdCA9PSByZWN0Mik7CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QgIT0gcmVjdDIp
OworICAgIEFTU0VSVF9UUlVFKHJlY3QgIT0gcmlnaHRTaWRlKTsKKyAgICBBU1NFUlRfRkFMU0Uo
cmVjdCA9PSByaWdodFNpZGUpOworfQorCitURVNUKEZsb2F0UmVjdCwgSW5maW5pdGVSZWN0KQor
eworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBpbmZpbml0ZSA9IFdlYkNvcmU6OkZsb2F0UmVjdDo6
aW5maW5pdGVSZWN0KCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKSAvIDIsIGluZmluaXRlLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkgLyAyLCBpbmZpbml0ZS55KCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGlu
ZmluaXRlLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUShzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCksIGluZmluaXRlLmhlaWdodCgpKTsKKworICAgIC8vIEZJWE1FOiBXZSBo
YXZlIGFuIHVudXN1YWwgcmVwcmVzZW50YXRpb24gZm9yIG91ciBpbmZpbml0ZSByZWN0LgorICAg
IC8vIFdlYkNvcmU6OkZsb2F0OjppbmZpbml0ZVJlY3QgaXMgKG5lZ2F0aXZlIGluZmluaXR5KS8y
IGZvciB0aGUgdXBwZXIgbGVmdCBjb3JuZXIsCisgICAgLy8gd2hpbGUgQ29yZUdyYXBoaWNzIGFu
ZCBEMkQgdXNlIChuZWdhdGl2ZSBpbmZpbml0eSkuCisKKyNpZiBVU0UoQ0cpCisgICAgQ0dSZWN0
IGNnSW5maW5pdGVSZWN0ID0gQ0dSZWN0SW5maW5pdGU7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
LXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgY2dJbmZpbml0ZVJlY3Qub3JpZ2lu
LngpOworICAgIEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgY2dJbmZpbml0ZVJlY3Qub3JpZ2luLnggKyBj
Z0luZmluaXRlUmVjdC5zaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBjZ0luZmluaXRlUmVjdC5vcmlnaW4ueSArIGNnSW5m
aW5pdGVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAvLyBBU1NFUlRfVFJVRShpbmZpbml0ZSA9PSBj
Z0luZmluaXRlUmVjdCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBEMkQxX1JF
Q1RfRiBkMmRJbmZpbml0ZVJlY3QgPSBEMkQxOjpJbmZpbml0ZVJlY3QoKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZpbml0
ZVJlY3QubGVmdCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKC1zdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC50b3ApOworICAgIEVYUEVDVF9GTE9BVF9FUShz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5yaWdodCk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwg
ZDJkSW5maW5pdGVSZWN0LmJvdHRvbSk7CisgICAgLy8gQVNTRVJUX1RSVUUoaW5maW5pdGUgPT0g
ZDJkSW5maW5pdGVSZWN0KTsKKyNlbmRpZgorfQorCitURVNUKEZsb2F0UmVjdCwgRW5jbG9zaW5n
QW5kUm91bmRpbmcpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAuMGYsIDIwLjBm
LCAxMDI0LjNmLCA3NjguM2YpOworCisgICAgYXV0byBlbmNsb3NlZCA9IFdlYkNvcmU6OmVuY2xv
c2VSZWN0VG9EZXZpY2VQaXhlbHMocmVjdCwgMS4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MTAuMGYsIGVuY2xvc2VkLngoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBlbmNsb3Nl
ZC55KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDM1LjBmLCBlbmNsb3NlZC5tYXhYKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg3ODkuMGYsIGVuY2xvc2VkLm1heFkoKSk7CisKKyAgICBhdXRv
IGVuY2xvc2VkMiA9IFdlYkNvcmU6OmVuY2xvc2VSZWN0VG9EZXZpY2VQaXhlbHMocmVjdCwgMi4w
Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGVuY2xvc2VkMi54KCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyMC4wZiwgZW5jbG9zZWQyLnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMzQuNWYsIGVuY2xvc2VkMi5tYXhYKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3ODguNWYs
IGVuY2xvc2VkMi5tYXhZKCkpOworfQorCitURVNUKEZsb2F0UmVjdCwgRW5jbG9zaW5nSW50UmVj
dCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgxMC4wZiwgMjAuMGYsIDEwMjQuM2Ys
IDc2OC42Zik7CisKKyAgICBhdXRvIGVuY2xvc2VkID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVj
dChyZWN0KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMCwgZW5jbG9zZWQueCgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMjAsIGVuY2xvc2VkLnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEw
MzUsIGVuY2xvc2VkLm1heFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4OSwgZW5jbG9zZWQu
bWF4WSgpKTsKK30KKworVEVTVChGbG9hdFJlY3QsIFJvdW5kZWRJbnRSZWN0KQoreworICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0KDEwLjBmLCAyMC4wZiwgMTAyNC4zZiwgNzY4LjZmKTsKKwor
ICAgIGF1dG8gZW5jbG9zZWQgPSBXZWJDb3JlOjpyb3VuZGVkSW50UmVjdChyZWN0KTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMCwgZW5jbG9zZWQueCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjAsIGVuY2xvc2VkLnkoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMzQsIGVuY2xvc2VkLm1h
eFgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc4OSwgZW5jbG9zZWQubWF4WSgpKTsKK30KKwor
fQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0U2l6ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0U2l6
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0Zsb2F0U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNp
emUuaD4KKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNz
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5k
U2V0KFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKQoreworICAgIHNpemUuc2V0V2lkdGgoMTAxLjFm
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAxLjFmLCBzaXplLndpZHRoKCkpOworICAgIHNpemUu
c2V0SGVpZ2h0KDIxOC4yZik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIxOC4yZiwgc2l6ZS5oZWln
aHQoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBEZWZhdWx0Q29uc3RydWN0aW9uKQoreworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0OworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHRlc3Qu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHRlc3QuaGVpZ2h0KCkpOworCisgICAg
QVNTRVJUX1RSVUUodGVzdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QuaXNaZXJv
KCkpOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChGbG9hdFNpemUsIFZh
bHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0KDEwMjQuMGYs
IDc2OC4wZik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwgdGVzdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0ZXN0LmhlaWdodCgpKTsKKworICAgIEFTU0VS
VF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNaZXJvKCkp
OworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAwLjAwMDFmOworICAgIEVYUEVD
VF9ORUFSKDEuMzMzM2YsIHRlc3QuYXNwZWN0UmF0aW8oKSwgZXBzaWxvbik7CisKKyAgICB0ZXN0
R2V0QW5kU2V0KHRlc3QpOworfQorCitURVNUKEZsb2F0U2l6ZSwgSW50U2l6ZUNvbnN0cnVjdGlv
bikKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoMTAyNCwgNzY4KTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgdGVzdChzaXplKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCB0
ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIHRlc3QuaGVpZ2h0KCkp
OworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
dGVzdC5pc1plcm8oKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAw
MDE7CisgICAgRVhQRUNUX05FQVIoMS4zMzMzZiwgdGVzdC5hc3BlY3RSYXRpbygpLCBlcHNpbG9u
KTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBTY2Fs
ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisg
ICAgdGVzdC5zY2FsZSgyLjBmKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCB0ZXN0
LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTM2LjBmLCB0ZXN0LmhlaWdodCgpKTsK
KworICAgIHRlc3Quc2NhbGUoMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwg
dGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCB0ZXN0LmhlaWdodCgp
KTsKKworICAgIHRlc3Quc2NhbGUoMi4wZiwgMC41Zik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MjA0OC4wZiwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzg0LjBmLCB0ZXN0
LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIEV4cGFuZCkKK3sKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMjQuMGYsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdGVz
dC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LmV4cGFuZCgxMDAuMGYsIDUwLjBmKTsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSgxMTI0LjBmLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4MTguMGYsIHRlc3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG90aGVy
KDIwNDguMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIGV4cGFuZGVkID0gdGVzdC5leHBhbmRlZFRv
KG90aGVyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyMDQ4LjBmLCBleHBhbmRlZC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoODE4LjBmLCBleHBhbmRlZC5oZWlnaHQoKSk7Cit9CisK
K1RFU1QoRmxvYXRTaXplLCBTaHJpbmspCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRlc3Qo
MTAyNC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgb3RoZXIoMTAwMC4wZiwg
NzAwLjBmKTsKKworICAgIGF1dG8gc2hydW5rZW4gPSB0ZXN0LnNocnVua1RvKG90aGVyKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAwLjBmLCBzaHJ1bmtlbi53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNzAwLjBmLCBzaHJ1bmtlbi5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpG
bG9hdFNpemUgb3RoZXIyKDIwMDAuMGYsIDcwMC4wZik7CisKKyAgICBhdXRvIHNocnVua2VuMiA9
IHRlc3Quc2hydW5rVG8ob3RoZXIyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBz
aHJ1bmtlbjIud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDcwMC4wZiwgc2hydW5rZW4y
LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIERpYWdvbmFsTGVuZ3RoQW5kQXJlYSkK
K3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdGVzdCgxMDI0LjBmLCA3NjguMGYpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEyODAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGgoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDE2Mzg0MDAuMGYsIHRlc3QuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg3ODY0MzIuMGYsIHRlc3QuYXJlYSgpKTsKK30KKworVEVTVChG
bG9hdFNpemUsIFRyYW5zcG9zZWRTaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0
KDEwMjQuMGYsIDc2OC4wZik7CisKKyAgICBhdXRvIHRyYW5zcG9zZWRTaXplID0gdGVzdC50cmFu
c3Bvc2VkU2l6ZSgpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgdHJhbnNwb3NlZFNp
emUud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQuMGYsIHRyYW5zcG9zZWRTaXpl
LmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIENhc3RpbmcpCit7CisgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIHRlc3QoMTAyNC4wZiwgNzY4LjBmKTsKKworI2lmIFVTRShDRykKKyAgICBD
R1NpemUgY2dTaXplID0gdGVzdDsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBjZ1Np
emUud2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGNnU2l6ZS5oZWlnaHQpOwor
CisgICAgQ0dTaXplIGNnU2l6ZTIgPSBDR1NpemVNYWtlKC0yMi4zZiwgMTQuMmYpOworCisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIHRlc3RDRyhjZ1NpemUyKTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USgtMjIuM2YsIHRlc3RDRy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTQuMmYsIHRl
c3RDRy5oZWlnaHQoKSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBEMkQxX1NJ
WkVfRiBkMmRTaXplID0gdGVzdDsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBkMmRT
aXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCBkMmRTaXplLmhlaWdodCk7
CisKKyAgICBEMkQxX1NJWkVfRiBkMmRTaXplMiA9IEQyRDE6OlNpemVGKC0yMi4zZiwgMTQuMmYp
OworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHRlc3REMkQoZDJkU2l6ZTIpOworCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKC0yMi4zZiwgdGVzdEQyRC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMTQuMmYsIHRlc3REMkQuaGVpZ2h0KCkpOworI2VuZGlmCit9CisKK1RFU1QoRmxvYXRTaXpl
LCBBZGRTdWJ0cmFjdCkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYSg1MTIuMGYsIDM4NC4w
Zik7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGIoMTAwLjBmLCAxMDAuMGYpOworCisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIGMgPSBhICsgYjsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg2MTIuMGYs
IGMud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ4NC4wZiwgYy5oZWlnaHQoKSk7CisK
KyAgICBhICs9IGI7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNjEyLjBmLCBhLndpZHRoKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0ODQuMGYsIGEuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIGEyKDUxMi4wZiwgMzg0LjBmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBk
ID0gYTIgLSBiOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQxMi4wZiwgZC53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMjg0LjBmLCBkLmhlaWdodCgpKTsKKworICAgIGEyIC09IGI7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNDEyLjBmLCBhMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMjg0LjBmLCBhMi5oZWlnaHQoKSk7Cit9CisKK1RFU1QoRmxvYXRTaXplLCBOZWdhdGlv
bikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYSg1MTIuMGYsIDM4NC4wZik7CisKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgbmVnYXRlZCA9IC1hOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC01
MTIuMGYsIG5lZ2F0ZWQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKC0zODQuMGYsIG5l
Z2F0ZWQuaGVpZ2h0KCkpOworfQorCitURVNUKEZsb2F0U2l6ZSwgTXVsdGlwbHkpCit7CisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIGEoNTEyLjBmLCAzODQuMGYpOworCisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIG11bHRpcGxpZWQgPSBhICogMi4wZjsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0
LjBmLCBtdWx0aXBsaWVkLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIG11
bHRpcGxpZWQuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG11bHRpcGxpZWQy
ID0gMy4wZiAqIGE7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTUzNi4wZiwgbXVsdGlwbGllZDIu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDExNTIuMGYsIG11bHRpcGxpZWQyLmhlaWdo
dCgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBiKDEwMjQuMGYsIDc2OC4wZik7CisKKyAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgbXVsdGlwbGllZDMgPSBhICogYjsKKworICAgIEVYUEVDVF9G
TE9BVF9FUSg1MjQyODguMGYsIG11bHRpcGxpZWQzLndpZHRoKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyOTQ5MTIuMGYsIG11bHRpcGxpZWQzLmhlaWdodCgpKTsKK30KKworVEVTVChGbG9hdFNp
emUsIERpdmlkZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYSgxMDI0LjBmLCA3NjguMGYp
OworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGRpdmlkZWQgPSBhIC8gMi4wZjsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSg1MTIuMGYsIGRpdmlkZWQud2lkdGgoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDM4NC4wZiwgZGl2aWRlZC5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUg
Yig1MTIuMGYsIDI1Ni4wZik7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGl2aWRlZDIgPSAx
MDI0LjBmIC8gYjsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLjBmLCBkaXZpZGVkMi53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNC4wZiwgZGl2aWRlZDIuaGVpZ2h0KCkpOworfQorCitU
RVNUKEZsb2F0U2l6ZSwgRXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGEoMTAy
NC4wZiwgNzY4LjBmKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYigxMDI0LjBmLCA3NjguMGYp
OworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjKDc2OC4wZiwgNTM0LjBGKTsKKworICAgIEFTU0VS
VF9UUlVFKGEgPT0gYik7CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYik7CisgICAgQVNTRVJUX0ZB
TFNFKGEgPT0gYyk7CisgICAgQVNTRVJUX1RSVUUoYSAhPSBjKTsKKworICAgIEFTU0VSVF9UUlVF
KFdlYkNvcmU6OmFyZUVzc2VudGlhbGx5RXF1YWwoYSwgYikpOworICAgIEFTU0VSVF9GQUxTRShX
ZWJDb3JlOjphcmVFc3NlbnRpYWxseUVxdWFsKGEsIGMpKTsKK30KKworVEVTVChGbG9hdFNpemUs
IEZsb29ycykKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYSgxMDI0LjRmLCA3NjguOGYpOwor
CisgICAgV2ViQ29yZTo6SW50U2l6ZSBmbG9vclNpemUgPSBXZWJDb3JlOjpmbG9vcmVkSW50U2l6
ZShhKTsKKworICAgIEVYUEVDVF9FUSgxMDI0LCBmbG9vclNpemUud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0VRKDc2OCwgZmxvb3JTaXplLmhlaWdodCgpKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50
IGZsb29yUG9pbnQgPSBXZWJDb3JlOjpmbG9vcmVkSW50UG9pbnQoYSk7CisKKyAgICBFWFBFQ1Rf
RVEoMTAyNCwgZmxvb3JQb2ludC54KCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGZsb29yUG9pbnQu
eSgpKTsKK30KKworVEVTVChGbG9hdFNpemUsIFJvdW5kZWQpCit7CisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIGEoMTAyNC40ZiwgNzY4LjhmKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRl
ZFNpemUgPSBXZWJDb3JlOjpyb3VuZGVkSW50U2l6ZShhKTsKKworICAgIEVYUEVDVF9FUSgxMDI0
LCByb3VuZGVkU2l6ZS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY5LCByb3VuZGVkU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGV4cGFuZGVkU2l6ZSA9IFdlYkNvcmU6
OmV4cGFuZGVkSW50U2l6ZShhKTsKKworICAgIEVYUEVDVF9FUSgxMDI1LCBleHBhbmRlZFNpemUu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDc2OSwgZXhwYW5kZWRTaXplLmhlaWdodCgpKTsKK30K
KworfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9p
bnQuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9JbnRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRT
aXplLmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGlj
cy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIHZvaWQgdGVzdEdldEFu
ZFNldChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKK3sKKyAgICBwb2ludC5zZXRYKDEpOworICAg
IEVYUEVDVF9FUSgxLCBwb2ludC54KCkpOworICAgIHBvaW50LnNldFkoMik7CisgICAgRVhQRUNU
X0VRKDIsIHBvaW50LnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIERlZmF1bHRDb25zdHJ1Y3Rp
b24pCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdGVzdDsKKworICAgIEVYUEVDVF9FUSgwLCB0
ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDAsIHRlc3QueSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0LmlzWmVybygpKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RFU1QoSW50
UG9pbnQsIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFBvaW50IHRlc3Qo
MTAsIDkpOworCisgICAgRVhQRUNUX0VRKDEwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDks
IHRlc3QueSgpKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7Cit9CisKK1RFU1QoSW50UG9p
bnQsIFplcm9Db25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdGVzdCA9IFdl
YkNvcmU6OkludFBvaW50Ojp6ZXJvKCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgdGVzdC54KCkpOwor
ICAgIEVYUEVDVF9FUSgwLCB0ZXN0LnkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc1plcm8o
KSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIEludFNpemVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2Vi
Q29yZTo6SW50U2l6ZSB0ZXN0SW5wdXQoMjAwMywgMTk5Nyk7CisgICAgV2ViQ29yZTo6SW50UG9p
bnQgdGVzdCh0ZXN0SW5wdXQpOworCisgICAgRVhQRUNUX0VRKDIwMDMsIHRlc3QueCgpKTsKKyAg
ICBFWFBFQ1RfRVEoMTk5NywgdGVzdC55KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzWmVy
bygpKTsKK30KKworVEVTVChJbnRQb2ludCwgRmxvYXRQb2ludENvbnN0cnVjdGlvbikKK3sKKyAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3RJbnB1dCgyMDAzLjJmLCAxOTk3LjNmKTsKKyAgICBX
ZWJDb3JlOjpJbnRQb2ludCB0ZXN0KHRlc3RJbnB1dCk7CisKKyAgICBFWFBFQ1RfRVEoMjAwMywg
dGVzdC54KCkpOworICAgIEVYUEVDVF9FUSgxOTk3LCB0ZXN0LnkoKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QuaXNaZXJvKCkpOworfQorCitURVNUKEludFBvaW50LCBNb3ZlKQoreworICAgIFdl
YkNvcmU6OkludFBvaW50IHRlc3QoMTAsIDIwKTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUo
MzAsIDUwKTsKKworICAgIHRlc3QubW92ZShzaXplKTsKKworICAgIEVYUEVDVF9FUSg0MCwgdGVz
dC54KCkpOworICAgIEVYUEVDVF9FUSg3MCwgdGVzdC55KCkpOworCisgICAgdGVzdC5tb3ZlKC0y
LCA4KTsKKworICAgIEVYUEVDVF9FUSgzOCwgdGVzdC54KCkpOworICAgIEVYUEVDVF9FUSg3OCwg
dGVzdC55KCkpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0KDEwMCwgMTAwKTsKKwor
ICAgIHRlc3QubW92ZUJ5KG9mZnNldCk7CisKKyAgICBFWFBFQ1RfRVEoMTM4LCB0ZXN0LngoKSk7
CisgICAgRVhQRUNUX0VRKDE3OCwgdGVzdC55KCkpOworfQorCitURVNUKEludFBvaW50LCBTY2Fs
ZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB0ZXN0KDEwLCAyMCk7CisKKyAgICB0ZXN0LnNj
YWxlKDIuMCk7CisKKyAgICBFWFBFQ1RfRVEoMjAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEo
NDAsIHRlc3QueSgpKTsKKworICAgIHRlc3Quc2NhbGUoMy4wLCAxLjUpOworCisgICAgRVhQRUNU
X0VRKDYwLCB0ZXN0LngoKSk7CisgICAgRVhQRUNUX0VRKDYwLCB0ZXN0LnkoKSk7Cit9CisKK1RF
U1QoSW50UG9pbnQsIEV4cGFuZCkKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBhKDEwLCAyMCk7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYigyMCwgNDApOworCisgICAgYXV0byBjID0gYS5leHBh
bmRlZFRvKGIpOworCisgICAgRVhQRUNUX0VRKDIwLCBjLngoKSk7CisgICAgRVhQRUNUX0VRKDQw
LCBjLnkoKSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIFNocmluaykKK3sKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBhKDEwLCAyMCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYigyMCwgNDApOworCisg
ICAgYXV0byBjID0gYi5zaHJ1bmtUbyhhKTsKKworICAgIEVYUEVDVF9FUSgxMCwgYy54KCkpOwor
ICAgIEVYUEVDVF9FUSgyMCwgYy55KCkpOworfQorCitURVNUKEludFBvaW50LCBUcmFuc3Bvc2Up
Cit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMCwgMjApOworCisgICAgYXV0byBiID0gYS50
cmFuc3Bvc2VkUG9pbnQoKTsKKworICAgIEVYUEVDVF9FUSgyMCwgYi54KCkpOworICAgIEVYUEVD
VF9FUSgxMCwgYi55KCkpOworfQorCitURVNUKEludFBvaW50LCBDYXN0KQoreworICAgIFdlYkNv
cmU6OkludFBvaW50IGEoMTAsIDIwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYXMgPSBXZWJD
b3JlOjp0b0ludFNpemUoYSk7CisgICAgRVhQRUNUX0VRKDEwLCBhcy53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRVEoMjAsIGFzLmhlaWdodCgpKTsKKworI2lmIFVTRShDRykKKyAgICBDR1BvaW50IGNn
UG9pbnQgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBjZ1BvaW50LngpOworICAg
IEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgY2dQb2ludC55KTsKKworICAgIFdlYkNvcmU6OkludFBv
aW50IGZyb21DR1BvaW50KGNnUG9pbnQpOworICAgIEVYUEVDVF9FUSgxMCwgZnJvbUNHUG9pbnQu
eCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZyb21DR1BvaW50LnkoKSk7CisgICAgQVNTRVJUX1RS
VUUoYSA9PSBmcm9tQ0dQb2ludCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBQ
T0lOVCBnZGlQb2ludCA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIGdkaVBvaW50
LngpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgZ2RpUG9pbnQueSk7CisKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBmcm9tR0RJUG9pbnQoZ2RpUG9pbnQpOworICAgIEVYUEVDVF9FUSgxMCwg
ZnJvbUdESVBvaW50LngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBmcm9tR0RJUG9pbnQueSgpKTsK
KyAgICBBU1NFUlRfVFJVRShhID09IGZyb21HRElQb2ludCk7CisKKyAgICBEMkQxX1BPSU5UXzJG
IGQyZFBvaW50RiA9IGE7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIGQyZFBvaW50Ri54
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAuMGYsIGQyZFBvaW50Ri55KTsKKworICAgIFdlYkNv
cmU6OkludFBvaW50IGZyb21EMkRQb2ludEYoZDJkUG9pbnRGKTsKKyAgICBFWFBFQ1RfRVEoMTAs
IGZyb21EMkRQb2ludEYueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIGZyb21EMkRQb2ludEYueSgp
KTsKKyAgICBBU1NFUlRfVFJVRShhID09IGZyb21EMkRQb2ludEYpOworCisgICAgRDJEMV9QT0lO
VF8yVSBkMmRQb2ludFUgPSBhOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBkMmRQb2lu
dFUueCk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwLjBmLCBkMmRQb2ludFUueSk7CisKKyAgICBX
ZWJDb3JlOjpJbnRQb2ludCBmcm9tRDJEUG9pbnRVKGQyZFBvaW50VSk7CisgICAgRVhQRUNUX0VR
KDEwLCBmcm9tRDJEUG9pbnRVLngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBmcm9tRDJEUG9pbnRV
LnkoKSk7CisgICAgQVNTRVJUX1RSVUUoYSA9PSBmcm9tRDJEUG9pbnRVKTsKKyNlbmRpZgorfQor
CitURVNUKEludFBvaW50LCBBZGRpdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBhKDEw
LCAyMCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwgNjApOworICAgIFdlYkNvcmU6Oklu
dFNpemUgYnMoNTAsIDYwKTsKKworICAgIGF1dG8gYyA9IGEgKyBiOworCisgICAgRVhQRUNUX0VR
KDYwLCBjLngoKSk7CisgICAgRVhQRUNUX0VRKDgwLCBjLnkoKSk7CisKKyAgICBhICs9IGJzOwor
CisgICAgRVhQRUNUX0VRKDYwLCBhLngoKSk7CisgICAgRVhQRUNUX0VRKDgwLCBhLnkoKSk7Cit9
CisKK1RFU1QoSW50UG9pbnQsIFN1YnRyYWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFBvaW50
IGEoMTAwLCA4MCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYig1MCwgNjApOworICAgIFdlYkNv
cmU6OkludFNpemUgYnMoNTAsIDYwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYyA9IGEgLSBi
OworCisgICAgRVhQRUNUX0VRKDUwLCBjLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgyMCwgYy5o
ZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBkID0gYSAtIGJzOworCisgICAgRVhQ
RUNUX0VRKDUwLCBkLngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBkLnkoKSk7CisKKyAgICBhIC09
IGJzOworCisgICAgRVhQRUNUX0VRKDUwLCBhLngoKSk7CisgICAgRVhQRUNUX0VRKDIwLCBhLnko
KSk7Cit9CisKK1RFU1QoSW50UG9pbnQsIE5lZ2F0aW9uKQoreworICAgIFdlYkNvcmU6OkludFBv
aW50IGEoMTAwLCA4MCk7CisgICAgYXV0byBiID0gLWE7CisKKyAgICBFWFBFQ1RfRVEoLTEwMCwg
Yi54KCkpOworICAgIEVYUEVDVF9FUSgtODAsIGIueSgpKTsKK30KKworVEVTVChJbnRQb2ludCwg
RXF1YWxpdHkpCit7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYSgxMDAsIDgwKTsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBiKDcwLCA1MCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYygxMDAsIDgw
KTsKKworICAgIEFTU0VSVF9UUlVFKGEgPT0gYyk7CisgICAgQVNTRVJUX0ZBTFNFKGEgPT0gYik7
CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYyk7CisgICAgQVNTRVJUX1RSVUUoYSAhPSBiKTsKK30K
KworfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
SW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCisjaWYgVVNFKENHKQorI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oV0lOKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6SW50UmVjdCByZWN0
KQoreworICAgIHJlY3Quc2V0WCgxKTsKKyAgICBFWFBFQ1RfRVEoMSwgcmVjdC54KCkpOworICAg
IHJlY3Quc2V0WSgyKTsKKyAgICBFWFBFQ1RfRVEoMiwgcmVjdC55KCkpOworICAgIHJlY3Quc2V0
V2lkdGgoMjAzKTsKKyAgICBFWFBFQ1RfRVEoMjAzLCByZWN0LndpZHRoKCkpOworICAgIHJlY3Qu
c2V0SGVpZ2h0KDczKTsKKyAgICBFWFBFQ1RfRVEoNzMsIHJlY3QuaGVpZ2h0KCkpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0RW1wdHlSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7
CisgICAgRVhQRUNUX0VRKDAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC55KCkp
OworICAgIEVYUEVDVF9FUSgwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgwLCByZWN0
LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9F
USgwLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc0VtcHR5KCkpOworfQor
CitURVNUKEludFJlY3QsIERlZmF1bHRDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6SW50
UmVjdCB0ZXN0OworCisgICAgdGVzdEVtcHR5UmVjdCh0ZXN0KTsKKworICAgIHRlc3RHZXRBbmRT
ZXQodGVzdCk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0gdGVzdC5sb2NhdGlvbigpOworICAgIEVY
UEVDVF9FUSgwLCBsb2NhdGlvbi54KCkpOworICAgIEVYUEVDVF9FUSgwLCBsb2NhdGlvbi55KCkp
OworCisgICAgYXV0byBzaXplID0gdGVzdC5zaXplKCk7CisgICAgRVhQRUNUX0VRKDAsIHNpemUu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDAsIHNpemUuaGVpZ2h0KCkpOworfQorCitURVNUKElu
dFJlY3QsIFZhbHVlQ29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgdGVzdCgx
MCwgMjAsIDEwMCwgNTApOworCisgICAgRVhQRUNUX0VRKDEwLCB0ZXN0LngoKSk7CisgICAgRVhQ
RUNUX0VRKDIwLCB0ZXN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgdGVzdC53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoNTAsIHRlc3QuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUSgxMTAsIHRl
c3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoNzAsIHRlc3QubWF4WSgpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodGVzdC5pc0VtcHR5KCkpOworCisgICAgYXV0byBsb2NhdGlvbiA9IHRlc3QubG9jYXRp
b24oKTsKKyAgICBFWFBFQ1RfRVEoMTAsIGxvY2F0aW9uLngoKSk7CisgICAgRVhQRUNUX0VRKDIw
LCBsb2NhdGlvbi55KCkpOworCisgICAgYXV0byBzaXplID0gdGVzdC5zaXplKCk7CisgICAgRVhQ
RUNUX0VRKDEwMCwgc2l6ZS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNpemUuaGVpZ2h0
KCkpOworfQorCitURVNUKEludFJlY3QsIFBvaW50U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBX
ZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbigyMCwgMzApOworICAgIFdlYkNvcmU6OkludFNpemUg
c2l6ZSgxMDAsIDUwKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgdGVzdChsb2NhdGlvbiwgc2l6
ZSk7CisKKyAgICBFWFBFQ1RfRVEoMjAsIHRlc3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIHRl
c3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCB0ZXN0LndpZHRoKCkpOworICAgIEVYUEVDVF9F
USg1MCwgdGVzdC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDEyMCwgdGVzdC5tYXhYKCkpOwor
ICAgIEVYUEVDVF9FUSg4MCwgdGVzdC5tYXhZKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0Lmlz
RW1wdHkoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uMiA9IHRlc3QubG9jYXRpb24oKTsKKyAgICBF
WFBFQ1RfRVEoMjAsIGxvY2F0aW9uMi54KCkpOworICAgIEVYUEVDVF9FUSgzMCwgbG9jYXRpb24y
LnkoKSk7CisKKyAgICBhdXRvIHNpemUyID0gdGVzdC5zaXplKCk7CisgICAgRVhQRUNUX0VRKDEw
MCwgc2l6ZTIud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzaXplMi5oZWlnaHQoKSk7Cit9
CisKK1RFU1QoSW50UmVjdCwgRmxvYXRSZWN0Q29uc3RydWN0aW9uKQoreworICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KDIwLjBmLCAzMC4wZiwgMTUwLjBmLCAzMDAuMGYpOworCisgICAgV2Vi
Q29yZTo6SW50UmVjdCB0ZXN0KHJlY3QpOworCisgICAgRVhQRUNUX0VRKDIwLCB0ZXN0LngoKSk7
CisgICAgRVhQRUNUX0VRKDMwLCB0ZXN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDE1MCwgdGVzdC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTcwLCB0ZXN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDMzMCwgdGVzdC5tYXhZKCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7CisKKyAgICBhdXRvIGxvY2F0aW9uID0g
dGVzdC5sb2NhdGlvbigpOworICAgIEVYUEVDVF9FUSgyMCwgbG9jYXRpb24ueCgpKTsKKyAgICBF
WFBFQ1RfRVEoMzAsIGxvY2F0aW9uLnkoKSk7CisKKyAgICBhdXRvIHNpemUgPSB0ZXN0LnNpemUo
KTsKKyAgICBFWFBFQ1RfRVEoMTUwLCBzaXplLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgzMDAs
IHNpemUuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3QsIFNldExvY2F0aW9uQW5kU2l6ZSkK
K3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Q7CisKKyAgICB0ZXN0RW1wdHlSZWN0KHJlY3Qp
OworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgbG9jYXRpb24oMTAsIDIwKTsKKworICAgIHJlY3Qu
c2V0TG9jYXRpb24obG9jYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEwLCByZWN0LngoKSk7Cisg
ICAgRVhQRUNUX0VRKDIwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3Qud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDAsIHJlY3QuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUSgxMCwg
cmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgyMCwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVD
VF9UUlVFKHJlY3QuaXNFbXB0eSgpKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgxMDAs
IDIwMCk7CisKKyAgICByZWN0LnNldFNpemUoc2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIHJl
Y3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoMTAw
LCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgyMDAsIHJlY3QuaGVpZ2h0KCkpOworICAg
IEVYUEVDVF9FUSgxMTAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMjIwLCByZWN0Lm1h
eFkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlY3QuaXNFbXB0eSgpKTsKK30KKworVEVTVChJbnRS
ZWN0LCBDZW50ZXIpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDIwLCA0MCwgMTAwLCAy
MDApOworCisgICAgYXV0byBjZW50ZXIgPSByZWN0LmNlbnRlcigpOworCisgICAgRVhQRUNUX0VR
KDcwLCBjZW50ZXIueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTQwLCBjZW50ZXIueSgpKTsKK30KKwor
VEVTVChJbnRSZWN0LCBNb3ZlKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgMzAs
IDEwMCwgMjAwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgZGVsdGEoMTAsIDIwKTsKKworICAg
IHJlY3QubW92ZShkZWx0YSk7CisKKyAgICBFWFBFQ1RfRVEoMzAsIHJlY3QueCgpKTsKKyAgICBF
WFBFQ1RfRVEoNTAsIHJlY3QueSgpKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IGRlbHRhUG9p
bnQoLTIwLCAtNDApOworCisgICAgcmVjdC5tb3ZlQnkoZGVsdGFQb2ludCk7CisKKyAgICBFWFBF
Q1RfRVEoMTAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTAsIHJlY3QueSgpKTsKKworICAg
IHJlY3QubW92ZSgtMTAsIDIyKTsKKworICAgIEVYUEVDVF9FUSgwLCByZWN0LngoKSk7CisgICAg
RVhQRUNUX0VRKDMyLCByZWN0LnkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgRXhwYW5kKQorewor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgMzAsIDEwMCwgMjAwKTsKKworICAgIFdlYkNv
cmU6OkludFNpemUgc2l6ZSgxMDAsIDEwMCk7CisKKyAgICByZWN0LmV4cGFuZChzaXplKTsKKwor
ICAgIEVYUEVDVF9FUSgyMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDMwMCwgcmVj
dC5oZWlnaHQoKSk7CisKKyAgICByZWN0LmV4cGFuZCg1NSwgMjIpOworCisgICAgRVhQRUNUX0VR
KDI1NSwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMzIyLCByZWN0LmhlaWdodCgpKTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZTIoLTEwLCAtMjApOworCisgICAgcmVjdC5leHBh
bmQoc2l6ZTIpOworCisgICAgRVhQRUNUX0VRKDI0NSwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoMzAyLCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3QuZXhwYW5kKC01LCAtMik7CisK
KyAgICBFWFBFQ1RfRVEoMjQwLCByZWN0LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgzMDAsIHJl
Y3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3QsIENvbnRyYWN0KQoreworICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdCgyMCwgMzAsIDEwMCwgMjAwKTsKKworICAgIFdlYkNvcmU6OkludFNp
emUgc2l6ZSg1MCwgMTAwKTsKKworICAgIHJlY3QuY29udHJhY3Qoc2l6ZSk7CisKKyAgICBFWFBF
Q1RfRVEoNTAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC5oZWlnaHQo
KSk7CisKKyAgICByZWN0LmNvbnRyYWN0KDI1LCAyMik7CisKKyAgICBFWFBFQ1RfRVEoMjUsIHJl
Y3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDc4LCByZWN0LmhlaWdodCgpKTsKKworICAgIFdl
YkNvcmU6OkludFNpemUgc2l6ZTIoLTEwLCAtMjApOworCisgICAgcmVjdC5jb250cmFjdChzaXpl
Mik7CisKKyAgICBFWFBFQ1RfRVEoMzUsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDk4
LCByZWN0LmhlaWdodCgpKTsKKworICAgIHJlY3QuY29udHJhY3QoLTUsIC0yKTsKKworICAgIEVY
UEVDVF9FUSg0MCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LmhlaWdo
dCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBTaGlmdFhFZGdlKQoreworICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdCgyMCwgMzAsIDEwMCwgMjAwKTsKKworICAgIHJlY3Quc2hpZnRYRWRnZVRvKDc3
KTsKKworICAgIEVYUEVDVF9FUSg3NywgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgxMjAsIHJl
Y3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEo
MjMwLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDQzLCByZWN0LndpZHRoKCkpOworICAg
IEVYUEVDVF9FUSgyMDAsIHJlY3QuaGVpZ2h0KCkpOworCisgICAgcmVjdC5zaGlmdE1heFhFZGdl
VG8oMjAwKTsKKworICAgIEVYUEVDVF9FUSg3NywgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgy
MDAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMzAsIHJlY3QueSgpKTsKKyAgICBFWFBF
Q1RfRVEoMjMwLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDEyMywgcmVjdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoMjAwLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0
LCBTaGlmdFlFZGdlKQoreworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgMzAsIDEwMCwg
MjAwKTsKKworICAgIHJlY3Quc2hpZnRZRWRnZVRvKDU5LjBmKTsKKworICAgIEVYUEVDVF9FUSgy
MCwgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSgxMjAsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBF
Q1RfRVEoNTksIHJlY3QueSgpKTsKKyAgICBFWFBFQ1RfRVEoMjMwLCByZWN0Lm1heFkoKSk7Cisg
ICAgRVhQRUNUX0VRKDEwMCwgcmVjdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTcxLCByZWN0
LmhlaWdodCgpKTsKKworICAgIHJlY3Quc2hpZnRNYXhZRWRnZVRvKDI3MC4wZik7CisKKyAgICBF
WFBFQ1RfRVEoMjAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIwLCByZWN0Lm1heFgoKSk7
CisgICAgRVhQRUNUX0VRKDU5LCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDI3MCwgcmVjdC5t
YXhZKCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KDIxMSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgSW5mbGF0ZSkKK3sKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAgICByZWN0Lmlu
ZmxhdGVYKDUpOworCisgICAgRVhQRUNUX0VRKDE1LCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VR
KDEyNSwgcmVjdC5tYXhYKCkpOworCisgICAgcmVjdC5pbmZsYXRlWSg0KTsKKworICAgIEVYUEVD
VF9FUSgyNiwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSgyMzQsIHJlY3QubWF4WSgpKTsKKwor
ICAgIHJlY3QuaW5mbGF0ZSgxMCk7CisKKyAgICBFWFBFQ1RfRVEoNSwgcmVjdC54KCkpOworICAg
IEVYUEVDVF9FUSgxMzUsIHJlY3QubWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIHJlY3QueSgp
KTsKKyAgICBFWFBFQ1RfRVEoMjQ0LCByZWN0Lm1heFkoKSk7Cit9CisKK1RFU1QoSW50UmVjdCwg
Q29ybmVycykKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7
CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvcExlZnQgPSByZWN0Lm1pblhNaW5ZQ29ybmVy
KCk7CisgICAgRVhQRUNUX0VRKDIwLCB0b3BMZWZ0LngoKSk7CisgICAgRVhQRUNUX0VRKDMwLCB0
b3BMZWZ0LnkoKSk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvcFJpZ2h0ID0gcmVjdC5t
YXhYTWluWUNvcm5lcigpOworICAgIEVYUEVDVF9FUSgxMjAsIHRvcFJpZ2h0LngoKSk7CisgICAg
RVhQRUNUX0VRKDMwLCB0b3BSaWdodC55KCkpOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBi
b3R0b21MZWZ0ID0gcmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgIEVYUEVDVF9FUSgyMCwgYm90
dG9tTGVmdC54KCkpOworICAgIEVYUEVDVF9FUSgyMzAsIGJvdHRvbUxlZnQueSgpKTsKKworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgYm90dG9tUmlnaHQgPSByZWN0Lm1heFhNYXhZQ29ybmVyKCk7
CisgICAgRVhQRUNUX0VRKDEyMCwgYm90dG9tUmlnaHQueCgpKTsKKyAgICBFWFBFQ1RfRVEoMjMw
LCBib3R0b21SaWdodC55KCkpOworfQorCitURVNUKEludFJlY3QsIENvbnRhaW5zKQoreworICAg
IFdlYkNvcmU6OkludFJlY3QgcmVjdCgyMCwgMzAsIDEwMCwgMjAwKTsKKworICAgIFdlYkNvcmU6
OkludFJlY3QgY29udGFpbmVkKDMwLCA0MCwgNTAsIDEwMCk7CisKKyAgICBBU1NFUlRfVFJVRShy
ZWN0LmNvbnRhaW5zKGNvbnRhaW5lZCkpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBvdXRzaWRl
KDEyMCwgMjMwLCA1MCwgMTAwKTsKKworICAgIEFTU0VSVF9GQUxTRShyZWN0LmNvbnRhaW5zKG91
dHNpZGUpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgaW50ZXJzZWN0cygxMCwgMjAsIDkwLCAx
ODApOworCisgICAgQVNTRVJUX0ZBTFNFKHJlY3QuY29udGFpbnMoaW50ZXJzZWN0cykpOworCisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnRJbnNpZGUoNjAsIDcwKTsKKworICAgIEFTU0VSVF9U
UlVFKHJlY3QuY29udGFpbnMocG9pbnRJbnNpZGUpKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50
IHBvaW50T3V0c2lkZSgxNjAsIDI3MCk7CisKKyAgICBBU1NFUlRfRkFMU0UocmVjdC5jb250YWlu
cyhwb2ludE91dHNpZGUpKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50T25MaW5lKDIw
LCAzMCk7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0LmNvbnRhaW5zKHBvaW50T25MaW5lKSk7CisK
KyAgICBBU1NFUlRfVFJVRShyZWN0LmNvbnRhaW5zKDYwLCA3MCkpOworICAgIEFTU0VSVF9GQUxT
RShyZWN0LmNvbnRhaW5zKDE2MCwgMjcwKSk7Cit9CisKK1RFU1QoSW50UmVjdCwgSW50ZXJzZWN0
cykKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAsIDMwLCAxMDAsIDIwMCk7CisKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IGNvbnRhaW5lZCgzMCwgNDAsIDUwLCAxMDApOworCisgICAgQVNT
RVJUX1RSVUUocmVjdC5pbnRlcnNlY3RzKGNvbnRhaW5lZCkpOworCisgICAgV2ViQ29yZTo6SW50
UmVjdCBvdXRzaWRlKDEyMCwgMjMwLCA1MCwgMTAwKTsKKworICAgIEFTU0VSVF9GQUxTRShyZWN0
LmludGVyc2VjdHMob3V0c2lkZSkpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBpbnRlcnNlY3Rz
KDEwLCAyMCwgOTAsIDE4MCk7CisKKyAgICBBU1NFUlRfVFJVRShyZWN0LmludGVyc2VjdHMoaW50
ZXJzZWN0cykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SW50ZXJzZWN0UmVzdWx0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgRVhQRUNUX0VRKDcwLCByZWN0LngoKSk7Cisg
ICAgRVhQRUNUX0VRKDEyMCwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSg4MCwgcmVjdC55
KCkpOworICAgIEVYUEVDVF9FUSgyMzAsIHJlY3QubWF4WSgpKTsKK30KKworVEVTVChJbnRSZWN0
LCBJbnRlcnNlY3QpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0QSgyMCwgMzAsIDEwMCwg
MjAwKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RCKDcwLCA4MCwgMTAwLCAyMDApOworCisg
ICAgcmVjdEEuaW50ZXJzZWN0KHJlY3RCKTsKKworICAgIHRlc3RJbnRlcnNlY3RSZXN1bHQocmVj
dEEpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0QygyMCwgMzAsIDEwMCwgMjAwKTsKKwor
ICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBXZWJDb3JlOjppbnRlcnNlY3Rpb24ocmVjdEMsIHJlY3RC
KTsKKworICAgIHRlc3RJbnRlcnNlY3RSZXN1bHQoaW50ZXJzZWN0ZWQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0VW5pdGVkUmVjdHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdW5pdGVkKQorewor
ICAgIEVYUEVDVF9FUSgyMCwgdW5pdGVkLngoKSk7CisgICAgRVhQRUNUX0VRKDE3MCwgdW5pdGVk
Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDMwLCB1bml0ZWQueSgpKTsKKyAgICBFWFBFQ1RfRVEo
MjgwLCB1bml0ZWQubWF4WSgpKTsKK30KKworVEVTVChJbnRSZWN0LCBVbml0ZSkKK3sKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IHJlY3RBKDIwLCAzMCwgMTAwLCAyMDApOworICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdEIoNzAsIDgwLCAxMDAsIDIwMCk7CisKKyAgICByZWN0QS51bml0ZShyZWN0Qik7
CisKKyAgICB0ZXN0VW5pdGVkUmVjdHMocmVjdEEpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBy
ZWN0QygyMCwgMzAsIDEwMCwgMjAwKTsKKworICAgIGF1dG8gdW5pdGVkID0gV2ViQ29yZTo6dW5p
b25SZWN0KHJlY3RDLCByZWN0Qik7CisKKyAgICB0ZXN0VW5pdGVkUmVjdHModW5pdGVkKTsKK30K
KworVEVTVChJbnRSZWN0LCBTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMjAs
IDMwLCAxMDAsIDIwMCk7CisKKyAgICByZWN0LnNjYWxlKDIuMGYpOworCisgICAgRVhQRUNUX0VR
KDQwLCByZWN0LngoKSk7CisgICAgRVhQRUNUX0VRKDI0MCwgcmVjdC5tYXhYKCkpOworICAgIEVY
UEVDVF9FUSg2MCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSg0NjAsIHJlY3QubWF4WSgpKTsK
K30KKworVEVTVChJbnRSZWN0LCBUcmFuc3Bvc2UpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCBy
ZWN0KDIwLCAzMCwgMTAwLCAyMDApOworCisgICAgYXV0byB0cmFuc3Bvc2VkID0gcmVjdC50cmFu
c3Bvc2VkUmVjdCgpOworCisgICAgRVhQRUNUX0VRKDMwLCB0cmFuc3Bvc2VkLngoKSk7CisgICAg
RVhQRUNUX0VRKDIzMCwgdHJhbnNwb3NlZC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgyMCwgdHJh
bnNwb3NlZC55KCkpOworICAgIEVYUEVDVF9FUSgxMjAsIHRyYW5zcG9zZWQubWF4WSgpKTsKK30K
Kworc3RhdGljIHZvaWQgY2hlY2tDYXN0UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQoreworICAgIEVYUEVDVF9FUSgxMCwgcmVjdC54KCkpOworICAgIEVYUEVDVF9FUSg0MCwgcmVj
dC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgyMCwgcmVjdC55KCkpOworICAgIEVYUEVDVF9FUSg2
MCwgcmVjdC5tYXhZKCkpOworICAgIEVYUEVDVF9FUSgzMCwgcmVjdC53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRVEoNDAsIHJlY3QuaGVpZ2h0KCkpOworfQorCitURVNUKEludFJlY3QsIENhc3Rpbmcp
Cit7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDEwLCAyMCwgMzAsIDQwKTsKKworI2lmIFVT
RShDRykKKyAgICBDR1JlY3QgY2dSZWN0ID0gQ0dSZWN0TWFrZSgxMC4wLCAyMC4wLCAzMC4wLCA0
MC4wKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21DR1JlY3QoY2dSZWN0KTsKKwor
ICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21DR1JlY3QpOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgUkVDVCBnZGlSZWN0ID0gcmVjdDsKKworICAgIEVYUEVDVF9FUSgxMCwgZ2Rp
UmVjdC5sZWZ0KTsKKyAgICBFWFBFQ1RfRVEoMjAsIGdkaVJlY3QudG9wKTsKKyAgICBFWFBFQ1Rf
RVEoNDAsIGdkaVJlY3QucmlnaHQpOworICAgIEVYUEVDVF9FUSg2MCwgZ2RpUmVjdC5ib3R0b20p
OworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0RnJvbUdESVJlY3QoZ2RpUmVjdCk7CisKKyAg
ICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tR0RJUmVjdCk7CisKKyAgICBEMkQxX1JFQ1RfVSBkMmRS
ZWN0VSA9IHJlY3Q7CisKKyAgICBFWFBFQ1RfRVEoMTAsIGQyZFJlY3RVLmxlZnQpOworICAgIEVY
UEVDVF9FUSgyMCwgZDJkUmVjdFUudG9wKTsKKyAgICBFWFBFQ1RfRVEoNDAsIGQyZFJlY3RVLnJp
Z2h0KTsKKyAgICBFWFBFQ1RfRVEoNjAsIGQyZFJlY3RVLmJvdHRvbSk7CisKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3RGcm9tRDJEUmVjdFUoZDJkUmVjdFUpOworCisgICAgY2hlY2tDYXN0UmVj
dChyZWN0RnJvbUQyRFJlY3RVKTsKKworICAgIEQyRDFfUkVDVF9GIGQyZFJlY3RGID0gcmVjdDsK
KworICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgZDJkUmVjdEYubGVmdCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIwLjBmLCBkMmRSZWN0Ri50b3ApOworICAgIEVYUEVDVF9GTE9BVF9FUSg0MC4w
ZiwgZDJkUmVjdEYucmlnaHQpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2MC4wZiwgZDJkUmVjdEYu
Ym90dG9tKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21EMkRSZWN0RihkMmRSZWN0
Rik7CisKKyAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tRDJEUmVjdEYpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIGNoZWNrU3VidHJhY3Rpb25SZXN1bHQxKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QpCit7CisgICAgRVhQRUNUX0VRKC0xMCwgcmVjdC54KCkpOworICAgIEVYUEVDVF9F
USg5MCwgcmVjdC5tYXhYKCkpOworICAgIEVYUEVDVF9FUSgtMTAsIHJlY3QueSgpKTsKKyAgICBF
WFBFQ1RfRVEoOTAsIHJlY3QubWF4WSgpKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCByZWN0LndpZHRo
KCkpOworICAgIEVYUEVDVF9FUSgxMDAsIHJlY3QuaGVpZ2h0KCkpOworfQorCitzdGF0aWMgdm9p
ZCBjaGVja1N1YnRyYWN0aW9uUmVzdWx0Mihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIEVYUEVDVF9FUSgtNDAsIHJlY3QueCgpKTsKKyAgICBFWFBFQ1RfRVEoNjAsIHJlY3Qu
bWF4WCgpKTsKKyAgICBFWFBFQ1RfRVEoLTUwLCByZWN0LnkoKSk7CisgICAgRVhQRUNUX0VRKDUw
LCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgcmVjdC53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRVEoMTAwLCByZWN0LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRSZWN0LCBTdWJ0cmFj
dGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMTAsIDIwLCAxMDAsIDEwMCk7Cisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgcmlnaHRTaWRlKDIwLCAzMCk7CisKKyAgICByZWN0IC09IHJp
Z2h0U2lkZTsKKworICAgIGNoZWNrU3VidHJhY3Rpb25SZXN1bHQxKHJlY3QpOworCisgICAgYXV0
byByZWN0MiA9IHJlY3QgLSBXZWJDb3JlOjpJbnRQb2ludCgzMCwgNDApOworICAgIGNoZWNrU3Vi
dHJhY3Rpb25SZXN1bHQyKHJlY3QyKTsKK30KKworVEVTVChJbnRSZWN0LCBFcXVhbGl0eSkKK3sK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMTAsIDIwLCAxMDAsIDEwMCk7CisgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0MigxMCwgMjAsIDEwMCwgMTAwKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJpZ2h0U2lkZSgxMTAsIDIwLCAyMCwgMTAwKTsKKworICAgIEFTU0VSVF9UUlVFKHJlY3QgPT0g
cmVjdDIpOworICAgIEFTU0VSVF9GQUxTRShyZWN0ICE9IHJlY3QyKTsKKyAgICBBU1NFUlRfVFJV
RShyZWN0ICE9IHJpZ2h0U2lkZSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlY3QgPT0gcmlnaHRTaWRl
KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tFbmNsb3NpbmdJbnRSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCit7CisgICAgRVhQRUNUX0VRKDEwLCByZWN0LngoKSk7CisgICAgRVhQ
RUNUX0VRKDQxLCByZWN0Lm1heFgoKSk7CisgICAgRVhQRUNUX0VRKDIxLCByZWN0LnkoKSk7Cisg
ICAgRVhQRUNUX0VRKDYyLCByZWN0Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKDMxLCByZWN0Lndp
ZHRoKCkpOworICAgIEVYUEVDVF9FUSg0MSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50
UmVjdCwgRW5jbG9zaW5nSW50UmVjdCkKK3sKKyNpZiBVU0UoQ0cpCisgICAgQ0dSZWN0IGNnUmVj
dCA9IENHUmVjdE1ha2UoMTAuNSwgMjEuMywgMzAuMSwgNDAuMCk7CisKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IGVuY2xvc2luZ0NHID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChjZ1JlY3QpOwor
CisgICAgY2hlY2tFbmNsb3NpbmdJbnRSZWN0KGVuY2xvc2luZ0NHKTsKKyNlbmRpZgorfQorCitU
RVNUKEludFJlY3QsIEFyZWFBbmREaXN0YW5jZXMpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCBy
ZWN0KDEwLCAyMCwgMTAwLCAxMDApOworCisgICAgRVhQRUNUX0VRKDEwMDAwVSwgcmVjdC5hcmVh
KCkpOworfQorCit9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50
U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0ludFNpemUuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9JbnRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKworI2lmIFVTRShDRykK
KyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKFdJTikKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCitzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkludFNpemUg
cmVjdCkKK3sKKyAgICByZWN0LnNldFdpZHRoKDIwMyk7CisgICAgRVhQRUNUX0VRKDIwMywgcmVj
dC53aWR0aCgpKTsKKyAgICByZWN0LnNldEhlaWdodCg3Myk7CisgICAgRVhQRUNUX0VRKDczLCBy
ZWN0LmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEVtcHR5U2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiByZWN0KQoreworICAgIEVYUEVDVF9FUSgwLCByZWN0LndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUSgwLCByZWN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfVFJVRShyZWN0Lmlz
RW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUocmVjdC5pc1plcm8oKSk7Cit9CisKK1RFU1QoSW50
U2l6ZSwgRGVmYXVsdENvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3Q7
CisKKyAgICB0ZXN0RW1wdHlTaXplKHRlc3QpOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsK
K30KKworVEVTVChJbnRTaXplLCBWYWx1ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHRlc3QoMTAwLCAyMDApOworCisgICAgRVhQRUNUX0VRKDEwMCwgdGVzdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoMjAwLCB0ZXN0LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
dGVzdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0LmlzWmVybygpKTsKKworICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBlcHNpbG9uID0gMC4wMDAxZjsKKyAgICBFWFBFQ1RfTkVBUigw
LjVmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVwc2lsb24pOworfQorCitURVNUKEludFNpemUsIEZs
b2F0U2l6ZUNvbnN0cnVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgxMDI0
LjIsIDc2Ny44KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3Qoc2l6ZSk7CisKKyAgICBFWFBF
Q1RfRVEoMTAyNCwgdGVzdC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY3LCB0ZXN0LmhlaWdo
dCgpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QuaXNaZXJvKCkpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0g
MC4wMDE7CisgICAgRVhQRUNUX05FQVIoMS4zMzVmLCB0ZXN0LmFzcGVjdFJhdGlvKCksIGVwc2ls
b24pOworCisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKK30KKworVEVTVChJbnRTaXplLCBEaWFn
b25hbExlbmd0aEFuZEFyZWEpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0KDEwMjQsIDc2
OCk7CisKKyAgICBFWFBFQ1RfRVEoMTYzODQwMCwgdGVzdC5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KSk7CisgICAgRVhQRUNUX0VRKDc4NjQzMlUsIHRlc3QuYXJlYSgpKTsKK30KKworVEVTVChJbnRT
aXplLCBTY2FsZSkKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAyNCwgNzY4KTsKKwor
ICAgIHRlc3Quc2NhbGUoMi4wZik7CisKKyAgICBFWFBFQ1RfRVEoMjA0OCwgdGVzdC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoMTUzNiwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNjYWxl
KDAuNWYpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDc2OCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0LnNjYWxlKDIuMGYsIDAuNWYpOwor
CisgICAgRVhQRUNUX0VRKDIwNDgsIHRlc3Qud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDM4NCwg
dGVzdC5oZWlnaHQoKSk7Cit9CisKK1RFU1QoSW50U2l6ZSwgRXhwYW5kKQoreworICAgIFdlYkNv
cmU6OkludFNpemUgdGVzdCgxMDI0LCA3NjgpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIHRlc3Qu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDc2OCwgdGVzdC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0
LmV4cGFuZCgxMDAsIDUwKTsKKworICAgIEVYUEVDVF9FUSgxMTI0LCB0ZXN0LndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUSg4MTgsIHRlc3QuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6
ZSBvdGhlcigyMDQ4LCA3MDApOworCisgICAgYXV0byBleHBhbmRlZCA9IHRlc3QuZXhwYW5kZWRU
byhvdGhlcik7CisKKyAgICBFWFBFQ1RfRVEoMjA0OCwgZXhwYW5kZWQud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDgxOCwgZXhwYW5kZWQuaGVpZ2h0KCkpOworfQorCitURVNUKEludFNpemUsIFNo
cmluaykKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAyNCwgNzY4KTsKKyAgICBXZWJD
b3JlOjpJbnRTaXplIG90aGVyKDEwMDAsIDcwMCk7CisKKyAgICBhdXRvIHNocnVua2VuID0gdGVz
dC5zaHJ1bmtUbyhvdGhlcik7CisKKyAgICBFWFBFQ1RfRVEoMTAwMCwgc2hydW5rZW4ud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDcwMCwgc2hydW5rZW4uaGVpZ2h0KCkpOworCisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBvdGhlcjIoMjAwMC4wZiwgNzAwLjBmKTsKKworICAgIGF1dG8gc2hydW5rZW4y
ID0gdGVzdC5zaHJ1bmtUbyhvdGhlcjIpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIHNocnVua2Vu
Mi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzAwLCBzaHJ1bmtlbjIuaGVpZ2h0KCkpOworfQor
CitURVNUKEludFNpemUsIFRyYW5zcG9zZWRTaXplKQoreworICAgIFdlYkNvcmU6OkludFNpemUg
dGVzdCgxMDI0LCA3NjgpOworCisgICAgYXV0byB0cmFuc3Bvc2VkU2l6ZSA9IHRlc3QudHJhbnNw
b3NlZFNpemUoKTsKKworICAgIEVYUEVDVF9FUSg3NjgsIHRyYW5zcG9zZWRTaXplLndpZHRoKCkp
OworICAgIEVYUEVDVF9FUSgxMDI0LCB0cmFuc3Bvc2VkU2l6ZS5oZWlnaHQoKSk7Cit9CisKK1RF
U1QoSW50U2l6ZSwgQ2FzdGluZykKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3QoMTAyNCwg
NzY4KTsKKworI2lmIFVTRShDRykKKyAgICBDR1NpemUgY2dTaXplID0gdGVzdDsKKworICAgIEVY
UEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBjZ1NpemUud2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9F
USg3NjguMGYsIGNnU2l6ZS5oZWlnaHQpOworCisgICAgQ0dTaXplIGNnU2l6ZTIgPSBDR1NpemVN
YWtlKC0yMi4zZiwgMTQuNmYpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0Q0coY2dTaXpl
Mik7CisKKyAgICBFWFBFQ1RfRVEoLTIyLCB0ZXN0Q0cud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KDE0LCB0ZXN0Q0cuaGVpZ2h0KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAg
RDJEMV9TSVpFX1UgZDJkU2l6ZVUgPSB0ZXN0OworICAgIEVYUEVDVF9FUSgxMDI0LCBkMmRTaXpl
VS53aWR0aCk7CisgICAgRVhQRUNUX0VRKDc2OCwgZDJkU2l6ZVUuaGVpZ2h0KTsKKworICAgIEQy
RDFfU0laRV9GIGQyZFNpemVGID0gdGVzdDsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwg
ZDJkU2l6ZUYud2lkdGgpOworICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGQyZFNpemVGLmhl
aWdodCk7CisKKyAgICBEMkQxX1NJWkVfRiBkMmRTaXplRjIgPSBEMkQxOjpTaXplRigtMjIuM2Ys
IDE0LjZmKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgdGVzdEQyRChkMmRTaXplRjIpOworCisg
ICAgRVhQRUNUX0VRKC0yMiwgdGVzdEQyRC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTQsIHRl
c3REMkQuaGVpZ2h0KCkpOworCisgICAgRDJEMV9TSVpFX0YgZDJkU2l6ZVUyID0gRDJEMTo6U2l6
ZUYoLTIzLCAxNik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3REMkQyKGQyZFNpemVVMik7
CisKKyAgICBFWFBFQ1RfRVEoLTIzLCB0ZXN0RDJEMi53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
MTYsIHRlc3REMkQyLmhlaWdodCgpKTsKKyNlbmRpZgorfQorCitURVNUKEludFNpemUsIEFkZFN1
YnRyYWN0KQoreworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBiKDEwMCwgMTAwKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgYyA9IGEgKyBi
OworCisgICAgRVhQRUNUX0VRKDYxMiwgYy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNDg0LCBj
LmhlaWdodCgpKTsKKworICAgIGEgKz0gYjsKKworICAgIEVYUEVDVF9FUSg2MTIsIGEud2lkdGgo
KSk7CisgICAgRVhQRUNUX0VRKDQ4NCwgYS5oZWlnaHQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIGEyKDUxMiwgMzg0KTsKKworICAgIFdlYkNvcmU6OkludFNpemUgZCA9IGEyIC0gYjsKKwor
ICAgIEVYUEVDVF9FUSg0MTIsIGQud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDI4NCwgZC5oZWln
aHQoKSk7CisKKyAgICBhMiAtPSBiOworCisgICAgRVhQRUNUX0VRKDQxMiwgYTIud2lkdGgoKSk7
CisgICAgRVhQRUNUX0VRKDI4NCwgYTIuaGVpZ2h0KCkpOworfQorCitURVNUKEludFNpemUsIE5l
Z2F0aW9uKQoreworICAgIFdlYkNvcmU6OkludFNpemUgYSg1MTIsIDM4NCk7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIG5lZ2F0ZWQgPSAtYTsKKworICAgIEVYUEVDVF9FUSgtNTEyLCBuZWdhdGVk
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgtMzg0LCBuZWdhdGVkLmhlaWdodCgpKTsKK30KKwor
VEVTVChJbnRTaXplLCBFcXVhbGl0eSkKK3sKKyAgICBXZWJDb3JlOjpJbnRTaXplIGEoMTAyNCwg
NzY4KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIGIoMTAyNCwgNzY4KTsKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIGMoNzY4LCA1MzQpOworCisgICAgQVNTRVJUX1RSVUUoYSA9PSBiKTsKKyAgICBBU1NF
UlRfRkFMU0UoYSAhPSBiKTsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBjKTsKKyAgICBBU1NFUlRf
VFJVRShhICE9IGMpOworfQorCitURVNUKEludFNpemUsIENvbnRyYWN0KQoreworICAgIFdlYkNv
cmU6OkludFNpemUgYSgxMDI0LCA3NjgpOworCisgICAgYS5jb250cmFjdCgxMDAsIDUwKTsKKwor
ICAgIEVYUEVDVF9FUSg5MjQsIGEud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDcxOCwgYS5oZWln
aHQoKSk7Cit9CisKK1RFU1QoSW50U2l6ZSwgQ2xhbXApCit7CisgICAgV2ViQ29yZTo6SW50U2l6
ZSBhKDEwMjQsIDc2OCk7CisKKyAgICBhLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEVY
UEVDVF9FUSgxMDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg3NjgsIGEuaGVpZ2h0KCkp
OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBiKC0xMDI0LCAtNzY4KTsKKworICAgIGIuY2xhbXBO
ZWdhdGl2ZVRvWmVybygpOworCisgICAgRVhQRUNUX0VRKDAsIGIud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0VRKDAsIGIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtU2l6
ZSgxMDI0LCAxMDAwKTsKKworICAgIGEuY2xhbXBUb01pbmltdW1TaXplKG1pbmltdW1TaXplKTsK
KworICAgIEVYUEVDVF9FUSgxMDI0LCBhLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxMDAwLCBh
LmhlaWdodCgpKTsKK30KKworVEVTVChJbnRTaXplLCBDb25zdHJhaW5lZEJldHdlZW4pCit7Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtU2l6ZSgzODQsIDI1Nik7CisgICAgV2ViQ29yZTo6
SW50U2l6ZSBtYXhpbXVtU2l6ZSgyMDQ4LCAxNTM2KTsKKworICAgIFdlYkNvcmU6OkludFNpemUg
YSgxMDI0LCA3NjgpOworCisgICAgYXV0byBjb25zdHJhaW5lZDEgPSBhLmNvbnN0cmFpbmVkQmV0
d2VlbihtaW5pbXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDEwMjQsIGNv
bnN0cmFpbmVkMS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNzY4LCBjb25zdHJhaW5lZDEuaGVp
Z2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBiKDIwMCwgMTAwKTsKKworICAgIGF1dG8g
Y29uc3RyYWluZWQyID0gYi5jb25zdHJhaW5lZEJldHdlZW4obWluaW11bVNpemUsIG1heGltdW1T
aXplKTsKKworICAgIEVYUEVDVF9FUSgzODQsIGNvbnN0cmFpbmVkMi53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRVEoMjU2LCBjb25zdHJhaW5lZDIuaGVpZ2h0KCkpOworCisgICAgV2ViQ29yZTo6SW50
U2l6ZSBjKDUwMDAsIDIwMDApOworCisgICAgYXV0byBjb25zdHJhaW5lZDMgPSBjLmNvbnN0cmFp
bmVkQmV0d2VlbihtaW5pbXVtU2l6ZSwgbWF4aW11bVNpemUpOworCisgICAgRVhQRUNUX0VRKDIw
NDgsIGNvbnN0cmFpbmVkMy53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTUzNiwgY29uc3RyYWlu
ZWQzLmhlaWdodCgpKTsKK30KKworLyoKKworSW50U2l6ZSBjb25zdHJhaW5lZEJldHdlZW4oY29u
c3QgSW50U2l6ZSYgbWluLCBjb25zdCBJbnRTaXplJiBtYXgpIGNvbnN0OworCisqLworCit9Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDIwNTg0MCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTMgKzEsMTMxNyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMywgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFu
c2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UXVhZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KIAotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisjaWYgVVNFKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBKQorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZDJkMS5oPgor
I2VuZGlmCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotVEVTVChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCwgTm9uSW52ZXJ0YWJsZUJsZW5kKQorc3RhdGljIHZvaWQgdGVzdElkZW50aXR5KGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgwLjAsIHRyYW5zZm9ybS5tMTIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5z
Zm9ybS5tMTMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMTQoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgw
LjAsIHRyYW5zZm9ybS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9y
bS5tMjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzEoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAs
IHRyYW5zZm9ybS5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5t
NDEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgwLjAsIHRyYW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxLjAsIHRyYW5zZm9ybS5tNDQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRBbmRT
ZXQoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICB0cmFu
c2Zvcm0uc2V0QSgxLjEpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4xLCB0cmFuc2Zvcm0uYSgp
KTsKKyAgICB0cmFuc2Zvcm0uc2V0QigyLjIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4yLCB0
cmFuc2Zvcm0uYigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0QygzLjMpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMy4zLCB0cmFuc2Zvcm0uYygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0RCg0LjQpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC40LCB0cmFuc2Zvcm0uZCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0
RSg1LjUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS41LCB0cmFuc2Zvcm0uZSgpKTsKKyAgICB0
cmFuc2Zvcm0uc2V0Rig2LjYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0u
ZigpKTsKKworICAgIHRyYW5zZm9ybS5zZXRNMTEoMS4xKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEuMSwgdHJhbnNmb3JtLm0xMSgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTEyKDIuMik7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgyLjIsIHRyYW5zZm9ybS5tMTIoKSk7CisgICAgdHJhbnNmb3JtLnNl
dE0xMygzLjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4zLCB0cmFuc2Zvcm0ubTEzKCkpOwor
ICAgIHRyYW5zZm9ybS5zZXRNMTQoNC40KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNCwgdHJh
bnNmb3JtLm0xNCgpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTIxKDUuNSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg1LjUsIHRyYW5zZm9ybS5tMjEoKSk7CisgICAgdHJhbnNmb3JtLnNldE0yMig2LjYp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi42LCB0cmFuc2Zvcm0ubTIyKCkpOworICAgIHRyYW5z
Zm9ybS5zZXRNMjMoNy43KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuNywgdHJhbnNmb3JtLm0y
MygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTI0KDguOCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg4
LjgsIHRyYW5zZm9ybS5tMjQoKSk7CisgICAgdHJhbnNmb3JtLnNldE0zMSg5LjkpOworICAgIEVY
UEVDVF9ET1VCTEVfRVEoOS45LCB0cmFuc2Zvcm0ubTMxKCkpOworICAgIHRyYW5zZm9ybS5zZXRN
MzIoMTAuMTApOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMTAsIHRyYW5zZm9ybS5tMzIoKSk7
CisgICAgdHJhbnNmb3JtLnNldE0zMygxMS4xMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4x
MSwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTM0KDEyLjEyKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDEyLjEyLCB0cmFuc2Zvcm0ubTM0KCkpOworICAgIHRyYW5zZm9ybS5z
ZXRNNDEoMTMuMTMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTMuMTMsIHRyYW5zZm9ybS5tNDEo
KSk7CisgICAgdHJhbnNmb3JtLnNldE00MigxNC4xNCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
NC4xNCwgdHJhbnNmb3JtLm00MigpKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTQzKDE1LjE1KTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjE1LCB0cmFuc2Zvcm0ubTQzKCkpOworICAgIHRyYW5zZm9y
bS5zZXRNNDQoMTYuMTYpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMTYsIHRyYW5zZm9ybS5t
NDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIERlZmF1bHRDb25zdHJ1Y3Rp
b24pCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKworICAgIHRl
c3RJZGVudGl0eSh0ZXN0KTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdCk7CisKKyAgICBBU1NF
UlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QWZmaW5l
TGlrZUNvbnN0cnVjdGlvbihjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0cmFuc2Zvcm0uYSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNmb3JtLmIoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSg0LjAsIHRyYW5zZm9ybS5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0cmFu
c2Zvcm0uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLmUoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5mKCkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIHRyYW5zZm9ybS5t
MTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNS4wLCB0cmFuc2Zvcm0ubTEyKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMTQuMCwgdHJhbnNmb3JtLm0xMygpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDEzLjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMi4w
LCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTEuMCwgdHJhbnNmb3Jt
Lm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9ybS5tMjMoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSg5LjAsIHRyYW5zZm9ybS5tMjQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSg4LjAsIHRyYW5zZm9ybS5tMzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg3LjAs
IHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg2LjAsIHRyYW5zZm9ybS5t
MzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg1LjAsIHRyYW5zZm9ybS5tMzQoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSg0LjAsIHRyYW5zZm9ybS5tNDEoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgzLjAsIHRyYW5zZm9ybS5tNDIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRy
YW5zZm9ybS5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5tNDQo
KSk7CisgICAgQVNTRVJUX0ZBTFNFKHRyYW5zZm9ybS5pc0FmZmluZSgpKTsKK30KKworVEVTVChU
cmFuc2Zvcm1hdGlvbk1hdHJpeCwgVmFsdWVDb25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDEoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7
CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0MSk7CisKKyAgICBBU1NFUlRf
RkFMU0UodGVzdDEuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0MS5pc0FmZmlu
ZSgpKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QyKDE2LjAsIDE1
LjAsIDE0LjAsIDEzLjAsIDEyLjAsIDExLjAsIDEwLjAsCisgICAgICAgIDkuMCwgOC4wLCA3LjAs
IDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0
aW9uKHRlc3QyKTsKKworICAgIHRlc3RHZXRBbmRTZXQodGVzdDIpOworCisgICAgQVNTRVJUX0ZB
TFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QyLmlzQWZmaW5l
KCkpOworCisgICAgdGVzdDIubWFrZUlkZW50aXR5KCk7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVz
dDIpOworCisgICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgpKTsKK30KKworI2lmIFVT
RShDRykKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtQ29uc3Ry
dWN0aW9uKQoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNnVHJhbnNmb3JtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6
OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoY2dUcmFuc2Zvcm0pOworCisgICAgdGVzdEFmZmlu
ZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisgICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEQyRDFNYXRyaXhDb25zdHJ1Y3Rp
b24pCit7CisgICAgRDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNmb3JtID0gRDJEMTo6TWF0cml4
M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0ZXN0KGQyZFRyYW5zZm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNv
bnN0cnVjdGlvbih0ZXN0KTsKKyAgICB0ZXN0R2V0QW5kU2V0KHRlc3QpOworCisgICAgQVNTRVJU
X0ZBTFNFKHRlc3QuaXNJZGVudGl0eSgpKTsKK30KKyNlbmRpZgorCitURVNUKFRyYW5zZm9ybWF0
aW9uTWF0cml4LCBBZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24pCit7CisgICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGFmZmluZVRyYW5zZm9ybSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwg
MS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KGFmZmluZVRyYW5z
Zm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKyAgICB0ZXN0
R2V0QW5kU2V0KHRlc3QpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0eSgpKTsK
K30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgVHJhbnNmb3JtTWF0cml4Q29uc3RydWN0
aW9uKQogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb207Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdG8oMi43MTMzNTkwOTM4LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDIuNDY0NTEzNzc2
MSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAwLCAwLjAxLCAwLjAyLCAwLjAzLCAwLjA0LCAwLjA1
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7CisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4KDE2LjAsIDE1LjAsIDE0LjAsIDEzLjAsIDEyLjAsIDExLjAs
IDEwLjAsCisgICAgICAgIDkuMCwgOC4wLCA3LjAsIDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAx
LjApOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QobWF0cml4KTsKKwor
ICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCwgQXNzaWdubWVudCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworICAgIFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCgxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4w
LCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwg
MS4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVz
dCA9IG1hdHJpeDsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKworVEVT
VChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgSWRlbnRpdHkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qu
aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Lm1ha2VJZGVudGl0eSgpOwor
CisgICAgQVNTRVJUX1RSVUUodGVzdC5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRl
c3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0SWRlbnRpdHkodGVzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBZmZpbmVWZXJzaW9uKFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4IGFmZmluZVRyYW5zZm9ybU1hdHJpeCkKK3sKKyAgICBBU1NFUlRfRkFMU0UoYWZm
aW5lVHJhbnNmb3JtTWF0cml4LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGFmZmlu
ZVRyYW5zZm9ybU1hdHJpeC5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKyAgICBBU1NFUlRf
VFJVRShhZmZpbmVUcmFuc2Zvcm1NYXRyaXguaXNBZmZpbmUoKSk7CisKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDE2LjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMTEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgxNS4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTEyKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTEzKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCBhZmZpbmVUcmFuc2Zvcm1NYXRyaXgubTE0KCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMTIuMCwgYWZmaW5lVHJhbnNmb3JtTWF0cml4Lm0yMSgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDExLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMjIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMjMoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMjQoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMzEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMzIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMzMoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tMzQoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSg0LjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tNDEoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgzLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tNDIoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgwLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tNDMoKSk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxLjAsIGFmZmluZVRyYW5zZm9ybU1hdHJpeC5tNDQoKSk7Cit9CisKK1RFU1Qo
VHJhbnNmb3JtYXRpb25NYXRyaXgsIEFmZmluZVZlcnNpb24pCit7CisgICAgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXggdGVzdCgxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4w
LCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwg
MS4wKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJU
X0ZBTFNFKHRlc3QuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisgICAgQVNTRVJUX0ZBTFNF
KHRlc3QuaXNBZmZpbmUoKSk7CisKKyAgICBhdXRvIGFmZmluZUNvcHkgPSB0ZXN0LnRvQWZmaW5l
VHJhbnNmb3JtKCk7CisKKyAgICB0ZXN0QWZmaW5lVmVyc2lvbihhZmZpbmVDb3B5KTsKKworICAg
IHRlc3QubWFrZUFmZmluZSgpOworCisgICAgdGVzdEFmZmluZVZlcnNpb24odGVzdCk7Cit9CisK
K1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1hcEZsb2F0UG9pbnQpCit7CisgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBv
aW50KDEwMC4wZiwgNTAuMGYpOworCisgICAgYXV0byBtYXBwZWRQb2ludCA9IHRlc3QubWFwUG9p
bnQocG9pbnQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQueCgp
KTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFBvaW50LnkoKSk7CisKKyAgICB0
ZXN0LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQyID0gdGVzdC5tYXBQb2ludChw
b2ludCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRQb2ludDIueCgpKTsK
KyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRQb2ludDIueSgpKTsKKworICAgIHRl
c3Quc2V0QSgwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDMgPSB0ZXN0Lm1hcFBvaW50KHBv
aW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUG9pbnQzLngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUG9pbnQzLnkoKSk7CisKKyAgICB0ZXN0
LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRQb2ludDQgPSB0ZXN0Lm1hcFBvaW50KHBv
aW50KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUG9pbnQ0LngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDI1LjBmLCBtYXBwZWRQb2ludDQueSgpKTsKKworICAgIHRlc3Qu
c2V0TTExKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFBvaW50NSA9IHRlc3QubWFwUG9pbnQocG9p
bnQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUG9pbnQ1LngoKSk7Cisg
ICAgQVNTRVJUX0ZMT0FUX0VRKDI1LjBmLCBtYXBwZWRQb2ludDUueSgpKTsKK30KKworVEVTVChU
cmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFwSW50UG9pbnQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCgxMDAsIDUw
KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAg
IEFTU0VSVF9FUSgxMDAsIG1hcHBlZFBvaW50LngoKSk7CisgICAgQVNTRVJUX0VRKDUwLCBtYXBw
ZWRQb2ludC55KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFBv
aW50MiA9IHRlc3QubWFwUG9pbnQocG9pbnQpOworCisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVk
UG9pbnQyLngoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUG9pbnQyLnkoKSk7CisKKyAg
ICB0ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUG9pbnQzID0gdGVzdC5tYXBQb2lu
dChwb2ludCk7CisKKyAgICBBU1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50My54KCkpOworICAgIEFT
U0VSVF9FUSgxMDAsIG1hcHBlZFBvaW50My55KCkpOworCisgICAgdGVzdC5zZXRNMjIoMC41KTsK
KworICAgIGF1dG8gbWFwcGVkUG9pbnQ0ID0gdGVzdC5tYXBQb2ludChwb2ludCk7CisKKyAgICBB
U1NFUlRfRVEoNTAsIG1hcHBlZFBvaW50NC54KCkpOworICAgIEFTU0VSVF9FUSgyNSwgbWFwcGVk
UG9pbnQ0LnkoKSk7CisKKyAgICB0ZXN0LnNldE0xMSgyLjApOworCisgICAgYXV0byBtYXBwZWRQ
b2ludDUgPSB0ZXN0Lm1hcFBvaW50KHBvaW50KTsKKworICAgIEFTU0VSVF9FUSgyMDAsIG1hcHBl
ZFBvaW50NS54KCkpOworICAgIEFTU0VSVF9FUSgyNSwgbWFwcGVkUG9pbnQ1LnkoKSk7Cit9CisK
K1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1hcEludFJlY3QpCit7CisgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoMTAs
IDIwLCAyMDAsIDMwMCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3QgPSB0ZXN0Lm1hcFJlY3QocmVj
dCk7CisKKyAgICBBU1NFUlRfRVEoMTAsIG1hcHBlZFJlY3QueCgpKTsKKyAgICBBU1NFUlRfRVEo
MjAsIG1hcHBlZFJlY3QueSgpKTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0LndpZHRo
KCkpOworICAgIEFTU0VSVF9FUSgzMDAsIG1hcHBlZFJlY3QuaGVpZ2h0KCkpOworCisgICAgdGVz
dC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFJlY3QyID0gdGVzdC5tYXBSZWN0KHJlY3Qp
OworCisgICAgQVNTRVJUX0VRKDEwLCBtYXBwZWRSZWN0Mi54KCkpOworICAgIEFTU0VSVF9FUSg0
MCwgbWFwcGVkUmVjdDIueSgpKTsKKyAgICBBU1NFUlRfRVEoMjAwLCBtYXBwZWRSZWN0Mi53aWR0
aCgpKTsKKyAgICBBU1NFUlRfRVEoNjAwLCBtYXBwZWRSZWN0Mi5oZWlnaHQoKSk7CisKKyAgICB0
ZXN0LnNldEEoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDMgPSB0ZXN0Lm1hcFJlY3QocmVj
dCk7CisKKyAgICBBU1NFUlRfRVEoNSwgbWFwcGVkUmVjdDMueCgpKTsKKyAgICBBU1NFUlRfRVEo
NDAsIG1hcHBlZFJlY3QzLnkoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUmVjdDMud2lk
dGgoKSk7CisgICAgQVNTRVJUX0VRKDYwMCwgbWFwcGVkUmVjdDMuaGVpZ2h0KCkpOworCisgICAg
dGVzdC5zZXRNMjIoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDQgPSB0ZXN0Lm1hcFJlY3Qo
cmVjdCk7CisKKyAgICBBU1NFUlRfRVEoNSwgbWFwcGVkUmVjdDQueCgpKTsKKyAgICBBU1NFUlRf
RVEoMTAsIG1hcHBlZFJlY3Q0LnkoKSk7CisgICAgQVNTRVJUX0VRKDEwMCwgbWFwcGVkUmVjdDQu
d2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKDE1MCwgbWFwcGVkUmVjdDQuaGVpZ2h0KCkpOworCisg
ICAgdGVzdC5zZXRNMTEoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDUgPSB0ZXN0Lm1hcFJl
Y3QocmVjdCk7CisKKyAgICBBU1NFUlRfRVEoMjAsIG1hcHBlZFJlY3Q1LngoKSk7CisgICAgQVNT
RVJUX0VRKDEwLCBtYXBwZWRSZWN0NS55KCkpOworICAgIEFTU0VSVF9FUSgxMDAsIG1hcHBlZFJl
Y3Q0LndpZHRoKCkpOworICAgIEFTU0VSVF9FUSgxNTAsIG1hcHBlZFJlY3Q0LmhlaWdodCgpKTsK
K30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFwRmxvYXRSZWN0KQoreworICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QoMTAuZiwgMjAuMGYsIDIwMC4wZiwgMzAwLjBmKTsKKworICAgIGF1dG8gbWFwcGVkUmVj
dCA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFw
cGVkUmVjdC54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdC55KCkp
OworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFJlY3Qud2lkdGgoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUmVjdC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0
LnNldEQoMi4wKTsKKworICAgIGF1dG8gbWFwcGVkUmVjdDIgPSB0ZXN0Lm1hcFJlY3QocmVjdCk7
CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3QyLngoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDQwLjBmLCBtYXBwZWRSZWN0Mi55KCkpOworICAgIEFTU0VSVF9GTE9BVF9F
USgyMDAuMGYsIG1hcHBlZFJlY3QyLndpZHRoKCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg2MDAu
MGYsIG1hcHBlZFJlY3QyLmhlaWdodCgpKTsKKworICAgIHRlc3Quc2V0QSgwLjUpOworCisgICAg
YXV0byBtYXBwZWRSZWN0MyA9IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9B
VF9FUSg1LjBmLCBtYXBwZWRSZWN0My54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MC4wZiwg
bWFwcGVkUmVjdDMueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRSZWN0
My53aWR0aCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNjAwLjBmLCBtYXBwZWRSZWN0My5oZWln
aHQoKSk7CisKKyAgICB0ZXN0LnNldE0yMigwLjUpOworCisgICAgYXV0byBtYXBwZWRSZWN0NCA9
IHRlc3QubWFwUmVjdChyZWN0KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSg1LjBmLCBtYXBwZWRS
ZWN0NC54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgbWFwcGVkUmVjdDQueSgpKTsK
KyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRSZWN0NC53aWR0aCgpKTsKKyAgICBB
U1NFUlRfRkxPQVRfRVEoMTUwLjBmLCBtYXBwZWRSZWN0NC5oZWlnaHQoKSk7CisKKyAgICB0ZXN0
LnNldE0xMSgyLjApOworCisgICAgYXV0byBtYXBwZWRSZWN0NSA9IHRlc3QubWFwUmVjdChyZWN0
KTsKKworICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgbWFwcGVkUmVjdDUueCgpKTsKKyAgICBB
U1NFUlRfRkxPQVRfRVEoMTAuMGYsIG1hcHBlZFJlY3Q1LnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDEwMC4wZiwgbWFwcGVkUmVjdDQud2lkdGgoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1
MC4wZiwgbWFwcGVkUmVjdDQuaGVpZ2h0KCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0
cml4LCBNYXBGbG9hdFF1YWQpCit7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMTAwLjBm
LCAxMDAuMGYsIDEwMC4wZiwgNTAuMGYpOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkKHJl
Y3QpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMSgpLngoKSk7CisgICAg
QVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FU
X0VRKDIwMC4wZiwgcXVhZC5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwg
cXVhZC5wMigpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgcXVhZC5wMygpLngo
KSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDE1MC4wZiwgcXVhZC5wMygpLnkoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDEwMC4wZiwgcXVhZC5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDE1MC4wZiwgcXVhZC5wNCgpLnkoKSk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0ZXN0OworICAgIGF1dG8gbWFwcGVkUXVhZCA9IHRlc3QubWFwUXVhZChxdWFkKTsKKwor
ICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQucDEoKS54KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1YWQucDEoKS55KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9F
USgxMDAuMGYsIG1hcHBlZFF1YWQucDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAu
MGYsIG1hcHBlZFF1YWQucDMoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIG1h
cHBlZFF1YWQucDMoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAuMGYsIG1hcHBlZFF1
YWQucDQoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxNTAuMGYsIG1hcHBlZFF1YWQucDQo
KS55KCkpOworCisgICAgdGVzdC5zZXREKDIuMCk7CisKKyAgICBhdXRvIG1hcHBlZFF1YWQyID0g
dGVzdC5tYXBRdWFkKHF1YWQpOworCisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVk
UXVhZDIucDEoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQy
LnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkMi5wMigp
LngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDIwMC4wZiwgbWFwcGVkUXVhZDIucDIoKS55KCkp
OworICAgIEFTU0VSVF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQyLnAzKCkueCgpKTsKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBtYXBwZWRRdWFkMi5wMygpLnkoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDIucDQoKS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSgzMDAuMGYsIG1hcHBlZFF1YWQyLnA0KCkueSgpKTsKKworICAgIHRlc3Quc2V0QSgw
LjUpOworCisgICAgYXV0byBtYXBwZWRRdWFkMyA9IHRlc3QubWFwUXVhZChxdWFkKTsKKworICAg
IEFTU0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDMucDEoKS54KCkpOworICAgIEFTU0VS
VF9GTE9BVF9FUSgyMDAuMGYsIG1hcHBlZFF1YWQzLnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxP
QVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkMy5wMigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VR
KDIwMC4wZiwgbWFwcGVkUXVhZDMucDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSgxMDAu
MGYsIG1hcHBlZFF1YWQzLnAzKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMzAwLjBmLCBt
YXBwZWRRdWFkMy5wMygpLnkoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRR
dWFkMy5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDMwMC4wZiwgbWFwcGVkUXVhZDMu
cDQoKS55KCkpOworCisgICAgdGVzdC5zZXRNMjIoMC41KTsKKworICAgIGF1dG8gbWFwcGVkUXVh
ZDQgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1h
cHBlZFF1YWQ0LnAxKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNTAuMGYsIG1hcHBlZFF1
YWQ0LnAxKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMTAwLjBmLCBtYXBwZWRRdWFkNC5w
MigpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkNC5wMigpLnko
KSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDEwMC4wZiwgbWFwcGVkUXVhZDQucDMoKS54KCkpOwor
ICAgIEFTU0VSVF9GTE9BVF9FUSg3NS4wZiwgbWFwcGVkUXVhZDQucDMoKS55KCkpOworICAgIEFT
U0VSVF9GTE9BVF9FUSg1MC4wZiwgbWFwcGVkUXVhZDQucDQoKS54KCkpOworICAgIEFTU0VSVF9G
TE9BVF9FUSg3NS4wZiwgbWFwcGVkUXVhZDQucDQoKS55KCkpOworCisgICAgdGVzdC5zZXRNMTEo
Mi4wKTsKKworICAgIGF1dG8gbWFwcGVkUXVhZDUgPSB0ZXN0Lm1hcFF1YWQocXVhZCk7CisKKyAg
ICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRRdWFkNS5wMSgpLngoKSk7CisgICAgQVNT
RVJUX0ZMT0FUX0VRKDUwLjBmLCBtYXBwZWRRdWFkNS5wMSgpLnkoKSk7CisgICAgQVNTRVJUX0ZM
T0FUX0VRKDQwMC4wZiwgbWFwcGVkUXVhZDUucDIoKS54KCkpOworICAgIEFTU0VSVF9GTE9BVF9F
USg1MC4wZiwgbWFwcGVkUXVhZDUucDIoKS55KCkpOworICAgIEFTU0VSVF9GTE9BVF9FUSg0MDAu
MGYsIG1hcHBlZFF1YWQ1LnAzKCkueCgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoNzUuMGYsIG1h
cHBlZFF1YWQ1LnAzKCkueSgpKTsKKyAgICBBU1NFUlRfRkxPQVRfRVEoMjAwLjBmLCBtYXBwZWRR
dWFkNS5wNCgpLngoKSk7CisgICAgQVNTRVJUX0ZMT0FUX0VRKDc1LjBmLCBtYXBwZWRRdWFkNS5w
NCgpLnkoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3VibGVkKGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
Mi4wLCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEwLjAsIHRyYW5zZm9y
bS5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0uYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgyLjAsIHRyYW5zZm9ybS5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0cmFuc2Zv
cm0uZigpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEhhbHZlZChjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4w
LCB0cmFuc2Zvcm0uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuNSwgdHJhbnNmb3JtLmIo
KSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRyYW5zZm9ybS5jKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMS41LCB0cmFuc2Zvcm0uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIu
MCwgdHJhbnNmb3JtLmUoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIHRyYW5zZm9ybS5m
KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG91YmxlZDIoY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMyLjAs
IHRyYW5zZm9ybS5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzMC4wLCB0cmFuc2Zvcm0u
bTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjguMCwgdHJhbnNmb3JtLm0xMygpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDI2LjAsIHRyYW5zZm9ybS5tMTQoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgyNC4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMjIu
MCwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIwLjAsIHRyYW5zZm9y
bS5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxOC4wLCB0cmFuc2Zvcm0ubTI0KCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMCwgdHJhbnNmb3JtLm0zMSgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDE0LjAsIHRyYW5zZm9ybS5tMzIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
Mi4wLCB0cmFuc2Zvcm0ubTMzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTAuMCwgdHJhbnNm
b3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLm00MSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm00MigpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDQuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIu
MCwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEhhbHZlZDIoY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLm0xMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcu
NSwgdHJhbnNmb3JtLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDcuMCwgdHJhbnNmb3Jt
Lm0xMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuNSwgdHJhbnNmb3JtLm0xNCgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdHJhbnNmb3JtLm0yMSgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDUuNSwgdHJhbnNmb3JtLm0yMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwg
dHJhbnNmb3JtLm0yMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuNSwgdHJhbnNmb3JtLm0y
NCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdHJhbnNmb3JtLm0zMSgpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDMuNSwgdHJhbnNmb3JtLm0zMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDMuMCwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuNSwgdHJh
bnNmb3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLm00MSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuNSwgdHJhbnNmb3JtLm00MigpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDEuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDAuNSwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwg
TXVsdGlwbHkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCg2LjAs
IDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgdGVzdC5tdWx0aXBseShpZGVudGl0eSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0
cnVjdGlvbih0ZXN0KTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvdWJs
ZXIoMi4wLCAwLjAsIDAuMCwgMi4wLCAwLjAsIDAuMCk7CisKKyAgICB0ZXN0Lm11bHRpcGx5KGRv
dWJsZXIpOworCisgICAgdGVzdERvdWJsZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBoYWx2ZXIoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuMCk7CisKKyAg
ICB0ZXN0Lm11bHRpcGx5KGhhbHZlcik7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlv
bih0ZXN0KTsKKworICAgIHRlc3QubXVsdGlwbHkoaGFsdmVyKTsKKworICAgIHRlc3RIYWx2ZWQo
dGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MigxNi4wLCAx
NS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4w
LCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RWYWx1ZUNvbnN0cnVj
dGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0Mi5tdWx0aXBseShpZGVudGl0eSk7CisKKyAgICB0ZXN0
VmFsdWVDb25zdHJ1Y3Rpb24odGVzdDIpOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXggZG91YmxlcjIoMi4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDIuMCwgMC4wLCAwLjAsCisg
ICAgICAgIDAuMCwgMC4wLCAyLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMi4wKTsKKworICAgIHRl
c3QyLm11bHRpcGx5KGRvdWJsZXIyKTsKKworICAgIHRlc3REb3VibGVkMih0ZXN0Mik7CisKKyAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBoYWx2ZXIyKDAuNSwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjUsIDAuMCwgMC4wLAorICAgICAgICAwLjAsIDAuMCwgMC41LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDAuNSk7CisKKyAgICB0ZXN0Mi5tdWx0aXBseShoYWx2ZXIyKTsKKworICAgIHRl
c3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0Mi5tdWx0aXBseShoYWx2ZXIy
KTsKKworICAgIHRlc3RIYWx2ZWQyKHRlc3QyKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4IHRlc3QzKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVz
dDMgKj0gaWRlbnRpdHk7CiAKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0Myk7
CisKKyAgICB0ZXN0MyAqPSBkb3VibGVyOworCisgICAgdGVzdERvdWJsZWQodGVzdDMpOworCisg
ICAgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDQoMTYuMCwgMTUuMCwg
MTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAgICAgICAgOS4wLCA4LjAsIDcuMCwgNi4w
LCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICBhdXRvIHJlc3VsdDEgPSB0ZXN0NCAq
IGlkZW50aXR5OworCisgICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHJlc3VsdDEpOworCisgICAg
YXV0byByZXN1bHQyID0gdGVzdDQgKiBkb3VibGVyMjsKKworICAgIHRlc3REb3VibGVkMihyZXN1
bHQyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFNjYWxlZEJ5VHdvKGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgz
Mi4wLCB0cmFuc2Zvcm0ubTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMzAuMCwgdHJhbnNm
b3JtLm0xMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDI4LjAsIHRyYW5zZm9ybS5tMTMoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyNi4wLCB0cmFuc2Zvcm0ubTE0KCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoMjQuMCwgdHJhbnNmb3JtLm0yMSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDIyLjAsIHRyYW5zZm9ybS5tMjIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyMC4wLCB0cmFu
c2Zvcm0ubTIzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTguMCwgdHJhbnNmb3JtLm0yNCgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDguMCwgdHJhbnNmb3JtLm0zMSgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDcuMCwgdHJhbnNmb3JtLm0zMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VR
KDYuMCwgdHJhbnNmb3JtLm0zMygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdHJhbnNm
b3JtLm0zNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgdHJhbnNmb3JtLm00MSgpKTsK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdHJhbnNmb3JtLm00MigpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDIuMCwgdHJhbnNmb3JtLm00MygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEu
MCwgdHJhbnNmb3JtLm00NCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFNjYWxlZEJ5SGFsZihj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEVY
UEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0ubTExKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNy41LCB0cmFuc2Zvcm0ubTEyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNy4wLCB0cmFu
c2Zvcm0ubTEzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi41LCB0cmFuc2Zvcm0ubTE0KCkp
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCB0cmFuc2Zvcm0ubTIxKCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNS41LCB0cmFuc2Zvcm0ubTIyKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
NS4wLCB0cmFuc2Zvcm0ubTIzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC41LCB0cmFuc2Zv
cm0ubTI0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCB0cmFuc2Zvcm0ubTMxKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoNy4wLCB0cmFuc2Zvcm0ubTMyKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoNi4wLCB0cmFuc2Zvcm0ubTMzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4w
LCB0cmFuc2Zvcm0ubTM0KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0cmFuc2Zvcm0u
bTQxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0cmFuc2Zvcm0ubTQyKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0cmFuc2Zvcm0ubTQzKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0cmFuc2Zvcm0ubTQ0KCkpOworfQorCisKK1RFU1QoVHJhbnNmb3JtYXRpb25N
YXRyaXgsIFNjYWxlKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3Qo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0
cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMS4wKTsKKworICAgIHRlc3RBZmZpbmVM
aWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5zY2FsZSgyLjApOworCisgICAgdGVz
dERvdWJsZWQodGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0QWZmaW5l
TGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Quc2NhbGUoMC41KTsKKworICAgIHRl
c3RIYWx2ZWQodGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0
MigxNi4wLCAxNS4wLCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAs
IDguMCwgNy4wLCA2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3RWYWx1
ZUNvbnN0cnVjdGlvbih0ZXN0Mik7CisKKyAgICB0ZXN0Mi5zY2FsZSgyLjApOworCisgICAgdGVz
dFNjYWxlZEJ5VHdvKHRlc3QyKTsKKworICAgIHRlc3QyLnNjYWxlKDAuNSk7CisKKyAgICB0ZXN0
VmFsdWVDb25zdHJ1Y3Rpb24odGVzdDIpOworCisgICAgdGVzdDIuc2NhbGUoMC41KTsKKworICAg
IHRlc3RTY2FsZWRCeUhhbGYodGVzdDIpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4
LCBTY2FsZVVuaWZvcm1Ob25Vbmlmb3JtKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IHRlc3QoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwgMTAuMCwKKyAg
ICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisKKyAg
ICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9y
bSgxLjAsIDEuMCk7CisKKyAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0
ZXN0LnNjYWxlTm9uVW5pZm9ybSgyLjAsIDIuMCk7CisKKyAgICB0ZXN0U2NhbGVkQnlUd28odGVz
dCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgwLjUsIDAuNSk7CisKKyAgICB0ZXN0VmFs
dWVDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNjYWxlTm9uVW5pZm9ybSgwLjUsIDAu
NSk7CisKKyAgICB0ZXN0U2NhbGVkQnlIYWxmKHRlc3QpOworfQorCitURVNUKFRyYW5zZm9ybWF0
aW9uTWF0cml4LCBSb3RhdGUpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
dGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3Qucm90YXRlKDM2
MC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVz
dC5yb3RhdGUoMTgwLjApOworCisgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOwor
CisgICAgRVhQRUNUX05FQVIoLTYuMCwgdGVzdC5hKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9O
RUFSKC01LjAsIHRlc3QuYigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNC4wLCB0ZXN0
LmMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTMuMCwgdGVzdC5kKCksIGVwc2lsb24p
OworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCB0ZXN0LmUoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgxLjAsIHRlc3QuZigpKTsKKworICAgIHRlc3Qucm90YXRlKC0xODAuMCk7CisKKyAgICB0
ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3Qucm90YXRlKDkwLjAp
OworCisgICAgRVhQRUNUX05FQVIoNC4wLCB0ZXN0LmEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNU
X05FQVIoMy4wLCB0ZXN0LmIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoLTYuMCwgdGVz
dC5jKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKC01LjAsIHRlc3QuZCgpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LnJvdGF0ZSgtOTAuMCk7CisKKyAgICB0
ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCwgVHJhbnNsYXRlWFkpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworICAgIHRlc3QudHJhbnNs
YXRlKDAuMCwgMC4wKTsKKworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOwor
CisgICAgdGVzdC50cmFuc2xhdGUoNS4wLCAwLjApOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSg2
LjAsIHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDUuMCwgdGVzdC5iKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgz
LjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMyLjAsIHRlc3QuZSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDI2LjAsIHRlc3QuZigpKTsKKworICAgIHRlc3QudHJhbnNsYXRl
KDAuMCwgLTEuMik7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSg0
LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgdGVzdC5kKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMjcuMiwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEo
MjIuNCwgdGVzdC5mKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBGbGlwWCkK
K3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7
CisKKyAgICB0ZXN0LmZsaXBYKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC02LjAsIHRlc3Qu
YSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuYigpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDQuMCwgdGVzdC5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCB0ZXN0
LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5mbGlwWCgpOworCisgICAgdGVz
dEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0ZXN0MjsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0Mik7CisKKyAgICBBU1NF
UlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFgoKTsKKworICAgIEVYUEVD
VF9ET1VCTEVfRVEoLTEuMCwgdGVzdDIuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
dGVzdDIuYigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuYygpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdDIuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAu
MCwgdGVzdDIuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZigpKTsKKwor
ICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0
ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisK
KyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9UUlVFKHRl
c3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworfQorCitURVNUKFRyYW5zZm9ybWF0aW9u
TWF0cml4LCBGbGlwWSkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25z
dHJ1Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxF
X0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCB0ZXN0LmIoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0LmMoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIHRlc3QuZSgp
KTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkpOworCisgICAgdGVzdC5mbGlw
WSgpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24odGVzdCk7CisKKyAgICBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MjsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0
Mik7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9U
UlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFko
KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0Mi5hKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoMC4wLCB0ZXN0Mi5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCB0ZXN0
Mi5jKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTEuMCwgdGVzdDIuZCgpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDAuMCwgdGVzdDIuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwg
dGVzdDIuZigpKTsKKworICAgIEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRl
c3QyLmZsaXBZKCk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAg
IEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworfQorCitURVNU
KFRyYW5zZm9ybWF0aW9uTWF0cml4LCBGbGlwWGFuZEZsaXBZKQoreworICAgIFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisK
KyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0ZXN0KTsKKworICAgIHRlc3QuZmxpcFgo
KTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoLTYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9E
T1VCTEVfRVEoLTUuMCwgdGVzdC5iKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCB0ZXN0
LmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0
LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBZKCk7CisKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC02LjAs
IHRlc3QuYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC01LjAsIHRlc3QuYigpKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKC00LjAsIHRlc3QuYygpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC0z
LjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYoKSk7CisKKyAgICB0ZXN0LmZsaXBYKCk7CisK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtNC4wLCB0ZXN0LmMoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtMy4wLCB0ZXN0LmQoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgyLjAsIHRlc3QuZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgdGVzdC5mKCkp
OworCisgICAgdGVzdC5mbGlwWSgpOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24o
dGVzdCk7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0MjsKKworICAg
IEFTU0VSVF9UUlVFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdDIu
aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWCgpOworCisgICAg
QVNTRVJUX0ZBTFNFKHRlc3QyLmlzSWRlbnRpdHkoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3Qy
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOworCisgICAgdGVzdDIuZmxpcFkoKTsKKworICAg
IEFTU0VSVF9GQUxTRSh0ZXN0Mi5pc0lkZW50aXR5KCkpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0
Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKKworICAgIHRlc3QyLmZsaXBYKCk7CisKKyAg
ICBBU1NFUlRfRkFMU0UodGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfRkFMU0UodGVz
dDIuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSk7CisKKyAgICB0ZXN0Mi5mbGlwWSgpOworCisg
ICAgQVNTRVJUX1RSVUUodGVzdDIuaXNJZGVudGl0eSgpKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0
Mi5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKTsKK30KKworVEVTVChUcmFuc2Zvcm1hdGlvbk1h
dHJpeCwgU2tldykKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0ZXN0KDYu
MCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOworCisgICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1
Y3Rpb24odGVzdCk7CisKKyAgICB0ZXN0LnNrZXcoMzYwLjAsIDM2MC4wKTsKKworICAgIHRlc3RB
ZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3KDAuMCwgMC4wKTsK
KworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOworCisgICAgdGVzdC5za2V3
KDE4MC4wLCAxODAuMCk7CisKKyAgICBzdGF0aWMgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisK
KyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYuMCwgdGVzdC5hKCkpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoNS4wLCB0ZXN0LmIoKSk7CisgICAgRVhQRUNUX05FQVIoNC4wLCB0ZXN0LmMoKSwgZXBzaWxv
bik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIHRlc3QuZCgpKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDIuMCwgdGVzdC5lKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCB0ZXN0LmYo
KSk7CisKKyAgICB0ZXN0LnNrZXcoLTE4MC4wLCAtMTgwLjApOworCisgICAgdGVzdEFmZmluZUxp
a2VDb25zdHJ1Y3Rpb24odGVzdCk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIElu
dmVyc2UpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDsKKworICAg
IGF1dG8gaW52ZXJzZSA9IHRlc3QuaW52ZXJzZSgpOworCisgICAgQVNTRVJUKGludmVyc2UpOwor
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIGludmVyc2UtPmEoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIGludmVyc2UtPmIoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGlu
dmVyc2UtPmMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIGludmVyc2UtPmQoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIGludmVyc2UtPmUoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgwLjAsIGludmVyc2UtPmYoKSk7CisKKyAgICBhdXRvIHRlc3QyID0gdGVzdCAqIGludmVy
c2UudmFsdWUoKTsKKworICAgIHRlc3RJZGVudGl0eSh0ZXN0Mik7Cit9CisKK1RFU1QoVHJhbnNm
b3JtYXRpb25NYXRyaXgsIE5vbkludmVydGFibGVCbGVuZCkKK3sKKyAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBmcm9tOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRvKDIuNzEzMzU5MDkzOCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAyLjQ2NDUxMzc3NjEsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wMCwgMC4wMSwgMC4wMiwgMC4wMywgMC4wNCwgMC4wNSk7CisgICAg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0OworICAgIAogICAgIHJlc3VsdCA9
IHRvOwogICAgIHJlc3VsdC5ibGVuZChmcm9tLCAwLjI1KTsKICAgICBFWFBFQ1RfVFJVRShyZXN1
bHQgPT0gZnJvbSk7Ci0KKyAgICAKICAgICByZXN1bHQgPSB0bzsKICAgICByZXN1bHQuYmxlbmQo
ZnJvbSwgMC43NSk7CiAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IHRvKTsKIH0KIAorVEVTVChU
cmFuc2Zvcm1hdGlvbk1hdHJpeCwgQmxlbmQpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOworCisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
c2NhbGVkOworICAgIHNjYWxlZC5zY2FsZSgyLjApOworCisgICAgdHJhbnNmb3JtLmJsZW5kKHNj
YWxlZCwgNTApOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOwor
ICAgIEVYUEVDVF9ORUFSKC00OC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOworICAgIEVY
UEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVB
UigwLjAsIHRyYW5zZm9ybS5tMTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0
cmFuc2Zvcm0ubTE0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3Jt
Lm0yMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtNDguMCwgdHJhbnNmb3JtLm0yMigp
LCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwgZXBzaWxv
bik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1Rf
TkVBUigwLjAsIHRyYW5zZm9ybS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMS4w
LCB0cmFuc2Zvcm0ubTMzKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNm
b3JtLm0zNCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tNDEo
KSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCksIGVwc2ls
b24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9uKTsKKyAg
ICBFWFBFQ1RfTkVBUigxLjAsIHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisKK1RFU1Qo
VHJhbnNmb3JtYXRpb25NYXRyaXgsIEJsZW5kMikKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm07CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY2FsZWQ7CisgICAgc2NhbGVkLnNjYWxlKDIuMCk7CisKKyAgICB0cmFuc2Zvcm0uYmxlbmQy
KHNjYWxlZCwgMjApOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4wMDAx
OworICAgIEVYUEVDVF9ORUFSKC0xOC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOworICAg
IEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1Rf
TkVBUigwLjAsIHRyYW5zZm9ybS5tMTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4w
LCB0cmFuc2Zvcm0ubTE0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNm
b3JtLm0yMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtMTguMCwgdHJhbnNmb3JtLm0y
MigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwgZXBz
aWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24pOwor
ICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBF
Q1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIo
MS4wLCB0cmFuc2Zvcm0ubTMzKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJh
bnNmb3JtLm0zNCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5t
NDEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCksIGVw
c2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9uKTsK
KyAgICBFWFBFQ1RfTkVBUigxLjAsIHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisKK1RF
U1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEJsZW5kNCkKK3sKKyAgICBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzY2FsZWQ7CisgICAgc2NhbGVkLnNjYWxlKDIuMCk7CisKKyAgICB0cmFuc2Zvcm0uYmxl
bmQ0KHNjYWxlZCwgMzApOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMC4w
MDAxOworICAgIEVYUEVDVF9ORUFSKC0yOC4wLCB0cmFuc2Zvcm0ubTExKCksIGVwc2lsb24pOwor
ICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0xMigpLCBlcHNpbG9uKTsKKyAgICBFWFBF
Q1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMTMoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIo
MC4wLCB0cmFuc2Zvcm0ubTE0KCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJh
bnNmb3JtLm0yMSgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigtMjguMCwgdHJhbnNmb3Jt
Lm0yMigpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMjMoKSwg
ZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTI0KCksIGVwc2lsb24p
OworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm0zMSgpLCBlcHNpbG9uKTsKKyAgICBF
WFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9ybS5tMzIoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05F
QVIoMS4wLCB0cmFuc2Zvcm0ubTMzKCksIGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwg
dHJhbnNmb3JtLm0zNCgpLCBlcHNpbG9uKTsKKyAgICBFWFBFQ1RfTkVBUigwLjAsIHRyYW5zZm9y
bS5tNDEoKSwgZXBzaWxvbik7CisgICAgRVhQRUNUX05FQVIoMC4wLCB0cmFuc2Zvcm0ubTQyKCks
IGVwc2lsb24pOworICAgIEVYUEVDVF9ORUFSKDAuMCwgdHJhbnNmb3JtLm00MygpLCBlcHNpbG9u
KTsKKyAgICBFWFBFQ1RfTkVBUigxLjAsIHRyYW5zZm9ybS5tNDQoKSwgZXBzaWxvbik7Cit9CisK
K1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEVxdWFsaXR5KQoreworICAgIFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7Cisg
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDI7CisKKyAgICBBU1NFUlRfRkFM
U0UodGVzdCA9PSB0ZXN0Mik7CisgICAgQVNTRVJUX1RSVUUodGVzdCAhPSB0ZXN0Mik7CisKKyAg
ICB0ZXN0Lm1ha2VJZGVudGl0eSgpOworCisgICAgQVNTRVJUX1RSVUUodGVzdCA9PSB0ZXN0Mik7
CisgICAgQVNTRVJUX0ZBTFNFKHRlc3QgIT0gdGVzdDIpOworCisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdGVzdDMoMTYuMCwgMTUuMCwgMTQuMCwgMTMuMCwgMTIuMCwgMTEuMCwg
MTAuMCwKKyAgICAgICAgOS4wLCA4LjAsIDcuMCwgNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEu
MCk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdDQodGVzdDMpOworCisg
ICAgQVNTRVJUX1RSVUUodGVzdDMgPT0gdGVzdDQpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0MyAh
PSB0ZXN0NCk7CisKKyAgICB0ZXN0NC5zZXRNNDMoMTAwMi4yMik7CisKKyAgICBBU1NFUlRfRkFM
U0UodGVzdDMgPT0gdGVzdDQpOworICAgIEFTU0VSVF9UUlVFKHRlc3QzICE9IHRlc3Q0KTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFRyYW5zbGF0aW9uTWF0cml4KGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1h
dHJpeC5tMTEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMTIoKSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMTMoKSk7CisgICAgRVhQRUNUX0RPVUJM
RV9FUSgwLjAsIG1hdHJpeC5tMTQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJp
eC5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tMjIoKSk7CisgICAg
RVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMjMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgwLjAsIG1hdHJpeC5tMjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5t
MzEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hdHJpeC5tMzIoKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgxLjAsIG1hdHJpeC5tMzMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgw
LjAsIG1hdHJpeC5tMzQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCBtYXRyaXgubTQx
KCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUuMCwgbWF0cml4Lm00MigpKTsKKyAgICBFWFBF
Q1RfRE9VQkxFX0VRKDMwLjAsIG1hdHJpeC5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgx
LjAsIG1hdHJpeC5tNDQoKSk7Cit9CisKK1RFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENhc3Rp
bmcpCit7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdGVzdCgxNi4wLCAxNS4w
LCAxNC4wLCAxMy4wLCAxMi4wLCAxMS4wLCAxMC4wLAorICAgICAgICA5LjAsIDguMCwgNy4wLCA2
LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKKworI2lmIFVTRShDQSkKKyAgICBDQVRyYW5z
Zm9ybTNEIGNhVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbigxMC4wZiwg
MTUuMGYsIDMwLjBmKTsKKworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21D
QVRyYW5zZm9ybShjYVRyYW5zZm9ybSk7CisKKyAgICB0ZXN0VHJhbnNsYXRpb25NYXRyaXgoZnJv
bUNBVHJhbnNmb3JtKTsKKworICAgIENBVHJhbnNmb3JtM0QgY2FGcm9tV0sgPSB0ZXN0OworCisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgxNi4wLCBjYUZyb21XSy5tMTEpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoMTUuMCwgY2FGcm9tV0subTEyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE0LjAsIGNh
RnJvbVdLLm0xMyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMy4wLCBjYUZyb21XSy5tMTQpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgY2FGcm9tV0subTIxKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDExLjAsIGNhRnJvbVdLLm0yMik7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMC4wLCBj
YUZyb21XSy5tMjMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoOS4wLCBjYUZyb21XSy5tMjQpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoOC4wLCBjYUZyb21XSy5tMzEpOworICAgIEVYUEVDVF9ET1VC
TEVfRVEoNy4wLCBjYUZyb21XSy5tMzIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNi4wLCBjYUZy
b21XSy5tMzMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoNS4wLCBjYUZyb21XSy5tMzQpOworICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC4wLCBjYUZyb21XSy5tNDEpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMy4wLCBjYUZyb21XSy5tNDIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCBjYUZyb21X
Sy5tNDMpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMS4wLCBjYUZyb21XSy5tNDQpOworI2VuZGlm
CisKKyNpZiBVU0UoQ0cpCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY2dUcmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2UoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbUNHVHJhbnNmb3JtKGNnVHJhbnNmb3JtKTsK
KworICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKGZyb21DR1RyYW5zZm9ybSk7CisKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSBjZ0Zyb21XSyA9IHRlc3Q7CisgICAgRVhQRUNUX0RPVUJMRV9F
USgxNi4wLCBjZ0Zyb21XSy5hKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGNnRnJvbVdL
LmIpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgY2dGcm9tV0suYyk7CisgICAgRVhQRUNU
X0RPVUJMRV9FUSgxMS4wLCBjZ0Zyb21XSy5kKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwg
Y2dGcm9tV0sudHgpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCBjZ0Zyb21XSy50eSk7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKEdUSykgJiYgT1MoV0lORE9X
UykpCisgICAgWEZPUk0gZ2RpRnJvbVdLID0gdGVzdDsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2
LjAsIGdkaUZyb21XSy5lTTExKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGdkaUZyb21X
Sy5lTTEyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEyLjAsIGdkaUZyb21XSy5lTTIxKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDExLjAsIGdkaUZyb21XSy5lTTIyKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKDQuMCwgZ2RpRnJvbVdLLmVEeCk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGdk
aUZyb21XSy5lRHkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgRDJEMV9NQVRS
SVhfM1gyX0YgZDJkVHJhbnNmb3JtID0gRDJEMTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAz
LjAsIDIuMCwgMS4wKTsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tRDJE
VHJhbnNmb3JtKGQyZFRyYW5zZm9ybSk7CisKKyAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlv
bihmcm9tRDJEVHJhbnNmb3JtKTsKKworICAgIEQyRDFfTUFUUklYXzNYMl9GIGQyZEZyb21XSyA9
IHRlc3Q7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxNi4wLCBkMmRGcm9tV0suXzExKTsKKyAgICBF
WFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGQyZEZyb21XSy5fMTIpOworICAgIEVYUEVDVF9ET1VCTEVf
RVEoMTIuMCwgZDJkRnJvbVdLLl8yMSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxMS4wLCBkMmRG
cm9tV0suXzIyKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgZDJkRnJvbVdLLl8zMSk7Cisg
ICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGQyZEZyb21XSy5fMzIpOworI2VuZGlmCit9CisKK1RF
U1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1ha2VNYXBCZXR3ZWVuUmVjdHMpCit7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworCisgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IGZyb21SZWN0KDEwLjBmLCAxMC4wZiwgMTAwLjBmLCAxMDAuMGYpOworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCB0b1JlY3QoNzAuMGYsIDcwLjBmLCAyMDAuMGYsIDUwLjBmKTsKKworICAg
IGF1dG8gbWFwQmV0d2VlbiA9IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9S
ZWN0KGZyb21SZWN0LCB0b1JlY3QpOworCisgICAgRVhQRUNUX0RPVUJMRV9FUSgyLjAsIG1hcEJl
dHdlZW4uYSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5iKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLmMoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjUsIG1hcEJldHdlZW4uZCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYwLjAs
IG1hcEJldHdlZW4uZSgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDYwLjAsIG1hcEJldHdlZW4u
ZigpKTsKKworICAgIEVYUEVDVF9ET1VCTEVfRVEoMi4wLCBtYXBCZXR3ZWVuLm0xMSgpKTsKKyAg
ICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5tMTIoKSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUSgwLjAsIG1hcEJldHdlZW4ubTEzKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4w
LCBtYXBCZXR3ZWVuLm0xNCgpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vl
bi5tMjEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjUsIG1hcEJldHdlZW4ubTIyKCkpOwor
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3ZWVuLm0yMygpKTsKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKDAuMCwgbWFwQmV0d2Vlbi5tMjQoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgw
LjAsIG1hcEJldHdlZW4ubTMxKCkpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wLCBtYXBCZXR3
ZWVuLm0zMigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDEuMCwgbWFwQmV0d2Vlbi5tMzMoKSk7
CisgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjAsIG1hcEJldHdlZW4ubTM0KCkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoNjAuMCwgbWFwQmV0d2Vlbi5tNDEoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9F
USg2MC4wLCBtYXBCZXR3ZWVuLm00MigpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuMCwgbWFw
QmV0d2Vlbi5tNDMoKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgxLjAsIG1hcEJldHdlZW4ubTQ0
KCkpOworfQorCiB9Cg==
</data>
<flag name="review"
          id="312001"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>