<?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>87510</bug_id>
          
          <creation_ts>2012-05-25 10:17:50 -0700</creation_ts>
          <short_desc>[chromium] create WebTransformOperation interface for chromium platform</short_desc>
          <delta_ts>2012-05-31 10:38:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87686</blocked>
    
    <blocked>87788</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634024</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-05-25 10:17:50 -0700</bug_when>
    <thetext>Continue the work done in https://bugs.webkit.org/show_bug.cgi?id=86049 for transform operations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634046</commentid>
    <comment_count>1</comment_count>
      <attachid>144098</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-25 10:34:33 -0700</bug_when>
    <thetext>Created attachment 144098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634177</commentid>
    <comment_count>2</comment_count>
      <attachid>144123</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-25 12:29:31 -0700</bug_when>
    <thetext>Created attachment 144123
Patch

Got rid of the type hierarchy. There is now only a WebTransformOperations object
that maintains a collection of WebTransformOperation structs (which are just a
matrix and a type).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634179</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-25 12:31:29 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634181</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-25 12:31:47 -0700</bug_when>
    <thetext>Attachment 144123 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634239</commentid>
    <comment_count>5</comment_count>
      <attachid>144123</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-25 13:20:16 -0700</bug_when>
    <thetext>Comment on attachment 144123
Patch

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

Needs a touch more indirection but the API looks quite nice.

&gt; Source/Platform/chromium/public/WebTransformOperations.h:30
&gt; +#include &lt;wtf/Vector.h&gt;

this has to be hidden - users in the chromium repo don&apos;t have WTF/ on their include path so this won&apos;t work.

One option is to have a WebTransformOperationsPrivate that is forward declared here and held via a WebPrivateOwnPtr and have that class&apos; impl hold a WTF::Vector

&gt; Source/Platform/chromium/public/WebTransformOperations.h:51
&gt; +    WebTransformationMatrix apply() const;

please add WEBKIT_EXPORT for functions declared here but defined in the .cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635200</commentid>
    <comment_count>6</comment_count>
      <attachid>144355</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-28 07:19:01 -0700</bug_when>
    <thetext>Created attachment 144355
Patch

(In reply to comment #5)
&gt; (From update of attachment 144123 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144123&amp;action=review
&gt;
&gt; Needs a touch more indirection but the API looks quite nice.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:30
&gt; &gt; +#include &lt;wtf/Vector.h&gt;
&gt;
&gt; this has to be hidden - users in the chromium repo don&apos;t have WTF/ on their include path so this won&apos;t work.
Done.
&gt;
&gt; One option is to have a WebTransformOperationsPrivate that is forward declared here and held via a WebPrivateOwnPtr and have that class&apos; impl hold a WTF::Vector
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:51
&gt; &gt; +    WebTransformationMatrix apply() const;
&gt;
&gt; please add WEBKIT_EXPORT for functions declared here but defined in the .cpp
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635203</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 07:21:55 -0700</bug_when>
    <thetext>Attachment 144355 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636639</commentid>
    <comment_count>8</comment_count>
      <attachid>144355</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-29 17:45:57 -0700</bug_when>
    <thetext>Comment on attachment 144355
Patch

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

&gt; Source/Platform/chromium/public/WebTransformOperations.h:43
&gt; +    WEBKIT_EXPORT WebTransformOperations();

it&apos;s a bit atypical to have exported c&apos;tors / d&apos;tors in the WebKit API - see &quot;Methods&quot; in http://trac.webkit.org/wiki/ChromiumWebKitAPI.  It&apos;s more typical to have inline c&apos;tors that call exported functions if necessary

&gt; Source/Platform/chromium/public/WebTransformOperations.h:46
&gt; +    // Not virtual. Should not be subclassed.

This comment isn&apos;t really necessary, IMO

&gt; Source/Platform/chromium/public/WebTransformOperations.h:75
&gt; +    enum Type {

See &quot;Enums&quot; in http://trac.webkit.org/wiki/ChromiumWebKitAPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637342</commentid>
    <comment_count>9</comment_count>
      <attachid>144848</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-30 10:02:22 -0700</bug_when>
    <thetext>Created attachment 144848
Patch

(In reply to comment #8)
&gt; (From update of attachment 144355 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144355&amp;action=review
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:43
&gt; &gt; +    WEBKIT_EXPORT WebTransformOperations();
&gt;
&gt; it&apos;s a bit atypical to have exported c&apos;tors / d&apos;tors in the WebKit API - see &quot;Methods&quot; in http://trac.webkit.org/wiki/ChromiumWebKitAPI.  It&apos;s more typical to have inline c&apos;tors that call exported functions if necessary
Done.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:46
&gt; &gt; +    // Not virtual. Should not be subclassed.
&gt;
&gt; This comment isn&apos;t really necessary, IMO
Removed.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:75
&gt; &gt; +    enum Type {
&gt;
&gt; See &quot;Enums&quot; in http://trac.webkit.org/wiki/ChromiumWebKitAPI
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637355</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 10:08:12 -0700</bug_when>
    <thetext>Attachment 144848 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>637927</commentid>
    <comment_count>11</comment_count>
      <attachid>144848</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 19:03:47 -0700</bug_when>
    <thetext>Comment on attachment 144848
Patch

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

Looks really good, just enough nits to need one more round but it&apos;s really close.

&gt; Source/Platform/chromium/public/WebTransformOperations.h:28
&gt; +#include &lt;public/WebTransformationMatrix.h&gt;

I think you just need a forward declaration of WebTransformationMatrix - no?

&gt; Source/Platform/chromium/public/WebTransformOperations.h:54
&gt; +    WEBKIT_EXPORT void reset();
&gt; +    WEBKIT_EXPORT void initialize(const WebTransformOperations* prototype);

why does this take a const pointer instead of a const reference?

can reset()/initialize() be private? who needs to call them?

&gt; Source/Platform/chromium/public/WebTransformOperations.h:80
&gt; +    struct WebTransformOperationsPrivate;

We would typically forward declare this outside the class so you don&apos;t have to end up writing WebKit::WebTransformOperations::WebTransformOperationsPrivate

it&apos;s also more typical for opaque forward-declared things to be class instead of struct

&gt; Source/Platform/chromium/public/WebTransformOperations.h:85
&gt; +

nit: extra newline here

&gt; Source/WebCore/WebCore.gypi:6642
&gt; +            &apos;inspector/front-end/Images/searchPrev.png&apos;,

you probably want to teach your editor to not edit unrelated lines like this (or just suppress OCD urges to kill trailing whitespace), changes like this cause unnecessary churn and risk of merge conflicts

&gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:1
&gt; +/*

Why is this implemented in WebCore/platform/.... ? we only do that when the implementation depends on some WebCore/platform concepts, but it looks like this doesn&apos;t and the .cpp should go in Platform/chromium/src

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

I&apos;ll fix this style check someday....

&gt; Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:31
&gt; +#include &quot;CCLayerTreeTestCommon.h&quot;

This is an odd dependency - what comes out of this header? the transform_matrix macro?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637950</commentid>
    <comment_count>12</comment_count>
      <attachid>144975</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-30 19:57:56 -0700</bug_when>
    <thetext>Created attachment 144975
Patch

(In reply to comment #11)
&gt; (From update of attachment 144848 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144848&amp;action=review
&gt;
&gt; Looks really good, just enough nits to need one more round but it&apos;s really close.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:28
&gt; &gt; +#include &lt;public/WebTransformationMatrix.h&gt;
&gt;
&gt; I think you just need a forward declaration of WebTransformationMatrix - no?
I think I need to include the header since I&apos;m returning WebTransformationMatrix by value.

&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:54
&gt; &gt; +    WEBKIT_EXPORT void reset();
&gt; &gt; +    WEBKIT_EXPORT void initialize(const WebTransformOperations* prototype);
&gt;
&gt; why does this take a const pointer instead of a const reference?
It was so that I could pass NULL from the default constructor. I&apos;ve created a second initialize function for that case, and changed this one to accept a reference.
&gt;
&gt; can reset()/initialize() be private? who needs to call them?
Fixed. The reason I&apos;d done this was that the spec mentioned that the helper functions called by the inline ctor/dtor should be decorated with WEBKIT_EXPORT and this felt strange for private methods.
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:80
&gt; &gt; +    struct WebTransformOperationsPrivate;
&gt;
&gt; We would typically forward declare this outside the class so you don&apos;t have to end up writing WebKit::WebTransformOperations::WebTransformOperationsPrivate
Done.
&gt;
&gt; it&apos;s also more typical for opaque forward-declared things to be class instead of struct
Done.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTransformOperations.h:85
&gt; &gt; +
&gt;
&gt; nit: extra newline here
Removed.
&gt;
&gt; &gt; Source/WebCore/WebCore.gypi:6642
&gt; &gt; +            &apos;inspector/front-end/Images/searchPrev.png&apos;,
&gt;
&gt; you probably want to teach your editor to not edit unrelated lines like this (or just suppress OCD urges to kill trailing whitespace), changes like this cause unnecessary churn and risk of merge conflicts
Hehe, it&apos;s my editor. I&apos;ve gotten rid of this noise.
&gt;
&gt; &gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:1
&gt; &gt; +/*
&gt;
&gt; Why is this implemented in WebCore/platform/.... ? we only do that when the implementation depends on some WebCore/platform concepts, but it looks like this doesn&apos;t and the .cpp should go in Platform/chromium/src
It used to be in Platform/src and it was working nicely, but it stopped compiling after I pulled/rebased. The problem is that WebTransformOperations.cpp file includes WebTransformationMatrix.h which includes TransformationMatrix.h, and I can&apos;t seem to access that header from Platform/src, so I moved the .cpp into support with WebTransformationMatrix.cpp.
&gt;
&gt; &gt;&gt; Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:30
&gt; &gt;&gt; +
&gt; &gt;
&gt; &gt; Alphabetical sorting problem.  [build/include_order] [4]
&gt;
&gt; I&apos;ll fix this style check someday....
&gt;
&gt; &gt; Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:31
&gt; &gt; +#include &quot;CCLayerTreeTestCommon.h&quot;
&gt;
&gt; This is an odd dependency - what comes out of this header? the transform_matrix macro?
Yes, exactly. I&apos;m getting the macro from there. Should I move the macro to a more common header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637952</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 20:03:11 -0700</bug_when>
    <thetext>Attachment 144975 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>638523</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-31 10:13:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; Source/WebKit/chromium/tests/WebTransformOperationsTest.cpp:31
&gt; &gt; &gt; +#include &quot;CCLayerTreeTestCommon.h&quot;
&gt; &gt;
&gt; &gt; This is an odd dependency - what comes out of this header? the transform_matrix macro?
&gt; Yes, exactly. I&apos;m getting the macro from there. Should I move the macro to a more common header?


Just a side comment, as far as I know that _is_ the common header, but maybe we just should change the name at some point?   Maybe something like CCTestCommon.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638527</commentid>
    <comment_count>15</comment_count>
      <attachid>144975</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-31 10:16:10 -0700</bug_when>
    <thetext>Comment on attachment 144975
Patch

Both the name and the grab-bag nature are confusing to me.

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638554</commentid>
    <comment_count>16</comment_count>
      <attachid>144975</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 10:38:24 -0700</bug_when>
    <thetext>Comment on attachment 144975
Patch

Clearing flags on attachment: 144975

Committed r119121: &lt;http://trac.webkit.org/changeset/119121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638555</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 10:38:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144098</attachid>
            <date>2012-05-25 10:34:33 -0700</date>
            <delta_ts>2012-05-25 12:29:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87510-20120525133432.patch</filename>
            <type>text/plain</type>
            <size>67737</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1MmJhNjQ2ZmQwNTM3
OWE4MDE4NmM3MmFhZjMwNTQ4MGI4ZWMxNmZiLi40YTRhMzQwMzdiMDNjZDVhNzFmOGYxNzU3M2Zl
NGY2ZmUwNTdkZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMi0wNS0yNSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzOgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNmb3JtVHlw
ZXNBcmVVbmlxdWUKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1hdGNoZXNU
eXBlc1dpdGhOdWxsCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5tYXRjaGVz
VHlwZXNTYW1lTGVuZ3RoCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5tYXRj
aGVzVHlwZXNEaWZmZXJlbnRMZW5ndGgKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25U
ZXN0LmFwcGx5VHJhbnNsYXRlCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5h
cHBseVJvdGF0ZQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYXBwbHlTY2Fs
ZQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYXBwbHlTa2V3CisgICAgICAg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5hcHBseVBlcnNwZWN0aXZlCisgICAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5hcHBseU1hdHJpeAorICAgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvblRlc3QuYXBwbHlPcmRlcgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvblRlc3QuYmxlbmRPcmRlcgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qu
YmxlbmRQcm9ncmVzcworCisgICAgICAgICogUGxhdGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJv
bWl1bS9wdWJsaWMvV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAg
ICAgICogY2hyb21pdW0vcHVibGljL1dlYlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJs
aWMvV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKiBjaHJvbWl1
bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24pOgorCiAy
MDEyLTA1LTIzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTE4MjE4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMw
MjgzNTY0YWYyZDMwYTdmMWE5ZWE0NjMwY2Y3N2I5MGM1MjU2M2EuLmQ5ZTE1MmVmZTQyNGZlMTIy
ZTc5NWExYWY0MjVlOGEyOTliNWI4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MCBAQAorMjAx
Mi0wNS0yNSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJv
bWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODc1MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVbml0IHRlc3RzOgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJh
bnNmb3JtVHlwZXNBcmVVbmlxdWUKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
Lm1hdGNoZXNUeXBlc1dpdGhOdWxsCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVz
dC5tYXRjaGVzVHlwZXNTYW1lTGVuZ3RoCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5tYXRjaGVzVHlwZXNEaWZmZXJlbnRMZW5ndGgKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LmFwcGx5VHJhbnNsYXRlCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5hcHBseVJvdGF0ZQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qu
YXBwbHlTY2FsZQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYXBwbHlTa2V3
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5hcHBseVBlcnNwZWN0aXZlCisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5hcHBseU1hdHJpeAorICAgICAgICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYXBwbHlPcmRlcgorICAgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvblRlc3QuYmxlbmRPcmRlcgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvblRlc3QuYmxlbmRQcm9ncmVzcworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246OldlYk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6fldlYk1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbjo6ZG9BcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbjo6ZG9CbGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbjo6ZG9DbG9uZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246Oldl
YlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246On5XZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
Ojpkb0FwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVy
YXRpb246OmRvQmxlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6ZG9DbG9uZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjp+V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpkb0FwcGx5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpkb0JsZW5kKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpkb0Nsb25lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6V2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6fldlYlNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmRvQXBw
bHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9CbGVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpkb0Nsb25l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OldlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjp+V2ViU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNrZXdUcmFuc2Zvcm1PcGVyYXRp
b246OmRvQXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
Ojpkb0JsZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6
ZG9DbG9uZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uOjp+V2ViVHJhbnNmb3JtT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uOjphcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb246OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uOjptYXRjaGVzVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb246OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmRBcHBsaWVkTWF0cmljZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kRG91Ymxlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjp+V2ViVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpkb0JsZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpkb0Nsb25lKToKKwogMjAxMi0wNS0yNCAgTmlrb2xhcyBaaW1tZXJtYW5u
ICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBTVkdab29tQW5kUGFuIGNvbnN0YW50
cyBhcmUgbWlzc2luZyBmcm9tIHdpbmRvdyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggNzBhMmMxZTBhZTY2NjZjZTllMWY2OThmZDI3ODllMTg2Yjk4NDgwNC4uMGZlZWE4NTJl
ZmQwNDg2Yzk2MGVlNzFmMmMwZDIyMjBmYTE5YWJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNS0yNSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1MTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3
SW1wbCk6CisgICAgICAgICogdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChjaGVja1Byb2dyZXNzKToKKwogMjAxMi0w
NS0yNCAgSGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFi
bGUgZ3JhbW1hciBjaGVja2luZyBvbiBDaHJvbWl1bSB3aGVuIHdlIHBhc3RlIHRleHQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaSBiL1NvdXJjZS9QbGF0Zm9ybS9Q
bGF0Zm9ybS5neXBpCmluZGV4IGI3YjJkMjkxODYzZjM2ZWYyNWUyZTUzN2U5MGZjNTBkNTVkMzFj
ZGEuLjgxMjNlZjQ4OGVkYzM0ZWJmNDg2YWNlNTM1NGRmZjljMmM0OTFhMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0
Zm9ybS5neXBpCkBAIC02OCw2ICs2OCw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGlj
L1dlYkxheWVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVW
aWV3LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xp
ZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYk1lZGlhSGludHMu
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ2VudGVyLmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVu
dC5oJywKQEAgLTg4LDggKzg5LDExIEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlByaXZhdGVQdHIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlJlY3QuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlJlZmVycmVyUG9saWN5LmgnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCcs
CisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTZXNzaW9uRGVzY3JpcHRpb25E
ZXNjcmlwdG9yLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTaXplLmgnLAor
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTb2NrZXRTdHJlYW1FcnJvci5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU29ja2V0U3RyZWFtSGFuZGxlLmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQu
aCcsCkBAIC05OCw2ICsxMDIsOSBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJU
aHJlYWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZFNhZmVEYXRh
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQ
cmVyZW5kZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTC5oJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVVJMRXJyb3IuaCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2ZiY2QyOTRhZjVlNmYzZjdiZDdmMzNlZGI4ZmM2MDc5
Njk2OTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAorI2RlZmluZSBXZWJNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb25faAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJs
aWMgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBXZWJNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFs
IH5XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvQXBwbHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvQmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiog
ZG9DbG9uZSgpIGNvbnN0OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9tYXRyaXg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYk1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xMmI4MjQwNGQ1NjljYjg0NDc3MTc3Y2FlYzRjZTE3ZGMxZDgxZGIxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uX2gKKyNkZWZpbmUgV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb25faAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiA6
IHB1YmxpYyBXZWJUcmFuc2Zvcm1PcGVyYXRpb24geworcHVibGljOgorICAgIFdlYlBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBkZXB0aCk7CisgICAgdmlydHVhbCB+V2ViUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvQXBwbHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGRvQmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZG9D
bG9uZSgpIGNvbnN0OworCisgICAgZG91YmxlIG1fZGVwdGg7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uX2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRkODhhMjUyMTYwOTJkMjY0
MmMxZDc4NTBiOTZhZDNiYzJhODliYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKKyNkZWZpbmUgV2Vi
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKKworI2luY2x1ZGUgIldlYlRyYW5zZm9ybU9wZXJh
dGlvbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uIDogcHVibGljIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAg
V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHos
IGRvdWJsZSBkZWdyZWVzKTsKKyAgICB2aXJ0dWFsIH5XZWJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRv
QXBwbHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvQmxl
bmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZG9DbG9uZSgpIGNvbnN0OworCisgICAgZG91
YmxlIG1feDsKKyAgICBkb3VibGUgbV95OworICAgIGRvdWJsZSBtX3o7CisgICAgZG91YmxlIG1f
ZGVncmVlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhiNmZlMGIyNmRjNTEwM2QwOGQyMjcwMDc3ZTY3MDgzOTI0NzY5NGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb25faAorI2RlZmluZSBXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCisKKyNpbmNsdWRl
ICJXZWJUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFdlYlRyYW5zZm9ybU9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgV2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIHN4LCBk
b3VibGUgc3ksIGRvdWJsZSBzeik7CisgICAgdmlydHVhbCB+V2ViU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGRvQXBwbHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRv
QmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZG9DbG9uZSgpIGNvbnN0OworCisgICAg
ZG91YmxlIG1fc3g7CisgICAgZG91YmxlIG1fc3k7CisgICAgZG91YmxlIG1fc3o7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGRiNjdiYmRmOTUzMzNj
NTdiNjFmNjVhNjllOGU3ZGRjZjg2ZjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFdlYlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uIDogcHVibGljIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgV2ViU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgeCwgZG91YmxlIHkpOworICAgIHZpcnR1YWwgfldl
YlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGRvQXBwbHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGRvQmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZG9DbG9u
ZSgpIGNvbnN0OworCisgICAgZG91YmxlIG1feDsKKyAgICBkb3VibGUgbV95OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U4Nzc0NGZjNzRlNDIyMzk5NDRiODYzN2Nj
ZWZkOWY5NmE5M2JhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybU9wZXJhdGlvbl9o
CisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgi
CisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKK2NsYXNzIFdlYlJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKK2NsYXNzIFdlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OworY2xhc3MgV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbjsKK2NsYXNzIFdlYlBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uOworY2xhc3MgV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOwor
CisvLyBBIHRyYW5zZm9ybSBvcGVyYXRpb24gaXMgYSBkZWNvbXBvc2VkIHRyYW5zZm9ybWF0aW9u
IG1hdHJpeC4gSXQgY2FuIGJlCisvLyBhcHBsaWVkIHRvIG9idGFpbiBhIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGF0IGFueSB0aW1lLCBhbmQgY2FuIGJlIGJsZW5kZWQKKy8vIGludGVsbGlnZW50
bHkgd2l0aCBvdGhlciB0cmFuc2Zvcm0gb3BlcmF0aW9ucywgc28gbG9uZyBhcyB0aGV5IHJlcHJl
c2VudCB0aGUKKy8vIHNhbWUgZGVjb21wb3NpdGlvbi4gRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUg
YSB0cmFuc2Zvcm0gdGhhdCBpcyBtYWRlIHVwIG9mCisvLyBhIHJvdGF0aW9uIGZvbGxvd2VkIGJ5
IHNrZXcsIGl0IGNhbiBiZSBibGVuZGVkIGludGVsbGlnZW50bHkgd2l0aCBhbm90aGVyCisvLyB0
cmFuc2Zvcm0gbWFkZSB1cCBvZiBhIHJvdGF0aW9uIGZvbGxvd2VkIGJ5IGEgc2tldy4gQmxlbmRp
bmcgaXMgcG9zc2libGUgaWYKKy8vIHdlIGhhdmUgdHdvIGRpc3NpbWlsYXIgc2V0cyBvZiB0cmFu
c2Zvcm0gb3BlcmF0aW9ucywgYnV0IHRoZSBlZmZlY3QgbWF5IG5vdAorLy8gYmUgd2hhdCB3YXMg
aW50ZW5kZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGNvbW1lbnRzIGZvciB0aGUg
YmxlbmQKKy8vIGZ1bmN0aW9uIGJlbG93LgorY2xhc3MgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBUUkFOU0xBVEUsCisgICAgICAgIFJP
VEFURSwKKyAgICAgICAgU0NBTEUsCisgICAgICAgIFNLRVcsCisgICAgICAgIFBFUlNQRUNUSVZF
LAorICAgICAgICBNQVRSSVgKKyAgICB9OworCisgICAgdmlydHVhbCB+V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uKCk7CisKKyAgICAvLyBSZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJl
c2VudGluZyB0aGlzIHRyYW5zZm9ybSBvcGVyYXRpb24uCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggYXBwbHkoKSBjb25zdDsKKworICAgIC8vIEdpdmVuIGFub3RoZXIgc2V0IG9mIHRyYW5z
Zm9ybSBvcGVyYXRpb25zIGFuZCBhIHByb2dyZXNzIGluIHRoZSByYW5nZQorICAgIC8vIFswLCAx
XSwgcmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGludGVy
bWVkaWF0ZQorICAgIC8vIHZhbHVlLiBJZiB0aGlzLT5tYXRjaGVzVHlwZXMoZnJvbSksIHRoZW4g
ZWFjaCBvZiB0aGUgb3BlcmF0aW9ucyBhcmUKKyAgICAvLyBibGVuZGVkIHNlcGFyYXRlbHkgYW5k
IHRoZW4gY29tYmluZWQuIE90aGVyd2lzZSwgdGhlIHR3byBzZXRzIG9mCisgICAgLy8gdHJhbnNm
b3JtcyBhcmUgYmFrZWQgdG8gbWF0cmljZXMgKHVzaW5nIGFwcGx5KSwgYW5kIHRoZSBtYXRyaWNl
cyBhcmUKKyAgICAvLyB0aGVuIGRlY29tcG9zZWQgYW5kIGludGVycG9sYXRlZC4gRm9yIG1vcmUg
aW5mb3JtYXRpb24sIHNlZQorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3Nz
My0yZC10cmFuc2Zvcm1zLTIwMTExMjE1LyNtYXRyaXgtZGVjb21wb3NpdGlvbi4KKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRl
ZXAgY29weSBvZiB8dGhpc3wuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgICAgLy8g
ZGlzcG9zaW5nIG9mIHRoZSBjbG9uZS4KKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIGNsb25l
KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBvcGVyYXRpb24gYW5kIGl0
cyBkZXNjZW5kYW50cyBoYXZlIHRoZSBzYW1lIHR5cGVzCisgICAgLy8gYXMgb3RoZXIgYW5kIGl0
cyBkZXNjZW5kYW50cy4KKyAgICBib29sIG1hdGNoZXNUeXBlcyhXZWJUcmFuc2Zvcm1PcGVyYXRp
b24qIG90aGVyKSBjb25zdDsKKworICAgIC8vIFRyYW5zZm9ybWF0aW9uIG9wZXJhdGlvbnMgbWF5
IGJlIGNvbXBvc2VkLiBUaGlzIHNldHMgdGhlIG5leHQgb3BlcmF0aW9uCisgICAgLy8gaW4gdGhl
IGxpc3QuIFRoaXMgb2JqZWN0IGFzc3VtZXMgb3duZXJzaGlwIG9mIHRoZSBuZXh0IG9wZXJhdGlv
bi4KKyAgICB2b2lkIGFwcGVuZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24qKTsKKworcHJvdGVjdGVk
OgorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbihUeXBlKTsKKworICAgIGRvdWJsZSBibGVuZERv
dWJsZXMoZG91YmxlIHRvLCBkb3VibGUgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKKwor
ICAgIC8vIFNpbXBseSBhcHBsaWVzIHRoaXMgdHJhbnNmb3JtIGFuZCB0aGUgb3RoZXIgdHJhbnNm
b3JtIHRvIG1hdHJpY2VzIGFuZCBibGVuZHMKKyAgICAvLyB0aGVtIGRpcmVjdGx5LgorICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kQXBwbGllZE1hdHJpY2VzKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKKworICAgIHZpcnR1YWwgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZG9BcHBseSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGRvQmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b24qIGRvQ2xvbmUoKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZU93blB0
cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb24+IG1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb247CisgICAg
VHlwZSBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mOThhMWM2MDk4NmQxZDMwZDllYTJkOTRlNWFhMmMzNDgzYTE3MmQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb25faAorI2RlZmluZSBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b25faAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBXZWJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24oZG91YmxlIGR4LCBkb3VibGUgZHksIGRvdWJsZSBkeik7CisgICAgdmlydHVh
bCB+V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkb0FwcGx5KCkgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkb0JsZW5kKFdlYlRyYW5zZm9ybU9wZXJhdGlvbios
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7CisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b24qIGRvQ2xvbmUoKSBjb25zdDsKKworICAgIGRvdWJsZSBtX2R4OworICAgIGRvdWJsZSBtX2R5
OworICAgIGRvdWJsZSBtX2R6OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25faAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggZmMyMjcwZmM1ZjAyY2FjYzRlNGI4NzA4ZjJhYzgxMWM5MzQ3ZmNkOS4uZmY4ZDU5ZWI4Mzg2
NjFlZjMxMDBjMmNhYmNkM2E3MTRkN2Q5ZDVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjYzMyw3
ICs2NjMzLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFy
Y2hTbWFsbEdyYXkucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9zZWFyY2hTbWFsbFdoaXRlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvc2VhcmNoTmV4dC5wbmcnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nJywgICAgICAgICAgICAKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZycsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRFbmQucG5nJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92ZXIucG5nJywKQEAgLTgzMDYsMTUgKzgz
MDYsMjIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBM
b2FkSW5mby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
SUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViSUNFT3B0aW9ucy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbUNvbXBv
bmVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlByZXJlbmRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVGhy
ZWFkU2FmZURhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb24uY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxFcnJvci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg2ZDE0NmE1YjQ1MjkwZjgzMmU5Yjc3Y2I3MDY4MDkwNDk5YWI3MGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OldlYk1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4KQorICAgIDogV2ViVHJhbnNmb3JtT3BlcmF0aW9uKFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYKQorICAgICwgbV9tYXRyaXgobWF0cml4KQoreworfQorCitXZWJNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb246On5XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oKQoreworfQorCitXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmRvQXBwbHko
KSBjb25zdAoreworICAgIHJldHVybiBtX21hdHJpeDsKK30KKworV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggV2ViTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpkb0JsZW5kKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbiogb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBXZWJNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24qIG90aGVyTWF0cml4ID0gc3RhdGljX2Nhc3Q8V2ViTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uKj4ob3RoZXIpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
UmV0dXJuID0gb3RoZXJNYXRyaXgtPm1fbWF0cml4OworICAgIHRvUmV0dXJuLmJsZW5kKG1fbWF0
cml4LCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFuc2Zvcm1P
cGVyYXRpb24qIFdlYk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9DbG9uZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG5ldyBXZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24obV9tYXRyaXgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDAyOTE0OWIxYWI4N2MzNTU0
MGYyZWU5ZjI0YjU3OTY1NDA4MjEzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVi
bGljL1dlYlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIGRlcHRoKQorICAgIDogV2ViVHJhbnNmb3JtT3BlcmF0
aW9uKFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkUpCisgICAgLCBtX2RlcHRoKGRl
cHRoKQoreworfQorCitXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6fldlYlBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKCkKK3sKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmRvQXBwbHkoKSBjb25zdAorewor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOworICAgIHRvUmV0dXJuLmFwcGx5
UGVyc3BlY3RpdmUobV9kZXB0aCk7CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9CbGVu
ZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIG90aGVyLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7
CisgICAgV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qIG90aGVyUGVyc3BlY3RpdmUg
PSBzdGF0aWNfY2FzdDxXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG90aGVyKTsK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKKyAgICB0b1JldHVybi5hcHBs
eVBlcnNwZWN0aXZlKGJsZW5kRG91YmxlcyhtX2RlcHRoLCBvdGhlclBlcnNwZWN0aXZlLT5tX2Rl
cHRoLCBwcm9ncmVzcykpOworICAgIHJldHVybiB0b1JldHVybjsKK30KKworV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uKiBXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9DbG9uZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG5ldyBXZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiht
X2RlcHRoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiNjg4MmJiMWYzMWQwOThh
ZWUxZmUyZTU5NTU1MDQzNjI0ZjRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBkZWdyZWVzKQorICAgIDogV2ViVHJh
bnNmb3JtT3BlcmF0aW9uKFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKQorICAgICwgbV94
KHgpCisgICAgLCBtX3koeSkKKyAgICAsIG1feih6KQorICAgICwgbV9kZWdyZWVzKGRlZ3JlZXMp
Cit7Cit9CisKK1dlYlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6fldlYlJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbigpCit7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6ZG9BcHBseSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggdG9SZXR1cm47CisgICAgdG9SZXR1cm4ucm90YXRlM2QobV94LCBtX3ksIG1feiwg
bV9kZWdyZWVzKTsKKyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IFdlYlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9CbGVuZChXZWJUcmFuc2Zvcm1P
cGVyYXRpb24qIG90aGVyLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJs
ZW5kQXBwbGllZE1hdHJpY2VzKG90aGVyLCBwcm9ncmVzcyk7Cit9CisKK1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbiogV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpkb0Nsb25lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbmV3IFdlYlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihtX3gsIG1feSwgbV96
LCBtX2RlZ3JlZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE0MDFkOTA4NTBlOTg0
ZmEyNDExOWIxYTg1NTBhNDcyMTJmZDA5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGlj
L1dlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oZG91
YmxlIHN4LCBkb3VibGUgc3ksIGRvdWJsZSBzeikKKyAgICA6IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bihXZWJUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFKQorICAgICwgbV9zeChzeCkKKyAgICAsIG1f
c3koc3kpCisgICAgLCBtX3N6KHN6KQoreworfQorCitXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bjo6fldlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKCkKK3sKK30KKworV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggV2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmRvQXBwbHkoKSBjb25zdAorewor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOworICAgIHRvUmV0dXJuLnNjYWxl
M2QobV9zeCwgbV9zeSwgbV9zeik7CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZG9CbGVuZChXZWJU
cmFuc2Zvcm1PcGVyYXRpb24qIG90aGVyLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAg
V2ViU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIG90aGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxXZWJT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG90aGVyKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b1JldHVybjsKKyAgICB0b1JldHVybi5zY2FsZTNkKGJsZW5kRG91YmxlcyhtX3N4LCBv
dGhlclNjYWxlLT5tX3N4LCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICBibGVuZERv
dWJsZXMobV9zeSwgb3RoZXJTY2FsZS0+bV9zeSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgYmxlbmREb3VibGVzKG1fc3osIG90aGVyU2NhbGUtPm1fc3osIHByb2dyZXNzKSk7Cisg
ICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIFdlYlNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpkb0Nsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFdl
YlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKG1fc3gsIG1fc3ksIG1fc3opOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRiZWIwY2YwNzQ1MGMzNzAwZGVhMjg0ODUzZDYwZTBlMjI5NjUzYzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OldlYlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIHgsIGRvdWJsZSB5KQorICAgIDogV2ViVHJhbnNm
b3JtT3BlcmF0aW9uKFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVykKKyAgICAsIG1feCh4KQor
ICAgICwgbV95KHkpCit7Cit9CisKK1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246On5XZWJTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uKCkKK3sKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2Vi
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6ZG9BcHBseSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggdG9SZXR1cm47CisgICAgdG9SZXR1cm4uc2tld1gobV94KTsKKyAgICB0
b1JldHVybi5za2V3WShtX3kpOworICAgIHJldHVybiB0b1JldHVybjsKK30KKworV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6ZG9CbGVuZChXZWJUcmFu
c2Zvcm1PcGVyYXRpb24qIG90aGVyLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgV2Vi
U2tld1RyYW5zZm9ybU9wZXJhdGlvbiogb3RoZXJTa2V3ID0gc3RhdGljX2Nhc3Q8V2ViU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbio+KG90aGVyKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
b1JldHVybjsKKyAgICB0b1JldHVybi5za2V3WChibGVuZERvdWJsZXMobV94LCBvdGhlclNrZXct
Pm1feCwgcHJvZ3Jlc3MpKTsKKyAgICB0b1JldHVybi5za2V3WShibGVuZERvdWJsZXMobV95LCBv
dGhlclNrZXctPm1feSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisKK1dl
YlRyYW5zZm9ybU9wZXJhdGlvbiogV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6ZG9DbG9uZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKG1feCwg
bV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMxZTQ0Y2ZmMGUyMzAzNDVlZTcyYTM0MmU1ZGVmZDM2
NDM5MTc0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMCwwICsxLDEwOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRy
YW5zZm9ybU9wZXJhdGlvbihXZWJUcmFuc2Zvcm1PcGVyYXRpb246OlR5cGUgdHlwZSkKKyAgICA6
IG1fdHlwZSh0eXBlKQoreworfQorCitXZWJUcmFuc2Zvcm1PcGVyYXRpb246On5XZWJUcmFuc2Zv
cm1PcGVyYXRpb24oKQoreworICAgIG1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24ucmVzZXQoMCk7
Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6YXBw
bHkoKSBjb25zdAoreworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuID0gZG9B
cHBseSgpOworICAgIGlmIChtX2NoaWxkVHJhbnNmb3JtT3BlcmF0aW9uLmdldCgpKQorICAgICAg
ICB0b1JldHVybi5tdWx0aXBseShtX2NoaWxkVHJhbnNmb3JtT3BlcmF0aW9uLT5hcHBseSgpKTsK
KyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tKSkgeworICAg
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybiA9IGRvQmxlbmQoZnJvbSwgcHJv
Z3Jlc3MpOworICAgICAgICBpZiAobV9jaGlsZFRyYW5zZm9ybU9wZXJhdGlvbi5nZXQoKSkKKyAg
ICAgICAgICAgIHRvUmV0dXJuLm11bHRpcGx5KG1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24tPmJs
ZW5kKGZyb20tPm1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24uZ2V0KCksIHByb2dyZXNzKSk7Cisg
ICAgICAgIHJldHVybiB0b1JldHVybjsKKyAgICB9CisgICAgcmV0dXJuIGJsZW5kQXBwbGllZE1h
dHJpY2VzKGZyb20sIHByb2dyZXNzKTsKK30KKworV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBXZWJU
cmFuc2Zvcm1PcGVyYXRpb246OmNsb25lKCkgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24qIHRvUmV0dXJuID0gZG9DbG9uZSgpOworICAgIGlmIChtX2NoaWxkVHJhbnNmb3JtT3Bl
cmF0aW9uLmdldCgpKQorICAgICAgICB0b1JldHVybi0+bV9jaGlsZFRyYW5zZm9ybU9wZXJhdGlv
bi5yZXNldChtX2NoaWxkVHJhbnNmb3JtT3BlcmF0aW9uLT5jbG9uZSgpKTsKKyAgICByZXR1cm4g
dG9SZXR1cm47Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjptYXRjaGVzVHlwZXMo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV90eXBlICE9IG90aGVyLT5tX3R5cGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoaWxkVHJhbnNmb3JtT3BlcmF0
aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gbV9jaGlsZFRyYW5zZm9ybU9wZXJhdGlvbi0+bWF0
Y2hlc1R5cGVzKG90aGVyLT5tX2NoaWxkVHJhbnNmb3JtT3BlcmF0aW9uLmdldCgpKTsKKworICAg
IHJldHVybiAhb3RoZXItPm1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24uZ2V0KCk7Cit9CisKK3Zv
aWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjphcHBlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBv
cGVyYXRpb24pCit7CisgICAgaWYgKG1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24uZ2V0KCkpCisg
ICAgICAgIG1fY2hpbGRUcmFuc2Zvcm1PcGVyYXRpb24tPmFwcGVuZChvcGVyYXRpb24pOworICAg
IGVsc2UKKyAgICAgICAgbV9jaGlsZFRyYW5zZm9ybU9wZXJhdGlvbi5yZXNldChvcGVyYXRpb24p
OworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OmJs
ZW5kQXBwbGllZE1hdHJpY2VzKFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdAoreworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvVHJhbnNmb3Jt
ID0gYXBwbHkoKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tVHJhbnNmb3JtID0g
ZnJvbS0+YXBwbHkoKTsKKyAgICB0b1RyYW5zZm9ybS5ibGVuZChmcm9tVHJhbnNmb3JtLCBwcm9n
cmVzcyk7CisgICAgcmV0dXJuIHRvVHJhbnNmb3JtOworfQorCitkb3VibGUgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZERvdWJsZXMoZG91YmxlIHRvLCBkb3VibGUgZnJvbSwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdAoreworICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVz
czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThlMWFkNjE2NDdkNzhhOTUy
NmUyYjNjMDgxMGQxZGZmOTU2N2UwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKGRvdWJsZSBkeCwgZG91YmxlIGR5LCBkb3VibGUgZHopCisgICAgOiBXZWJUcmFu
c2Zvcm1PcGVyYXRpb24oV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUpCisgICAgLCBt
X2R4KGR4KQorICAgICwgbV9keShkeSkKKyAgICAsIG1fZHooZHopCit7Cit9CisKK1dlYlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6fldlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbigp
Cit7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6ZG9BcHBseSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
dG9SZXR1cm47CisgICAgdG9SZXR1cm4udHJhbnNsYXRlM2QobV9keCwgbV9keSwgbV9keik7Cisg
ICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmRvQmxlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBv
dGhlciwgZG91YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIFdlYlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbiogb3RoZXJUcmFuc2xhdGUgPSBzdGF0aWNfY2FzdDxXZWJUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qPihvdGhlcik7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG9S
ZXR1cm47CisgICAgdG9SZXR1cm4udHJhbnNsYXRlM2QoYmxlbmREb3VibGVzKG1fZHgsIG90aGVy
VHJhbnNsYXRlLT5tX2R4LCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYmxl
bmREb3VibGVzKG1fZHksIG90aGVyVHJhbnNsYXRlLT5tX2R5LCBwcm9ncmVzcyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKG1fZHosIG90aGVyVHJhbnNsYXRlLT5tX2R6
LCBwcm9ncmVzcykpOworICAgIHJldHVybiB0b1JldHVybjsKK30KKworV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uKiBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmRvQ2xvbmUoKSBjb25zdAor
eworICAgIHJldHVybiBuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKG1fZHgsIG1f
ZHksIG1fZHopOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCmluZGV4IDc4NTRlZGYwYTk5ZDZjYmQ4MjE1NzRjZTZmNDE1NGJjMTEwYjAzODQu
LjFjNDg5YjAyYTQxODRhNzBhOTliYjEzYmNjNjMyZThlMGYzZDExNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTUxLDYgKzE1MSw3IEBACiAgICAgICAgICAgICAndGVzdHMv
V2ViU29ja2V0RGVmbGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViU29ja2V0
RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zv
cm1PcGVyYXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVVJMUmVxdWVzdFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXNwb25zZVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9XZWJWaWV3VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODI5MDBhMTMwNGYyZTRkNWIxZDQwNDI0OTFjM2IxMDVkOGU2MWMxMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24u
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8cHVibGljL1dlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJh
bnNmb3JtT3BlcmF0aW9uLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
PgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisKKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCB0cmFuc2Zvcm1UeXBlc0FyZVVu
aXF1ZSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gPiB0cmFu
c2Zvcm1zOworICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBXZWJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24oMCwgMCwgMCkpKTsKKyAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9w
dFB0cihuZXcgV2ViUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKDAsIDAsIDEsIDApKSk7CisgICAg
dHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIobmV3IFdlYlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
KDEsIDEsIDEpKSk7CisgICAgdHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIobmV3IFdlYlNrZXdU
cmFuc2Zvcm1PcGVyYXRpb24oMCwgMCkpKTsKKyAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0
cihuZXcgV2ViUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24oODAwKSkpOworICAgIHRyYW5z
Zm9ybXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBXZWJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dHJhbnNmb3Jtcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IHRyYW5zZm9ybXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGJvb2wgbWF0Y2hlc1R5cGUg
PSB0cmFuc2Zvcm1zW2ldLT5tYXRjaGVzVHlwZXModHJhbnNmb3Jtc1tqXS5nZXQoKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRSgoaSA9PSBqICYmIG1hdGNoZXNUeXBlKSB8fCAhbWF0Y2hlc1R5
cGUpOworICAgICAgICB9CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRl
c3QsIG1hdGNoZXNUeXBlc1dpdGhOdWxsKQoreworICAgIEVYUEVDVF9GQUxTRShXZWJUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24oMCwgMCwgMCkubWF0Y2hlc1R5cGVzKDApKTsKK30KKworVEVT
VChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkKK3sKKyAg
ICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uPiB0cmFuc2xhdGVzKGFkb3B0UHRyKG5ldyBX
ZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24oMCwgMCwgMCkpKTsKKyAgICB0cmFuc2xhdGVz
LT5hcHBlbmQobmV3IFdlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbigwLCAwLCAwKSk7Cisg
ICAgdHJhbnNsYXRlcy0+YXBwZW5kKG5ldyBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
MCwgMCwgMCkpOworICAgIHRyYW5zbGF0ZXMtPmFwcGVuZChuZXcgV2ViVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uKDAsIDAsIDApKTsKKworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRp
b24+IHNrZXdzKGFkb3B0UHRyKG5ldyBXZWJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKDAsIDApKSk7
CisgICAgc2tld3MtPmFwcGVuZChuZXcgV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbigwLCAwKSk7
CisgICAgc2tld3MtPmFwcGVuZChuZXcgV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbigwLCAwKSk7
CisgICAgc2tld3MtPmFwcGVuZChuZXcgV2ViU2tld1RyYW5zZm9ybU9wZXJhdGlvbigwLCAwKSk7
CisKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uPiB0cmFuc2xhdGVzMihhZG9wdFB0
cihuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKDAsIDAsIDApKSk7CisgICAgdHJh
bnNsYXRlczItPmFwcGVuZChuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKDAsIDAs
IDApKTsKKyAgICB0cmFuc2xhdGVzMi0+YXBwZW5kKG5ldyBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24oMCwgMCwgMCkpOworICAgIHRyYW5zbGF0ZXMyLT5hcHBlbmQobmV3IFdlYlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbigwLCAwLCAwKSk7CisKKyAgICBPd25QdHI8V2ViVHJhbnNm
b3JtT3BlcmF0aW9uPiB0cmFuc2xhdGVzMyhhZG9wdFB0cih0cmFuc2xhdGVzMi0+Y2xvbmUoKSkp
OworCisgICAgRVhQRUNUX0ZBTFNFKHRyYW5zbGF0ZXMtPm1hdGNoZXNUeXBlcyhza2V3cy5nZXQo
KSkpOworICAgIEVYUEVDVF9UUlVFKHRyYW5zbGF0ZXMtPm1hdGNoZXNUeXBlcyh0cmFuc2xhdGVz
Mi5nZXQoKSkpOworICAgIEVYUEVDVF9UUlVFKHRyYW5zbGF0ZXMtPm1hdGNoZXNUeXBlcyh0cmFu
c2xhdGVzMy5nZXQoKSkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIG1h
dGNoVHlwZXNEaWZmZXJlbnRMZW5ndGgpCit7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJh
dGlvbj4gdHJhbnNsYXRlcyhhZG9wdFB0cihuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uKDAsIDAsIDApKSk7CisgICAgdHJhbnNsYXRlcy0+YXBwZW5kKG5ldyBXZWJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24oMCwgMCwgMCkpOworICAgIHRyYW5zbGF0ZXMtPmFwcGVuZChuZXcg
V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKDAsIDAsIDApKTsKKyAgICB0cmFuc2xhdGVz
LT5hcHBlbmQobmV3IFdlYlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbigwLCAwLCAwKSk7CisK
KyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uPiBza2V3cyhhZG9wdFB0cihuZXcgV2Vi
U2tld1RyYW5zZm9ybU9wZXJhdGlvbigwLCAwKSkpOworICAgIHNrZXdzLT5hcHBlbmQobmV3IFdl
YlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oMCwgMCkpOworICAgIHNrZXdzLT5hcHBlbmQobmV3IFdl
YlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oMCwgMCkpOworCisgICAgT3duUHRyPFdlYlRyYW5zZm9y
bU9wZXJhdGlvbj4gdHJhbnNsYXRlczIoYWRvcHRQdHIobmV3IFdlYlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbigwLCAwLCAwKSkpOworICAgIHRyYW5zbGF0ZXMyLT5hcHBlbmQobmV3IFdlYlRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbigwLCAwLCAwKSk7CisgICAgdHJhbnNsYXRlczItPmFw
cGVuZChuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKDAsIDAsIDApKTsKKworICAg
IEVYUEVDVF9GQUxTRSh0cmFuc2xhdGVzLT5tYXRjaGVzVHlwZXMoc2tld3MuZ2V0KCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UodHJhbnNsYXRlcy0+bWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMyLmdldCgp
KSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlUcmFuc2xhdGUp
Cit7CisgICAgZG91YmxlIGR4ID0gMTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBk
eiA9IDM7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gdHJhbnNsYXRlKGFkb3B0
UHRyKG5ldyBXZWJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24oZHgsIGR5LCBkeikpKTsKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFRyYW5zbGF0ZU1hdHJpeDsKKyAgICBl
eHBlY3RlZFRyYW5zbGF0ZU1hdHJpeC50cmFuc2xhdGUzZChkeCwgZHksIGR6KTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkVHJhbnNsYXRlTWF0cml4LCB0cmFu
c2xhdGUtPmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGFw
cGx5Um90YXRlKQoreworICAgIGRvdWJsZSBheCA9IDA7CisgICAgZG91YmxlIGF5ID0gMDsKKyAg
ICBkb3VibGUgYXogPSAxOworICAgIGRvdWJsZSBkZWdyZWVzID0gOTA7CisgICAgT3duUHRyPFdl
YlRyYW5zZm9ybU9wZXJhdGlvbj4gcm90YXRlKGFkb3B0UHRyKG5ldyBXZWJSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24oYXgsIGF5LCBheiwgZGVncmVlcykpKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBleHBlY3RlZFJvdGF0ZU1hdHJpeDsKKyAgICBleHBlY3RlZFJvdGF0ZU1hdHJpeC5y
b3RhdGUzZChheCwgYXksIGF6LCBkZWdyZWVzKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGV4cGVjdGVkUm90YXRlTWF0cml4LCByb3RhdGUtPmFwcGx5KCkpOworfQorCitU
RVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5U2NhbGUpCit7CisgICAgZG91Ymxl
IHN4ID0gMjsKKyAgICBkb3VibGUgc3kgPSA0OworICAgIGRvdWJsZSBzeiA9IDg7CisgICAgT3du
UHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gc2NhbGUoYWRvcHRQdHIobmV3IFdlYlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKHN4LCBzeSwgc3opKSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZXhwZWN0ZWRTY2FsZU1hdHJpeDsKKyAgICBleHBlY3RlZFNjYWxlTWF0cml4LnNjYWxlM2Qo
c3gsIHN5LCBzeik7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZFNjYWxlTWF0cml4LCBzY2FsZS0+YXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uVGVzdCwgYXBwbHlTa2V3KQoreworICAgIGRvdWJsZSBza2V3WCA9IDEwOworICAgIGRv
dWJsZSBza2V3WSA9IDIwOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb24+IHNrZXco
YWRvcHRQdHIobmV3IFdlYlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oc2tld1gsIHNrZXdZKSkpOwor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU2tld01hdHJpeDsKKyAgICBleHBl
Y3RlZFNrZXdNYXRyaXguc2tld1goc2tld1gpOworICAgIGV4cGVjdGVkU2tld01hdHJpeC5za2V3
WShza2V3WSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFNr
ZXdNYXRyaXgsIHNrZXctPmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlv
blRlc3QsIGFwcGx5UGVyc3BlY3RpdmUpCit7CisgICAgZG91YmxlIGRlcHRoID0gODAwOworICAg
IE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb24+IHBlcnNwZWN0aXZlKGFkb3B0UHRyKG5ldyBX
ZWJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbihkZXB0aCkpKTsKKyAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBleHBlY3RlZFBlcnNwZWN0aXZlTWF0cml4OworICAgIGV4cGVjdGVkUGVy
c3BlY3RpdmVNYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFBlcnNwZWN0aXZlTWF0cml4LCBwZXJzcGVjdGl2
ZS0+YXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlN
YXRyaXgpCit7CisgICAgZG91YmxlIGR4ID0gMTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRv
dWJsZSBkeiA9IDM7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRNYXRyaXg7
CisgICAgZXhwZWN0ZWRNYXRyaXgudHJhbnNsYXRlM2QoZHgsIGR5LCBkeik7CisgICAgT3duUHRy
PFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gbWF0cml4VHJhbnNmb3JtKGFkb3B0UHRyKG5ldyBXZWJN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oZXhwZWN0ZWRNYXRyaXgpKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZE1hdHJpeCwgbWF0cml4VHJhbnNmb3JtLT5h
cHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseU9yZGVy
KQoreworICAgIGRvdWJsZSBzeCA9IDI7CisgICAgZG91YmxlIHN5ID0gNDsKKyAgICBkb3VibGUg
c3ogPSA4OworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb24+IHNjYWxlKGFkb3B0UHRy
KG5ldyBXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ksIHN6KSkpOworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU2NhbGVNYXRyaXg7CisgICAgZXhwZWN0ZWRTY2Fs
ZU1hdHJpeC5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgZG91YmxlIGR4ID0gMTsKKyAgICBk
b3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBkeiA9IDM7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uKiB0cmFuc2xhdGUgPSBuZXcgV2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGR4LCBk
eSwgZHopOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkVHJhbnNsYXRlTWF0
cml4OworICAgIGV4cGVjdGVkVHJhbnNsYXRlTWF0cml4LnRyYW5zbGF0ZTNkKGR4LCBkeSwgZHop
OworCisgICAgc2NhbGUtPmFwcGVuZCh0cmFuc2xhdGUpOworCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWRDb21iaW5lZE1hdHJpeCA9IGV4cGVjdGVkU2NhbGVNYXRyaXg7Cisg
ICAgZXhwZWN0ZWRDb21iaW5lZE1hdHJpeC5tdWx0aXBseShleHBlY3RlZFRyYW5zbGF0ZU1hdHJp
eCk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ29tYmlu
ZWRNYXRyaXgsIHNjYWxlLT5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRp
b25UZXN0LCBibGVuZE9yZGVyKQoreworICAgIGRvdWJsZSBzeCA9IDI7CisgICAgZG91YmxlIHN5
ID0gNDsKKyAgICBkb3VibGUgc3ogPSA4OworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRp
b24+IHNjYWxlKGFkb3B0UHRyKG5ldyBXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ks
IHN6KSkpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU2NhbGVNYXRyaXg7
CisgICAgZXhwZWN0ZWRTY2FsZU1hdHJpeC5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgZG91
YmxlIGR4ID0gMTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBkeiA9IDM7CisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2xhdGUgPSBuZXcgV2ViVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uKGR4LCBkeSwgZHopOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkVHJhbnNsYXRlTWF0cml4OworICAgIGV4cGVjdGVkVHJhbnNsYXRlTWF0cml4LnRyYW5z
bGF0ZTNkKGR4LCBkeSwgZHopOworCisgICAgc2NhbGUtPmFwcGVuZCh0cmFuc2xhdGUpOworCisg
ICAgc3ggPSA0OworICAgIHN5ID0gODsKKyAgICBzeiA9IDE2OworICAgIE93blB0cjxXZWJUcmFu
c2Zvcm1PcGVyYXRpb24+IHRhcmdldFNjYWxlKGFkb3B0UHRyKG5ldyBXZWJTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbihzeCwgc3ksIHN6KSkpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkVGFyZ2V0U2NhbGVNYXRyaXg7CisgICAgZXhwZWN0ZWRUYXJnZXRTY2FsZU1hdHJpeC5z
Y2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgZHggPSAxMDsKKyAgICBkeSA9IDIwOworICAgIGR6
ID0gMzA7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0YXJnZXRUcmFuc2xhdGUgPSBuZXcg
V2ViVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGR4LCBkeSwgZHopOworICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkVGFyZ2V0VHJhbnNsYXRlTWF0cml4OworICAgIGV4cGVj
dGVkVGFyZ2V0VHJhbnNsYXRlTWF0cml4LnRyYW5zbGF0ZTNkKGR4LCBkeSwgZHopOworCisgICAg
dGFyZ2V0U2NhbGUtPmFwcGVuZCh0YXJnZXRUcmFuc2xhdGUpOworCisgICAgZG91YmxlIHByb2dy
ZXNzID0gMC4yNTsKKworICAgIGV4cGVjdGVkVGFyZ2V0U2NhbGVNYXRyaXguYmxlbmQoZXhwZWN0
ZWRTY2FsZU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgIGV4cGVjdGVkVGFyZ2V0VHJhbnNsYXRlTWF0
cml4LmJsZW5kKGV4cGVjdGVkVHJhbnNsYXRlTWF0cml4LCBwcm9ncmVzcyk7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDb21iaW5lZE1hdHJpeCA9IGV4cGVjdGVkVGFyZ2V0
U2NhbGVNYXRyaXg7CisgICAgZXhwZWN0ZWRDb21iaW5lZE1hdHJpeC5tdWx0aXBseShleHBlY3Rl
ZFRhcmdldFRyYW5zbGF0ZU1hdHJpeCk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkQ29tYmluZWRNYXRyaXgsIHRhcmdldFNjYWxlLT5ibGVuZChzY2FsZS5n
ZXQoKSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tQcm9ncmVzcyhkb3VibGUg
cHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBmcm9tTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG9NYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0b1RyYW5zZm9ybSkKK3sKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZE1hdHJpeCA9IHRvTWF0cml4OworICAgIGV4
cGVjdGVkTWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkTWF0cml4LCB0b1RyYW5zZm9ybS0+YmxlbmQo
ZnJvbVRyYW5zZm9ybSwgcHJvZ3Jlc3MpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRp
b25UZXN0LCBibGVuZFByb2dyZXNzKQoreworICAgIGRvdWJsZSBzeCA9IDI7CisgICAgZG91Ymxl
IHN5ID0gNDsKKyAgICBkb3VibGUgc3ogPSA4OworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVy
YXRpb24+IHNjYWxlKGFkb3B0UHRyKG5ldyBXZWJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwg
c3ksIHN6KSkpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU2NhbGVNYXRy
aXg7CisgICAgZXhwZWN0ZWRTY2FsZU1hdHJpeC5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAg
c3ggPSA0OworICAgIHN5ID0gODsKKyAgICBzeiA9IDE2OworICAgIE93blB0cjxXZWJUcmFuc2Zv
cm1PcGVyYXRpb24+IHRhcmdldFNjYWxlKGFkb3B0UHRyKG5ldyBXZWJTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbihzeCwgc3ksIHN6KSkpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkVGFyZ2V0U2NhbGVNYXRyaXg7CisgICAgZXhwZWN0ZWRUYXJnZXRTY2FsZU1hdHJpeC5zY2Fs
ZTNkKHN4LCBzeSwgc3opOworCisgICAgY2hlY2tQcm9ncmVzcygtMSwgZXhwZWN0ZWRTY2FsZU1h
dHJpeCwgZXhwZWN0ZWRUYXJnZXRTY2FsZU1hdHJpeCwgc2NhbGUuZ2V0KCksIHRhcmdldFNjYWxl
LmdldCgpKTsKKyAgICBjaGVja1Byb2dyZXNzKDAsIGV4cGVjdGVkU2NhbGVNYXRyaXgsIGV4cGVj
dGVkVGFyZ2V0U2NhbGVNYXRyaXgsIHNjYWxlLmdldCgpLCB0YXJnZXRTY2FsZS5nZXQoKSk7Cisg
ICAgY2hlY2tQcm9ncmVzcygwLjI1LCBleHBlY3RlZFNjYWxlTWF0cml4LCBleHBlY3RlZFRhcmdl
dFNjYWxlTWF0cml4LCBzY2FsZS5nZXQoKSwgdGFyZ2V0U2NhbGUuZ2V0KCkpOworICAgIGNoZWNr
UHJvZ3Jlc3MoMC41LCBleHBlY3RlZFNjYWxlTWF0cml4LCBleHBlY3RlZFRhcmdldFNjYWxlTWF0
cml4LCBzY2FsZS5nZXQoKSwgdGFyZ2V0U2NhbGUuZ2V0KCkpOworICAgIGNoZWNrUHJvZ3Jlc3Mo
MSwgZXhwZWN0ZWRTY2FsZU1hdHJpeCwgZXhwZWN0ZWRUYXJnZXRTY2FsZU1hdHJpeCwgc2NhbGUu
Z2V0KCksIHRhcmdldFNjYWxlLmdldCgpKTsKKyAgICBjaGVja1Byb2dyZXNzKDIsIGV4cGVjdGVk
U2NhbGVNYXRyaXgsIGV4cGVjdGVkVGFyZ2V0U2NhbGVNYXRyaXgsIHNjYWxlLmdldCgpLCB0YXJn
ZXRTY2FsZS5nZXQoKSk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144123</attachid>
            <date>2012-05-25 12:29:31 -0700</date>
            <delta_ts>2012-05-28 07:18:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87510-20120525152930.patch</filename>
            <type>text/plain</type>
            <size>22608</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1MmJhNjQ2ZmQwNTM3
OWE4MDE4NmM3MmFhZjMwNTQ4MGI4ZWMxNmZiLi44ZGQ4NTkxNjExNTAyOTU2ZDgyNmEzM2JhZmUw
OTdiNjY3YzZlZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0wNS0yNSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zOjp+V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1P
cGVyYXRpb24pOgorICAgICAgICAqIGNocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zOjphcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM6OmJsZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6bWF0Y2hlc1R5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6YXBwZW5kVHJhbnNsYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwZW5kUm90YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwZW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjphcHBlbmRTa2V3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6YXBwZW5kUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zOjphcHBlbmRNYXRyaXgpOgorCiAyMDEyLTA1LTIzICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTE4MjE4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3MGEyYzFlMGFlNjY2NmNl
OWUxZjY5OGZkMjc4OWUxODZiOTg0ODA0Li5hZDUyMjFjMjY4ZTcyYjhmNzViZGE3YTg4MjhiNWZh
NTg5MWZhZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEyLTA1LTI1ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gY3JlYXRlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiBpbnRlcmZhY2UgZm9yIGNo
cm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NzUxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0
aW9uc1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoY2hlY2tQcm9n
cmVzcyk6CisKIDIwMTItMDUtMjQgIEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgRW5hYmxlIGdyYW1tYXIgY2hlY2tpbmcgb24gQ2hyb21pdW0gd2hlbiB3ZSBw
YXN0ZSB0ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9T
b3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQppbmRleCBiN2IyZDI5MTg2M2YzNmVmMjVlMmU1
MzdlOTBmYzUwZDU1ZDMxY2RhLi5mN2E2YWY3Y2VjNWJmMGUwYzI5YTU0NmMxN2FiZWQ2NDZkMmFh
NTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtOTgsNiArOTgsNyBAQAogICAgICAgICAgICAg
J2Nocm9taXVtL3B1YmxpYy9XZWJUaHJlYWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVi
bGljL1dlYlRocmVhZFNhZmVEYXRhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMv
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMv
V2ViUHJlcmVuZGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLApAQCAtMTIwLDYg
KzEyMSw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYkZsb2F0UXVhZC5jcHAnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAgICAgJ2No
cm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vc3JjL1dlYlZpZGVvRnJhbWUuY3BwJywKICAgICAgICAgXQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cy5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNThlYmQ4ZjU2YWUwOTdmMzViNDE4YmRkYTEwMmVhOGYzOTU0OTFj
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc19oCisjZGVmaW5lIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnNfaAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRyYW5zZm9ybSBv
cGVyYXRpb25zIGFyZSBhIGRlY29tcG9zZWQgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJdCBjYW4g
YmUKKy8vIGFwcGxpZWQgdG8gb2J0YWluIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXQgYW55
IHRpbWUsIGFuZCBjYW4gYmUgYmxlbmRlZAorLy8gaW50ZWxsaWdlbnRseSB3aXRoIG90aGVyIHRy
YW5zZm9ybSBvcGVyYXRpb25zLCBzbyBsb25nIGFzIHRoZXkgcmVwcmVzZW50IHRoZQorLy8gc2Ft
ZSBkZWNvbXBvc2l0aW9uLiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSB0aGF0
IGlzIG1hZGUgdXAgb2YKKy8vIGEgcm90YXRpb24gZm9sbG93ZWQgYnkgc2tldywgaXQgY2FuIGJl
IGJsZW5kZWQgaW50ZWxsaWdlbnRseSB3aXRoIGFub3RoZXIKKy8vIHRyYW5zZm9ybSBtYWRlIHVw
IG9mIGEgcm90YXRpb24gZm9sbG93ZWQgYnkgYSBza2V3LiBCbGVuZGluZyBpcyBwb3NzaWJsZSBp
ZgorLy8gd2UgaGF2ZSB0d28gZGlzc2ltaWxhciBzZXRzIG9mIHRyYW5zZm9ybSBvcGVyYXRpb25z
LCBidXQgdGhlIGVmZmVjdCBtYXkgbm90CisvLyBiZSB3aGF0IHdhcyBpbnRlbmRlZC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgY29tbWVudHMgZm9yIHRoZSBibGVuZAorLy8gZnVuY3Rp
b24gYmVsb3cuCitjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHsKK3B1YmxpYzoKKyAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyB9CisKKyAgICAvLyBOb3QgdmlydHVhbC4gU2hvdWxk
IG5vdCBiZSBzdWJjbGFzc2VkLgorICAgIH5XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyB9CisK
KyAgICAvLyBSZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJlc2VudGluZyB0aGVz
ZSB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBs
eSgpIGNvbnN0OworCisgICAgLy8gR2l2ZW4gYW5vdGhlciBzZXQgb2YgdHJhbnNmb3JtIG9wZXJh
dGlvbnMgYW5kIGEgcHJvZ3Jlc3MgaW4gdGhlIHJhbmdlCisgICAgLy8gWzAsIDFdLCByZXR1cm5z
IGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJlc2VudGluZyB0aGUgaW50ZXJtZWRpYXRlCisg
ICAgLy8gdmFsdWUuIElmIHRoaXMtPm1hdGNoZXNUeXBlcyhmcm9tKSwgdGhlbiBlYWNoIG9mIHRo
ZSBvcGVyYXRpb25zIGFyZQorICAgIC8vIGJsZW5kZWQgc2VwYXJhdGVseSBhbmQgdGhlbiBjb21i
aW5lZC4gT3RoZXJ3aXNlLCB0aGUgdHdvIHNldHMgb2YKKyAgICAvLyB0cmFuc2Zvcm1zIGFyZSBi
YWtlZCB0byBtYXRyaWNlcyAodXNpbmcgYXBwbHkpLCBhbmQgdGhlIG1hdHJpY2VzIGFyZQorICAg
IC8vIHRoZW4gZGVjb21wb3NlZCBhbmQgaW50ZXJwb2xhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgc2VlCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLTJkLXRyYW5z
Zm9ybXMtMjAxMTEyMTUvI21hdHJpeC1kZWNvbXBvc2l0aW9uLgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBvcGVyYXRp
b24gYW5kIGl0cyBkZXNjZW5kYW50cyBoYXZlIHRoZSBzYW1lIHR5cGVzCisgICAgLy8gYXMgb3Ro
ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAgICBib29sIG1hdGNoZXNUeXBlcyhjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGVuZFRyYW5z
bGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKKyAgICB2b2lkIGFwcGVuZFJvdGF0
ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcyk7CisgICAgdm9p
ZCBhcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKKyAgICB2b2lkIGFw
cGVuZFNrZXcoZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICB2b2lkIGFwcGVuZFBlcnNwZWN0aXZl
KGRvdWJsZSBkZXB0aCk7CisgICAgdm9pZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBUUkFO
U0xBVEUsCisgICAgICAgIFJPVEFURSwKKyAgICAgICAgU0NBTEUsCisgICAgICAgIFNLRVcsCisg
ICAgICAgIFBFUlNQRUNUSVZFLAorICAgICAgICBNQVRSSVgKKyAgICB9OworCisgICAgc3RydWN0
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIH07CisKKyAgICBWZWN0b3I8V2ViVHJh
bnNmb3JtT3BlcmF0aW9uPiBtX3RyYW5zZm9ybU9wZXJhdGlvbnM7Cit9OworCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtT3BlcmF0aW9uc19oCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2NzE0NDgxYTUxNzgyZGFkMmMwZDdhNDUyNjQyNTRlYjA5
MzZiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwbHkoKSBjb25zdAoreworICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90
cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICB0b1JldHVybi5tdWx0aXBs
eShtX3RyYW5zZm9ybU9wZXJhdGlvbnNbaV0ubWF0cml4KTsKKyAgICByZXR1cm4gdG9SZXR1cm47
Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJs
ZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKKyAgICBpZiAo
bWF0Y2hlc1R5cGVzKGZyb20pKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90
cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBibGVuZGVkID0gbV90cmFuc2Zvcm1PcGVyYXRpb25zW2ldLm1hdHJpeDsK
KyAgICAgICAgICAgIGJsZW5kZWQuYmxlbmQoZnJvbS5tX3RyYW5zZm9ybU9wZXJhdGlvbnNbaV0u
bWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgICAgICB0b1JldHVybi5tdWx0aXBseShibGVuZGVk
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRvUmV0dXJuID0gYXBwbHkoKTsKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZnJvbVRyYW5zZm9ybSA9IGZyb20uYXBwbHkoKTsKKyAgICAgICAgdG9SZXR1cm4uYmxlbmQoZnJv
bVRyYW5zZm9ybSwgcHJvZ3Jlc3MpOworICAgIH0KKyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisK
K2Jvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3RyYW5zZm9ybU9wZXJh
dGlvbnMuc2l6ZSgpICE9IG90aGVyLm1fdHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90cmFuc2Zv
cm1PcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3RyYW5zZm9ybU9wZXJh
dGlvbnNbaV0udHlwZSAhPSBvdGhlci5tX3RyYW5zZm9ybU9wZXJhdGlvbnNbaV0udHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeikKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7Cisg
ICAgdG9BZGQubWF0cml4LnRyYW5zbGF0ZTNkKHgsIHksIHopOworICAgIHRvQWRkLnR5cGUgPSBU
UkFOU0xBVEU7CisgICAgbV90cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9CisK
K3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIHosIGRvdWJsZSBkZWdyZWVzKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbiB0b0FkZDsKKyAgICB0b0FkZC5tYXRyaXgucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7
CisgICAgdG9BZGQudHlwZSA9IFJPVEFURTsKKyAgICBtX3RyYW5zZm9ybU9wZXJhdGlvbnMuYXBw
ZW5kKHRvQWRkKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTY2Fs
ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbiB0b0FkZDsKKyAgICB0b0FkZC5tYXRyaXguc2NhbGUzZCh4LCB5LCB6KTsKKyAgICB0b0Fk
ZC50eXBlID0gU0NBTEU7CisgICAgbV90cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7
Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2tldyhkb3VibGUgeCwg
ZG91YmxlIHkpCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOworICAgIHRvQWRk
Lm1hdHJpeC5za2V3WCh4KTsKKyAgICB0b0FkZC5tYXRyaXguc2tld1koeSk7CisgICAgdG9BZGQu
dHlwZSA9IFNLRVc7CisgICAgbV90cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUoZG91Ymxl
IGRlcHRoKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKKyAgICB0b0FkZC5t
YXRyaXguYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7CisgICAgdG9BZGQudHlwZSA9IFBFUlNQRUNU
SVZFOworICAgIG1fdHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lk
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsK
KyAgICB0b0FkZC5tYXRyaXggPSBtYXRyaXg7CisgICAgdG9BZGQudHlwZSA9IE1BVFJJWDsKKyAg
ICBtX3RyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA3ODU0ZWRmMGE5OWQ2
Y2JkODIxNTc0Y2U2ZjQxNTRiYzExMGIwMzg0Li41MjlmNGI4YTkwMmU2YTc2MWNlMDg0YzFkOTlk
MmZkNDMxOTFlOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTE1MSw2ICsx
NTEsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldERlZmxhdGVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhUZXN0LmNwcCcsCisg
ICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9XZWJVUkxSZXF1ZXN0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L1dlYlVSTFJlc3BvbnNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlZpZXdUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnNUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwYmYzMjRlYjI2NTI3NDJm
ZWE1NmNiYWNlZmQ5OTE4NmU4MjI4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcApAQCAtMCwwICsx
LDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKworI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9u
LmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LCB0cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM+ID4gdHJhbnNmb3JtczsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMqIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBw
ZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRv
QWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAg
dG9BZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICB0cmFuc2Zvcm1zLmFwcGVuZChh
ZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cygpOworICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAgICB0cmFuc2Zvcm1zLmFw
cGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAgIHRyYW5zZm9ybXMu
YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFBlcnNwZWN0aXZlKDgwMCk7CisgICAgdHJh
bnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdHJhbnNmb3Jtcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IHRyYW5zZm9ybXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGJvb2wgbWF0Y2hl
c1R5cGUgPSB0cmFuc2Zvcm1zW2ldLT5tYXRjaGVzVHlwZXMoKnRyYW5zZm9ybXNbal0pOworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoKGkgPT0gaiAmJiBtYXRjaGVzVHlwZSkgfHwgIW1hdGNoZXNU
eXBlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25U
ZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IHRyYW5zbGF0ZXM7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Cisg
ICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5h
cHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHNr
ZXdzOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tld3MuYXBwZW5kU2tldygw
LCAwKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOworCisgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyB0cmFuc2xhdGVzMjsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRy
YW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgdHJhbnNsYXRlczMgPSB0cmFuc2xhdGVzMjsKKworICAgIEVYUEVDVF9GQUxTRSh0
cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyhza2V3cykpOworICAgIEVYUEVDVF9UUlVFKHRyYW5zbGF0
ZXMubWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMyKSk7CisgICAgRVhQRUNUX1RSVUUodHJhbnNsYXRl
cy5tYXRjaGVzVHlwZXModHJhbnNsYXRlczMpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LCBtYXRjaFR5cGVzRGlmZmVyZW50TGVuZ3RoKQoreworICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgdHJhbnNsYXRlczsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgw
LCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0
cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgc2tld3M7CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBza2V3cy5h
cHBlbmRTa2V3KDAsIDApOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVz
MjsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNs
YXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworCisgICAgRVhQRUNUX0ZBTFNFKHRyYW5z
bGF0ZXMubWF0Y2hlc1R5cGVzKHNrZXdzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyYW5zbGF0ZXMu
bWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMyKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdCwgYXBwbHlUcmFuc2xhdGUpCit7CisgICAgZG91YmxlIHggPSAxOworICAgIGRvdWJs
ZSB5ID0gMjsKKyAgICBkb3VibGUgeiA9IDM7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKHgsIHksIHopOworICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnRyYW5zbGF0
ZTNkKHgsIHksIHopOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWQsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdCwgYXBwbHlSb3RhdGUpCit7CisgICAgZG91YmxlIHggPSAxOworICAgIGRvdWJsZSB5ID0g
MjsKKyAgICBkb3VibGUgeiA9IDM7CisgICAgZG91YmxlIGRlZ3JlZXMgPSA4MDsKKyAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRSb3Rh
dGUoeCwgeSwgeiwgZGVncmVlcyk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWQ7CisgICAgZXhwZWN0ZWQucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsK
K30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseVNjYWxlKQoreworICAg
IGRvdWJsZSB4ID0gMTsKKyAgICBkb3VibGUgeSA9IDI7CisgICAgZG91YmxlIHogPSAzOworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVu
ZFNjYWxlKHgsIHksIHopOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOwor
ICAgIGV4cGVjdGVkLnNjYWxlM2QoeCwgeSwgeik7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsKK30KKworVEVTVChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseVNrZXcpCit7CisgICAgZG91YmxlIHggPSAxOwor
ICAgIGRvdWJsZSB5ID0gMjsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7
CisgICAgb3BlcmF0aW9ucy5hcHBlbmRTa2V3KHgsIHkpOworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnNrZXdYKHgpOworICAgIGV4cGVjdGVkLnNr
ZXdZKHkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9w
ZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwg
YXBwbHlQZXJzcGVjdGl2ZSkKK3sKKyAgICBkb3VibGUgZGVwdGggPSA4MDA7CisgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kUGVyc3Bl
Y3RpdmUoZGVwdGgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAg
IGV4cGVjdGVkLmFwcGx5UGVyc3BlY3RpdmUoZGVwdGgpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1Qo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlNYXRyaXgpCit7CisgICAgZG91YmxlIGR4
ID0gMTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBkeiA9IDM7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRNYXRyaXg7CisgICAgZXhwZWN0ZWRNYXRyaXgudHJh
bnNsYXRlM2QoZHgsIGR5LCBkeik7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBtYXRyaXhU
cmFuc2Zvcm07CisgICAgbWF0cml4VHJhbnNmb3JtLmFwcGVuZE1hdHJpeChleHBlY3RlZE1hdHJp
eCk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZE1hdHJpeCwg
bWF0cml4VHJhbnNmb3JtLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlv
blRlc3QsIGFwcGx5T3JkZXIpCit7CisgICAgZG91YmxlIHN4ID0gMjsKKyAgICBkb3VibGUgc3kg
PSA0OworICAgIGRvdWJsZSBzeiA9IDg7CisKKyAgICBkb3VibGUgZHggPSAxOworICAgIGRvdWJs
ZSBkeSA9IDI7CisgICAgZG91YmxlIGR6ID0gMzsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFNjYWxlKHN4LCBzeSwgc3opOwor
ICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGR4LCBkeSwgZHopOworCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRTY2FsZU1hdHJpeDsKKyAgICBleHBlY3RlZFNjYWxl
TWF0cml4LnNjYWxlM2Qoc3gsIHN5LCBzeik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBleHBlY3RlZFRyYW5zbGF0ZU1hdHJpeDsKKyAgICBleHBlY3RlZFRyYW5zbGF0ZU1hdHJpeC50
cmFuc2xhdGUzZChkeCwgZHksIGR6KTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkQ29tYmluZWRNYXRyaXggPSBleHBlY3RlZFNjYWxlTWF0cml4OworICAgIGV4cGVjdGVk
Q29tYmluZWRNYXRyaXgubXVsdGlwbHkoZXhwZWN0ZWRUcmFuc2xhdGVNYXRyaXgpOworCisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENvbWJpbmVkTWF0cml4LCBv
cGVyYXRpb25zLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qs
IGJsZW5kT3JkZXIpCit7CisgICAgZG91YmxlIHN4MSA9IDI7CisgICAgZG91YmxlIHN5MSA9IDQ7
CisgICAgZG91YmxlIHN6MSA9IDg7CisKKyAgICBkb3VibGUgZHgxID0gMTsKKyAgICBkb3VibGUg
ZHkxID0gMjsKKyAgICBkb3VibGUgZHoxID0gMzsKKworICAgIGRvdWJsZSBzeDIgPSA0OworICAg
IGRvdWJsZSBzeTIgPSA4OworICAgIGRvdWJsZSBzejIgPSAxNjsKKworICAgIGRvdWJsZSBkeDIg
PSAxMDsKKyAgICBkb3VibGUgZHkyID0gMjA7CisgICAgZG91YmxlIGR6MiA9IDMwOworCisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAgICBvcGVyYXRpb25zRnJv
bS5hcHBlbmRTY2FsZShzeDEsIHN5MSwgc3oxKTsKKyAgICBvcGVyYXRpb25zRnJvbS5hcHBlbmRU
cmFuc2xhdGUoZHgxLCBkeTEsIGR6MSk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnNUbzsKKyAgICBvcGVyYXRpb25zVG8uYXBwZW5kU2NhbGUoc3gyLCBzeTIsIHN6Mik7
CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFRyYW5zbGF0ZShkeDIsIGR5MiwgZHoyKTsKKworICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlRnJvbTsKKyAgICBzY2FsZUZyb20uc2NhbGUz
ZChzeDEsIHN5MSwgc3oxKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGVG
cm9tOworICAgIHRyYW5zbGF0ZUZyb20udHJhbnNsYXRlM2QoZHgxLCBkeTEsIGR6MSk7CisKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZVRvOworICAgIHNjYWxlVG8uc2NhbGUzZChz
eDIsIHN5Miwgc3oyKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGVUbzsK
KyAgICB0cmFuc2xhdGVUby50cmFuc2xhdGUzZChkeDIsIGR5MiwgZHoyKTsKKworICAgIGRvdWJs
ZSBwcm9ncmVzcyA9IDAuMjU7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZGVk
U2NhbGUgPSBzY2FsZVRvOworICAgIGJsZW5kZWRTY2FsZS5ibGVuZChzY2FsZUZyb20sIHByb2dy
ZXNzKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWRUcmFuc2xhdGUgPSB0
cmFuc2xhdGVUbzsKKyAgICBibGVuZGVkVHJhbnNsYXRlLmJsZW5kKHRyYW5zbGF0ZUZyb20sIHBy
b2dyZXNzKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkID0gYmxlbmRl
ZFNjYWxlOworICAgIGV4cGVjdGVkLm11bHRpcGx5KGJsZW5kZWRUcmFuc2xhdGUpOworCisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9uc1RvLmJs
ZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1By
b2dyZXNzKGRvdWJsZSBwcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb21NYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0b01hdHJpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbVRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyYgdG9UcmFuc2Zvcm0pCit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWRNYXRyaXggPSB0b01hdHJpeDsKKyAgICBleHBlY3RlZE1hdHJpeC5ibGVuZChmcm9tTWF0cml4
LCBwcm9ncmVzcyk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZE1hdHJpeCwgdG9UcmFuc2Zvcm0uYmxlbmQoZnJvbVRyYW5zZm9ybSwgcHJvZ3Jlc3MpKTsKK30K
KworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFByb2dyZXNzKQoreworICAg
IGRvdWJsZSBzeCA9IDI7CisgICAgZG91YmxlIHN5ID0gNDsKKyAgICBkb3VibGUgc3ogPSA4Owor
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc0Zyb207CisgICAgb3BlcmF0aW9u
c0Zyb20uYXBwZW5kU2NhbGUoc3gsIHN5LCBzeik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXhGcm9tOworICAgIG1hdHJpeEZyb20uc2NhbGUzZChzeCwgc3ksIHN6KTsKKwor
ICAgIHN4ID0gNDsKKyAgICBzeSA9IDg7CisgICAgc3ogPSAxNjsKKyAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAgICBvcGVyYXRpb25zVG8uYXBwZW5kU2NhbGUoc3gs
IHN5LCBzeik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhUbzsKKyAgICBt
YXRyaXhUby5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgY2hlY2tQcm9ncmVzcygtMSwgbWF0
cml4RnJvbSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworICAgIGNo
ZWNrUHJvZ3Jlc3MoMCwgbWF0cml4RnJvbSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVy
YXRpb25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMC4yNSwgbWF0cml4RnJvbSwgbWF0cml4VG8s
IG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMC41LCBt
YXRyaXhGcm9tLCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNUbyk7CisgICAg
Y2hlY2tQcm9ncmVzcygxLCBtYXRyaXhGcm9tLCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9w
ZXJhdGlvbnNUbyk7CisgICAgY2hlY2tQcm9ncmVzcygyLCBtYXRyaXhGcm9tLCBtYXRyaXhUbywg
b3BlcmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNUbyk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144355</attachid>
            <date>2012-05-28 07:19:01 -0700</date>
            <delta_ts>2012-05-30 10:02:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87510-20120528101900.patch</filename>
            <type>text/plain</type>
            <size>24912</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1MmJhNjQ2ZmQwNTM3
OWE4MDE4NmM3MmFhZjMwNTQ4MGI4ZWMxNmZiLi4yZTczNTUzOGI5NWExMzRhZjA2NTUyZjVmY2Ez
Y2QzMWI4MTEwNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wNS0yOCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1PcGVyYXRpb24pOgorICAgICAgICAq
IGNocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc1ByaXZhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6bWF0Y2hlc1R5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zOjphcHBlbmRTa2V3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgpOgorCiAyMDEyLTA1LTIzICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTE4MjE4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3MGEyYzFlMGFl
NjY2NmNlOWUxZjY5OGZkMjc4OWUxODZiOTg0ODA0Li42Mzk5ZGYwNTQ5NTA3MmI3YzRiYjA0NmQ0
ZDE2MGIyNTBmODA3YzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTA1LTI4ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gY3JlYXRlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiBpbnRlcmZhY2Ug
Zm9yIGNocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzUxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoY2hl
Y2tQcm9ncmVzcyk6CisKIDIwMTItMDUtMjQgIEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIGdyYW1tYXIgY2hlY2tpbmcgb24gQ2hyb21pdW0gd2hl
biB3ZSBwYXN0ZSB0ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5
cGkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQppbmRleCBiN2IyZDI5MTg2M2YzNmVm
MjVlMmU1MzdlOTBmYzUwZDU1ZDMxY2RhLi5mN2E2YWY3Y2VjNWJmMGUwYzI5YTU0NmMxN2FiZWQ2
NDZkMmFhNTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtOTgsNiArOTgsNyBAQAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUaHJlYWQuaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vcHVibGljL1dlYlRocmVhZFNhZmVEYXRhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViUHJlcmVuZGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJV
UkwuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLApAQCAt
MTIwLDYgKzEyMSw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYkZsb2F0UXVhZC5j
cHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNw
cCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAg
ICAgJ2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vc3JjL1dlYlZpZGVvRnJhbWUuY3BwJywKICAgICAgICAgXQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThkMTJjMjk4MjIyMDg1MDgwYThhMDAzNTJjYTQ0MzQx
MmMzMzg0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc19oCisjZGVmaW5lIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnNfaAorCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRyYW5zZm9ybSBvcGVyYXRpb25zIGFyZSBhIGRlY29t
cG9zZWQgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJdCBjYW4gYmUKKy8vIGFwcGxpZWQgdG8gb2J0
YWluIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXQgYW55IHRpbWUsIGFuZCBjYW4gYmUgYmxl
bmRlZAorLy8gaW50ZWxsaWdlbnRseSB3aXRoIG90aGVyIHRyYW5zZm9ybSBvcGVyYXRpb25zLCBz
byBsb25nIGFzIHRoZXkgcmVwcmVzZW50IHRoZQorLy8gc2FtZSBkZWNvbXBvc2l0aW9uLiBGb3Ig
ZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSB0aGF0IGlzIG1hZGUgdXAgb2YKKy8vIGEg
cm90YXRpb24gZm9sbG93ZWQgYnkgc2tldywgaXQgY2FuIGJlIGJsZW5kZWQgaW50ZWxsaWdlbnRs
eSB3aXRoIGFub3RoZXIKKy8vIHRyYW5zZm9ybSBtYWRlIHVwIG9mIGEgcm90YXRpb24gZm9sbG93
ZWQgYnkgYSBza2V3LiBCbGVuZGluZyBpcyBwb3NzaWJsZSBpZgorLy8gd2UgaGF2ZSB0d28gZGlz
c2ltaWxhciBzZXRzIG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zLCBidXQgdGhlIGVmZmVjdCBtYXkg
bm90CisvLyBiZSB3aGF0IHdhcyBpbnRlbmRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0
aGUgY29tbWVudHMgZm9yIHRoZSBibGVuZAorLy8gZnVuY3Rpb24gYmVsb3cuCitjbGFzcyBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMoKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYpOworCisgICAgLy8gTm90IHZpcnR1YWwu
IFNob3VsZCBub3QgYmUgc3ViY2xhc3NlZC4KKyAgICBXRUJLSVRfRVhQT1JUIH5XZWJUcmFuc2Zv
cm1PcGVyYXRpb25zKCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMmIG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJik7CisKKyAgICAvLyBS
ZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJlc2VudGluZyB0aGVzZSB0cmFuc2Zv
cm0gb3BlcmF0aW9ucy4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGFwcGx5KCkgY29uc3Q7CisKKyAgICAvLyBHaXZlbiBhbm90aGVyIHNldCBvZiB0cmFuc2Zvcm0g
b3BlcmF0aW9ucyBhbmQgYSBwcm9ncmVzcyBpbiB0aGUgcmFuZ2UKKyAgICAvLyBbMCwgMV0sIHJl
dHVybnMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBpbnRlcm1lZGlh
dGUKKyAgICAvLyB2YWx1ZS4gSWYgdGhpcy0+bWF0Y2hlc1R5cGVzKGZyb20pLCB0aGVuIGVhY2gg
b2YgdGhlIG9wZXJhdGlvbnMgYXJlCisgICAgLy8gYmxlbmRlZCBzZXBhcmF0ZWx5IGFuZCB0aGVu
IGNvbWJpbmVkLiBPdGhlcndpc2UsIHRoZSB0d28gc2V0cyBvZgorICAgIC8vIHRyYW5zZm9ybXMg
YXJlIGJha2VkIHRvIG1hdHJpY2VzICh1c2luZyBhcHBseSksIGFuZCB0aGUgbWF0cmljZXMgYXJl
CisgICAgLy8gdGhlbiBkZWNvbXBvc2VkIGFuZCBpbnRlcnBvbGF0ZWQuIEZvciBtb3JlIGluZm9y
bWF0aW9uLCBzZWUKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtMmQt
dHJhbnNmb3Jtcy0yMDExMTIxNS8jbWF0cml4LWRlY29tcG9zaXRpb24uCisgICAgV0VCS0lUX0VY
UE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgb3BlcmF0aW9uIGFuZCBpdHMgZGVzY2VuZGFudHMgaGF2ZSB0aGUgc2FtZSB0
eXBlcworICAgIC8vIGFzIG90aGVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCisgICAgV0VCS0lUX0VY
UE9SVCBib29sIG1hdGNoZXNUeXBlcyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhl
cikgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kVHJhbnNsYXRlKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRS
b3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs
ZSB6KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kU2tldyhkb3VibGUgeCwgZG91Ymxl
IHkpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVw
dGgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBU
UkFOU0xBVEUsCisgICAgICAgIFJPVEFURSwKKyAgICAgICAgU0NBTEUsCisgICAgICAgIFNLRVcs
CisgICAgICAgIFBFUlNQRUNUSVZFLAorICAgICAgICBNQVRSSVgKKyAgICB9OworCisgICAgc3Ry
dWN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIH07CisKKyAgICBzdHJ1Y3QgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU7CisKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtT3BlcmF0aW9uc19oCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmViNmE5MzkyMDBlOTc4NjU0M2I3ZGU0ZThiMjgwYjZmMzM3YmFi
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlRy
YW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5oPgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnNQ
cml2YXRlIHsKKyAgICBWZWN0b3I8V2ViVHJhbnNmb3JtT3BlcmF0aW9uPiBvcGVyYXRpb25zOwor
fTsKKworV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpCisg
ICAgOiBtX3ByaXZhdGUobmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnNQcml2YXRlKQoreworfQorCitXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKQorICAg
IDogbV9wcml2YXRlKG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zUHJpdmF0ZSgqb3RoZXIubV9wcml2YXRlLmdldCgpKSkKK3sKK30KKworV2ViVHJhbnNm
b3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKQoreworICAgIG1fcHJpdmF0
ZS5yZXNldCgwKTsKK30KKworV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6b3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKQor
eworICAgIGlmIChtX3ByaXZhdGUuZ2V0KCkgIT0gb3RoZXIubV9wcml2YXRlLmdldCgpKQorICAg
ICAgICBtX3ByaXZhdGUucmVzZXQobmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnNQcml2YXRlKCpvdGhlci5tX3ByaXZhdGUuZ2V0KCkpKTsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnM6OmFwcGx5KCkgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1Jl
dHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkobV9wcml2YXRlLT5vcGVyYXRp
b25zW2ldLm1hdHJpeCk7CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggdG9SZXR1cm47CisgICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tKSkg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRl
ZCA9IG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXg7CisgICAgICAgICAgICBibGVuZGVk
LmJsZW5kKGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJpeCwgcHJvZ3Jlc3MpOwor
ICAgICAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkoYmxlbmRlZCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICB0b1JldHVybiA9IGFwcGx5KCk7CisgICAgICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGZyb21UcmFuc2Zvcm0gPSBmcm9tLmFwcGx5KCk7CisgICAgICAgIHRvUmV0
dXJuLmJsZW5kKGZyb21UcmFuc2Zvcm0sIHByb2dyZXNzKTsKKyAgICB9CisgICAgcmV0dXJuIHRv
UmV0dXJuOworfQorCitib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBlcyhj
b25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9w
cml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9w
cml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUgIT0gb3RoZXIubV9wcml2YXRlLT5vcGVyYXRpb25z
W2ldLnR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRl
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHRvQWRkOworICAgIHRvQWRkLm1hdHJpeC50cmFuc2xhdGUzZCh4LCB5LCB6KTsKKyAgICB0
b0FkZC50eXBlID0gVFJBTlNMQVRFOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQo
dG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZShk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcykKK3sKKyAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CisgICAgdG9BZGQubWF0cml4LnJvdGF0ZTNkKHgsIHks
IHosIGRlZ3JlZXMpOworICAgIHRvQWRkLnR5cGUgPSBST1RBVEU7CisgICAgbV9wcml2YXRlLT5v
cGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6YXBwZW5kU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikKK3sKKyAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CisgICAgdG9BZGQubWF0cml4LnNjYWxlM2QoeCwgeSwg
eik7CisgICAgdG9BZGQudHlwZSA9IFNDQUxFOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5h
cHBlbmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNr
ZXcoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0Fk
ZDsKKyAgICB0b0FkZC5tYXRyaXguc2tld1goeCk7CisgICAgdG9BZGQubWF0cml4LnNrZXdZKHkp
OworICAgIHRvQWRkLnR5cGUgPSBTS0VXOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBl
bmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFBlcnNw
ZWN0aXZlKGRvdWJsZSBkZXB0aCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7
CisgICAgdG9BZGQubWF0cml4LmFwcGx5UGVyc3BlY3RpdmUoZGVwdGgpOworICAgIHRvQWRkLnR5
cGUgPSBQRVJTUEVDVElWRTsKKyAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRk
KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgoY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gdG9BZGQ7CisgICAgdG9BZGQubWF0cml4ID0gbWF0cml4OworICAgIHRvQWRkLnR5cGUg
PSBNQVRSSVg7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
Nzg1NGVkZjBhOTlkNmNiZDgyMTU3NGNlNmY0MTU0YmMxMTBiMDM4NC4uNTI5ZjRiOGE5MDJlNmE3
NjFjZTA4NGMxZDk5ZDJmZDQzMTkxZThjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC0xNTEsNiArMTUxLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXREZWZsYXRl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVVJMUmVxdWVzdFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9XZWJVUkxSZXNwb25zZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9XZWJWaWV3VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWZl
MWYyZjE5MmE2NWJlMmVmNzc0YmQxZmJkODQxOTdlMGFiNDUyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5j
cHAKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKworI2luY2x1ZGUgIkNDTGF5ZXJU
cmVlVGVzdENvbW1vbi5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1RFU1QoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uVGVzdCwgdHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUpCit7CisgICAgVmVjdG9yPE93
blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IHRyYW5zZm9ybXM7CisKKyAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zKiB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Cisg
ICAgdG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0cmFuc2Zvcm1zLmFwcGVu
ZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMCk7CisgICAgdHJhbnNm
b3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMSwgMSwgMSk7CisgICAg
dHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2tldygwLCAwKTsKKyAg
ICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRQZXJzcGVjdGl2ZSg4
MDApOworICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRyYW5zZm9ybXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCB0cmFuc2Zvcm1zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICBib29sIG1hdGNoZXNUeXBlID0gdHJhbnNmb3Jtc1tpXS0+bWF0Y2hlc1R5cGVzKCp0cmFuc2Zv
cm1zW2pdKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChpID09IGogJiYgbWF0Y2hlc1R5cGUp
IHx8ICFtYXRjaGVzVHlwZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdCwgbWF0Y2hUeXBlc1NhbWVMZW5ndGgpCit7CisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAg
IHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworCisgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyBza2V3czsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOworICAgIHNrZXdz
LmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKworICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczI7CisgICAgdHJhbnNsYXRlczIuYXBwZW5k
VHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAw
LCAwKTsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisKKyAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXMzID0gdHJhbnNsYXRlczI7CisKKyAgICBF
WFBFQ1RfRkFMU0UodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXMoc2tld3MpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyh0cmFuc2xhdGVzMikpOworICAgIEVYUEVDVF9U
UlVFKHRyYW5zbGF0ZXMubWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMzKSk7Cit9CisKK1RFU1QoV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgbWF0Y2hUeXBlc0RpZmZlcmVudExlbmd0aCkKK3sKKyAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXM7CisgICAgdHJhbnNsYXRlcy5hcHBl
bmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisKKyAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHNrZXdzOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7
CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgdHJhbnNsYXRlczI7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDAp
OworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAgIEVYUEVD
VF9GQUxTRSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyhza2V3cykpOworICAgIEVYUEVDVF9GQUxT
RSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyh0cmFuc2xhdGVzMikpOworfQorCitURVNUKFdlYlRy
YW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5VHJhbnNsYXRlKQoreworICAgIGRvdWJsZSB4ID0g
MTsKKyAgICBkb3VibGUgeSA9IDI7CisgICAgZG91YmxlIHogPSAzOworICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSh4
LCB5LCB6KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICBleHBl
Y3RlZC50cmFuc2xhdGUzZCh4LCB5LCB6KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5z
Zm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5Um90YXRlKQoreworICAgIGRvdWJsZSB4ID0gMTsKKyAg
ICBkb3VibGUgeSA9IDI7CisgICAgZG91YmxlIHogPSAzOworICAgIGRvdWJsZSBkZWdyZWVzID0g
ODA7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlv
bnMuYXBwZW5kUm90YXRlKHgsIHksIHosIGRlZ3JlZXMpOworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnJvdGF0ZTNkKHgsIHksIHosIGRlZ3JlZXMp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlv
bnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlT
Y2FsZSkKK3sKKyAgICBkb3VibGUgeCA9IDE7CisgICAgZG91YmxlIHkgPSAyOworICAgIGRvdWJs
ZSB6ID0gMzsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3Bl
cmF0aW9ucy5hcHBlbmRTY2FsZSh4LCB5LCB6KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBleHBlY3RlZDsKKyAgICBleHBlY3RlZC5zY2FsZTNkKHgsIHksIHopOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9
CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlTa2V3KQoreworICAgIGRv
dWJsZSB4ID0gMTsKKyAgICBkb3VibGUgeSA9IDI7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kU2tldyh4LCB5KTsKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICBleHBlY3RlZC5za2V3WCh4KTsKKyAg
ICBleHBlY3RlZC5za2V3WSh5KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KGV4cGVjdGVkLCBvcGVyYXRpb25zLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QsIGFwcGx5UGVyc3BlY3RpdmUpCit7CisgICAgZG91YmxlIGRlcHRoID0gODAw
OworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25z
LmFwcGVuZFBlcnNwZWN0aXZlKGRlcHRoKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBl
eHBlY3RlZDsKKyAgICBleHBlY3RlZC5hcHBseVBlcnNwZWN0aXZlKGRlcHRoKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmFwcGx5KCkp
OworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5TWF0cml4KQorewor
ICAgIGRvdWJsZSBkeCA9IDE7CisgICAgZG91YmxlIGR5ID0gMjsKKyAgICBkb3VibGUgZHogPSAz
OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkTWF0cml4OworICAgIGV4cGVj
dGVkTWF0cml4LnRyYW5zbGF0ZTNkKGR4LCBkeSwgZHopOworICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgbWF0cml4VHJhbnNmb3JtOworICAgIG1hdHJpeFRyYW5zZm9ybS5hcHBlbmRNYXRyaXgo
ZXhwZWN0ZWRNYXRyaXgpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWRNYXRyaXgsIG1hdHJpeFRyYW5zZm9ybS5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseU9yZGVyKQoreworICAgIGRvdWJsZSBzeCA9IDI7Cisg
ICAgZG91YmxlIHN5ID0gNDsKKyAgICBkb3VibGUgc3ogPSA4OworCisgICAgZG91YmxlIGR4ID0g
MTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBkeiA9IDM7CisKKyAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRTY2FsZShz
eCwgc3ksIHN6KTsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShkeCwgZHksIGR6KTsK
KworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU2NhbGVNYXRyaXg7CisgICAg
ZXhwZWN0ZWRTY2FsZU1hdHJpeC5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRUcmFuc2xhdGVNYXRyaXg7CisgICAgZXhwZWN0ZWRUcmFu
c2xhdGVNYXRyaXgudHJhbnNsYXRlM2QoZHgsIGR5LCBkeik7CisKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZENvbWJpbmVkTWF0cml4ID0gZXhwZWN0ZWRTY2FsZU1hdHJpeDsK
KyAgICBleHBlY3RlZENvbWJpbmVkTWF0cml4Lm11bHRpcGx5KGV4cGVjdGVkVHJhbnNsYXRlTWF0
cml4KTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDb21i
aW5lZE1hdHJpeCwgb3BlcmF0aW9ucy5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LCBibGVuZE9yZGVyKQoreworICAgIGRvdWJsZSBzeDEgPSAyOworICAgIGRv
dWJsZSBzeTEgPSA0OworICAgIGRvdWJsZSBzejEgPSA4OworCisgICAgZG91YmxlIGR4MSA9IDE7
CisgICAgZG91YmxlIGR5MSA9IDI7CisgICAgZG91YmxlIGR6MSA9IDM7CisKKyAgICBkb3VibGUg
c3gyID0gNDsKKyAgICBkb3VibGUgc3kyID0gODsKKyAgICBkb3VibGUgc3oyID0gMTY7CisKKyAg
ICBkb3VibGUgZHgyID0gMTA7CisgICAgZG91YmxlIGR5MiA9IDIwOworICAgIGRvdWJsZSBkejIg
PSAzMDsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc0Zyb207CisgICAg
b3BlcmF0aW9uc0Zyb20uYXBwZW5kU2NhbGUoc3gxLCBzeTEsIHN6MSk7CisgICAgb3BlcmF0aW9u
c0Zyb20uYXBwZW5kVHJhbnNsYXRlKGR4MSwgZHkxLCBkejEpOworCisgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zVG87CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFNjYWxlKHN4
Miwgc3kyLCBzejIpOworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRUcmFuc2xhdGUoZHgyLCBkeTIs
IGR6Mik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUZyb207CisgICAgc2Nh
bGVGcm9tLnNjYWxlM2Qoc3gxLCBzeTEsIHN6MSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNsYXRlRnJvbTsKKyAgICB0cmFuc2xhdGVGcm9tLnRyYW5zbGF0ZTNkKGR4MSwgZHkx
LCBkejEpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVUbzsKKyAgICBzY2Fs
ZVRvLnNjYWxlM2Qoc3gyLCBzeTIsIHN6Mik7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNsYXRlVG87CisgICAgdHJhbnNsYXRlVG8udHJhbnNsYXRlM2QoZHgyLCBkeTIsIGR6Mik7
CisKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjI1OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggYmxlbmRlZFNjYWxlID0gc2NhbGVUbzsKKyAgICBibGVuZGVkU2NhbGUuYmxlbmQoc2Nh
bGVGcm9tLCBwcm9ncmVzcyk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZGVk
VHJhbnNsYXRlID0gdHJhbnNsYXRlVG87CisgICAgYmxlbmRlZFRyYW5zbGF0ZS5ibGVuZCh0cmFu
c2xhdGVGcm9tLCBwcm9ncmVzcyk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZCA9IGJsZW5kZWRTY2FsZTsKKyAgICBleHBlY3RlZC5tdWx0aXBseShibGVuZGVkVHJhbnNs
YXRlKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9w
ZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGlj
IHZvaWQgY2hlY2tQcm9ncmVzcyhkb3VibGUgcHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tTWF0cml4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG9NYXRy
aXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMmIGZyb21UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMmIHRvVHJhbnNmb3JtKQoreworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGV4cGVjdGVkTWF0cml4ID0gdG9NYXRyaXg7CisgICAgZXhwZWN0ZWRNYXRyaXguYmxl
bmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRNYXRyaXgsIHRvVHJhbnNmb3JtLmJsZW5kKGZyb21UcmFuc2Zvcm0sIHBy
b2dyZXNzKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRQcm9n
cmVzcykKK3sKKyAgICBkb3VibGUgc3ggPSAyOworICAgIGRvdWJsZSBzeSA9IDQ7CisgICAgZG91
YmxlIHN6ID0gODsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNGcm9tOwor
ICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFNjYWxlKHN4LCBzeSwgc3opOworCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4RnJvbTsKKyAgICBtYXRyaXhGcm9tLnNjYWxlM2Qoc3gs
IHN5LCBzeik7CisKKyAgICBzeCA9IDQ7CisgICAgc3kgPSA4OworICAgIHN6ID0gMTY7CisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zVG87CisgICAgb3BlcmF0aW9uc1RvLmFw
cGVuZFNjYWxlKHN4LCBzeSwgc3opOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4VG87CisgICAgbWF0cml4VG8uc2NhbGUzZChzeCwgc3ksIHN6KTsKKworICAgIGNoZWNrUHJv
Z3Jlc3MoLTEsIG1hdHJpeEZyb20sIG1hdHJpeFRvLCBvcGVyYXRpb25zRnJvbSwgb3BlcmF0aW9u
c1RvKTsKKyAgICBjaGVja1Byb2dyZXNzKDAsIG1hdHJpeEZyb20sIG1hdHJpeFRvLCBvcGVyYXRp
b25zRnJvbSwgb3BlcmF0aW9uc1RvKTsKKyAgICBjaGVja1Byb2dyZXNzKDAuMjUsIG1hdHJpeEZy
b20sIG1hdHJpeFRvLCBvcGVyYXRpb25zRnJvbSwgb3BlcmF0aW9uc1RvKTsKKyAgICBjaGVja1By
b2dyZXNzKDAuNSwgbWF0cml4RnJvbSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRp
b25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMSwgbWF0cml4RnJvbSwgbWF0cml4VG8sIG9wZXJh
dGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMiwgbWF0cml4RnJv
bSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworfQorCitURVNUKFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kV2hlblR5cGVzRG9Ob3RNYXRjaCkKK3sKKyAg
ICBkb3VibGUgc3gxID0gMjsKKyAgICBkb3VibGUgc3kxID0gNDsKKyAgICBkb3VibGUgc3oxID0g
ODsKKworICAgIGRvdWJsZSBkeDEgPSAxOworICAgIGRvdWJsZSBkeTEgPSAyOworICAgIGRvdWJs
ZSBkejEgPSAzOworCisgICAgZG91YmxlIHN4MiA9IDQ7CisgICAgZG91YmxlIHN5MiA9IDg7Cisg
ICAgZG91YmxlIHN6MiA9IDE2OworCisgICAgZG91YmxlIGR4MiA9IDEwOworICAgIGRvdWJsZSBk
eTIgPSAyMDsKKyAgICBkb3VibGUgZHoyID0gMzA7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnNGcm9tOworICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFNjYWxlKHN4MSwg
c3kxLCBzejEpOworICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFRyYW5zbGF0ZShkeDEsIGR5MSwg
ZHoxKTsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9w
ZXJhdGlvbnNUby5hcHBlbmRUcmFuc2xhdGUoZHgyLCBkeTIsIGR6Mik7CisgICAgb3BlcmF0aW9u
c1RvLmFwcGVuZFNjYWxlKHN4Miwgc3kyLCBzejIpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZnJvbTsKKyAgICBmcm9tLnNjYWxlM2Qoc3gxLCBzeTEsIHN6MSk7CisgICAgZnJvbS50
cmFuc2xhdGUzZChkeDEsIGR5MSwgZHoxKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRvOworICAgIHRvLnRyYW5zbGF0ZTNkKGR4MiwgZHkyLCBkejIpOworICAgIHRvLnNjYWxlM2Qo
c3gyLCBzeTIsIHN6Mik7CisKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjI1OworCisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQgPSB0bzsKKyAgICBleHBlY3RlZC5ibGVuZChm
cm9tLCBwcm9ncmVzcyk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkLCBvcGVyYXRpb25zVG8uYmxlbmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7Cit9
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144848</attachid>
            <date>2012-05-30 10:02:22 -0700</date>
            <delta_ts>2012-05-30 19:57:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87510-20120530130221.patch</filename>
            <type>text/plain</type>
            <size>27644</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4ODM1MDEwODA2OTVh
NTcxNjQ5OTM1NzY1MDJiNTQyZjMxZTA2ZjljLi5jZDZkOTY3YmM2MDU5ZDRkNDg4Mzk1YTU5ZjRm
YTNhOGM2ZTdiMjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0zMCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6On5X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6Om9wZXJhdG9yPSk6CisKIDIwMTItMDUtMjkgIFNoYXduIFNpbmdo
ICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtYWtlIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IG9iamVjdCB1c2FibGUgYnkgbm9uLXdlYmtpdCBjb2RlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJiMjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uZjBl
MWRiYzkwYTNiN2U3MTA0MmZlOGY1MjkxMTA1OGNkMTJmYmRlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQxIEBACisyMDEyLTA1LTMwICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gY3JlYXRlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiBpbnRl
cmZhY2UgZm9yIGNocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NzUxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHM6CisgICAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zVGVzdC50cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZQorICAgICAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uc1Rlc3QubWF0Y2hlc1R5cGVzU2FtZUxlbmd0aAorICAgICAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QubWF0Y2hlc1R5cGVzRGlmZmVyZW50TGVuZ3RoCisg
ICAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5hcHBseVRyYW5zbGF0ZQorICAg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlSb3RhdGUKKyAgICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmFwcGx5U2NhbGUKKyAgICAgICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmFwcGx5U2tldworICAgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlQZXJzcGVjdGl2ZQorICAgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlNYXRyaXgKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnNUZXN0LmFwcGx5T3JkZXIKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnNUZXN0LmJsZW5kT3JkZXIKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmJsZW5kUHJvZ3Jlc3MKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmJs
ZW5kV2hlblR5cGVzRG9Ob3RNYXRjaAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnM6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjpibGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnM6Om1hdGNoZXNUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnM6OmFwcGVuZFRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM6OmFwcGVuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kU2tldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnM6OmFwcGVuZFBlcnNwZWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kTWF0cml4KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjppbml0aWFsaXplKToKKwogMjAxMi0wNS0yOSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdo
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIG1ha2UgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggb2JqZWN0IHVzYWJsZSBieSBub24td2Via2l0IGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggOWIzOGQ2ZGJkMjgwYzRmNDlhZjU2OWM3OGZjOTNmZTFmNGE5MGQwMy4u
YzE1YTYxY2MzNTZiZTU0MDZhZjA2ZTA4N2RkNTc5MzgxNTQ5ZmE5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNS0zMCAgSWFuIFZvbGxpY2sgIDx2
b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGNyZWF0ZSBXZWJUcmFu
c2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1MTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKGNoZWNrUHJvZ3Jlc3MpOgorCiAyMDEyLTA1LTI5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IEFs
aWduIGNvZGVzIGFuZCBuYW1lcyBmb3IgSURCLXNwZWNpZmljIGFuZCBET00tc3BlY2lmaWMgZXJy
b3JzL2V4Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBp
IGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggYTg0ZmI0NzMyNGRhYWQ4MWM3
MGM3MDI3NmRlZGYxNDFiYWJhNWRiYy4uNTRhZjE5NjIzZjJlZDZmMDc4ZThlMGI3Yjg4NTZmNGJk
N2I5ZDBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIv
U291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTEwMCw2ICsxMDAsNyBAQAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUaHJlYWQuaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vcHVibGljL1dlYlRocmVhZFNhZmVEYXRhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViUHJlcmVuZGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJV
UkwuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDNiYWQ1Yjg0ZTNlYWY0MTdlZGQ5YTJlMDZlMGFmOTYz
NjdmYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc19oCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRyYW5zZm9ybSBvcGVyYXRpb25zIGFyZSBh
IGRlY29tcG9zZWQgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJdCBjYW4gYmUKKy8vIGFwcGxpZWQg
dG8gb2J0YWluIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXQgYW55IHRpbWUsIGFuZCBjYW4g
YmUgYmxlbmRlZAorLy8gaW50ZWxsaWdlbnRseSB3aXRoIG90aGVyIHRyYW5zZm9ybSBvcGVyYXRp
b25zLCBzbyBsb25nIGFzIHRoZXkgcmVwcmVzZW50IHRoZQorLy8gc2FtZSBkZWNvbXBvc2l0aW9u
LiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSB0aGF0IGlzIG1hZGUgdXAgb2YK
Ky8vIGEgcm90YXRpb24gZm9sbG93ZWQgYnkgc2tldywgaXQgY2FuIGJlIGJsZW5kZWQgaW50ZWxs
aWdlbnRseSB3aXRoIGFub3RoZXIKKy8vIHRyYW5zZm9ybSBtYWRlIHVwIG9mIGEgcm90YXRpb24g
Zm9sbG93ZWQgYnkgYSBza2V3LiBCbGVuZGluZyBpcyBwb3NzaWJsZSBpZgorLy8gd2UgaGF2ZSB0
d28gZGlzc2ltaWxhciBzZXRzIG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zLCBidXQgdGhlIGVmZmVj
dCBtYXkgbm90CisvLyBiZSB3aGF0IHdhcyBpbnRlbmRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24s
IHNlZSB0aGUgY29tbWVudHMgZm9yIHRoZSBibGVuZAorLy8gZnVuY3Rpb24gYmVsb3cuCitjbGFz
cyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHsKK3B1YmxpYzoKKyAgICB+V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucygpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsg
aW5pdGlhbGl6ZSgwKTsgfQorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpIHsgaW5pdGlhbGl6ZSgmb3RoZXIpOyB9CisgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMmIG90aGVyKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZSgmb3RoZXIpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyogcHJvdG90eXBlKTsKKworICAgIC8vIFJldHVybnMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXggcmVwcmVzZW50aW5nIHRoZXNlIHRyYW5zZm9ybSBvcGVyYXRpb25zLgorICAgIFdFQktJVF9F
WFBPUlQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHkoKSBjb25zdDsKKworICAgIC8vIEdp
dmVuIGFub3RoZXIgc2V0IG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zIGFuZCBhIHByb2dyZXNzIGlu
IHRoZSByYW5nZQorICAgIC8vIFswLCAxXSwgcmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCByZXByZXNlbnRpbmcgdGhlIGludGVybWVkaWF0ZQorICAgIC8vIHZhbHVlLiBJZiB0aGlzLT5t
YXRjaGVzVHlwZXMoZnJvbSksIHRoZW4gZWFjaCBvZiB0aGUgb3BlcmF0aW9ucyBhcmUKKyAgICAv
LyBibGVuZGVkIHNlcGFyYXRlbHkgYW5kIHRoZW4gY29tYmluZWQuIE90aGVyd2lzZSwgdGhlIHR3
byBzZXRzIG9mCisgICAgLy8gdHJhbnNmb3JtcyBhcmUgYmFrZWQgdG8gbWF0cmljZXMgKHVzaW5n
IGFwcGx5KSwgYW5kIHRoZSBtYXRyaWNlcyBhcmUKKyAgICAvLyB0aGVuIGRlY29tcG9zZWQgYW5k
IGludGVycG9sYXRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy0yZC10cmFuc2Zvcm1zLTIwMTExMjE1LyNtYXRyaXgt
ZGVjb21wb3NpdGlvbi4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBvcGVyYXRpb24gYW5kIGl0
cyBkZXNjZW5kYW50cyBoYXZlIHRoZSBzYW1lIHR5cGVzCisgICAgLy8gYXMgb3RoZXIgYW5kIGl0
cyBkZXNjZW5kYW50cy4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbWF0Y2hlc1R5cGVzKGNvbnN0
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeik7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSB6LCBkb3VibGUgZGVncmVlcyk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFNj
YWxlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCitwcml2YXRl
OgorICAgIHN0cnVjdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZTsKKworICAgIFdlYlBy
aXZhdGVPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0ZTsKK307
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNlYzEzOTMzNjU1MzcwNjY3YjU3Y2QwOWRm
MzgxNTkzN2YyYmMxNmIuLmQ4OGIxMTU3NzVkMjNkYWU4YTgyZWRlODMwNDMzMjlkYjRlOWYzNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTY2MzksNyArNjYzOSw3IEBACiAgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxHcmF5LnBuZycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxXaGl0ZS5wbmcnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaE5leHQucG5nJywKLSAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZycsICAg
ICAgICAgICAgCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNo
UHJldi5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21l
bnQucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50
RW5kLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVu
dEhvdmVyLnBuZycsCkBAIC04MzI3LDYgKzgzMjcsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViUHJlcmVuZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMRXJy
b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
cXVlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxYTc3YjYxZjExYjVhODhkNWI1MGQ3YWNhMTM0Zjk0MGFhYTFkYmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cy5oPgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RydWN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlLAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25Sb3RhdGUsCisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlLAorICAgICAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25Ta2V3LAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25QZXJzcGVjdGl2ZSwKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4CisgICAg
fTsKKworICAgIFR5cGUgdHlwZTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7
Cit9OworCitzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uc1ByaXZhdGUgeworICAgIFZlY3RvcjxXZWJUcmFuc2Zvcm1PcGVyYXRpb24+IG9wZXJhdGlv
bnM7Cit9OworCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
OjphcHBseSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG9SZXR1cm47
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIHRvUmV0dXJuLm11bHRpcGx5KG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tp
XS5tYXRyaXgpOworICAgIHJldHVybiB0b1JldHVybjsKK30KKworV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmQoY29uc3QgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IHRvUmV0dXJuOworICAgIGlmIChtYXRjaGVzVHlwZXMoZnJvbSkpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWQgPSBt
X3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0ubWF0cml4OworICAgICAgICAgICAgYmxlbmRlZC5ibGVu
ZChmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXgsIHByb2dyZXNzKTsKKyAgICAg
ICAgICAgIHRvUmV0dXJuLm11bHRpcGx5KGJsZW5kZWQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdG9SZXR1cm4gPSBhcHBseSgpOworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBmcm9tVHJhbnNmb3JtID0gZnJvbS5hcHBseSgpOworICAgICAgICB0b1JldHVybi5i
bGVuZChmcm9tVHJhbnNmb3JtLCBwcm9ncmVzcyk7CisgICAgfQorICAgIHJldHVybiB0b1JldHVy
bjsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjptYXRjaGVzVHlwZXMoY29uc3Qg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5zaXplKCkgIT0gb3RoZXIubV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcHJpdmF0
ZS0+b3BlcmF0aW9uc1tpXS50eXBlICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50
eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFRyYW5zbGF0ZShkb3Vi
bGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0
b0FkZDsKKyAgICB0b0FkZC5tYXRyaXgudHJhbnNsYXRlM2QoeCwgeSwgeik7CisgICAgdG9BZGQu
dHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNs
YXRlOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lk
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcykKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24g
dG9BZGQ7CisgICAgdG9BZGQubWF0cml4LnJvdGF0ZTNkKHgsIHksIHosIGRlZ3JlZXMpOworICAg
IHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlv
blJvdGF0ZTsKKyAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKK30KKwor
dm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTY2FsZShkb3VibGUgeCwgZG91Ymxl
IHksIGRvdWJsZSB6KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKKyAgICB0
b0FkZC5tYXRyaXguc2NhbGUzZCh4LCB5LCB6KTsKKyAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNm
b3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25TY2FsZTsKKyAgICBtX3ByaXZhdGUt
Pm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjphcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb24gdG9BZGQ7CisgICAgdG9BZGQubWF0cml4LnNrZXdYKHgpOworICAgIHRvQWRkLm1h
dHJpeC5za2V3WSh5KTsKKyAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25Ta2V3OworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBl
bmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFBlcnNw
ZWN0aXZlKGRvdWJsZSBkZXB0aCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7
CisgICAgdG9BZGQubWF0cml4LmFwcGx5UGVyc3BlY3RpdmUoZGVwdGgpOworICAgIHRvQWRkLnR5
cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0
aXZlOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lk
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsK
KyAgICB0b0FkZC5tYXRyaXggPSBtYXRyaXg7CisgICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4OworICAgIG1fcHJpdmF0ZS0+
b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnM6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIgJiYgbV9wcml2YXRlLmdldCgpICE9IG90aGVyLT5t
X3ByaXZhdGUuZ2V0KCkpCisgICAgICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGUoKm90aGVyLT5tX3ByaXZh
dGUuZ2V0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGUpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDFh
Njg4YmJjY2MyYmFiOGQwN2NmY2U1MzhmZGM1NzAwZDM0ZWIyYjkuLmFkOGQyMmFhNTYyMzcwMzIz
NjhlMzAyYmEyOTgzNmEyYTM0NTEwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtMTUyLDYgKzE1Miw3IEBACiAgICAgICAgICAgICAndGVzdHMvV2ViU29ja2V0RGVmbGF0ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeFRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvV2ViVVJMUmVzcG9uc2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
V2ViVmlld1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVhZjdh
ZDc0ZjUzMjkxZWY1YjQxYWFlMTA5ZWQyNzE4MGVmMGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3Bw
CkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorCisjaW5jbHVkZSA8
cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisKKyNpbmNsdWRlICJDQ0xheWVyVHJl
ZVRlc3RDb21tb24uaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitURVNUKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QsIHRyYW5zZm9ybVR5cGVzQXJlVW5pcXVlKQoreworICAgIFZlY3RvcjxPd25Q
dHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiB0cmFuc2Zvcm1zOworCisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyogdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAg
IHRvQWRkLT5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNmb3Jtcy5hcHBlbmQo
YWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kUm90YXRlKDAsIDAsIDEsIDApOworICAgIHRyYW5zZm9y
bXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFNjYWxlKDEsIDEsIDEpOworICAgIHRy
YW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFNrZXcoMCwgMCk7CisgICAg
dHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kUGVyc3BlY3RpdmUoODAw
KTsKKyAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgdHJhbnNmb3Jtcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAg
Ym9vbCBtYXRjaGVzVHlwZSA9IHRyYW5zZm9ybXNbaV0tPm1hdGNoZXNUeXBlcygqdHJhbnNmb3Jt
c1tqXSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoaSA9PSBqICYmIG1hdGNoZXNUeXBlKSB8
fCAhbWF0Y2hlc1R5cGUpOworICAgICAgICB9CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9y
bU9wZXJhdGlvblRlc3QsIG1hdGNoVHlwZXNTYW1lTGVuZ3RoKQoreworICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgdHJhbnNsYXRlczsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgw
LCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0
cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgc2tld3M7CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBza2V3cy5h
cHBlbmRTa2V3KDAsIDApOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisKKyAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXMyOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRy
YW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwg
MCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworCisgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzMyA9IHRyYW5zbGF0ZXMyOworCisgICAgRVhQ
RUNUX0ZBTFNFKHRyYW5zbGF0ZXMubWF0Y2hlc1R5cGVzKHNrZXdzKSk7CisgICAgRVhQRUNUX1RS
VUUodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXModHJhbnNsYXRlczIpKTsKKyAgICBFWFBFQ1RfVFJV
RSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyh0cmFuc2xhdGVzMykpOworfQorCitURVNUKFdlYlRy
YW5zZm9ybU9wZXJhdGlvblRlc3QsIG1hdGNoVHlwZXNEaWZmZXJlbnRMZW5ndGgpCit7CisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzOworICAgIHRyYW5zbGF0ZXMuYXBwZW5k
VHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAs
IDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworCisgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBza2V3czsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOwor
ICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IHRyYW5zbGF0ZXMyOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsK
KyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXMoc2tld3MpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
dHJhbnNsYXRlcy5tYXRjaGVzVHlwZXModHJhbnNsYXRlczIpKTsKK30KKworVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseVRyYW5zbGF0ZSkKK3sKKyAgICBkb3VibGUgeCA9IDE7
CisgICAgZG91YmxlIHkgPSAyOworICAgIGRvdWJsZSB6ID0gMzsKKyAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoeCwg
eSwgeik7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgZXhwZWN0
ZWQudHJhbnNsYXRlM2QoeCwgeSwgeik7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zv
cm1PcGVyYXRpb25UZXN0LCBhcHBseVJvdGF0ZSkKK3sKKyAgICBkb3VibGUgeCA9IDE7CisgICAg
ZG91YmxlIHkgPSAyOworICAgIGRvdWJsZSB6ID0gMzsKKyAgICBkb3VibGUgZGVncmVlcyA9IDgw
OworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25z
LmFwcGVuZFJvdGF0ZSh4LCB5LCB6LCBkZWdyZWVzKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZDsKKyAgICBleHBlY3RlZC5yb3RhdGUzZCh4LCB5LCB6LCBkZWdyZWVzKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25z
LmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5U2Nh
bGUpCit7CisgICAgZG91YmxlIHggPSAxOworICAgIGRvdWJsZSB5ID0gMjsKKyAgICBkb3VibGUg
eiA9IDM7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJh
dGlvbnMuYXBwZW5kU2NhbGUoeCwgeSwgeik7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZXhwZWN0ZWQ7CisgICAgZXhwZWN0ZWQuc2NhbGUzZCh4LCB5LCB6KTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmFwcGx5KCkpOworfQor
CitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5U2tldykKK3sKKyAgICBkb3Vi
bGUgeCA9IDE7CisgICAgZG91YmxlIHkgPSAyOworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFNrZXcoeCwgeSk7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgZXhwZWN0ZWQuc2tld1goeCk7CisgICAg
ZXhwZWN0ZWQuc2tld1koeSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShl
eHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LCBhcHBseVBlcnNwZWN0aXZlKQoreworICAgIGRvdWJsZSBkZXB0aCA9IDgwMDsK
KyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5h
cHBlbmRQZXJzcGVjdGl2ZShkZXB0aCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhw
ZWN0ZWQ7CisgICAgZXhwZWN0ZWQuYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsK
K30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseU1hdHJpeCkKK3sKKyAg
ICBkb3VibGUgZHggPSAxOworICAgIGRvdWJsZSBkeSA9IDI7CisgICAgZG91YmxlIGR6ID0gMzsK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZE1hdHJpeDsKKyAgICBleHBlY3Rl
ZE1hdHJpeC50cmFuc2xhdGUzZChkeCwgZHksIGR6KTsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG1hdHJpeFRyYW5zZm9ybTsKKyAgICBtYXRyaXhUcmFuc2Zvcm0uYXBwZW5kTWF0cml4KGV4
cGVjdGVkTWF0cml4KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkTWF0cml4LCBtYXRyaXhUcmFuc2Zvcm0uYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlPcmRlcikKK3sKKyAgICBkb3VibGUgc3ggPSAyOworICAg
IGRvdWJsZSBzeSA9IDQ7CisgICAgZG91YmxlIHN6ID0gODsKKworICAgIGRvdWJsZSBkeCA9IDE7
CisgICAgZG91YmxlIGR5ID0gMjsKKyAgICBkb3VibGUgZHogPSAzOworCisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kU2NhbGUoc3gs
IHN5LCBzeik7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoZHgsIGR5LCBkeik7CisK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFNjYWxlTWF0cml4OworICAgIGV4
cGVjdGVkU2NhbGVNYXRyaXguc2NhbGUzZChzeCwgc3ksIHN6KTsKKworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGV4cGVjdGVkVHJhbnNsYXRlTWF0cml4OworICAgIGV4cGVjdGVkVHJhbnNs
YXRlTWF0cml4LnRyYW5zbGF0ZTNkKGR4LCBkeSwgZHopOworCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWRDb21iaW5lZE1hdHJpeCA9IGV4cGVjdGVkU2NhbGVNYXRyaXg7Cisg
ICAgZXhwZWN0ZWRDb21iaW5lZE1hdHJpeC5tdWx0aXBseShleHBlY3RlZFRyYW5zbGF0ZU1hdHJp
eCk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ29tYmlu
ZWRNYXRyaXgsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uVGVzdCwgYmxlbmRPcmRlcikKK3sKKyAgICBkb3VibGUgc3gxID0gMjsKKyAgICBkb3Vi
bGUgc3kxID0gNDsKKyAgICBkb3VibGUgc3oxID0gODsKKworICAgIGRvdWJsZSBkeDEgPSAxOwor
ICAgIGRvdWJsZSBkeTEgPSAyOworICAgIGRvdWJsZSBkejEgPSAzOworCisgICAgZG91YmxlIHN4
MiA9IDQ7CisgICAgZG91YmxlIHN5MiA9IDg7CisgICAgZG91YmxlIHN6MiA9IDE2OworCisgICAg
ZG91YmxlIGR4MiA9IDEwOworICAgIGRvdWJsZSBkeTIgPSAyMDsKKyAgICBkb3VibGUgZHoyID0g
MzA7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNGcm9tOworICAgIG9w
ZXJhdGlvbnNGcm9tLmFwcGVuZFNjYWxlKHN4MSwgc3kxLCBzejEpOworICAgIG9wZXJhdGlvbnNG
cm9tLmFwcGVuZFRyYW5zbGF0ZShkeDEsIGR5MSwgZHoxKTsKKworICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRTY2FsZShzeDIs
IHN5Miwgc3oyKTsKKyAgICBvcGVyYXRpb25zVG8uYXBwZW5kVHJhbnNsYXRlKGR4MiwgZHkyLCBk
ejIpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVGcm9tOworICAgIHNjYWxl
RnJvbS5zY2FsZTNkKHN4MSwgc3kxLCBzejEpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zbGF0ZUZyb207CisgICAgdHJhbnNsYXRlRnJvbS50cmFuc2xhdGUzZChkeDEsIGR5MSwg
ZHoxKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlVG87CisgICAgc2NhbGVU
by5zY2FsZTNkKHN4Miwgc3kyLCBzejIpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zbGF0ZVRvOworICAgIHRyYW5zbGF0ZVRvLnRyYW5zbGF0ZTNkKGR4MiwgZHkyLCBkejIpOwor
CisgICAgZG91YmxlIHByb2dyZXNzID0gMC4yNTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGJsZW5kZWRTY2FsZSA9IHNjYWxlVG87CisgICAgYmxlbmRlZFNjYWxlLmJsZW5kKHNjYWxl
RnJvbSwgcHJvZ3Jlc3MpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRlZFRy
YW5zbGF0ZSA9IHRyYW5zbGF0ZVRvOworICAgIGJsZW5kZWRUcmFuc2xhdGUuYmxlbmQodHJhbnNs
YXRlRnJvbSwgcHJvZ3Jlc3MpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWQgPSBibGVuZGVkU2NhbGU7CisgICAgZXhwZWN0ZWQubXVsdGlwbHkoYmxlbmRlZFRyYW5zbGF0
ZSk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVy
YXRpb25zVG8uYmxlbmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNoZWNrUHJvZ3Jlc3MoZG91YmxlIHByb2dyZXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbU1hdHJpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvTWF0cml4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmcm9tVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zJiB0b1RyYW5zZm9ybSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZE1hdHJpeCA9IHRvTWF0cml4OworICAgIGV4cGVjdGVkTWF0cml4LmJsZW5k
KGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkTWF0cml4LCB0b1RyYW5zZm9ybS5ibGVuZChmcm9tVHJhbnNmb3JtLCBwcm9n
cmVzcykpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kUHJvZ3Jl
c3MpCit7CisgICAgZG91YmxlIHN4ID0gMjsKKyAgICBkb3VibGUgc3kgPSA0OworICAgIGRvdWJs
ZSBzeiA9IDg7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAg
ICBvcGVyYXRpb25zRnJvbS5hcHBlbmRTY2FsZShzeCwgc3ksIHN6KTsKKworICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeEZyb207CisgICAgbWF0cml4RnJvbS5zY2FsZTNkKHN4LCBz
eSwgc3opOworCisgICAgc3ggPSA0OworICAgIHN5ID0gODsKKyAgICBzeiA9IDE2OworICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5hcHBl
bmRTY2FsZShzeCwgc3ksIHN6KTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eFRvOworICAgIG1hdHJpeFRvLnNjYWxlM2Qoc3gsIHN5LCBzeik7CisKKyAgICBjaGVja1Byb2dy
ZXNzKC0xLCBtYXRyaXhGcm9tLCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNU
byk7CisgICAgY2hlY2tQcm9ncmVzcygwLCBtYXRyaXhGcm9tLCBtYXRyaXhUbywgb3BlcmF0aW9u
c0Zyb20sIG9wZXJhdGlvbnNUbyk7CisgICAgY2hlY2tQcm9ncmVzcygwLjI1LCBtYXRyaXhGcm9t
LCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNUbyk7CisgICAgY2hlY2tQcm9n
cmVzcygwLjUsIG1hdHJpeEZyb20sIG1hdHJpeFRvLCBvcGVyYXRpb25zRnJvbSwgb3BlcmF0aW9u
c1RvKTsKKyAgICBjaGVja1Byb2dyZXNzKDEsIG1hdHJpeEZyb20sIG1hdHJpeFRvLCBvcGVyYXRp
b25zRnJvbSwgb3BlcmF0aW9uc1RvKTsKKyAgICBjaGVja1Byb2dyZXNzKDIsIG1hdHJpeEZyb20s
IG1hdHJpeFRvLCBvcGVyYXRpb25zRnJvbSwgb3BlcmF0aW9uc1RvKTsKK30KKworVEVTVChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFdoZW5UeXBlc0RvTm90TWF0Y2gpCit7CisgICAg
ZG91YmxlIHN4MSA9IDI7CisgICAgZG91YmxlIHN5MSA9IDQ7CisgICAgZG91YmxlIHN6MSA9IDg7
CisKKyAgICBkb3VibGUgZHgxID0gMTsKKyAgICBkb3VibGUgZHkxID0gMjsKKyAgICBkb3VibGUg
ZHoxID0gMzsKKworICAgIGRvdWJsZSBzeDIgPSA0OworICAgIGRvdWJsZSBzeTIgPSA4OworICAg
IGRvdWJsZSBzejIgPSAxNjsKKworICAgIGRvdWJsZSBkeDIgPSAxMDsKKyAgICBkb3VibGUgZHky
ID0gMjA7CisgICAgZG91YmxlIGR6MiA9IDMwOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zRnJvbTsKKyAgICBvcGVyYXRpb25zRnJvbS5hcHBlbmRTY2FsZShzeDEsIHN5
MSwgc3oxKTsKKyAgICBvcGVyYXRpb25zRnJvbS5hcHBlbmRUcmFuc2xhdGUoZHgxLCBkeTEsIGR6
MSk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAgICBvcGVy
YXRpb25zVG8uYXBwZW5kVHJhbnNsYXRlKGR4MiwgZHkyLCBkejIpOworICAgIG9wZXJhdGlvbnNU
by5hcHBlbmRTY2FsZShzeDIsIHN5Miwgc3oyKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGZyb207CisgICAgZnJvbS5zY2FsZTNkKHN4MSwgc3kxLCBzejEpOworICAgIGZyb20udHJh
bnNsYXRlM2QoZHgxLCBkeTEsIGR6MSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
bzsKKyAgICB0by50cmFuc2xhdGUzZChkeDIsIGR5MiwgZHoyKTsKKyAgICB0by5zY2FsZTNkKHN4
Miwgc3kyLCBzejIpOworCisgICAgZG91YmxlIHByb2dyZXNzID0gMC4yNTsKKworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkID0gdG87CisgICAgZXhwZWN0ZWQuYmxlbmQoZnJv
bSwgcHJvZ3Jlc3MpOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBl
Y3RlZCwgb3BlcmF0aW9uc1RvLmJsZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144975</attachid>
            <date>2012-05-30 19:57:56 -0700</date>
            <delta_ts>2012-05-31 10:38:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87510-20120530225754.patch</filename>
            <type>text/plain</type>
            <size>27135</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4ODM1MDEwODA2OTVh
NTcxNjQ5OTM1NzY1MDJiNTQyZjMxZTA2ZjljLi5jZDZkOTY3YmM2MDU5ZDRkNDg4Mzk1YTU5ZjRm
YTNhOGM2ZTdiMjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0zMCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6On5X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6Om9wZXJhdG9yPSk6CisKIDIwMTItMDUtMjkgIFNoYXduIFNpbmdo
ICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtYWtlIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IG9iamVjdCB1c2FibGUgYnkgbm9uLXdlYmtpdCBjb2RlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJiMjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uMDgw
ZmY3YjE3ZTYxNmFhYjcxMjIyZTAwZGU1M2E2N2QwOTM5OTc0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQxIEBACisyMDEyLTA1LTMwICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gY3JlYXRlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiBpbnRl
cmZhY2UgZm9yIGNocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NzUxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHM6CisgICAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zVGVzdC50cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZQorICAgICAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uc1Rlc3QubWF0Y2hlc1R5cGVzU2FtZUxlbmd0aAorICAgICAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QubWF0Y2hlc1R5cGVzRGlmZmVyZW50TGVuZ3RoCisg
ICAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5hcHBseVRyYW5zbGF0ZQorICAg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlSb3RhdGUKKyAgICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmFwcGx5U2NhbGUKKyAgICAgICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmFwcGx5U2tldworICAgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlQZXJzcGVjdGl2ZQorICAgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uc1Rlc3QuYXBwbHlNYXRyaXgKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnNUZXN0LmFwcGx5T3JkZXIKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnNUZXN0LmJsZW5kT3JkZXIKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmJsZW5kUHJvZ3Jlc3MKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmJs
ZW5kV2hlblR5cGVzRG9Ob3RNYXRjaAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnNQcml2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBw
bHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFRyYW5zbGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2tldyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFBlcnNwZWN0aXZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kTWF0cml4
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6cmVzZXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjppbml0aWFsaXplKToKKwogMjAx
Mi0wNS0yOSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIG1ha2UgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0IHVzYWJsZSBi
eSBub24td2Via2l0IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOWIzOGQ2ZGJk
MjgwYzRmNDlhZjU2OWM3OGZjOTNmZTFmNGE5MGQwMy4uYzE1YTYxY2MzNTZiZTU0MDZhZjA2ZTA4
N2RkNTc5MzgxNTQ5ZmE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxMi0wNS0zMCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNl
IGZvciBjaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODc1MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9y
bU9wZXJhdGlvbnNUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChURVNUKToKKyAgICAgICAgKGNo
ZWNrUHJvZ3Jlc3MpOgorCiAyMDEyLTA1LTI5ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IEFsaWduIGNvZGVzIGFuZCBuYW1lcyBmb3Ig
SURCLXNwZWNpZmljIGFuZCBET00tc3BlY2lmaWMgZXJyb3JzL2V4Y2VwdGlvbnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRm
b3JtLmd5cGkKaW5kZXggYTg0ZmI0NzMyNGRhYWQ4MWM3MGM3MDI3NmRlZGYxNDFiYWJhNWRiYy4u
NTRhZjE5NjIzZjJlZDZmMDc4ZThlMGI3Yjg4NTZmNGJkN2I5ZDBkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3Jt
Lmd5cGkKQEAgLTEwMCw2ICsxMDAsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJUaHJlYWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZFNhZmVE
YXRhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUHJlcmVuZGVyLmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmggYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NDk3YWFhNTU0OWQzNDA5OTdiODZmODc2M2Y2ZWRkYzYxOWJkZDk2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc19oCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlOworCisvLyBUcmFuc2Zvcm0g
b3BlcmF0aW9ucyBhcmUgYSBkZWNvbXBvc2VkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gSXQgY2Fu
IGJlCisvLyBhcHBsaWVkIHRvIG9idGFpbiBhIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGF0IGFu
eSB0aW1lLCBhbmQgY2FuIGJlIGJsZW5kZWQKKy8vIGludGVsbGlnZW50bHkgd2l0aCBvdGhlciB0
cmFuc2Zvcm0gb3BlcmF0aW9ucywgc28gbG9uZyBhcyB0aGV5IHJlcHJlc2VudCB0aGUKKy8vIHNh
bWUgZGVjb21wb3NpdGlvbi4gRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSB0cmFuc2Zvcm0gdGhh
dCBpcyBtYWRlIHVwIG9mCisvLyBhIHJvdGF0aW9uIGZvbGxvd2VkIGJ5IHNrZXcsIGl0IGNhbiBi
ZSBibGVuZGVkIGludGVsbGlnZW50bHkgd2l0aCBhbm90aGVyCisvLyB0cmFuc2Zvcm0gbWFkZSB1
cCBvZiBhIHJvdGF0aW9uIGZvbGxvd2VkIGJ5IGEgc2tldy4gQmxlbmRpbmcgaXMgcG9zc2libGUg
aWYKKy8vIHdlIGhhdmUgdHdvIGRpc3NpbWlsYXIgc2V0cyBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9u
cywgYnV0IHRoZSBlZmZlY3QgbWF5IG5vdAorLy8gYmUgd2hhdCB3YXMgaW50ZW5kZWQuIEZvciBt
b3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGNvbW1lbnRzIGZvciB0aGUgYmxlbmQKKy8vIGZ1bmN0
aW9uIGJlbG93LgorY2xhc3MgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB7CitwdWJsaWM6CisgICAg
fldlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpIHsgaW5pdGlhbGl6ZShvdGhl
cik7IH0KKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcGVyYXRvcj0oY29uc3QgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpCisgICAgeworICAgICAgICBpbml0aWFsaXplKG90aGVy
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vIFJldHVybnMgYSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXggcmVwcmVzZW50aW5nIHRoZXNlIHRyYW5zZm9ybSBvcGVyYXRpb25z
LgorICAgIFdFQktJVF9FWFBPUlQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHkoKSBjb25z
dDsKKworICAgIC8vIEdpdmVuIGFub3RoZXIgc2V0IG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zIGFu
ZCBhIHByb2dyZXNzIGluIHRoZSByYW5nZQorICAgIC8vIFswLCAxXSwgcmV0dXJucyBhIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGludGVybWVkaWF0ZQorICAgIC8vIHZh
bHVlLiBJZiB0aGlzLT5tYXRjaGVzVHlwZXMoZnJvbSksIHRoZW4gZWFjaCBvZiB0aGUgb3BlcmF0
aW9ucyBhcmUKKyAgICAvLyBibGVuZGVkIHNlcGFyYXRlbHkgYW5kIHRoZW4gY29tYmluZWQuIE90
aGVyd2lzZSwgdGhlIHR3byBzZXRzIG9mCisgICAgLy8gdHJhbnNmb3JtcyBhcmUgYmFrZWQgdG8g
bWF0cmljZXMgKHVzaW5nIGFwcGx5KSwgYW5kIHRoZSBtYXRyaWNlcyBhcmUKKyAgICAvLyB0aGVu
IGRlY29tcG9zZWQgYW5kIGludGVycG9sYXRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy0yZC10cmFuc2Zvcm1zLTIw
MTExMjE1LyNtYXRyaXgtZGVjb21wb3NpdGlvbi4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBv
cGVyYXRpb24gYW5kIGl0cyBkZXNjZW5kYW50cyBoYXZlIHRoZSBzYW1lIHR5cGVzCisgICAgLy8g
YXMgb3RoZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbWF0
Y2hlc1R5cGVzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdDsKKwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcyk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGFwcGVuZFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSk7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCk7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOworCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGlu
aXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgcHJvdG90eXBlKTsKKworICAg
IFdlYlByaXZhdGVPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjZWMxMzkzMzY1NTM3MDY2N2I1N2Nk
MDlkZjM4MTU5MzdmMmJjMTZiLi5mZTNjZTM5NDE4OWNjMGRmYTBiMjZiYjAxZjQ0ZTFlZWVjZTQ1
MTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MzI3LDYgKzgzMjcsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUHJlcmVuZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMRXJyb3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlVSTFJlcXVlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjEyYmQwMGIyNmY0ODBkMTM5YjdjMjI2OWUyNzczY2NkNzY3ZmMyZTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oPgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RydWN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7CisgICAgZW51bSBUeXBlIHsK
KyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlLAorICAgICAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25Sb3RhdGUsCisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxl
LAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25Ta2V3LAorICAgICAgICBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25QZXJzcGVjdGl2ZSwKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0
cml4CisgICAgfTsKKworICAgIFR5cGUgdHlwZTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7Cit9OworCitjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSB7Citw
dWJsaWM6CisgICAgVmVjdG9yPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gb3BlcmF0aW9uczsKK307
CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGx5
KCkgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkK
KyAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkobV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJp
eCk7CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdG9SZXR1cm47CisgICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tKSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRlZCA9IG1fcHJpdmF0
ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXg7CisgICAgICAgICAgICBibGVuZGVkLmJsZW5kKGZyb20u
bV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICAgICAg
dG9SZXR1cm4ubXVsdGlwbHkoYmxlbmRlZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICB0b1JldHVybiA9IGFwcGx5KCk7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGZyb21UcmFuc2Zvcm0gPSBmcm9tLmFwcGx5KCk7CisgICAgICAgIHRvUmV0dXJuLmJsZW5kKGZy
b21UcmFuc2Zvcm0sIHByb2dyZXNzKTsKKyAgICB9CisgICAgcmV0dXJuIHRvUmV0dXJuOworfQor
Citib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBlcyhjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9wcml2YXRlLT5vcGVy
YXRpb25zLnNpemUoKSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wcml2YXRlLT5vcGVy
YXRpb25zW2ldLnR5cGUgIT0gb3RoZXIubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHopCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwor
ICAgIHRvQWRkLm1hdHJpeC50cmFuc2xhdGUzZCh4LCB5LCB6KTsKKyAgICB0b0FkZC50eXBlID0g
V2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU7Cisg
ICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
IHosIGRvdWJsZSBkZWdyZWVzKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsK
KyAgICB0b0FkZC5tYXRyaXgucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7CisgICAgdG9BZGQu
dHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRl
OworICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lkIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91
YmxlIHopCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOworICAgIHRvQWRkLm1h
dHJpeC5zY2FsZTNkKHgsIHksIHopOworICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVy
YXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlOworICAgIG1fcHJpdmF0ZS0+b3BlcmF0
aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFw
cGVuZFNrZXcoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
biB0b0FkZDsKKyAgICB0b0FkZC5tYXRyaXguc2tld1goeCk7CisgICAgdG9BZGQubWF0cml4LnNr
ZXdZKHkpOworICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5z
Zm9ybU9wZXJhdGlvblNrZXc7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0Fk
ZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUo
ZG91YmxlIGRlcHRoKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKKyAgICB0
b0FkZC5tYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7CisgICAgdG9BZGQudHlwZSA9IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU7Cisg
ICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgpCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOworICAgIHRv
QWRkLm1hdHJpeCA9IG1hdHJpeDsKKyAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0
aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXg7CisgICAgbV9wcml2YXRlLT5vcGVyYXRp
b25zLmFwcGVuZCh0b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6cmVz
ZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjppbml0aWFsaXplKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKQorewor
ICAgIGlmIChtX3ByaXZhdGUuZ2V0KCkgIT0gb3RoZXIubV9wcml2YXRlLmdldCgpKQorICAgICAg
ICBtX3ByaXZhdGUucmVzZXQobmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlKCpvdGhl
ci5tX3ByaXZhdGUuZ2V0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGluaXRpYWxpemUoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRl
eCAxYTY4OGJiY2NjMmJhYjhkMDdjZmNlNTM4ZmRjNTcwMGQzNGViMmI5Li5hZDhkMjJhYTU2MjM3
MDMyMzY4ZTMwMmJhMjk4MzZhMmEzNDUxMGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKQEAgLTE1Miw2ICsxNTIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldERlZmxh
dGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXhUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXF1ZXN0VGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlc3BvbnNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRl
YWY3YWQ3NGY1MzI5MWVmNWI0MWFhZTEwOWVkMjcxODBlZjBkOWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKworI2luY2x1
ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaW5jbHVkZSAiQ0NMYXll
clRyZWVUZXN0Q29tbW9uLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworVEVTVChXZWJUcmFuc2Zv
cm1PcGVyYXRpb25UZXN0LCB0cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZSkKK3sKKyAgICBWZWN0b3I8
T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gdHJhbnNmb3JtczsKKworICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMqIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsK
KyAgICB0b0FkZC0+YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zZm9ybXMuYXBw
ZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICB0cmFu
c2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAg
ICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOwor
ICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5l
dyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFBlcnNwZWN0aXZl
KDgwMCk7CisgICAgdHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3Jtcy5zaXplKCk7ICsraSkgeworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgIGJvb2wgbWF0Y2hlc1R5cGUgPSB0cmFuc2Zvcm1zW2ldLT5tYXRjaGVzVHlwZXMoKnRyYW5z
Zm9ybXNbal0pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoKGkgPT0gaiAmJiBtYXRjaGVzVHlw
ZSkgfHwgIW1hdGNoZXNUeXBlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkKK3sKKyAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXM7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xh
dGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Cisg
ICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisKKyAgICBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIHNrZXdzOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tl
d3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOworCisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzMjsKKyAgICB0cmFuc2xhdGVzMi5hcHBl
bmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAs
IDAsIDApOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczMgPSB0cmFuc2xhdGVzMjsKKworICAg
IEVYUEVDVF9GQUxTRSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyhza2V3cykpOworICAgIEVYUEVD
VF9UUlVFKHRyYW5zbGF0ZXMubWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMyKSk7CisgICAgRVhQRUNU
X1RSVUUodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXModHJhbnNsYXRlczMpKTsKK30KKworVEVTVChX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzRGlmZmVyZW50TGVuZ3RoKQorewor
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczsKKyAgICB0cmFuc2xhdGVzLmFw
cGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgw
LCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgc2tld3M7CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAw
KTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyB0cmFuc2xhdGVzMjsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwg
MCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworCisgICAgRVhQ
RUNUX0ZBTFNFKHRyYW5zbGF0ZXMubWF0Y2hlc1R5cGVzKHNrZXdzKSk7CisgICAgRVhQRUNUX0ZB
TFNFKHRyYW5zbGF0ZXMubWF0Y2hlc1R5cGVzKHRyYW5zbGF0ZXMyKSk7Cit9CisKK1RFU1QoV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlUcmFuc2xhdGUpCit7CisgICAgZG91YmxlIHgg
PSAxOworICAgIGRvdWJsZSB5ID0gMjsKKyAgICBkb3VibGUgeiA9IDM7CisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRl
KHgsIHksIHopOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgIGV4
cGVjdGVkLnRyYW5zbGF0ZTNkKHgsIHksIHopOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlSb3RhdGUpCit7CisgICAgZG91YmxlIHggPSAxOwor
ICAgIGRvdWJsZSB5ID0gMjsKKyAgICBkb3VibGUgeiA9IDM7CisgICAgZG91YmxlIGRlZ3JlZXMg
PSA4MDsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0
aW9ucy5hcHBlbmRSb3RhdGUoeCwgeSwgeiwgZGVncmVlcyk7CisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWQ7CisgICAgZXhwZWN0ZWQucm90YXRlM2QoeCwgeSwgeiwgZGVncmVl
cyk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0
aW9ucy5hcHBseSgpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBs
eVNjYWxlKQoreworICAgIGRvdWJsZSB4ID0gMTsKKyAgICBkb3VibGUgeSA9IDI7CisgICAgZG91
YmxlIHogPSAzOworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBv
cGVyYXRpb25zLmFwcGVuZFNjYWxlKHgsIHksIHopOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnNjYWxlM2QoeCwgeSwgeik7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5hcHBseSgpKTsK
K30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseVNrZXcpCit7CisgICAg
ZG91YmxlIHggPSAxOworICAgIGRvdWJsZSB5ID0gMjsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRTa2V3KHgsIHkpOworICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnNrZXdYKHgpOwor
ICAgIGV4cGVjdGVkLnNrZXdZKHkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYXBwbHkoKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uVGVzdCwgYXBwbHlQZXJzcGVjdGl2ZSkKK3sKKyAgICBkb3VibGUgZGVwdGggPSA4
MDA7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlv
bnMuYXBwZW5kUGVyc3BlY3RpdmUoZGVwdGgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLmFwcGx5UGVyc3BlY3RpdmUoZGVwdGgpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYXBwbHko
KSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlNYXRyaXgpCit7
CisgICAgZG91YmxlIGR4ID0gMTsKKyAgICBkb3VibGUgZHkgPSAyOworICAgIGRvdWJsZSBkeiA9
IDM7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRNYXRyaXg7CisgICAgZXhw
ZWN0ZWRNYXRyaXgudHJhbnNsYXRlM2QoZHgsIGR5LCBkeik7CisgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBtYXRyaXhUcmFuc2Zvcm07CisgICAgbWF0cml4VHJhbnNmb3JtLmFwcGVuZE1hdHJp
eChleHBlY3RlZE1hdHJpeCk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShl
eHBlY3RlZE1hdHJpeCwgbWF0cml4VHJhbnNmb3JtLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRy
YW5zZm9ybU9wZXJhdGlvblRlc3QsIGFwcGx5T3JkZXIpCit7CisgICAgZG91YmxlIHN4ID0gMjsK
KyAgICBkb3VibGUgc3kgPSA0OworICAgIGRvdWJsZSBzeiA9IDg7CisKKyAgICBkb3VibGUgZHgg
PSAxOworICAgIGRvdWJsZSBkeSA9IDI7CisgICAgZG91YmxlIGR6ID0gMzsKKworICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFNjYWxl
KHN4LCBzeSwgc3opOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGR4LCBkeSwgZHop
OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRTY2FsZU1hdHJpeDsKKyAg
ICBleHBlY3RlZFNjYWxlTWF0cml4LnNjYWxlM2Qoc3gsIHN5LCBzeik7CisKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFRyYW5zbGF0ZU1hdHJpeDsKKyAgICBleHBlY3RlZFRy
YW5zbGF0ZU1hdHJpeC50cmFuc2xhdGUzZChkeCwgZHksIGR6KTsKKworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGV4cGVjdGVkQ29tYmluZWRNYXRyaXggPSBleHBlY3RlZFNjYWxlTWF0cml4
OworICAgIGV4cGVjdGVkQ29tYmluZWRNYXRyaXgubXVsdGlwbHkoZXhwZWN0ZWRUcmFuc2xhdGVN
YXRyaXgpOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENv
bWJpbmVkTWF0cml4LCBvcGVyYXRpb25zLmFwcGx5KCkpOworfQorCitURVNUKFdlYlRyYW5zZm9y
bU9wZXJhdGlvblRlc3QsIGJsZW5kT3JkZXIpCit7CisgICAgZG91YmxlIHN4MSA9IDI7CisgICAg
ZG91YmxlIHN5MSA9IDQ7CisgICAgZG91YmxlIHN6MSA9IDg7CisKKyAgICBkb3VibGUgZHgxID0g
MTsKKyAgICBkb3VibGUgZHkxID0gMjsKKyAgICBkb3VibGUgZHoxID0gMzsKKworICAgIGRvdWJs
ZSBzeDIgPSA0OworICAgIGRvdWJsZSBzeTIgPSA4OworICAgIGRvdWJsZSBzejIgPSAxNjsKKwor
ICAgIGRvdWJsZSBkeDIgPSAxMDsKKyAgICBkb3VibGUgZHkyID0gMjA7CisgICAgZG91YmxlIGR6
MiA9IDMwOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAg
ICBvcGVyYXRpb25zRnJvbS5hcHBlbmRTY2FsZShzeDEsIHN5MSwgc3oxKTsKKyAgICBvcGVyYXRp
b25zRnJvbS5hcHBlbmRUcmFuc2xhdGUoZHgxLCBkeTEsIGR6MSk7CisKKyAgICBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAgICBvcGVyYXRpb25zVG8uYXBwZW5kU2NhbGUo
c3gyLCBzeTIsIHN6Mik7CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFRyYW5zbGF0ZShkeDIsIGR5
MiwgZHoyKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlRnJvbTsKKyAgICBz
Y2FsZUZyb20uc2NhbGUzZChzeDEsIHN5MSwgc3oxKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2xhdGVGcm9tOworICAgIHRyYW5zbGF0ZUZyb20udHJhbnNsYXRlM2QoZHgxLCBk
eTEsIGR6MSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZVRvOworICAgIHNj
YWxlVG8uc2NhbGUzZChzeDIsIHN5Miwgc3oyKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2xhdGVUbzsKKyAgICB0cmFuc2xhdGVUby50cmFuc2xhdGUzZChkeDIsIGR5MiwgZHoy
KTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuMjU7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBibGVuZGVkU2NhbGUgPSBzY2FsZVRvOworICAgIGJsZW5kZWRTY2FsZS5ibGVuZChz
Y2FsZUZyb20sIHByb2dyZXNzKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5k
ZWRUcmFuc2xhdGUgPSB0cmFuc2xhdGVUbzsKKyAgICBibGVuZGVkVHJhbnNsYXRlLmJsZW5kKHRy
YW5zbGF0ZUZyb20sIHByb2dyZXNzKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkID0gYmxlbmRlZFNjYWxlOworICAgIGV4cGVjdGVkLm11bHRpcGx5KGJsZW5kZWRUcmFu
c2xhdGUpOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwg
b3BlcmF0aW9uc1RvLmJsZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQorCitzdGF0
aWMgdm9pZCBjaGVja1Byb2dyZXNzKGRvdWJsZSBwcm9ncmVzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb21NYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0b01h
dHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyYgZnJvbVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyYgdG9UcmFuc2Zvcm0pCit7CisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWRNYXRyaXggPSB0b01hdHJpeDsKKyAgICBleHBlY3RlZE1hdHJpeC5i
bGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZE1hdHJpeCwgdG9UcmFuc2Zvcm0uYmxlbmQoZnJvbVRyYW5zZm9ybSwg
cHJvZ3Jlc3MpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFBy
b2dyZXNzKQoreworICAgIGRvdWJsZSBzeCA9IDI7CisgICAgZG91YmxlIHN5ID0gNDsKKyAgICBk
b3VibGUgc3ogPSA4OworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc0Zyb207
CisgICAgb3BlcmF0aW9uc0Zyb20uYXBwZW5kU2NhbGUoc3gsIHN5LCBzeik7CisKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhGcm9tOworICAgIG1hdHJpeEZyb20uc2NhbGUzZChz
eCwgc3ksIHN6KTsKKworICAgIHN4ID0gNDsKKyAgICBzeSA9IDg7CisgICAgc3ogPSAxNjsKKyAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAgICBvcGVyYXRpb25zVG8u
YXBwZW5kU2NhbGUoc3gsIHN5LCBzeik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXhUbzsKKyAgICBtYXRyaXhUby5zY2FsZTNkKHN4LCBzeSwgc3opOworCisgICAgY2hlY2tQ
cm9ncmVzcygtMSwgbWF0cml4RnJvbSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRp
b25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMCwgbWF0cml4RnJvbSwgbWF0cml4VG8sIG9wZXJh
dGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworICAgIGNoZWNrUHJvZ3Jlc3MoMC4yNSwgbWF0cml4
RnJvbSwgbWF0cml4VG8sIG9wZXJhdGlvbnNGcm9tLCBvcGVyYXRpb25zVG8pOworICAgIGNoZWNr
UHJvZ3Jlc3MoMC41LCBtYXRyaXhGcm9tLCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9wZXJh
dGlvbnNUbyk7CisgICAgY2hlY2tQcm9ncmVzcygxLCBtYXRyaXhGcm9tLCBtYXRyaXhUbywgb3Bl
cmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNUbyk7CisgICAgY2hlY2tQcm9ncmVzcygyLCBtYXRyaXhG
cm9tLCBtYXRyaXhUbywgb3BlcmF0aW9uc0Zyb20sIG9wZXJhdGlvbnNUbyk7Cit9CisKK1RFU1Qo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRXaGVuVHlwZXNEb05vdE1hdGNoKQorewor
ICAgIGRvdWJsZSBzeDEgPSAyOworICAgIGRvdWJsZSBzeTEgPSA0OworICAgIGRvdWJsZSBzejEg
PSA4OworCisgICAgZG91YmxlIGR4MSA9IDE7CisgICAgZG91YmxlIGR5MSA9IDI7CisgICAgZG91
YmxlIGR6MSA9IDM7CisKKyAgICBkb3VibGUgc3gyID0gNDsKKyAgICBkb3VibGUgc3kyID0gODsK
KyAgICBkb3VibGUgc3oyID0gMTY7CisKKyAgICBkb3VibGUgZHgyID0gMTA7CisgICAgZG91Ymxl
IGR5MiA9IDIwOworICAgIGRvdWJsZSBkejIgPSAzMDsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uc0Zyb207CisgICAgb3BlcmF0aW9uc0Zyb20uYXBwZW5kU2NhbGUoc3gx
LCBzeTEsIHN6MSk7CisgICAgb3BlcmF0aW9uc0Zyb20uYXBwZW5kVHJhbnNsYXRlKGR4MSwgZHkx
LCBkejEpOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zVG87CisgICAg
b3BlcmF0aW9uc1RvLmFwcGVuZFRyYW5zbGF0ZShkeDIsIGR5MiwgZHoyKTsKKyAgICBvcGVyYXRp
b25zVG8uYXBwZW5kU2NhbGUoc3gyLCBzeTIsIHN6Mik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBmcm9tOworICAgIGZyb20uc2NhbGUzZChzeDEsIHN5MSwgc3oxKTsKKyAgICBmcm9t
LnRyYW5zbGF0ZTNkKGR4MSwgZHkxLCBkejEpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggdG87CisgICAgdG8udHJhbnNsYXRlM2QoZHgyLCBkeTIsIGR6Mik7CisgICAgdG8uc2NhbGUz
ZChzeDIsIHN5Miwgc3oyKTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuMjU7CisKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZCA9IHRvOworICAgIGV4cGVjdGVkLmJsZW5k
KGZyb20sIHByb2dyZXNzKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWQsIG9wZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsK
K30K
</data>

          </attachment>
      

    </bug>

</bugzilla>