<?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>41159</bug_id>
          
          <creation_ts>2010-06-24 07:42:26 -0700</creation_ts>
          <short_desc>Come up with a more efficient way to represent Path segments</short_desc>
          <delta_ts>2010-08-07 09:14:22 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242511</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-24 07:42:26 -0700</bug_when>
    <thetext>When we&apos;re parsing path data, we&apos;re building a Path object, and the bloated SVGPathSeg datastructure.
Instead we should come up with a more memory-efficient way to store path segment data, that can be easily converted to a SVGPathSeg, lazily if someone accesses the SVGPathSeg datastructure from the bindings (eg. JavaScript).

Uploading my prototype concept soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242514</commentid>
    <comment_count>1</comment_count>
      <attachid>59655</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-24 07:45:43 -0700</bug_when>
    <thetext>Created attachment 59655
Prototyping

This is NOT a patch meant for inclusion into WebKit. Just moved my prototype files into WebCore/test/ used svn-create-patch, to share my thoughts here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242517</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-24 07:49:51 -0700</bug_when>
    <thetext>If you want to apply the patch to test it. Grab patch, svn-apply FunPatch.diff
cd WebCore/test; qmake-mac; make; Builds/dataStream. That will give you:

&lt;snippet&gt;
Dumping size information of our primitive types:
BoolByte: 1
FloatByte: 4
UnsignedShortByte: 2

Serializing path data into bytes...
 -&gt; moveTo(10.1, -99.9)
 -&gt; lineTo(1.17549e-38, 3.40282e+38)
 -&gt; arcTo(1, 2, 3, 4, 5, 0, 1)

Generating bytestream...
Dumping byte stream with 46 entries: 0x00 0x00 0x9a 0x99 0x21 0x41 0xcd 0xcc 0xc7 0xc2 0x01 0x00 0x00 0x00 0x80 0x00 0xff 0xff 0x7f 0x7f 0x02 0x00 0x00 0x00 0x80 0x3f 0x00 0x00 0x00 0x40 0x00 0x00 0x40 0x40 0x00 0x00 0x80 0x40 0x00 0x00 0xa0 0x40 0x00 0x01 0x03 0x00

Parsing bytestream...
 -&gt; moveTo(10.1, -99.9)
 -&gt; lineTo(1.17549e-38, 3.40282e+38)
 -&gt; arcTo(1, 2, 3, 4, 5, 0, 1)
 -&gt; end()
&lt;/snippet&gt;

That&apos;s my plan for optimizing the memory-use. To convert the parsed &quot;d&quot; attribute of a SVGPathElement, into a bytestream, and not building any SVGPathSeg datastructure. SVGPathSeg can easily be build from this bytestream, if and only if needed (of course the other direction is easily possible as well).

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242518</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-24 07:50:51 -0700</bug_when>
    <thetext>Having such a datastructure would also help ports like OpenVG, which doesn&apos;t have any way to access the path seg information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242522</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-24 07:58:07 -0700</bug_when>
    <thetext>Note this uses some STL code, when we&apos;d have this in WebCore, we&apos;d of course use Vector instead of std::vector, with a sane predefined capacity, to keep reallocations as small as possible.

This is really just my first stab at this problem. Anoter idea to make the bytestream more robust would be to introduce PathDataTokenStart, and save the number of segments in the bytestream, to be sure we never read past the end.

The way I&apos;ve prototyped it for now, seems to be the most memory efficient way though (is that true? needs confirmation :-). Before continuing to work on that I need input from our experts, like Darin Adler &amp; co - whether this approach is a good idea at all, or whether it&apos;s too dangerous etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243213</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-25 14:59:14 -0700</bug_when>
    <thetext>You can implement a byte stream without all the type punning, just by shifting and masking integers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243214</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-25 15:00:58 -0700</bug_when>
    <thetext>Although for floats, I guess the type punning is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243347</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-26 01:26:20 -0700</bug_when>
    <thetext>I&apos;m fine with the ByteStreamWriter. But I think the ByteStreamReader goes into the wrong direction. ByteStreamWriter can be extended by new commands, dependent of the different needs and use cases. But ByteStreamReader should be as general as possible. That means, a caller should know himself, how the bytestream is builded. And ByteStreamReader should just have general methods to ask for bool, int and float and stores the current position in the stream. A caller can ask for the values one after the other without taking care of the current StreamPosition. If parsing fails, ByteStreamReader returns false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243374</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-26 06:26:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m fine with the ByteStreamWriter. But I think the ByteStreamReader goes into the wrong direction. ByteStreamWriter can be extended by new commands, dependent of the different needs and use cases. But ByteStreamReader should be as general as possible. That means, a caller should know himself, how the bytestream is builded. And ByteStreamReader should just have general methods to ask for bool, int and float and stores the current position in the stream. A caller can ask for the values one after the other without taking care of the current StreamPosition. If parsing fails, ByteStreamReader returns false.

I don&apos;t think it makes sense to generalize them. Think of ByteStreamReader/Writer as PathByteStreamReader/Writer classes. See SVGPathParser abstract interface in SVGParserUtilities.cpp - something like that is meant to be passed to PathByteStreamReader, so it will just forward the call to it. The user which derives from SVGPathParser (needs a rename) can decide what do to with the data (eg. build d attribute string, build SVGPathSeg datastructure etc..)

It would be very dangerous, to have just a generic reader classs, and a specific writer class - we should assure that they are always in sync.

I have no idea why you think that the encapsulation doesn&apos;t make much sense? After all the whole byte stream should be an implementation detail. SVGPathEllement should just store the &quot;ByteStream&quot; object, and use convenience methods to build a d attribute string and/or a SVGPathSeg data structure from it.

I can go more into details later, need to leave now, for the next 2 days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243376</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-26 06:47:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I&apos;m fine with the ByteStreamWriter. But I think the ByteStreamReader goes into the wrong direction. ByteStreamWriter can be extended by new commands, dependent of the different needs and use cases. But ByteStreamReader should be as general as possible. That means, a caller should know himself, how the bytestream is builded. And ByteStreamReader should just have general methods to ask for bool, int and float and stores the current position in the stream. A caller can ask for the values one after the other without taking care of the current StreamPosition. If parsing fails, ByteStreamReader returns false.
&gt; 
&gt; I don&apos;t think it makes sense to generalize them. Think of ByteStreamReader/Writer as PathByteStreamReader/Writer classes. See SVGPathParser abstract interface in SVGParserUtilities.cpp - something like that is meant to be passed to PathByteStreamReader, so it will just forward the call to it. The user which derives from SVGPathParser (needs a rename) can decide what do to with the data (eg. build d attribute string, build SVGPathSeg datastructure etc..)
&gt; 
&gt; It would be very dangerous, to have just a generic reader classs, and a specific writer class - we should assure that they are always in sync.
&gt; 
&gt; I have no idea why you think that the encapsulation doesn&apos;t make much sense? After all the whole byte stream should be an implementation detail. SVGPathEllement should just store the &quot;ByteStream&quot; object, and use convenience methods to build a d attribute string and/or a SVGPathSeg data structure from it.
&gt; 
&gt; I can go more into details later, need to leave now, for the next 2 days.

We have the same problem for SVGPolyElement, if we specialise your ByteStream, we end up in creating more than one instant of the Reader and Writer. Possible, but is it realy neccessary? Also, we need the values on Parsing the ByteStream one after the other to create a Path, compare different Bytestreams (normalized, unnormalized), create SVGPathSegLists. So either the ByteStreamParser can do all this, or we let SVGParseUtills and the elements do the work. Moving the code to SVGParseUtills makes it maybe possible to share more code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256205</commentid>
    <comment_count>10</comment_count>
      <attachid>62600</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-07-26 13:47:49 -0700</bug_when>
    <thetext>Created attachment 62600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256210</commentid>
    <comment_count>11</comment_count>
      <attachid>62600</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-26 13:52:25 -0700</bug_when>
    <thetext>Comment on attachment 62600
Patch

WebCore/svg/SVGGlyphElement.cpp:106
 +      SVGPathByteStream byteStream = byteStreamBuilder.buildFromPathData(value);
Seems you meant an OwnPtr here.  This is not safe at all.

WebCore/svg/SVGPathByteStream.h:46
 +  class SVGPathByteStream {
This needs to be Noncopyable.

WebCore/svg/SVGPathByteStream.h:64
 +      size_t m_size;
Why not a vector?

WebCore/svg/SVGPathByteStreamBuilder.cpp:57
 +      unsigned char* bytes = new unsigned char[size];
Ick.  Vector, please.

Why do we want this?  How do we test this?  What&apos;s the observable benefit?  Please write a test which shows the benefit.  If its memory usage, write a manual test which we can evaluate memory usage from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256285</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-07-26 15:31:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 62600 [details])
&gt; Why do we want this?  How do we test this?  What&apos;s the observable benefit?  Please write a test which shows the benefit.  If its memory usage, write a manual test which we can evaluate memory usage from.

If you look at the current code, we always create a SVGPathSegList and create the platform path out of it. If something changes, we recreacte the list and recreate the path. This is pretty slow and pretty unnecessary, since we don&apos;t need the SVGPathSegList most of the time (just for scripting together with SVGDOM). Otherwise we can&apos;t parse the dAttr directly to a platform path, since it wouldn&apos;t be possible to reproduce all path segments out of it for the synchonization with the segLists.
The byteStream is a intermediate format that can be parsed more easily and faster than a SVGPathSegList. The memory efficiency is not the main target, but a side effect on the general case (drawing path&apos;s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256290</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-26 15:36:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; If you look at the current code, we always create a SVGPathSegList and create the platform path out of it. If something changes, we recreacte the list and recreate the path. This is pretty slow and pretty unnecessary, since we don&apos;t need the SVGPathSegList most of the time (just for scripting together with SVGDOM). Otherwise we can&apos;t parse the dAttr directly to a platform path, since it wouldn&apos;t be possible to reproduce all path segments out of it for the synchonization with the segLists.
&gt; The byteStream is a intermediate format that can be parsed more easily and faster than a SVGPathSegList. The memory efficiency is not the main target, but a side effect on the general case (drawing path&apos;s).

That&apos;s fine.  :)  We just need a test to demonstrate that. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256302</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-26 15:52:49 -0700</bug_when>
    <thetext>It seems it should be easy to create both a parsing performance test as well as a memory test.  Or maybe they could be one and the same.

Either way, the tests are what are important here.  They clarify what we&apos;re trying to do and allow us to evaluate what we&apos;ve done or have yet to do.

Without metrics/tests a patch like this is nearly impossible to review.  The previously posted patch had some memory errors, but I wouldn&apos;t feel comfortable r+ing a fixed one until it has some tests to show what we&apos;re trying to do here. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259910</commentid>
    <comment_count>15</comment_count>
      <attachid>63425</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-04 00:33:24 -0700</bug_when>
    <thetext>Created attachment 63425
Patch v2

Fixed issues raised by Eric. No performance test at the moment. It&apos;s also not realy possible to perf test it, since SVGPathElement still don&apos;t use the new logic. Just SVGGlyphElement makes use of it to demosntrate the behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259915</commentid>
    <comment_count>16</comment_count>
      <attachid>63425</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-04 00:54:01 -0700</bug_when>
    <thetext>Comment on attachment 63425
Patch v2


WebCore/ChangeLog:9
 +          is neither memory effiecient, nor very fast for the fact that we don&apos;t realy need SVGPathSegList most
efficient.

WebCore/ChangeLog:9
 +          is neither memory effiecient, nor very fast for the fact that we don&apos;t realy need SVGPathSegList most
really.

WebCore/ChangeLog:10
 +          of the time. It is just needed for manipulating SVGPathElements by JavaScript via SVGDOM.
s/by JavaScript// (all other SVG DOM users are affected as well)

WebCore/ChangeLog:12
 +          it&apos;s compact form by linking up short integer values for the segement types and float values for
its.

WebCore/ChangeLog:14
 +          SVGPathSegList together with the SVGPathData for the d attribute.
s/SVGPathData/svg path data/

WebCore/ChangeLog:16
 +          platform path and SVGPathByteStreamBuilder creates a SVGPathByteStream out of SVGPathData.
s/platform path/Path/.

WebCore/ChangeLog:16
 +          platform path and SVGPathByteStreamBuilder creates a SVGPathByteStream out of SVGPathData.
s/SVGPathData/svg path data (d attribute string)/

WebCore/ChangeLog:18
 +          The normalization code will get removed from SVGPathParser, wants we completely moved to SVGByteStream
s/wants/once/ :-)

WebCore/ChangeLog:18
 +          The normalization code will get removed from SVGPathParser, wants we completely moved to SVGByteStream
s/SVGByteStream/SVGPathByteStream/

WebCore/ChangeLog:20
 +          SVGPathDataBuilder is a new SVGPathConsumer next to SVGPathBuilder and SVGPathSegListBuilder
s/next to/just like/

WebCore/ChangeLog:21
 +          and was added to create a String out of the path segements from a SVGPathByteStream.
and creates a String from the path segments of a SVGPathByteStream.

WebCore/ChangeLog:41
 +          (WebCore::SVGPathByteStream::begin): Gives a constant iterator.
a const iterator is not a constant iterator :-)
WebCore/ChangeLog:85
 +          * svg/SVGPathConsumer.h: Make Consumers Noncopyable
Inherit from Noncopyable.

WebCore/ChangeLog:86
 +          * svg/SVGPathDataBuilder.cpp: Added. Creates a String out of a SVGPathByteStream.
Serializes a SVGPathByteStream into a String.

WebCore/ChangeLog:115
 +          * svg/SVGPathSegList.cpp: Use the new introduce enumeration of SVGPathSeg
Use the new enum in the WebCore namespace, instead of the SVGPathSeg one.

WebCore/svg/SVGPathByteStream.h:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

WebCore/svg/SVGPathByteStream.h:25
 +  #include &quot;Noncopyable.h&quot;
It&apos;s wtf/Noncopyable.h

WebCore/svg/SVGPathByteStream.h:26
 +  #include &quot;SVGPathSegList.h&quot;
Not needed here.

WebCore/svg/SVGPathByteStreamBuilder.cpp:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

WebCore/svg/SVGPathByteStreamBuilder.cpp:24
 +  #include &quot;SVGPathByteStreamBuilder.h&quot;
Move this include just under the config.h include.

WebCore/svg/SVGPathByteStreamBuilder.cpp:47
 +  bool SVGPathByteStreamBuilder::buildFromPathData(const String&amp; d)
I don&apos;t like this approach, it&apos;s too dangerous, as SVGPathByteStream is not refcounted.
We should really have:

PassOwnPtr&lt;SVGPathByteStream&gt; SVGPathByteStreamBuilder::buildFromPathData(const String&amp; d, bool&amp; ok)
{
    m_byteStream = SVGPathByteStream::create();
    SVGPathParser parser(this);
    ok = parser.parsePathDataString(d, UnalteredParsing);
    return m_byteStream.release();
}

and store an OwnPtr&lt;SVGPathByteStream&gt; m_byteStream.
This way it&apos;s guaranteed that no one deletes the SVGPathByteStream and tries to reuse SVGPathByteStreamBuilder afterwards.

WebCore/svg/SVGPathByteStreamBuilder.cpp:55
 +  
Superfluous empty lines.

WebCore/svg/SVGPathByteStreamBuilder.h:28
 +  #include &lt;wtf/Vector.h&gt;
Where is Vector.h needed here?

WebCore/svg/SVGPathByteStreamBuilder.h:39
 +      // Used in UnalteredParisng/NormalizedParsing modes.
typo: Parsing.

WebCore/svg/SVGPathByteStreamParser.cpp:28
 +  #include &quot;SVGPathByteStreamParser.h&quot;
Please move this right under the config.h include.


WebCore/svg/SVGPathByteStreamBuilder.h:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

WebCore/svg/SVGPathByteStreamParser.cpp:2
 +   * Copyright (C) 2002, 2003 The Karbon Developers
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.
(I see the 2006 \s\s Alexander stuff here, the wrong Copyright spelling, the missing Copyright (C) lines etc..., let&apos;s try to keep it consistent in new files now :-)

WebCore/svg/SVGPathByteStreamParser.cpp:252
 +      if (!stream-&gt;data().size())
I&apos;d expose an isEmpty function the SVGPathByteStream for that purpose.

WebCore/svg/SVGPathByteStreamParser.cpp:324
 +          if (m_lastCommand != PathSegCurveToCubicAbs              &amp;&amp; m_lastCommand != PathSegCurveToCubicRel
One condition per line please.

WebCore/svg/SVGPathByteStreamParser.cpp:330
 +      ASSERT(m_bytesRead == m_size);
Where&apos;s m_size? That can&apos;t compile :-)
Rather ASSERT(m_currentStream == m_streamEnd) ?

WebCore/svg/SVGPathByteStreamParser.h:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

WebCore/svg/SVGPathByteStreamParser.h:35
 +      bool parseFromStream(SVGPathByteStream*, bool nomrmalized);
typo: normalized.

WebCore/svg/SVGPathByteStreamParser.h:31
 +  class SVGPathByteStreamParser {
Noncopyable inheritance missing.

WebCore/svg/SVGPathByteStreamParser.h:53
 +      bool readFlag() { return readType&lt;bool, BoolByte&gt;(); }
Just expand them, as you did with the write... methods. Looks clumsy.

WebCore/svg/SVGPathConsumer.h:30
 +  #include &quot;Noncopyable.h&quot;
wtf/Noncopyable.h

WebCore/svg/SVGPathDataBuilder.cpp:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

WebCore/svg/SVGPathDataBuilder.cpp:39
 +      parser.parsePathDataString(d, parsingMode == UnalteredParsing);
Just noticed: why don&apos;t you pass PathParsingMode to SVGPathParser?

WebCore/svg/SVGPathDataBuilder.cpp:40
 +      return m_stringBuilder.toString().simplifyWhiteSpace();
The simplifyWhiteSpace() is a hack, you should rather ask the StringBuilder for its last string, and chomp the leading space on your own, way cheaper than using simplifyWhiteSpace.

WebCore/svg/SVGPathDataBuilder.h:2
 +   * Copyright (C) Research In Motion Limited 2010. All rights reserved.
Please assure the license template is _exactly_ the same as the other files in svg/ contain now. In doubt, just remove and readd it from one of the LGPL files.

Happy fixing :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259917</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-04 01:02:21 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; WebCore/svg/SVGPathDataBuilder.cpp:40
&gt;  +      return m_stringBuilder.toString().simplifyWhiteSpace();
&gt; The simplifyWhiteSpace() is a hack, you should rather ask the StringBuilder for its last string, and chomp the leading space on your own, way cheaper than using simplifyWhiteSpace.


Okay, I&apos;ve just noticed that StringBuilder doesn&apos;t expose it&apos;s internal Vector.
*grml* using String::remove() or String::truncate() is also slower than necessary, it creates a new StringImpl copy with length-1. (when using truncate(length() - 1)).

All in all the approach is not good. (When I recommended StringBuilder, I did not have in mind that you might want to alter the resulting string...)

So here&apos;s a new proposal:
Store Vector&lt;String, 16&gt; m_strings; on your own.
Duplicate the code in StringBuilder::toString(), to build your final string result with the main difference:
If the last stored string ends with a trailing space, don&apos;t copy that last trailing space, to the final resulting string.

That&apos;s more efficient than using simplifyWhiteSpace or sth. else</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259934</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-04 02:08:52 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; WebCore/svg/SVGPathDataBuilder.cpp:40
&gt; &gt;  +      return m_stringBuilder.toString().simplifyWhiteSpace();
&gt; &gt; The simplifyWhiteSpace() is a hack, you should rather ask the StringBuilder for its last string, and chomp the leading space on your own, way cheaper than using simplifyWhiteSpace.
&gt; 
&gt; 
&gt; Okay, I&apos;ve just noticed that StringBuilder doesn&apos;t expose it&apos;s internal Vector.
&gt; *grml* using String::remove() or String::truncate() is also slower than necessary, it creates a new StringImpl copy with length-1. (when using truncate(length() - 1)).
&gt; 
&gt; All in all the approach is not good. (When I recommended StringBuilder, I did not have in mind that you might want to alter the resulting string...)
&gt; 
&gt; So here&apos;s a new proposal:
&gt; Store Vector&lt;String, 16&gt; m_strings; on your own.
&gt; Duplicate the code in StringBuilder::toString(), to build your final string result with the main difference:
&gt; If the last stored string ends with a trailing space, don&apos;t copy that last trailing space, to the final resulting string.
&gt; 
&gt; That&apos;s more efficient than using simplifyWhiteSpace or sth. else

there is maybe another solution. Every path has to begin with either an m or an M. We could add a leading space to every seg-content and check if StringBuilder is empty for moveTo. If it is empty, we can skip the leading space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259945</commentid>
    <comment_count>19</comment_count>
      <attachid>63433</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-04 03:03:50 -0700</bug_when>
    <thetext>Created attachment 63433
Patch v3

Fixed more issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260222</commentid>
    <comment_count>20</comment_count>
      <attachid>63494</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-04 14:48:52 -0700</bug_when>
    <thetext>Created attachment 63494
Patch v4

Fixes more isses and did some more clean-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260454</commentid>
    <comment_count>21</comment_count>
      <attachid>63494</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-05 00:55:01 -0700</bug_when>
    <thetext>Comment on attachment 63494
Patch v4

WebCore/svg/SVGPathDataBuilder.h:31
 +  class SVGPathDataBuilder : private SVGPathConsumer {
Make it public, like in the other classes as well.

WebCore/svg/SVGPathDataBuilder.h:34
 +      String build(SVGPathByteStream*, PathParsingMode);
Maybe rename it buildFromByteStream, for consistency?

Just two copyright headers need updates, as discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261718</commentid>
    <comment_count>22</comment_count>
      <attachid>63816</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-07 06:24:20 -0700</bug_when>
    <thetext>Created attachment 63816
Patch v5

New patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261720</commentid>
    <comment_count>23</comment_count>
      <attachid>63816</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-07 07:01:37 -0700</bug_when>
    <thetext>Comment on attachment 63816
Patch v5

WebCore/ChangeLog:8
 +          Introduce SVGPathByteStream to have a fast and effiecient way to organize the synchronization
typo: efficient.
suggestion: s/to have a/as/

WebCore/ChangeLog:9
 +          of Path, SVG path data string and the different SVGPathSegLists.
s/the different/SVGPathSegList in normalized and unaltered modes/ (some readers of the ChangeLog may not know what you refer to).

WebCore/ChangeLog:10
 +          SVGPathParserFactory is now able to parse a SVGPathByteStream as a SVGPathSource or
Extended SVGPathParserFactory to accept SVGPathByteStreams as input source and to create a SVGPathByteStream from a SVG path data string.

WebCore/WebCore.xcodeproj/project.pbxproj: 
 +  		81BE209811F4AB8D00915DFA /* IDBCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81BE209311F4AB8D00915DFA /* IDBCursor.cpp */; };
Eek, again the IDBCursor problems - you need to revert them :(

WebCore/svg/SVGPathByteStream.h:61
 +      bool isEmpty() { return !m_data.size(); }
isEmpty should be const.
Do you need the &quot;const Data&amp; data&quot; accessor somewhere? If not please remove.

WebCore/svg/SVGPathByteStreamSource.h:46
 +  private:
Add a newline before private please.

WebCore/svg/SVGPathParserFactory.cpp:110
 +      if (stream-&gt;isEmpty())
ASSERT(stream); before accessing stream.

WebCore/svg/SVGPathParserFactory.cpp:153
 +      SVGPathSegListBuilder* builder = globalSVGPathSegListBuilder();
ASSERT(stream); should be added.
and ASSERT(result);

WebCore/svg/SVGPathParserFactory.h:43
 +      PassOwnPtr&lt;SVGPathByteStream&gt; buildSVGPathByteStreamFromString(const String&amp;, PathParsingMode, bool&amp; ok);
Maybe name this function &quot;createSVGPathByteStreamFromString&quot; to differentiate from the other methods, which build upon an existing object, where this method creates an object...

r=me, with these suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261721</commentid>
    <comment_count>24</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-07 08:18:09 -0700</bug_when>
    <thetext>Committed r64909: &lt;http://trac.webkit.org/changeset/64909&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261722</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-07 08:24:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64909 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261725</commentid>
    <comment_count>26</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-07 08:37:03 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; http://trac.webkit.org/changeset/64909 might have broken GTK Linux 64-bit Debug

I think it broke everything :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261728</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-07 09:14:22 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; http://trac.webkit.org/changeset/64909 might have broken GTK Linux 64-bit Debug
&gt; 
&gt; I think it broke everything :)

Yes :-( Landed the wrong version. Fix was landed in http://trac.webkit.org/changeset/64911.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59655</attachid>
            <date>2010-06-24 07:45:43 -0700</date>
            <delta_ts>2010-07-26 13:47:42 -0700</delta_ts>
            <desc>Prototyping</desc>
            <filename>FunPatch.diff</filename>
            <type>text/plain</type>
            <size>9516</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvdGVzdC9CeXRlU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90
ZXN0L0J5dGVTdHJlYW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGVzdC9CeXRlU3RyZWFt
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgQnl0ZVN0cmVhbV9oCisj
ZGVmaW5lIEJ5dGVTdHJlYW1faAorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKworLy8gUGF0aCBzZWdtZW50IHR5cGVzCitlbnVtIFBhdGhUb2tlblR5cGUgeworICAg
IFBhdGhUb2tlbk1vdmVUbywKKyAgICBQYXRoVG9rZW5MaW5lVG8sCisgICAgUGF0aFRva2VuQXJj
VG8sCisgICAgUGF0aFRva2VuRW5kCit9OworCisvLyBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUg
Ynl0ZSBzdHJlYW0gZGF0YQordHlwZWRlZiB1bmlvbiB7CisgICAgYm9vbCB2YWx1ZTsKKyAgICB1
bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVvZihib29sKV07Cit9IEJvb2xCeXRlOworCit0eXBlZGVm
IHVuaW9uIHsKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVv
ZihmbG9hdCldOworfSBGbG9hdEJ5dGU7CisKK3R5cGVkZWYgdW5pb24geworICAgIHVuc2lnbmVk
IHNob3J0IHZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KV07Cit9IFVuc2lnbmVkU2hvcnRCeXRlOworCisvLyBTaGFyZWQgYmV0d2VlbiBCeXRlU3Ry
ZWFtUmVhZGVyIC8gQnl0ZVN0cmVhbVdyaXRlcgorY2xhc3MgQnl0ZVN0cmVhbSB7CitwdWJsaWM6
CisgICAgQnl0ZVN0cmVhbShzaXplX3Qgc2l6ZSA9IDAsIHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0g
MCkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAgICAgLCBtX2J5dGVzKGJ5dGVzKQorICAg
IHsKKyAgICB9CisKKyAgICB+Qnl0ZVN0cmVhbSgpCisgICAgeworICAgICAgICBtX3NpemUgPSAw
OworICAgICAgICBkZWxldGVbXSBtX2J5dGVzOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdW5zaWduZWQgY2hhciogYnl0ZXMoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzOyB9CisKKyAgICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJEdW1waW5nIGJ5dGUgc3RyZWFtIHdpdGggJWkgZW50cmllczoiLCAo
aW50KSBtX3NpemUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytp
KQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgMHglMDJ4IiwgbV9ieXRlc1tpXSk7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc2l6
ZV90IG1fc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBtX2J5dGVzOworfTsKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3Rlc3QvQnl0ZVN0cmVhbVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS90ZXN0L0J5dGVTdHJlYW1SZWFkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90
ZXN0L0J5dGVTdHJlYW1SZWFkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisj
aW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSAiQnl0ZVN0cmVhbVJlYWRlci5oIgorCitCeXRl
U3RyZWFtUmVhZGVyOjpCeXRlU3RyZWFtUmVhZGVyKCkKK3sKK30KKwordm9pZCBCeXRlU3RyZWFt
UmVhZGVyOjpwYXJzZUZyb21TdHJlYW0oY29uc3QgQnl0ZVN0cmVhbSYgc3RyZWFtKQoreworICAg
IHNpemVfdCBzaXplID0gc3RyZWFtLnNpemUoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9
IHN0cmVhbS5ieXRlcygpOworCisgICAgaWYgKCFzaXplIHx8ICFieXRlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworCisgICAgZG8geworICAgICAgICBQ
YXRoVG9rZW5UeXBlIHRva2VuID0gc3RhdGljX2Nhc3Q8UGF0aFRva2VuVHlwZT4ocmVhZFVuc2ln
bmVkU2hvcnQoYnl0ZXMpKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IFBhdGhUb2tlbkxpbmVUbzogeworICAgICAgICAgICAgZmxvYXQgeCA9IHJlYWRGbG9hdChieXRl
cyk7CisgICAgICAgICAgICBmbG9hdCB5ID0gcmVhZEZsb2F0KGJ5dGVzKTsKKyAgICAgICAgICAg
IHN0ZDo6Y2VyciA8PCAiIC0+IGxpbmVUbygiIDw8IHggPDwgIiwgIiA8PCB5IDw8ICIpIiA8PCBz
dGQ6OmVuZGw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBh
dGhUb2tlbk1vdmVUbzogeworICAgICAgICAgICAgZmxvYXQgeCA9IHJlYWRGbG9hdChieXRlcyk7
CisgICAgICAgICAgICBmbG9hdCB5ID0gcmVhZEZsb2F0KGJ5dGVzKTsKKyAgICAgICAgICAgIHN0
ZDo6Y2VyciA8PCAiIC0+IG1vdmVUbygiIDw8IHggPDwgIiwgIiA8PCB5IDw8ICIpIiA8PCBzdGQ6
OmVuZGw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBhdGhU
b2tlbkFyY1RvOiB7CisgICAgICAgICAgICBmbG9hdCB4ID0gcmVhZEZsb2F0KGJ5dGVzKTsKKyAg
ICAgICAgICAgIGZsb2F0IHkgPSByZWFkRmxvYXQoYnl0ZXMpOworICAgICAgICAgICAgZmxvYXQg
cjEgPSByZWFkRmxvYXQoYnl0ZXMpOworICAgICAgICAgICAgZmxvYXQgcjIgPSByZWFkRmxvYXQo
Ynl0ZXMpOworICAgICAgICAgICAgZmxvYXQgYW5nbGUgPSByZWFkRmxvYXQoYnl0ZXMpOworICAg
ICAgICAgICAgYm9vbCBsYXJnZUFyY0ZsYWcgPSByZWFkQm9vbChieXRlcyk7CisgICAgICAgICAg
ICBib29sIHN3ZWVwRmxhZyA9IHJlYWRCb29sKGJ5dGVzKTsKKyAgICAgICAgICAgIHN0ZDo6Y2Vy
ciA8PCAiIC0+IGFyY1RvKCIgPDwgeCA8PCAiLCAiIDw8IHkgPDwgIiwgIiA8PCByMSA8PCAiLCAi
IDw8IHIyIDw8ICIsICIgPDwgYW5nbGUgPDwgIiwgIiA8PCBsYXJnZUFyY0ZsYWcgPDwgIiwgIiA8
PCBzd2VlcEZsYWcgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgUGF0aFRva2VuRW5kOiB7CisgICAgICAgICAgICBzdGQ6OmNl
cnIgPDwgIiAtPiBlbmQoKSIgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgZmluaXNoZWQgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSB3
aGlsZSghZmluaXNoZWQpOworfQpJbmRleDogV2ViQ29yZS90ZXN0L0J5dGVTdHJlYW1SZWFkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Rlc3QvQnl0ZVN0cmVhbVJlYWRlci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS90ZXN0L0J5dGVTdHJlYW1SZWFkZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNCBAQAorI2lmbmRlZiBCeXRlU3RyZWFtUmVhZGVyX2gKKyNkZWZpbmUgQnl0ZVN0
cmVhbVJlYWRlcl9oCisKKyNpbmNsdWRlICJCeXRlU3RyZWFtLmgiCisKK2NsYXNzIEJ5dGVTdHJl
YW1SZWFkZXIgeworcHVibGljOgorICAgIEJ5dGVTdHJlYW1SZWFkZXIoKTsKKworICAgIC8vIEp1
c3QgY3JlYXRlIEJ5dGVTdHJlYW1SZWFkZXIgb2JqZWN0LCBjYWxsIHBhcnNlRnJvbUJ5dGVTdHJl
YW0oKQorICAgIC8vIEZJWE1FOiBXZWJLaXQgd291bGQgbmVlZCBhICJQYXRoRGF0YSoiIGludGVy
ZmFjZSBoZXJlLCB3aGVyZSB3ZSBjb3VsZCBjYWxsIGRhdGEtPmxpbmVUbygpLCBkYXRhLT5tb3Zl
VG8oKSBldGMsIHdpdGggdGhlIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgYnl0ZXN0cmVhbS4K
KyAgICB2b2lkIHBhcnNlRnJvbVN0cmVhbShjb25zdCBCeXRlU3RyZWFtJik7CisKK3ByaXZhdGU6
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGUsIHR5cGVuYW1lIEJ5dGVUeXBlPgorICAg
IERhdGFUeXBlIHJlYWRUeXBlKHVuc2lnbmVkIGNoYXIqJiBieXRlcykgY29uc3QKKyAgICB7Cisg
ICAgICAgIEJ5dGVUeXBlIGRhdGE7CisgICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihC
eXRlVHlwZSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0eXBlU2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBkYXRhLmJ5dGVzW2ldID0gKmJ5dGVzOworICAgICAgICAgICAgKyti
eXRlczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlOworICAgIH0KKwor
ICAgIGJvb2wgcmVhZEJvb2wodW5zaWduZWQgY2hhciomIGJ5dGVzKSBjb25zdCB7IHJldHVybiBy
ZWFkVHlwZTxib29sLCBCb29sQnl0ZT4oYnl0ZXMpOyB9CisgICAgZmxvYXQgcmVhZEZsb2F0KHVu
c2lnbmVkIGNoYXIqJiBieXRlcykgY29uc3QgeyByZXR1cm4gcmVhZFR5cGU8ZmxvYXQsIEZsb2F0
Qnl0ZT4oYnl0ZXMpOyB9CisgICAgdW5zaWduZWQgc2hvcnQgcmVhZFVuc2lnbmVkU2hvcnQodW5z
aWduZWQgY2hhciomIGJ5dGVzKSBjb25zdCB7IHJldHVybiByZWFkVHlwZTx1bnNpZ25lZCBzaG9y
dCwgVW5zaWduZWRTaG9ydEJ5dGU+KGJ5dGVzKTsgfQorfTsKKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3Rlc3QvQnl0ZVN0cmVhbVdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90ZXN0
L0J5dGVTdHJlYW1Xcml0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90ZXN0L0J5dGVT
dHJlYW1Xcml0ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisjaW5jbHVkZSAi
Qnl0ZVN0cmVhbVdyaXRlci5oIgorCitCeXRlU3RyZWFtV3JpdGVyOjpCeXRlU3RyZWFtV3JpdGVy
KCkKK3sKK30KKwordm9pZCBCeXRlU3RyZWFtV3JpdGVyOjptb3ZlVG8oZmxvYXQgeCwgZmxvYXQg
eSkKK3sKKyAgICB3cml0ZVVuc2lnbmVkU2hvcnQoUGF0aFRva2VuTW92ZVRvKTsKKyAgICB3cml0
ZUZsb2F0KHgpOworICAgIHdyaXRlRmxvYXQoeSk7CisKKyAgICBzdGQ6OmNlcnIgPDwgIiAtPiBt
b3ZlVG8oIiA8PCB4IDw8ICIsICIgPDwgeSA8PCAiKSIgPDwgc3RkOjplbmRsOyAKK30KKwordm9p
ZCBCeXRlU3RyZWFtV3JpdGVyOjpsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICB3cml0
ZVVuc2lnbmVkU2hvcnQoUGF0aFRva2VuTGluZVRvKTsKKyAgICB3cml0ZUZsb2F0KHgpOworICAg
IHdyaXRlRmxvYXQoeSk7CisKKyAgICBzdGQ6OmNlcnIgPDwgIiAtPiBsaW5lVG8oIiA8PCB4IDw8
ICIsICIgPDwgeSA8PCAiKSIgPDwgc3RkOjplbmRsOworfQorCit2b2lkIEJ5dGVTdHJlYW1Xcml0
ZXI6OmFyY1RvKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5n
bGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZykKK3sKKyAgICB3cml0ZVVuc2ln
bmVkU2hvcnQoUGF0aFRva2VuQXJjVG8pOworICAgIHdyaXRlRmxvYXQoeCk7CisgICAgd3JpdGVG
bG9hdCh5KTsKKyAgICB3cml0ZUZsb2F0KHIxKTsKKyAgICB3cml0ZUZsb2F0KHIyKTsKKyAgICB3
cml0ZUZsb2F0KGFuZ2xlKTsKKyAgICB3cml0ZUJvb2wobGFyZ2VBcmNGbGFnKTsKKyAgICB3cml0
ZUJvb2woc3dlZXBGbGFnKTsKKworICAgIHN0ZDo6Y2VyciA8PCAiIC0+IGFyY1RvKCIgPDwgeCA8
PCAiLCAiIDw8IHkgPDwgIiwgIiA8PCByMSA8PCAiLCAiIDw8IHIyIDw8ICIsICIgPDwgYW5nbGUg
PDwgIiwgIiA8PCBsYXJnZUFyY0ZsYWcgPDwgIiwgIiA8PCBzd2VlcEZsYWcgPDwgIikiIDw8IHN0
ZDo6ZW5kbDsKK30KKworQnl0ZVN0cmVhbSBCeXRlU3RyZWFtV3JpdGVyOjpnZW5lcmF0ZUJ5dGVT
dHJlYW0oKQoreworICAgIGlmIChtX2RhdGFTdHJlYW0uZW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEJ5dGVTdHJlYW0oKTsKKworICAgIC8vIFJlY29yZCBlbmQgbWFya2VyCisgICAgd3JpdGVVbnNp
Z25lZFNob3J0KFBhdGhUb2tlbkVuZCk7CisgICAgc2l6ZV90IHNpemUgPSBtX2RhdGFTdHJlYW0u
c2l6ZSgpOworCisgICAgLy8gR2VuZXJhdGUgYnl0ZSBzdHJlYW0sIHRyYW5zZmVyIG93bmVyc2hp
cCB0byBCeXRlU3RyZWFtIGRhdGFzdHJ1Y3R1cmUKKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9
IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOworICAgIHVuc2lnbmVkIGludCBjb3VudGVyID0gMDsK
KworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+OjppdGVyYXRvciBlbmQgPSBtX2RhdGFT
dHJlYW0uZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPjo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFTdHJlYW0uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBi
eXRlc1tjb3VudGVyKytdID0gKml0OworCisgICAgbV9kYXRhU3RyZWFtLmNsZWFyKCk7CisgICAg
cmV0dXJuIEJ5dGVTdHJlYW0oc2l6ZSwgYnl0ZXMpOworfQpJbmRleDogV2ViQ29yZS90ZXN0L0J5
dGVTdHJlYW1Xcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Rlc3QvQnl0ZVN0cmVhbVdy
aXRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90ZXN0L0J5dGVTdHJlYW1Xcml0ZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBCeXRlU3RyZWFtV3JpdGVyX2gK
KyNkZWZpbmUgQnl0ZVN0cmVhbVdyaXRlcl9oCisKKyNpbmNsdWRlICJCeXRlU3RyZWFtLmgiCisj
aW5jbHVkZSA8dmVjdG9yPgorCitjbGFzcyBCeXRlU3RyZWFtV3JpdGVyIHsKK3B1YmxpYzoKKyAg
ICBCeXRlU3RyZWFtV3JpdGVyKCk7CisKKyAgICAvLyBKdXN0IGNyZWF0ZSBCeXRlU3RyZWFtV3Jp
dGVyIG9iamVjdCwgY2FsbCBtb3ZlVG8vbGluZVRvL2V0Yy4uIGFuZCBhcyBsYXN0IGNhbGwgZ2Vu
ZXJhdGVCeXRlU3RyZWFtKCkKKyAgICB2b2lkIG1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KTsKKyAg
ICB2b2lkIGxpbmVUbyhmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIGFyY1RvKGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNG
bGFnLCBib29sIHN3ZWVwRmxhZyk7CisKKyAgICBCeXRlU3RyZWFtIGdlbmVyYXRlQnl0ZVN0cmVh
bSgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVUeXBlPgorICAgIHZv
aWQgd3JpdGVUeXBlKGNvbnN0IEJ5dGVUeXBlJiB0eXBlKQorICAgIHsKKyAgICAgICAgc2l6ZV90
IHR5cGVTaXplID0gc2l6ZW9mKEJ5dGVUeXBlKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0eXBlU2l6ZTsgKytpKQorICAgICAgICAgICAgbV9kYXRhU3RyZWFtLnB1c2hfYmFjayh0
eXBlLmJ5dGVzW2ldKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlQm9vbChib29sIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQm9vbEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVl
OworICAgICAgICB3cml0ZVR5cGUoZGF0YSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUZsb2F0
KGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgRmxvYXRCeXRlIGRhdGE7CisgICAgICAgIGRh
dGEudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgd3JpdGVUeXBlKGRhdGEpOworICAgIH0KKworICAg
IHZvaWQgd3JpdGVVbnNpZ25lZFNob3J0KHVuc2lnbmVkIHNob3J0IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgVW5zaWduZWRTaG9ydEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVl
OworICAgICAgICB3cml0ZVR5cGUoZGF0YSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6
dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YVN0cmVhbTsgICAgCit9OworCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvdGVzdC9kYXRhU3RyZWFtLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Rl
c3QvZGF0YVN0cmVhbS5wcm8JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Rlc3QvZGF0YVN0cmVh
bS5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVEVNUExBVEUgPSBhcHAKKworQ09O
RklHIC09IGFwcF9idW5kbGUgcXQKK0NPTkZJRyArPSB3YXJuX29uCisKK0RFU1RESVIgICAgID0g
Li9CdWlsZHMKK09CSkVDVFNfRElSID0gLi9CdWlsZHMvVGVtcAorCitTT1VSQ0VTID0gQnl0ZVN0
cmVhbVJlYWRlci5jcHAgQnl0ZVN0cmVhbVdyaXRlci5jcHAgbWFpbi5jcHAKSW5kZXg6IFdlYkNv
cmUvdGVzdC9tYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Rlc3QvbWFpbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3Rlc3QvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjkgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1
ZGUgIkJ5dGVTdHJlYW1SZWFkZXIuaCIKKyNpbmNsdWRlICJCeXRlU3RyZWFtV3JpdGVyLmgiCisK
K2ludCBtYWluKGludCwgY2hhcioqKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiRHVtcGluZyBz
aXplIGluZm9ybWF0aW9uIG9mIG91ciBwcmltaXRpdmUgdHlwZXM6XG4iKTsKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIkJvb2xCeXRlOiAlbGlcbiIsIHNpemVvZihCb29sQnl0ZSkpOworICAgIGZwcmlu
dGYoc3RkZXJyLCAiRmxvYXRCeXRlOiAlbGlcbiIsIHNpemVvZihGbG9hdEJ5dGUpKTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuc2lnbmVkU2hvcnRCeXRlOiAlbGlcbiIsIHNpemVvZihVbnNpZ25l
ZFNob3J0Qnl0ZSkpOworCisgICAgZnByaW50ZihzdGRlcnIsICJcblNlcmlhbGl6aW5nIHBhdGgg
ZGF0YSBpbnRvIGJ5dGVzLi4uXG4iKTsKKyAgICBCeXRlU3RyZWFtV3JpdGVyIHdyaXRlcjsKKyAg
ICB3cml0ZXIubW92ZVRvKDEwLjFmLCAtOTkuOWYpOworICAgIHdyaXRlci5saW5lVG8oc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWF4KCkpOworICAgIHdyaXRlci5hcmNUbygxLjBmLCAyLjBmLCAzLjBmLCA0LjBmLCA1LjBmLCBm
YWxzZSwgdHJ1ZSk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuR2VuZXJhdGluZyBieXRlc3Ry
ZWFtLi4uXG4iKTsKKyAgICBCeXRlU3RyZWFtIHN0cmVhbSh3cml0ZXIuZ2VuZXJhdGVCeXRlU3Ry
ZWFtKCkpOworICAgIHN0cmVhbS5kdW1wKCk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuUGFy
c2luZyBieXRlc3RyZWFtLi4uXG4iKTsKKyAgICBCeXRlU3RyZWFtUmVhZGVyIHJlYWRlcjsKKyAg
ICByZWFkZXIucGFyc2VGcm9tU3RyZWFtKHN0cmVhbSk7CisKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62600</attachid>
            <date>2010-07-26 13:47:49 -0700</date>
            <delta_ts>2010-08-04 00:33:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41159-20100726224747.patch</filename>
            <type>text/plain</type>
            <size>62287</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDA2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEzIEBACisyMDEwLTA3LTI2ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29t
ZSB1cCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHJlcHJlc2VudCBQYXRoIHNlZ21lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTE1OQor
CisgICAgICAgIEV2ZXJ5IFNWR1BhdGhFbGVtZW50IGJ1aWxkcyBhIFNWR1BhdGhTZWdMaXN0IGZp
cnN0IGFuZCBjcmVhdGVzIHRoZSBQYXRoIGFmdGVyd2FyZHMuIFRoaXMKKyAgICAgICAgaXMgbmVp
dGhlciBtZW1vcnkgZWZmaWVjaWVudCwgbm9yIHZlcnkgZmFzdCBmb3IgdGhlIGZhY3QgdGhhdCB3
ZSBkb24ndCByZWFseSBuZWVkIFNWR1BhdGhTZWdMaXN0IG1vc3QKKyAgICAgICAgb2YgdGhlIHRp
bWUuIEl0IGlzIGp1c3QgbmVlZGVkIGZvciBtYW5pcHVsYXRpbmcgU1ZHUGF0aEVsZW1lbnRzIGJ5
IEphdmFTY3JpcHQgdmlhIFNWR0RPTS4KKyAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0gaXMgYSBz
aW1wbGUgYnl0ZSBzdHJlYW0gYW5kIGNhbiBiZSBwYXJzZWQgdmVyeSBxdWlja2x5LiBJdCBzYXZl
cyBtZW1vcnkgZHVlIHRvCisgICAgICAgIGl0J3MgY29tcGFjdCBmb3JtIGJ5IGxpbmtpbmcgdXAg
c2hvcnQgaW50ZWdlciB2YWx1ZXMgZm9yIHRoZSBzZWdlbWVudCB0eXBlcyBhbmQgZmxvYXQgdmFs
dWVzIGZvcgorICAgICAgICB0aGUgcG9pbnRzIG9mIGEgc2VnbWVudC4gSXQgd2lsbCBtYWtlIGl0
IHBvc3NpYmxlIHRvIHN5bmNocm9uaXplIHRoZSB1bmFsdGVyZWQgYW5kIG5vcm1hbGl6ZWQKKyAg
ICAgICAgU1ZHUGF0aFNlZ0xpc3QgdG9nZXRoZXIgd2l0aCB0aGUgU1ZHUGF0aERhdGEgZm9yIHRo
ZSBkIGF0dHJpYnV0ZS4KKyAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIgcGFyc2VzIGFu
IGV4aXN0aW5nIFNWR1BhdGhCeXRlU3RyZWFtIGFuZCBjcmVhdGVzIGEgU3RyaW5nLCBTVkdQYXRo
U2VnTGlzdCBvcgorICAgICAgICBwbGF0Zm9ybSBwYXRoIGFuZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIgY3JlYXRlcyBhIFNWR1BhdGhCeXRlU3RyZWFtIG91dCBvZiBTVkdQYXRoRGF0YS4KKyAg
ICAgICAgVGhpcyBwYXRjaCBkdXBsaWNhdGVzIHRoZSBub3JtYWxpemF0aW9uIGFsZ29yaXRobXMg
b2YgU1ZHUGF0aFBhcnNlciBpbiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBhdCB0aGUgbW9tZW50
LgorICAgICAgICBUaGUgbm9ybWFsaXphdGlvbiBjb2RlIHdpbGwgZ2V0IHJlbW92ZWQgZnJvbSBT
VkdQYXRoUGFyc2VyLCB3YW50cyB3ZSBjb21wbGV0ZWx5IG1vdmVkIHRvIFNWR0J5dGVTdHJlYW0K
KyAgICAgICAgaW4gb25lIG9mIHRoZSBuZXh0IHBhdGNoZXMuCisgICAgICAgIFNWR1BhdGhEYXRh
QnVpbGRlciBpcyBhIG5ldyBTVkdQYXRoQ29uc3VtZXIgbmV4dCB0byBTVkdQYXRoQnVpbGRlciBh
bmQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyCisgICAgICAgIGFuZCB3YXMgYWRkZWQgdG8gY3JlYXRl
IGEgU3RyaW5nIG91dCBvZiB0aGUgcGF0aCBzZWdlbWVudHMgZnJvbSBhIFNWR1BhdGhCeXRlU3Ry
ZWFtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRG9lc24ndCBpbmZsdWVuY2UgcmVuZGVyaW5n
LgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBh
dGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJ1aWxkZXI6OmJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKToKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aEJ1aWxkZXIuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW0u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6U1ZHUGF0aEJ5
dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06On5TVkdQYXRo
Qnl0ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6Ynl0ZXMpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YnVpbGRGcm9tUGF0
aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjptb3Zl
VG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9Ib3Jp
em9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGlu
ZVRvVmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmFyY1RvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0ZUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0ZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6d3JpdGVTZWdtZW50VHlwZSk6CisgICAgICAgICogc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VNb3Zl
VG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Q
YXJzZXI6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
cjo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1QYXJzZXI6OnBhcnNlRnJvbVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYyk6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5
dGVTdHJlYW1QYXJzZXI6OnJlYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyOjpyZWFkRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlcjo6cmVhZEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtUGFyc2VyOjpyZWFkU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRGF0
YUJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRl
cjo6U1ZHUGF0aERhdGFCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVp
bGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjptb3Zl
VG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bGluZVRvVmVydGljYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290
aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OmFyY1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKiBz
dmcvU1ZHUGF0aERhdGFCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2Vn
Lmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6
flNWR1BhdGhTZWcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWc6OnBhdGhTZWdUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWc6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6U1ZHUGF0aFNl
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OlNWR1BhdGhTZWdT
aW5nbGVDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OnNl
dFgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkOjp4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6c2V0WSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OnkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ1NpbmdsZUNvb3JkOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0OjpjcmVhdGVBbmltYXRlZCk6
CisKIDIwMTAtMDctMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQu
bWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2NDA1NykKKysr
IFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtODU3LDYgKzg1Nyw5IEBAIExP
Q0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXN2Zy9TVkdQYWludC5jcHAg
XAogCXN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwIFwKIAlzdmcvU1ZHUGF0aEJ1aWxkZXIuY3Bw
IFwKKwlzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBcCisJc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyLmNwcCBcCisJc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAgXAogCXN2Zy9T
VkdQYXRoRWxlbWVudC5jcHAgXAogCXN2Zy9TVkdQYXRoUGFyc2VyLmNwcCBcCiAJc3ZnL1NWR1Bh
dGhTZWdBcmMuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjQwNTcpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MDI5LDcgKzQwMjksMTQgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaCBcCiAJV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRl
ci5oIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIFwKKwlXZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXIuaCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3Bw
IFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIFwKIAlXZWJDb3JlL3N2
Zy9TVkdQYXRoQ29uc3VtZXIuaCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNw
cCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmggXAogCVdlYkNvcmUvc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBcCiAJV2Vi
Q29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY0MDU3KQorKysg
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM3NzIsNyArMzc3MiwxNCBA
QAogICAgICAgICAgICAgJ3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAn
c3ZnL1NWR1BhdGhCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhCdWlsZGVy
LmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oJywKKyAgICAgICAgICAg
ICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAnc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhDb25zdW1lci5oJywKKyAgICAgICAgICAg
ICdzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAnc3ZnL1NWR1BhdGhE
YXRhQnVpbGRlci5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwJywKICAg
ICAgICAgICAgICdzdmcvU1ZHUGF0aEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1Bh
dGhQYXJzZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjQwNTcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yODI0LDYgKzI4MjQsOSBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgc3ZnL1NWR1BhaW50LmNwcCBcCiAgICAgICAgIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhCdWlsZGVyLmNw
cCBcCisgICAgICAgIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKyAgICAgICAg
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCBcCisgICAgICAgIHN2Zy9TVkdQYXRoRGF0
YUJ1aWxkZXIuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBcCiAgICAgICAg
IHN2Zy9TVkdQYXRoUGFyc2VyLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnQXJjLmNwcCBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY0MDU3
KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDg5NTMsMTAgKzQ4OTUzLDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoQnl0ZVN0cmVhbS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZH
UGF0aENvbnN1bWVyLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aERhdGFCdWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aEVsZW1lbnQu
aCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjQwNTgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQxMyw2ICsxNDEzLDEz
IEBACiAJCTg0MjI0MThFMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0MjI0MThCMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50
SW50ZXJuYWwuaCAqLzsgfTsKIAkJODQyMjQxOTMxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQyMjQxOTAxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuY3BwICovOyB9OwogCQk4NDIyNDE5NDEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAq
LzsgfTsKKwkJODQyQTk4MkMxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNTEx
RkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCAqLzsgfTsKKwkJODQyQTk4MkQx
MUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNjExRkUxMjc1MDA0
NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCAqLzsgfTsKKwkJODQyQTk4MkUx
MUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyQTk4MjcxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oICovOyB9OworCQk4NDJBOTgyRjExRkUx
Mjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyQTk4MjgxMUZFMTI3NTAwNDU4OTIy
IC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLzsgfTsKKwkJODQyQTk4MzAxMUZFMTI3
NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyOTExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCAqLzsgfTsKKwkJODQyQTk4MzExMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyQTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERh
dGFCdWlsZGVyLmNwcCAqLzsgfTsKKwkJODQyQTk4MzIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1Bh
dGhEYXRhQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQyQTk4MkIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5oICov
OyB9OwogCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi87IH07CiAJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi87IH07CiAJCTg0NUU3
MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuaCAqLzsgfTsKQEAgLTcxOTQsNiArNzIwMSwxMyBAQAogCQk4NDIyNDE5MDEwN0U3OEE3
MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE5
MjEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDJBOTgyNjExRkUxMjc1MDA0NTg5
MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI3MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5
ODI4MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI5MTFGRTEyNzUwMDQ1ODky
MiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NDJBOTgyQTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhEYXRhQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODJCMTFGRTEyNzUwMDQ1
ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHUGF0aERhdGFCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRmlsdGVyLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmls
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3
OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmls
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDg0OSw2ICsxNDg2MywxMyBA
QAogCQlCMjIyNzdDQTBEMDBCRjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4NDJBOTgyNTExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW0uaCAqLywKKwkJCQk4NDJBOTgyNjExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCAqLywKKwkJCQk4NDJBOTgyNzExRkUxMjc1MDA0
NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggKi8sCisJCQkJODQyQTk4MjgxMUZF
MTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLywKKwkJCQk4NDJB
OTgyOTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCAqLywKKwkJ
CQk4NDJBOTgyQTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCAqLywK
KwkJCQk4NDJBOTgyQjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggKi8s
CiAJCQkJRTQ2RTk3ODYwREFBRDYxQjAwNzFFODk0IC8qIGFuaW1hdGlvbiAqLywKIAkJCQlCMjU1
OTg4NjBEMDBEOEI4MDBCQjgyNUMgLyogZ3JhcGhpY3MgKi8sCiAJCQkJQjIyMjc3Q0IwRDAwQkYx
RjAwNzFCNzgyIC8qIENvbG9yRGlzdGFuY2UuY3BwICovLApAQCAtMTk4NjAsNiArMTk4ODEsMTAg
QEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDJBOTgyQzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0
aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MkE5ODJFMTFGRTEyNzUwMDQ1ODky
MiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MkE5
ODMwMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJODQyQTk4MzIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMjI1Niw2ICsyMjI4MSw5IEBACiAJCQkJOTNGMTlCMDUw
ODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQyQTk4MkQxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDJBOTgyRjExRkUx
Mjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODQyQTk4MzExMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY0MDU3KQorKysg
V2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4
LDkgQEAKICNpbmNsdWRlICJTVkdQYWludC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0
aWVzLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoQnVpbGRlci5jcHAiCisjaW5jbHVkZSAiU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
ci5jcHAiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCIKICNpbmNsdWRlICJTVkdQ
YXRoRWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlci5jcHAiCiAjaW5jbHVkZSAi
U1ZHUGF0aFNlZ0FyYy5jcHAiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlzaW9u
IDY0MDU3KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKQEAgLTEwMSwxMCArMTAyLDEzIEBAIHN0YXRpYyBp
bmxpbmUgU1ZHR2x5cGhJZGVudGlmaWVyOjpPcmllbnQKIAogc3RhdGljIGlubGluZSBQYXRoIHBh
cnNlUGF0aERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKKyAgICBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIgYnl0ZVN0cmVhbUJ1aWxkZXI7CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0g
Ynl0ZVN0cmVhbSA9IGJ5dGVTdHJlYW1CdWlsZGVyLmJ1aWxkRnJvbVBhdGhEYXRhKHZhbHVlKTsK
KwogICAgIFBhdGggcmVzdWx0OwogICAgIFNWR1BhdGhCdWlsZGVyIGJ1aWxkZXIocmVzdWx0KTsK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFuYWx5c2UgdGhlIHJldHVybmVkIHZhbHVlLgotICAg
IGJ1aWxkZXIuYnVpbGQodmFsdWUpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYW5hbHlzZSB0
aGUgcmV0dXJuZWQgdmFsdWUuIAorICAgIGJ1aWxkZXIuYnVpbGRQYXRoRnJvbUJ5dGVTdHJlYW0o
Ynl0ZVN0cmVhbSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWls
ZGVyLmNwcAkocmV2aXNpb24gNjQwNTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2lu
Y2x1ZGUgIlNWR1BhdGhCdWlsZGVyLmgiCiAKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlci5oIgogI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDIsNiArNDMsMTIgQEAgYm9vbCBTVkdQYXRoQnVpbGRlcjo6YnVpbGQoY29uc3QgU3Ry
aW5nJgogICAgIHJldHVybiBwYXJzZXIucGFyc2VQYXRoRGF0YVN0cmluZyhkLCB0cnVlKTsKIH0K
IAorYm9vbCBTVkdQYXRoQnVpbGRlcjo6YnVpbGRQYXRoRnJvbUJ5dGVTdHJlYW0oY29uc3QgU1ZH
UGF0aEJ5dGVTdHJlYW0mIGJ5dGVTdHJlYW0pCit7CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIgcGFyc2VyKHRoaXMpOworICAgIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyZWFtKGJ5dGVT
dHJlYW0sIHRydWUpOworfQorCiB2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsK
ICAgICBtX2N1cnJlbnQgPSBtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBwb2ludCA6IG1f
Y3VycmVudCArIHBvaW50OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA2NDA1NykK
KysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJT
VkdQYXRoQ29uc3VtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNiArMzcsNyBA
QCBjbGFzcyBTVkdQYXRoQnVpbGRlciA6IHByaXZhdGUgU1ZHUGF0aENvCiBwdWJsaWM6CiAgICAg
U1ZHUGF0aEJ1aWxkZXIoUGF0aCYpOwogICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7Cisg
ICAgYm9vbCBidWlsZFBhdGhGcm9tQnl0ZVN0cmVhbShjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYp
OwogCiBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVk
UGFyc2luZyBtb2Rlcy4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1BhdGhCeXRlU3RyZWFt
X2gKKyNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1faAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJTVkdQYXRoU2VnTGlzdC5oIgorCisvLyBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgYnl0
ZSBzdHJlYW0gZGF0YQordHlwZWRlZiB1bmlvbiB7CisgICAgYm9vbCB2YWx1ZTsKKyAgICB1bnNp
Z25lZCBjaGFyIGJ5dGVzW3NpemVvZihib29sKV07Cit9IEJvb2xCeXRlOworCit0eXBlZGVmIHVu
aW9uIHsKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVvZihm
bG9hdCldOworfSBGbG9hdEJ5dGU7CisKK3R5cGVkZWYgdW5pb24geworICAgIHVuc2lnbmVkIHNo
b3J0IHZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KV07Cit9IFVuc2lnbmVkU2hvcnRCeXRlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNo
YXJlZCBiZXR3ZWVuIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciAvIFNWR1BhdGhCeXRlU3RyZWFt
UGFyc2VyCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbSB7CitwdWJsaWM6CisgICAgU1ZHUGF0aEJ5
dGVTdHJlYW0oc2l6ZV90IHNpemUgPSAwLCB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IDApCisgICAg
ICAgIDogbV9zaXplKHNpemUpCisgICAgICAgICwgbV9ieXRlcyhieXRlcykKKyAgICB7CisgICAg
fQorCisgICAgflNWR1BhdGhCeXRlU3RyZWFtKCkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IDA7
CisgICAgICAgIGRlbGV0ZVtdIG1fYnl0ZXM7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXM7IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9zaXplOworICAg
IHVuc2lnbmVkIGNoYXIqIG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhCeXRlU3RyZWFtX2gKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaCIKKworI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhQYXJzZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aFNlZ0Nsb3NlUGF0aC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaCIKKyNp
bmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWMuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG8uaCIKKyNpbmNsdWRlICJT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdNb3ZldG8uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OlNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcigpCit7Cit9CisKK1NWR1BhdGhCeXRlU3RyZWFtIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
cjo6YnVpbGRGcm9tUGF0aERhdGEoY29uc3QgU3RyaW5nJiBkKQoreworICAgIFNWR1BhdGhQYXJz
ZXIgcGFyc2VyKHRoaXMpOworICAgIHBhcnNlci5wYXJzZVBhdGhEYXRhU3RyaW5nKGQsIFVuYWx0
ZXJlZFBhcnNpbmcpOworCisKKyAgICBpZiAobV9kYXRhU3RyZWFtLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIFNWR1BhdGhCeXRlU3RyZWFtKCk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGF0
YVN0cmVhbS5zaXplKCk7CisKKyAgICAvLyBHZW5lcmF0ZSBieXRlIHN0cmVhbSwgdHJhbnNmZXIg
b3duZXJzaGlwIHRvIEJ5dGVTdHJlYW0gZGF0YXN0cnVjdHVyZQorICAgIHVuc2lnbmVkIGNoYXIq
IGJ5dGVzID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07CisgICAgdW5zaWduZWQgaW50IGNvdW50
ZXIgPSAwOworCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+OjppdGVyYXRvciBlbmQgPSBtX2Rh
dGFTdHJlYW0uZW5kKCk7CisgICAgZm9yIChWZWN0b3I8dW5zaWduZWQgY2hhcj46Oml0ZXJhdG9y
IGl0ID0gbV9kYXRhU3RyZWFtLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYnl0
ZXNbY291bnRlcisrXSA9ICppdDsKKworICAgIG1fZGF0YVN0cmVhbS5jbGVhcigpOworICAgIHJl
dHVybiBTVkdQYXRoQnl0ZVN0cmVhbShzaXplLCBieXRlcyk7Cit9CisKKworCit2b2lkIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29s
LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcyA/ICBQYXRoU2VnTW92ZVRvUmVsIDogUGF0aFNlZ01vdmVU
b0Ficyk7CisgICAgd3JpdGVGbG9hdChwb2ludC54KCkpOworICAgIHdyaXRlRmxvYXQocG9pbnQu
eSgpKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVT
ZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvUmVs
IDogUGF0aFNlZ0xpbmVUb0Ficyk7CisgICAgd3JpdGVGbG9hdChwb2ludC54KCkpOworICAgIHdy
aXRlRmxvYXQocG9pbnQueSgpKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6
OmxpbmVUb0hvcml6b250YWwoZmxvYXQgeCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7Cisg
ICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbCA6IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzKTsKKyAgICB3
cml0ZUZsb2F0KHgpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRv
VmVydGljYWwoZmxvYXQgeSwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVT
ZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvVmVy
dGljYWxSZWwgOiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMpOworICAgIHdyaXRlRmxvYXQoeSk7
Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21l
bnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNS
ZWwgOiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzKTsKKyAgICB3cml0ZUZsb2F0KHBvaW50MS54KCkp
OworICAgIHdyaXRlRmxvYXQocG9pbnQxLnkoKSk7CisgICAgd3JpdGVGbG9hdChwb2ludDIueCgp
KTsKKyAgICB3cml0ZUZsb2F0KHBvaW50Mi55KCkpOworICAgIHdyaXRlRmxvYXQocG9pbnQueCgp
KTsKKyAgICB3cml0ZUZsb2F0KHBvaW50LnkoKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAg
d3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3Vy
dmVUb0N1YmljU21vb3RoUmVsIDogUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyk7CisgICAg
d3JpdGVGbG9hdChwb2ludDIueCgpKTsKKyAgICB3cml0ZUZsb2F0KHBvaW50Mi55KCkpOworICAg
IHdyaXRlRmxvYXQocG9pbnQueCgpKTsKKyAgICB3cml0ZUZsb2F0KHBvaW50LnkoKSk7Cit9CisK
K3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwgOiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY0Ficyk7CisgICAgd3JpdGVGbG9hdChwb2ludDEueCgpKTsKKyAgICB3cml0ZUZsb2F0KHBv
aW50MS55KCkpOworICAgIHdyaXRlRmxvYXQocG9pbnQueCgpKTsKKyAgICB3cml0ZUZsb2F0KHBv
aW50LnkoKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsIDogUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNTbW9vdGhBYnMpOworICAgIHdyaXRlRmxvYXQocG9pbnQueCgpKTsKKyAgICB3cml0ZUZs
b2F0KHBvaW50LnkoKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjphcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmds
ZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cyA/IFBhdGhTZWdBcmNSZWwgOiBQYXRoU2VnQXJjQWJzKTsKKyAgICB3cml0ZUZsb2F0KHIxKTsK
KyAgICB3cml0ZUZsb2F0KHIyKTsKKyAgICB3cml0ZUZsb2F0KGFuZ2xlKTsKKyAgICB3cml0ZUJv
b2wobGFyZ2VBcmNGbGFnKTsKKyAgICB3cml0ZUJvb2woc3dlZXBGbGFnKTsKKyAgICB3cml0ZUZs
b2F0KHBvaW50LngoKSk7CisgICAgd3JpdGVGbG9hdChwb2ludC55KCkpOworfQorCit2b2lkIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRoKCkKK3sKKyAgICB3cml0ZVNlZ21lbnRU
eXBlKFBhdGhTZWdDbG9zZVBhdGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKKyNkZWZpbmUgU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyIDogcHJpdmF0ZSBTVkdQYXRoQ29uc3VtZXIgeworcHVibGljOgorICAgIFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcigpOworCisgICAgU1ZHUGF0aEJ5dGVTdHJlYW0gYnVpbGRGcm9tUGF0
aERhdGEoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgLy8gVXNlZCBpbiBVbmFsdGVy
ZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgorICAgIHZpcnR1YWwgdm9pZCBtb3Zl
VG8oY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKKworcHJpdmF0ZToKKyAgICAvLyBPbmx5
IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgorICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9I
b3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBs
aW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRp
Yyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9v
bCBzd2VlcEZsYWcsIFBhdGhDb29yZGluYXRlTW9kZSk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZVR5cGU+CisgICAgdm9pZCB3cml0ZVR5cGUoY29uc3QgQnl0ZVR5cGUm
IHR5cGUpCisgICAgeworICAgICAgICBzaXplX3QgdHlwZVNpemUgPSBzaXplb2YoQnl0ZVR5cGUp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVTaXplOyArK2kpCisgICAgICAg
ICAgICBtX2RhdGFTdHJlYW0uYXBwZW5kKHR5cGUuYnl0ZXNbaV0pOworICAgIH0KKworICAgIHZv
aWQgd3JpdGVCb29sKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBCb29sQnl0ZSBkYXRhOwor
ICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdyaXRlRmxvYXQoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBG
bG9hdEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3cml0
ZVR5cGUoZGF0YSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZVNlZ21lbnRUeXBlKHVuc2lnbmVk
IHNob3J0IHZhbHVlKQorICAgIHsKKyAgICAgICAgVW5zaWduZWRTaG9ydEJ5dGUgZGF0YTsKKyAg
ICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3cml0ZVR5cGUoZGF0YSk7CisgICAg
fQorCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YVN0cmVhbTsKKyAgICBTVkdQYXRo
Qnl0ZVN0cmVhbSogbV9ieXRlU3RyZWFtOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXJfaApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMg
VGhlIEthcmJvbiBEZXZlbG9wZXJzCisgKiAgICAgICAgICAgICAgIDIwMDYgICAgICAgQWxleGFu
ZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiwgMjAw
NyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ3RoIChDKSAyMDA3LCAyMDA5IEFw
cGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlci5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
U1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZy5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnT25lT3ZlclRocmVlID0g
MSAvIDMuZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
cjo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIoU1ZHUGF0aENvbnN1bWVyKiBjb25zdW1lcikKKyAg
ICA6IG1fY29uc3VtZXIoY29uc3VtZXIpCit7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1Q
YXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVudCgpCit7CisgICAgLy8gUmVzZXQgbV9jdXJyZW50
UG9pbnQgZm9yIHRoZSBuZXh0IHBhdGguCisgICAgaWYgKG1fbm9ybWFsaXplZCkKKyAgICAgICAg
bV9jdXJyZW50UG9pbnQgPSBtX3N1YlBhdGhQb2ludDsKKyAgICBtX3BhdGhDbG9zZWQgPSB0cnVl
OworICAgIG1fY29uc3VtZXItPmNsb3NlUGF0aCgpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3Ry
ZWFtUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWCA9IHJlYWRG
bG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCB0b1kgPSByZWFkRmxvYXQobV9ieXRlcyk7CisKKyAg
ICBGbG9hdFBvaW50IHRvUG9pbnQodG9YLCB0b1kpOworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsK
KyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAg
bV9jdXJyZW50UG9pbnQgKz0gdG9Qb2ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSB0b1BvaW50OworICAgICAgICBtX3N1YlBhdGhQb2ludCA9IG1fY3VycmVu
dFBvaW50OworICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJyZW50UG9pbnQsIG1fcGF0
aENsb3NlZCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
c3VtZXItPm1vdmVUbyh0b1BvaW50LCBtX3BhdGhDbG9zZWQsIG1fbW9kZSk7CisgICAgbV9wYXRo
Q2xvc2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNl
TGluZVRvU2VnbWVudCgpCit7CisgICAgZmxvYXQgdG9YID0gcmVhZEZsb2F0KG1fYnl0ZXMpOwor
ICAgIGZsb2F0IHRvWSA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKworICAgIEZsb2F0UG9pbnQgdG9Q
b2ludCh0b1gsIHRvWSk7CisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBpZiAobV9t
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCAr
PSB0b1BvaW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRv
UG9pbnQ7CisgICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1
dGVDb29yZGluYXRlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyh0
b1BvaW50LCBtX21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJz
ZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKK3sKKyAgICBmbG9hdCB0b1ggPSByZWFkRmxvYXQo
bV9ieXRlcyk7CisKKyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUo
dG9YLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WCh0
b1gpOworICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRl
Q29vcmRpbmF0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jp
em9udGFsKHRvWCwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWSA9IHJlYWRGbG9h
dChtX2J5dGVzKTsKKworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAgICAgICAgaWYgKG1fbW9k
ZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92
ZSgwLCB0b1kpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZ
KHRvWSk7CisgICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1
dGVDb29yZGluYXRlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmxpbmVUb1Zl
cnRpY2FsKHRvWSwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKK3sKKyAgICBmbG9hdCB4MSA9IHJlYWRGbG9hdCht
X2J5dGVzKTsKKyAgICBmbG9hdCB5MSA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCB4
MiA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCB5MiA9IHJlYWRGbG9hdChtX2J5dGVz
KTsKKyAgICBmbG9hdCB0b1ggPSByZWFkRmxvYXQobV9ieXRlcyk7CisgICAgZmxvYXQgdG9ZID0g
cmVhZEZsb2F0KG1fYnl0ZXMpOworCisgICAgRmxvYXRQb2ludCBwb2ludDEoeDEsIHkxKTsKKyAg
ICBGbG9hdFBvaW50IHBvaW50Mih4MiwgeTIpOworICAgIEZsb2F0UG9pbnQgcG9pbnQzKHRvWCwg
dG9ZKTsKKyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykgeworICAgICAgICAgICAgcG9pbnQxICs9IG1fY3VycmVudFBvaW50
OworICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcG9p
bnQzICs9IG1fY3VycmVudFBvaW50OworICAgICAgICB9CisgICAgICAgIG1fY29uc3VtZXItPmN1
cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsK
KworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9p
bnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJp
Yyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBtX21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQoreworICAgIGZs
b2F0IHgyID0gcmVhZEZsb2F0KG1fYnl0ZXMpOworICAgIGZsb2F0IHkyID0gcmVhZEZsb2F0KG1f
Ynl0ZXMpOworICAgIGZsb2F0IHRvWCA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCB0
b1kgPSByZWFkRmxvYXQobV9ieXRlcyk7CisKKyAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRo
U2VnQ3VydmVUb0N1YmljQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1
cnZlVG9DdWJpY0FicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRv
Q3ViaWNTbW9vdGhBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b0N1YmljU21vb3RoUmVsKQorICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50
OworCisgICAgRmxvYXRQb2ludCBwb2ludDIoeDIsIHkyKTsKKyAgICBGbG9hdFBvaW50IHBvaW50
Myh0b1gsIHRvWSk7CisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBGbG9hdFBvaW50
IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBwb2ludDEuc2NhbGUoMiwgMik7Cisg
ICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55
KCkpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKKyAgICAg
ICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHBvaW50MyArPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9D
dWJpYyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKworICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBw
b2ludDM7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpY1Ntb290
aChwb2ludDIsIHBvaW50MywgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCit7CisgICAgZmxvYXQgeDEgPSBy
ZWFkRmxvYXQobV9ieXRlcyk7CisgICAgZmxvYXQgeTEgPSByZWFkRmxvYXQobV9ieXRlcyk7Cisg
ICAgZmxvYXQgdG9YID0gcmVhZEZsb2F0KG1fYnl0ZXMpOworICAgIGZsb2F0IHRvWSA9IHJlYWRG
bG9hdChtX2J5dGVzKTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQzKHRvWCwgdG9ZKTsKKyAgICBp
ZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgIHBvaW50MS5tb3ZlKDIgKiB4MSwgMiAqIHkxKTsKKyAgICAgICAgRmxv
YXRQb2ludCBwb2ludDIodG9YICsgMiAqIHgxLCB0b1kgKyAyICogeTEpOworICAgICAgICBpZiAo
bV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIHBvaW50MS5tb3Zl
KDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQb2ludC55KCkpOworICAgICAg
ICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50LngoKSwgMyAqIG1fY3VycmVudFBv
aW50LnkoKSk7CisgICAgICAgICAgICBwb2ludDMgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAg
IH0KKyAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUsIGdPbmVPdmVyVGhyZWUpOwor
ICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7CisKKyAg
ICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBwb2ludDMsIEFi
c29sdXRlQ29vcmRpbmF0ZXMpOworCisgICAgICAgIG1fY29udHJvbFBvaW50ID0gRmxvYXRQb2lu
dCh4MSwgeTEpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisg
ICAgICAgICAgICBtX2NvbnRyb2xQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmN1
cnZlVG9RdWFkcmF0aWMoRmxvYXRQb2ludCh4MSwgeTEpLCBwb2ludDMsIG1fbW9kZSk7Cit9CisK
K3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWCA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKyAgICBm
bG9hdCB0b1kgPSByZWFkRmxvYXQobV9ieXRlcyk7CisKKyAgICBpZiAobV9sYXN0Q29tbWFuZCAh
PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCkKKyAgICAgICAgbV9jb250cm9s
UG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKKworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAgICAg
ICAgRmxvYXRQb2ludCBjdWJpY1BvaW50ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIGN1Ymlj
UG9pbnQuc2NhbGUoMiwgMik7CisgICAgICAgIGN1YmljUG9pbnQubW92ZSgtbV9jb250cm9sUG9p
bnQueCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDEo
bV9jdXJyZW50UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55
KCkgKyAyICogY3ViaWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0b1gg
KyAyICogY3ViaWNQb2ludC54KCksIHRvWSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQzKHRvWCwgdG9ZKTsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7
CisgICAgICAgICAgICBwb2ludDMgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUsIGdPbmVPdmVyVGhyZWUpOworICAgICAgICBw
b2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7CisKKyAgICAgICAgbV9j
b25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBwb2ludDMsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOworCisgICAgICAgIG1fY29udHJvbFBvaW50ID0gY3ViaWNQb2ludDsKKyAgICAg
ICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoRmxvYXRQb2ludCh0b1gsIHRvWSksIG1fbW9kZSk7
Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkK
K3sKKyAgICBmbG9hdCByeCA9IHJlYWRGbG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCByeSA9IHJl
YWRGbG9hdChtX2J5dGVzKTsKKyAgICBmbG9hdCBhbmdsZSA9IHJlYWRGbG9hdChtX2J5dGVzKTsK
KyAgICBib29sIGxhcmdlQXJjID0gcmVhZEZsYWcobV9ieXRlcyk7CisgICAgYm9vbCBzd2VlcCA9
IHJlYWRGbGFnKG1fYnl0ZXMpOworICAgIGZsb2F0IHRvWCA9IHJlYWRGbG9hdChtX2J5dGVzKTsK
KyAgICBmbG9hdCB0b1kgPSByZWFkRmxvYXQobV9ieXRlcyk7CisKKyAgICBGbG9hdFBvaW50IHBv
aW50MiA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIC8vIElmIHJ4ID0gMCBvciByeSA9IDAg
dGhlbiB0aGlzIGFyYyBpcyB0cmVhdGVkIGFzIGEgc3RyYWlnaHQgbGluZSBzZWdtZW50IChhICJs
aW5ldG8iKSBqb2luaW5nIHRoZSBlbmRwb2ludHMuCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjT3V0T2ZSYW5nZVBhcmFtZXRlcnMKKyAgICByeCA9IGZh
YnNmKHJ4KTsKKyAgICByeSA9IGZhYnNmKHJ5KTsKKyAgICBpZiAoIXJ4IHx8ICFyeSkgeworICAg
ICAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0
aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcG9pbnQy
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gcG9p
bnQyOworICAgICAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNv
bHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NvbnN1bWVy
LT5saW5lVG8ocG9pbnQyLCBtX21vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykK
KyAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50
UG9pbnQgPSBwb2ludDI7CisgICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1YmljKGFuZ2xl
LCByeCwgcnksIHBvaW50MSwgcG9pbnQyLCBsYXJnZUFyYywgc3dlZXApOworICAgIH0KKyAgICBt
X2NvbnN1bWVyLT5hcmNUbyhwb2ludDIsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwg
bV9tb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlcjo6cGFyc2VGcm9tU3RyZWFtKGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBzdHJlYW0sIGJv
b2wgbm9ybWFsaXplZCkKK3sKKyAgICBtX3NpemUgPSBzdHJlYW0uc2l6ZSgpOworICAgIG1fYnl0
ZXMgPSBzdHJlYW0uYnl0ZXMoKTsKKyAgICBtX2J5dGVzUmVhZCA9IDA7CisKKyAgICBpZiAoIW1f
c2l6ZSB8fCAhbV9ieXRlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9ub3JtYWxp
emVkID0gbm9ybWFsaXplZDsKKworICAgIG1fY29udHJvbFBvaW50ID0gRmxvYXRQb2ludCgpOwor
ICAgIG1fY3VycmVudFBvaW50ID0gRmxvYXRQb2ludCgpOworICAgIG1fc3ViUGF0aFBvaW50ID0g
RmxvYXRQb2ludCgpOworICAgIG1fcGF0aENsb3NlZCA9IHRydWU7CisKKyAgICBtX2xhc3RDb21t
YW5kID0gUGF0aFNlZ1Vua25vd247CisgICAgd2hpbGUgKG1fYnl0ZXNSZWFkIDwgbV9zaXplKSB7
CisgICAgICAgIFNWR1BhdGhTZWdUeXBlIGNvbW1hbmQgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
VHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKG1fYnl0ZXMpKTsKKyAgICAgICAgbV9tb2RlID0gQWJz
b2x1dGVDb29yZGluYXRlczsKKyAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgIGNh
c2UgUGF0aFNlZ01vdmVUb1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRp
bmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKKyAgICAgICAgICAgIHBhcnNl
TW92ZVRvU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNl
Z0xpbmVUb1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7Cisg
ICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0FiczoKKyAgICAgICAgICAgIHBhcnNlTGluZVRvU2Vn
bWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hv
cml6b250YWxSZWw6CisgICAgICAgICAgICBtX21vZGUgPSBSZWxhdGl2ZUNvb3JkaW5hdGVzOwor
ICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOgorICAgICAgICAgICAgcGFy
c2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVs
YXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM6
CisgICAgICAgICAgICBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0Nsb3NlUGF0aDoKKyAgICAgICAgICAgIHBhcnNl
Q2xvc2VQYXRoU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0
aFNlZ0N1cnZlVG9DdWJpY1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRp
bmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczoKKyAgICAgICAgICAg
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9
IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1Nt
b290aEFiczoKKyAgICAgICAgICAgIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNS
ZWw6CisgICAgICAgICAgICBtX21vZGUgPSBSZWxhdGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBj
YXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWw6CisgICAgICAgICAgICBtX21vZGUgPSBSZWxh
dGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoQWJzOgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0FyY1JlbDoKKyAgICAg
ICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNl
Z0FyY0FiczoKKyAgICAgICAgICAgIGlmICghcGFyc2VBcmNUb1NlZ21lbnQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2xhc3RD
b21tYW5kID0gY29tbWFuZDsKKworICAgICAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2Vn
Q3VydmVUb0N1YmljQWJzICAgICAgICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNSZWwKKyAgICAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1
cnZlVG9DdWJpY1Ntb290aEFicyAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b0N1YmljU21vb3RoUmVsCisgICAgICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljQWJzICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNSZWwKKyAgICAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFJlbCkKKyAgICAgICAgICAgIG1fY29udHJvbFBvaW50ID0gbV9jdXJy
ZW50UG9pbnQ7CisgICAgfQorICAgIEFTU0VSVChtX2J5dGVzUmVhZCA9PSBtX3NpemUpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHdvcmtzIGJ5IGNvbnZlcnRpbmcgdGhlIFNW
RyBhcmMgdG8gInNpbXBsZSIgYmV6aWVycy4KKy8vIFBhcnRseSBhZGFwdGVkIGZyb20gTmlrbydz
IGNvZGUgaW4ga2RlbGlicy9rZGVjb3JlL3N2Z2ljb25zLgorLy8gU2VlIGFsc28gU1ZHIGltcGxl
bWVudGF0aW9uIG5vdGVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNB
cmNDb252ZXJzaW9uRW5kcG9pbnRUb0NlbnRlcgorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
cjo6ZGVjb21wb3NlQXJjVG9DdWJpYyhmbG9hdCBhbmdsZSwgZmxvYXQgcngsIGZsb2F0IHJ5LCBG
bG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnKQoreworICAgIEZsb2F0U2l6ZSBtaWRQb2ludERpc3RhbmNlID0gcG9p
bnQxIC0gcG9pbnQyOworICAgIG1pZFBvaW50RGlzdGFuY2Uuc2NhbGUoMC41Zik7CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gcG9pbnRUcmFuc2Zvcm07CisgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRl
KC1hbmdsZSk7CisKKyAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVkTWlkUG9pbnQgPSBwb2ludFRy
YW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50KG1pZFBvaW50RGlzdGFuY2Uud2lkdGgoKSwgbWlk
UG9pbnREaXN0YW5jZS5oZWlnaHQoKSkpOworICAgIGZsb2F0IHNxdWFyZVJ4ID0gcnggKiByeDsK
KyAgICBmbG9hdCBzcXVhcmVSeSA9IHJ5ICogcnk7CisgICAgZmxvYXQgc3F1YXJlWCA9IHRyYW5z
Zm9ybWVkTWlkUG9pbnQueCgpICogdHJhbnNmb3JtZWRNaWRQb2ludC54KCk7CisgICAgZmxvYXQg
c3F1YXJlWSA9IHRyYW5zZm9ybWVkTWlkUG9pbnQueSgpICogdHJhbnNmb3JtZWRNaWRQb2ludC55
KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgcmFkaWkgYXJlIGJpZyBlbm91Z2ggdG8gZHJhdyB0
aGUgYXJjLCBzY2FsZSByYWRpaSBpZiBub3QuCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHL2ltcGxub3RlLmh0bWwjQXJjQ29ycmVjdGlvbk91dE9mUmFuZ2VSYWRpaQorICAgIGZsb2F0
IHJhZGlpU2NhbGUgPSBzcXVhcmVYIC8gc3F1YXJlUnggKyBzcXVhcmVZIC8gc3F1YXJlUnk7Cisg
ICAgaWYgKHJhZGlpU2NhbGUgPiAxKSB7CisgICAgICAgIHJ4ICo9IHNxcnRmKHJhZGlpU2NhbGUp
OworICAgICAgICByeSAqPSBzcXJ0ZihyYWRpaVNjYWxlKTsKKyAgICB9CisKKyAgICBwb2ludFRy
YW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBwb2ludFRyYW5zZm9ybS5zY2FsZSgxIC8gcngs
IDEgLyByeSk7CisgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1hbmdsZSk7CisKKyAgICBwb2lu
dDEgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpOworICAgIHBvaW50MiA9IHBvaW50
VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50Mik7CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9pbnQy
IC0gcG9pbnQxOworCisgICAgZmxvYXQgZCA9IGRlbHRhLndpZHRoKCkgKiBkZWx0YS53aWR0aCgp
ICsgZGVsdGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWlnaHQoKTsKKyAgICBmbG9hdCBzY2FsZUZhY3Rv
clNxdWFyZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAuMjVmLCAwLmYpOworCisgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzcXJ0ZihzY2FsZUZhY3RvclNxdWFyZWQpOworICAgIGlmIChzd2VlcEZsYWcg
PT0gbGFyZ2VBcmNGbGFnKQorICAgICAgICBzY2FsZUZhY3RvciA9IC1zY2FsZUZhY3RvcjsKKwor
ICAgIGRlbHRhLnNjYWxlKHNjYWxlRmFjdG9yKTsKKyAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50
ID0gRmxvYXRQb2ludCgwLjVmICogKHBvaW50MS54KCkgKyBwb2ludDIueCgpKSAtIGRlbHRhLmhl
aWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYgKiAo
cG9pbnQxLnkoKSArIHBvaW50Mi55KCkpICsgZGVsdGEud2lkdGgoKSk7CisKKyAgICBmbG9hdCB0
aGV0YTEgPSBhdGFuMmYocG9pbnQxLnkoKSAtIGNlbnRlclBvaW50LnkoKSwgcG9pbnQxLngoKSAt
IGNlbnRlclBvaW50LngoKSk7CisgICAgZmxvYXQgdGhldGEyID0gYXRhbjJmKHBvaW50Mi55KCkg
LSBjZW50ZXJQb2ludC55KCksIHBvaW50Mi54KCkgLSBjZW50ZXJQb2ludC54KCkpOworCisgICAg
ZmxvYXQgdGhldGFBcmMgPSB0aGV0YTIgLSB0aGV0YTE7CisgICAgaWYgKHRoZXRhQXJjIDwgMCAm
JiBzd2VlcEZsYWcpCisgICAgICAgIHRoZXRhQXJjICs9IDIgKiBwaUZsb2F0OworICAgIGVsc2Ug
aWYgKHRoZXRhQXJjID4gMCAmJiAhc3dlZXBGbGFnKQorICAgICAgICB0aGV0YUFyYyAtPSAyICog
cGlGbG9hdDsKKworICAgIHBvaW50VHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIHBvaW50
VHJhbnNmb3JtLnJvdGF0ZShhbmdsZSk7CisgICAgcG9pbnRUcmFuc2Zvcm0uc2NhbGUocngsIHJ5
KTsKKworICAgIC8vIFNvbWUgcmVzdWx0cyBvZiBhdGFuMiBvbiBzb21lIHBsYXRmb3JtIGltcGxl
bWVudGF0aW9ucyBhcmUgbm90IGV4YWN0IGVub3VnaC4gU28gdGhhdCB3ZSBnZXQgbW9yZQorICAg
IC8vIGN1YmljIGN1cnZlcyB0aGFuIGV4cGVjdGVkIGhlcmUuIEFkZGluZyAwLjAwMWYgcmVkdWNl
cyB0aGUgY291bnQgb2Ygc2dlbWVudHMgdG8gdGhlIGNvcnJlY3QgY291bnQuCisgICAgaW50IHNl
Z21lbnRzID0gY2VpbGYoZmFic2YodGhldGFBcmMgLyAocGlPdmVyVHdvRmxvYXQgKyAwLjAwMWYp
KSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWdtZW50czsgKytpKSB7CisgICAgICAgIGZs
b2F0IHN0YXJ0VGhldGEgPSB0aGV0YTEgKyBpICogdGhldGFBcmMgLyBzZWdtZW50czsKKyAgICAg
ICAgZmxvYXQgZW5kVGhldGEgPSB0aGV0YTEgKyAoaSArIDEpICogdGhldGFBcmMgLyBzZWdtZW50
czsKKworICAgICAgICBmbG9hdCB0ID0gKDggLyA2LmYpICogdGFuZigwLjI1ZiAqIChlbmRUaGV0
YSAtIHN0YXJ0VGhldGEpKTsKKyAgICAgICAgaWYgKCFpc2Zpbml0ZSh0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZmxvYXQgc2luU3RhcnRUaGV0YSA9IHNpbmYoc3RhcnRU
aGV0YSk7CisgICAgICAgIGZsb2F0IGNvc1N0YXJ0VGhldGEgPSBjb3NmKHN0YXJ0VGhldGEpOwor
ICAgICAgICBmbG9hdCBzaW5FbmRUaGV0YSA9IHNpbmYoZW5kVGhldGEpOworICAgICAgICBmbG9h
dCBjb3NFbmRUaGV0YSA9IGNvc2YoZW5kVGhldGEpOworCisgICAgICAgIHBvaW50MSA9IEZsb2F0
UG9pbnQoY29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5TdGFydFRoZXRhICsg
dCAqIGNvc1N0YXJ0VGhldGEpOworICAgICAgICBwb2ludDEubW92ZShjZW50ZXJQb2ludC54KCks
IGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQzID0gRmxvYXRQb2lu
dChjb3NFbmRUaGV0YSwgc2luRW5kVGhldGEpOworICAgICAgICBwb2ludDMubW92ZShjZW50ZXJQ
b2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIHBvaW50MiA9IHBvaW50MzsKKyAg
ICAgICAgcG9pbnQyLm1vdmUodCAqIHNpbkVuZFRoZXRhLCAtdCAqIGNvc0VuZFRoZXRhKTsKKwor
ICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQo
cG9pbnQxKSwgcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50MyksIEFic29s
dXRlQ29vcmRpbmF0ZXMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyX2gKKyNkZWZp
bmUgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKKyNpbmNsdWRl
ICJTVkdQYXRoQ29uc3VtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlciB7CitwdWJsaWM6CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIoU1ZHUGF0aENvbnN1bWVyKik7CisKKyAgICBib29sIHBhcnNlRnJvbVN0cmVhbShjb25zdCBT
VkdQYXRoQnl0ZVN0cmVhbSYsIGJvb2wgbm9tcm1hbGl6ZWQpOworCitwcml2YXRlOgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlLCB0eXBlbmFtZSBCeXRlVHlwZT4KKyAgICBEYXRhVHlw
ZSByZWFkVHlwZSh1bnNpZ25lZCBjaGFyKiYgYnl0ZXMpCisgICAgeworICAgICAgICBCeXRlVHlw
ZSBkYXRhOworICAgICAgICBzaXplX3QgdHlwZVNpemUgPSBzaXplb2YoQnl0ZVR5cGUpOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fYnl0ZXNSZWFkIDw9IG1fc2l6ZSk7CisgICAgICAgICAgICBkYXRhLmJ5dGVz
W2ldID0gKmJ5dGVzOworICAgICAgICAgICAgKytieXRlczsKKyAgICAgICAgICAgICsrbV9ieXRl
c1JlYWQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTsKKyAgICB9CisK
KyAgICBib29sIHJlYWRGbGFnKHVuc2lnbmVkIGNoYXIqIGJ5dGVzKSB7IHJldHVybiByZWFkVHlw
ZTxib29sLCBCb29sQnl0ZT4oYnl0ZXMpOyB9CisgICAgZmxvYXQgcmVhZEZsb2F0KHVuc2lnbmVk
IGNoYXIqIGJ5dGVzKSB7IHJldHVybiByZWFkVHlwZTxmbG9hdCwgRmxvYXRCeXRlPihieXRlcyk7
IH0KKyAgICB1bnNpZ25lZCBzaG9ydCByZWFkU1ZHU2VnbWVudFR5cGUodW5zaWduZWQgY2hhciog
Ynl0ZXMpIHsgcmV0dXJuIHJlYWRUeXBlPHVuc2lnbmVkIHNob3J0LCBVbnNpZ25lZFNob3J0Qnl0
ZT4oYnl0ZXMpOyB9CisKKyAgICBzaXplX3QgbV9ieXRlc1JlYWQ7CisgICAgc2l6ZV90IG1fc2l6
ZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBtX2J5dGVzOworCitwcml2YXRlOgorICAgIHZvaWQgcGFy
c2VDbG9zZVBhdGhTZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZU1vdmVUb1NlZ21lbnQoKTsKKyAg
ICB2b2lkIHBhcnNlTGluZVRvU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKTsKKyAg
ICB2b2lkIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VDdXJ2ZVRv
Q3ViaWNTbW9vdGhTZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdt
ZW50KCk7CisgICAgdm9pZCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCk7Cisg
ICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudCgpOworICAgIGJvb2wgZGVjb21wb3NlQXJjVG9DdWJp
YyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIGJvb2wgbGFy
Z2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CisKKyAgICBTVkdQYXRoQ29uc3VtZXIqIG1fY29u
c3VtZXI7CisgICAgUGF0aENvb3JkaW5hdGVNb2RlIG1fbW9kZTsKKyAgICBjb25zdCBVQ2hhciog
bV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIFNWR1BhdGhTZWdUeXBlIG1fbGFz
dENvbW1hbmQ7CisgICAgYm9vbCBtX25vcm1hbGl6ZWQ7CisgICAgYm9vbCBtX3BhdGhDbG9zZWQ7
CisgICAgRmxvYXRQb2ludCBtX2NvbnRyb2xQb2ludDsKKyAgICBGbG9hdFBvaW50IG1fY3VycmVu
dFBvaW50OworICAgIEZsb2F0UG9pbnQgbV9zdWJQYXRoUG9pbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoRGF0YUJ1aWxkZXIu
aCIKKworI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTVkdQYXRoRGF0YUJ1aWxkZXI6OlNWR1BhdGhEYXRhQnVpbGRlcigpCit7Cit9CisKK1N0cmlu
ZyBTVkdQYXRoRGF0YUJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZCwgUGF0aFBhcnNpbmdN
b2RlIHBhcnNpbmdNb2RlKQoreworICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CisKKyAgICBTVkdQ
YXRoUGFyc2VyIHBhcnNlcih0aGlzKTsKKyAgICBwYXJzZXIucGFyc2VQYXRoRGF0YVN0cmluZyhk
LCBwYXJzaW5nTW9kZSA9PSBVbmFsdGVyZWRQYXJzaW5nKTsKKyAgICByZXR1cm4gbV9zdHJpbmcu
c2ltcGxpZnlXaGl0ZVNwYWNlKCk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjptb3Zl
VG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2Rl
KQoreworICAgIG1fc3RyaW5nICs9IChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyAibSIg
OiAiTSIpOworICAgIG1fc3RyaW5nICs9IFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGcgIiwg
cG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6bGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sK
KyAgICBtX3N0cmluZyArPSAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gImwiIDogIkwi
KTsKKyAgICBtX3N0cmluZyArPSBTdHJpbmc6OmZvcm1hdCgiICUuNmxnICUuNmxnICIsIHBvaW50
LngoKSwgcG9pbnQueSgpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmxpbmVUb0hv
cml6b250YWwoZmxvYXQgeCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgbV9zdHJp
bmcgKz0gKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/ICJoIiA6ICJIIik7CisgICAgbV9z
dHJpbmcgKz0gU3RyaW5nOjpmb3JtYXQoIiAlLjZsZyAiLCB4KTsKK30KKwordm9pZCBTVkdQYXRo
RGF0YUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKGZsb2F0IHksIFBhdGhDb29yZGluYXRlTW9kZSBt
b2RlKQoreworICAgIG1fc3RyaW5nICs9IChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyAi
diIgOiAiViIpOworICAgIG1fc3RyaW5nICs9IFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgIiwgeSk7
Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBtX3N0cmluZyArPSAobW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gImMiIDogIkMiKTsKKyAgICBtX3N0cmluZyArPSBT
dHJpbmc6OmZvcm1hdCgiICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBv
aW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHBvaW50LngoKSwg
cG9pbnQueSgpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Nt
b290aChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBtX3N0cmluZyArPSAobW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gInMiIDogIlMiKTsKKyAgICBtX3N0cmluZyArPSBTdHJpbmc6OmZv
cm1hdCgiICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50Mi54KCksIHBvaW50Mi55KCks
IHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmN1
cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgbV9zdHJpbmcgKz0gKG1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/ICJxIiA6ICJRIik7CisgICAgbV9zdHJpbmcgKz0g
U3RyaW5nOjpmb3JtYXQoIiAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBw
b2ludDEueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFC
dWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBtX3N0cmluZyArPSAobW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gInQiIDogIlQiKTsKKyAgICBtX3N0cmluZyArPSBTdHJpbmc6OmZv
cm1hdCgiICUuNmxnICUuNmxnICIsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKwordm9pZCBT
VkdQYXRoRGF0YUJ1aWxkZXI6OmFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBy
MSwgZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIG1fc3RyaW5nICs9IChtb2RlID09
IEFic29sdXRlQ29vcmRpbmF0ZXMgPyAiYSIgOiAiQSIpOworICAgIG1fc3RyaW5nICs9IFN0cmlu
Zzo6Zm9ybWF0KCIgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGcgIiwgcjEsIHIy
LCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHBvaW50LngoKSwgcG9pbnQueSgpKTsK
K30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmNsb3NlUGF0aCgpCit7CisgICAgbV9zdHJp
bmcgKz0gIlogIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1BhdGhEYXRhQnVpbGRlcl9o
CisjZGVmaW5lIFNWR1BhdGhEYXRhQnVpbGRlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNWR1BhdGhDb25zdW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1Bh
dGhEYXRhQnVpbGRlciA6IHByaXZhdGUgU1ZHUGF0aENvbnN1bWVyIHsKK3B1YmxpYzoKKyAgICBT
VkdQYXRoRGF0YUJ1aWxkZXIoKTsKKyAgICBTdHJpbmcgYnVpbGQoY29uc3QgU3RyaW5nJiwgUGF0
aFBhcnNpbmdNb2RlKTsKKworcHJpdmF0ZToKKyAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlz
bmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAg
dmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgorICAgIC8vIE9ubHkgdXNlZCBp
biBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250
YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUb1Zl
cnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2
ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVw
RmxhZywgUGF0aENvb3JkaW5hdGVNb2RlKTsKKworICAgIFN0cmluZyBtX3N0cmluZzsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYg
Ly8gU1ZHUGF0aERhdGFCdWlsZGVyX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmgJKHJldmlzaW9uIDY0MDU3KQor
KysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2MyArMjgs
ODggQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgU1ZHUGF0aEVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHU3R5bGVkRWxlbWVudDsK
IAotICAgIGNsYXNzIFNWR1BhdGhTZWcgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdQYXRoU2VnPiB7
Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnKCkgeyB9Ci0KLSAgICAg
ICAgZW51bSBTVkdQYXRoU2VnVHlwZSB7Ci0gICAgICAgICAgICBQQVRIU0VHX1VOS05PV04gICAg
ICAgICAgICAgICAgICAgICAgICAgPSAwLAotICAgICAgICAgICAgUEFUSFNFR19DTE9TRVBBVEgg
ICAgICAgICAgICAgICAgICAgICAgID0gMSwKLSAgICAgICAgICAgIFBBVEhTRUdfTU9WRVRPX0FC
UyAgICAgICAgICAgICAgICAgICAgICA9IDIsCi0gICAgICAgICAgICBQQVRIU0VHX01PVkVUT19S
RUwgICAgICAgICAgICAgICAgICAgICAgPSAzLAotICAgICAgICAgICAgUEFUSFNFR19MSU5FVE9f
QUJTICAgICAgICAgICAgICAgICAgICAgID0gNCwKLSAgICAgICAgICAgIFBBVEhTRUdfTElORVRP
X1JFTCAgICAgICAgICAgICAgICAgICAgICA9IDUsCi0gICAgICAgICAgICBQQVRIU0VHX0NVUlZF
VE9fQ1VCSUNfQUJTICAgICAgICAgICAgICAgPSA2LAotICAgICAgICAgICAgUEFUSFNFR19DVVJW
RVRPX0NVQklDX1JFTCAgICAgICAgICAgICAgID0gNywKLSAgICAgICAgICAgIFBBVEhTRUdfQ1VS
VkVUT19RVUFEUkFUSUNfQUJTICAgICAgICAgICA9IDgsCi0gICAgICAgICAgICBQQVRIU0VHX0NV
UlZFVE9fUVVBRFJBVElDX1JFTCAgICAgICAgICAgPSA5LAotICAgICAgICAgICAgUEFUSFNFR19B
UkNfQUJTICAgICAgICAgICAgICAgICAgICAgICAgID0gMTAsCi0gICAgICAgICAgICBQQVRIU0VH
X0FSQ19SRUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMSwKLSAgICAgICAgICAgIFBBVEhT
RUdfTElORVRPX0hPUklaT05UQUxfQUJTICAgICAgICAgICA9IDEyLAotICAgICAgICAgICAgUEFU
SFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUwgICAgICAgICAgID0gMTMsCi0gICAgICAgICAgICBQ
QVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlMgICAgICAgICAgICAgPSAxNCwKLSAgICAgICAgICAg
IFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTCAgICAgICAgICAgICA9IDE1LAotICAgICAgICAg
ICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlMgICAgICAgID0gMTYsCi0gICAgICAg
ICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTCAgICAgICAgPSAxNywKLSAgICAg
ICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUyAgICA9IDE4LAotICAg
ICAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMICAgID0gMTkKLSAg
ICAgICAgfTsKLQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gUEFUSFNFR19VTktOT1dOOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiIjsgfQotICAgICAgICB2aXJ0
dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0KLSAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVy
biBTVkdOYW1lczo6ZEF0dHI7IH0KLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBT
VkdQYXRoU2VnKCkgeyB9CitlbnVtIFNWR1BhdGhTZWdUeXBlIHsKKyAgICBQYXRoU2VnVW5rbm93
biA9IDAsCisgICAgUGF0aFNlZ0Nsb3NlUGF0aCA9IDEsCisgICAgUGF0aFNlZ01vdmVUb0FicyA9
IDIsCisgICAgUGF0aFNlZ01vdmVUb1JlbCA9IDMsCisgICAgUGF0aFNlZ0xpbmVUb0FicyA9IDQs
CisgICAgUGF0aFNlZ0xpbmVUb1JlbCA9IDUsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyA9
IDYsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCA9IDcsCisgICAgUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNBYnMgPSA4LAorICAgIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsID0gOSwKKyAg
ICBQYXRoU2VnQXJjQWJzID0gMTAsCisgICAgUGF0aFNlZ0FyY1JlbCA9IDExLAorICAgIFBhdGhT
ZWdMaW5lVG9Ib3Jpem9udGFsQWJzID0gMTIsCisgICAgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxS
ZWwgPSAxMywKKyAgICBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgPSAxNCwKKyAgICBQYXRoU2Vn
TGluZVRvVmVydGljYWxSZWwgPSAxNSwKKyAgICBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJz
ID0gMTYsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCA9IDE3LAorICAgIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzID0gMTgsCisgICAgUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNTbW9vdGhSZWwgPSAxOQorfTsKKworY2xhc3MgU1ZHUGF0aEVsZW1lbnQ7CitjbGFzcyBT
VkdTdHlsZWRFbGVtZW50OworCitjbGFzcyBTVkdQYXRoU2VnIDogcHVibGljIFJlZkNvdW50ZWQ8
U1ZHUGF0aFNlZz4geworcHVibGljOgorICAgIHZpcnR1YWwgflNWR1BhdGhTZWcoKSB7IH0KKwor
ICAgIC8vIEZvcndhcmQgZGVjbGFyZSB0aGVzZSBlbnVtcyBpbiB0aGUgdzNjIG5hbWluZyBzY2hl
bWUsIGZvciBJREwgZ2VuZXJhdGlvbgorICAgIGVudW0geworICAgICAgICBQQVRIU0VHX1VOS05P
V04gPSBQYXRoU2VnVW5rbm93biwKKyAgICAgICAgUEFUSFNFR19DTE9TRVBBVEggPSBQYXRoU2Vn
Q2xvc2VQYXRoLAorICAgICAgICBQQVRIU0VHX01PVkVUT19BQlMgPSBQYXRoU2VnTW92ZVRvQWJz
LAorICAgICAgICBQQVRIU0VHX01PVkVUT19SRUwgPSBQYXRoU2VnTW92ZVRvUmVsLAorICAgICAg
ICBQQVRIU0VHX0xJTkVUT19BQlMgPSBQYXRoU2VnTGluZVRvQWJzLAorICAgICAgICBQQVRIU0VH
X0xJTkVUT19SRUwgPSBQYXRoU2VnTGluZVRvUmVsLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9f
Q1VCSUNfQUJTID0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicywKKyAgICAgICAgUEFUSFNFR19DVVJW
RVRPX0NVQklDX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwsCisgICAgICAgIFBBVEhTRUdf
Q1VSVkVUT19RVUFEUkFUSUNfQUJTID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMsCisgICAg
ICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNSZWwsCisgICAgICAgIFBBVEhTRUdfQVJDX0FCUyA9IFBhdGhTZWdBcmNBYnMsCisgICAgICAg
IFBBVEhTRUdfQVJDX1JFTCA9IFBhdGhTZWdBcmNSZWwsCisgICAgICAgIFBBVEhTRUdfTElORVRP
X0hPUklaT05UQUxfQUJTID0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnMsCisgICAgICAgIFBB
VEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMID0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWws
CisgICAgICAgIFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUyA9IFBhdGhTZWdMaW5lVG9WZXJ0
aWNhbEFicywKKyAgICAgICAgUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMID0gUGF0aFNlZ0xp
bmVUb1ZlcnRpY2FsUmVsLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FC
UyA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVU
T19DVUJJQ19TTU9PVEhfUkVMID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCwKKyAgICAg
ICAgUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTID0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNTbW9vdGhBYnMsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01P
T1RIX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsCiAgICAgfTsKIAotICAg
IGNsYXNzIFNWR1BhdGhTZWdTaW5nbGVDb29yZCA6IHB1YmxpYyBTVkdQYXRoU2VnIHsgCi0gICAg
cHVibGljOgotICAgICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmQoZmxvYXQgeCwgZmxvYXQgeSkK
LSAgICAgICAgOiBTVkdQYXRoU2VnKCkgLCBtX3goeCkgLCBtX3koeSkge30KLQotICAgICAgICB2
b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgICAgIGZsb2F0IHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KLQotICAgICAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9
Ci0gICAgICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgICAgICB2aXJ0
dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHBhdGhTZWdUeXBlQXNMZXR0ZXIo
KSArIFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIGZsb2F0IG1feDsKLSAgICAgICAgZmxvYXQgbV95OwotICAgIH07Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBB
VEhTRUdfVU5LTk9XTjsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIo
KSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIiI7IH0KKworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFzc29jaWF0ZWRB
dHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFtZXM6OmRBdHRyOyB9CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgU1ZHUGF0aFNlZygpIHsgfQorfTsKKworY2xhc3MgU1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkIDogcHVibGljIFNWR1BhdGhTZWcgeyAKK3B1YmxpYzoKKyAgICBTVkdQYXRoU2Vn
U2luZ2xlQ29vcmQoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICA6IFNWR1BhdGhTZWcoKSAsIG1feCh4
KSAsIG1feSh5KSB7fQorCisgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsgfQorICAg
IGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKworICAgIHZvaWQgc2V0WShmbG9hdCB5
KSB7IG1feSA9IHk7IH0KKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSArIFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KKwor
cHJpdmF0ZToKKyAgICBmbG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworfTsKIAogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCShyZXZpc2lvbiA2NDA1
NykKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE4LDcgKzIxOCw3IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0xpc3Q+IFNWR1BhdGhTZWdMaXMK
ICAgICAgICAgaWYgKGZyb20tPnBhdGhTZWdUeXBlKCkgPT0gU1ZHUGF0aFNlZzo6UEFUSFNFR19V
TktOT1dOIHx8IGZyb20tPnBhdGhTZWdUeXBlKCkgIT0gdG8tPnBhdGhTZWdUeXBlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IHNlZ21lbnQgPSAw
OwotICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFNWR1BhdGhTZWc6OlNWR1BhdGhTZWdUeXBl
Pihmcm9tLT5wYXRoU2VnVHlwZSgpKSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdUeXBlPihmcm9tLT5wYXRoU2VnVHlwZSgpKSkgewogICAgICAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOgogICAgICAgICAgICAgc2VnbWVudCA9IFNWR1BhdGhT
ZWdDbG9zZVBhdGg6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7Cg==
</data>
<flag name="review"
          id="50829"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63425</attachid>
            <date>2010-08-04 00:33:24 -0700</date>
            <delta_ts>2010-08-04 03:03:50 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>svgByteStreamBuilder-10.patch</filename>
            <type>text/plain</type>
            <size>73343</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDYzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDEwLTA4LTA0ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29t
ZSB1cCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHJlcHJlc2VudCBQYXRoIHNlZ21lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTE1OQor
CisgICAgICAgIEV2ZXJ5IFNWR1BhdGhFbGVtZW50IGJ1aWxkcyBhIFNWR1BhdGhTZWdMaXN0IGZp
cnN0IGFuZCBjcmVhdGVzIHRoZSBQYXRoIGFmdGVyd2FyZHMuIFRoaXMKKyAgICAgICAgaXMgbmVp
dGhlciBtZW1vcnkgZWZmaWVjaWVudCwgbm9yIHZlcnkgZmFzdCBmb3IgdGhlIGZhY3QgdGhhdCB3
ZSBkb24ndCByZWFseSBuZWVkIFNWR1BhdGhTZWdMaXN0IG1vc3QKKyAgICAgICAgb2YgdGhlIHRp
bWUuIEl0IGlzIGp1c3QgbmVlZGVkIGZvciBtYW5pcHVsYXRpbmcgU1ZHUGF0aEVsZW1lbnRzIGJ5
IEphdmFTY3JpcHQgdmlhIFNWR0RPTS4KKyAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0gaXMgYSBz
aW1wbGUgYnl0ZSBzdHJlYW0gYW5kIGNhbiBiZSBwYXJzZWQgdmVyeSBxdWlja2x5LiBJdCBzYXZl
cyBtZW1vcnkgZHVlIHRvCisgICAgICAgIGl0J3MgY29tcGFjdCBmb3JtIGJ5IGxpbmtpbmcgdXAg
c2hvcnQgaW50ZWdlciB2YWx1ZXMgZm9yIHRoZSBzZWdlbWVudCB0eXBlcyBhbmQgZmxvYXQgdmFs
dWVzIGZvcgorICAgICAgICB0aGUgcG9pbnRzIG9mIGEgc2VnbWVudC4gSXQgd2lsbCBtYWtlIGl0
IHBvc3NpYmxlIHRvIHN5bmNocm9uaXplIHRoZSB1bmFsdGVyZWQgYW5kIG5vcm1hbGl6ZWQKKyAg
ICAgICAgU1ZHUGF0aFNlZ0xpc3QgdG9nZXRoZXIgd2l0aCB0aGUgU1ZHUGF0aERhdGEgZm9yIHRo
ZSBkIGF0dHJpYnV0ZS4KKyAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIgcGFyc2VzIGFu
IGV4aXN0aW5nIFNWR1BhdGhCeXRlU3RyZWFtIGFuZCBjcmVhdGVzIGEgU3RyaW5nLCBTVkdQYXRo
U2VnTGlzdCBvcgorICAgICAgICBwbGF0Zm9ybSBwYXRoIGFuZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIgY3JlYXRlcyBhIFNWR1BhdGhCeXRlU3RyZWFtIG91dCBvZiBTVkdQYXRoRGF0YS4KKyAg
ICAgICAgVGhpcyBwYXRjaCBkdXBsaWNhdGVzIHRoZSBub3JtYWxpemF0aW9uIGFsZ29yaXRobXMg
b2YgU1ZHUGF0aFBhcnNlciBpbiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBhdCB0aGUgbW9tZW50
LgorICAgICAgICBUaGUgbm9ybWFsaXphdGlvbiBjb2RlIHdpbGwgZ2V0IHJlbW92ZWQgZnJvbSBT
VkdQYXRoUGFyc2VyLCB3YW50cyB3ZSBjb21wbGV0ZWx5IG1vdmVkIHRvIFNWR0J5dGVTdHJlYW0K
KyAgICAgICAgaW4gb25lIG9mIHRoZSBuZXh0IHBhdGNoZXMuCisgICAgICAgIFNWR1BhdGhEYXRh
QnVpbGRlciBpcyBhIG5ldyBTVkdQYXRoQ29uc3VtZXIgbmV4dCB0byBTVkdQYXRoQnVpbGRlciBh
bmQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyCisgICAgICAgIGFuZCB3YXMgYWRkZWQgdG8gY3JlYXRl
IGEgU3RyaW5nIG91dCBvZiB0aGUgcGF0aCBzZWdlbWVudHMgZnJvbSBhIFNWR1BhdGhCeXRlU3Ry
ZWFtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRG9lc24ndCBpbmZsdWVuY2UgcmVuZGVyaW5n
LgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBh
dGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJ1aWxkZXI6OmJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKToKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aEJ1aWxkZXIuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW0u
aDogQWRkZWQuIEJ5dGVWZWN0b3IgdG8gbWFuYWdlIFNWR1BhdGggZGF0YQorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmRhdGEpOiBHZXQgdGhlIFZlY3Rv
ciBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmJlZ2luKTogR2l2
ZXMgYSBjb25zdGFudCBpdGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtOjplbmQpOiBHaXZlcyBhIGNvbnN0YW50IGl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVuZCk6IEFwcGVuZCBhIGJ5dGUgdG8gdGhlIFZlY3Rvci4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpjbGVhcik6IENsZWFyIHRoZSBW
ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6U1ZHUGF0aEJ5dGVT
dHJlYW0pOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwOiBBZGRl
ZC4gQ3JlYXRlcyBhIFNWR1BhdGhCeXRlU3RyZWFtCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmJ1aWxkRnJvbVBhdGhEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvSG9yaXpvbnRhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2Fs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1
YmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVU
b0N1YmljU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
cjo6Y3VydmVUb1F1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjphcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OmNsb3NlUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6d3JpdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6d3JpdGVGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6d3JpdGVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXI6OndyaXRlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRlU2VnbWVudFR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlci5jcHA6IEFkZGVkLiBQYXJzZXMgdGhlIEJ5dGVTdHJlYW0gYW5k
IGNyZWF0ZXMgYW4gU1ZHUGF0aENvbnN1bWVyIG91dCBvZiBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDbG9zZVBhdGhTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZU1v
dmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6
OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlcjo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFy
c2VyOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlcjo6cGFyc2VGcm9tU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1YmljKToKKyAgICAgICAgKiBzdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbVBhcnNlcjo6cmVhZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5
dGVTdHJlYW1QYXJzZXI6OnJlYWRGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyOjpyZWFkRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXI6OnJlYWRTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlcjo6cmVhZEZsb2F0UG9pbnQpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoQ29uc3VtZXIuaDogTWFrZSBDb25zdW1lcnMgTm9uY29weWFibGUKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aERhdGFCdWlsZGVyLmNwcDogQWRkZWQuIENyZWF0ZXMgYSBTdHJpbmcgb3V0IG9mIGEg
U1ZHUGF0aEJ5dGVTdHJlYW0uCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6
OlNWR1BhdGhEYXRhQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxk
ZXI6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bW92ZVRv
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bGluZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bGluZVRvSG9yaXpvbnRhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjphcmNUbyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OmNsb3NlUGF0aCk6CisgICAgICAgICogc3Zn
L1NWR1BhdGhEYXRhQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZy5o
OiBNb3ZlIHRoZSBlbnVtZXJhdGlvbiBvdXQgb2YgdGhlIGNsYXNzIHRvIHVzZSBpdCBvbiBvdGhl
ciBwbGFjZXMgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnOjp+U1ZHUGF0aFNlZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
OjopOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6cGF0aFNlZ1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnOjphc3NvY2lhdGVkQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnOjpTVkdQYXRoU2VnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29y
ZDo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdT
aW5nbGVDb29yZDo6c2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29v
cmQ6OngpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkOjpzZXRZKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6eSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OnRvU3RyaW5nKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aFNlZ0xpc3QuY3BwOiBVc2UgdGhlIG5ldyBpbnRyb2R1Y2UgZW51bWVyYXRpb24gb2Yg
U1ZHUGF0aFNlZworICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3Q6OmdldFBhdGhTZWdB
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdDo6dG9QYXRoRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdDo6Y3JlYXRlQW5pbWF0ZWQpOgorCiAy
MDEwLTA4LTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2NDQ2NikKKysrIFdlYkNvcmUv
QW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtODYzLDYgKzg2Myw5IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXN2Zy9TVkdQYWludC5jcHAgXAogCXN2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwIFwKIAlzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwIFwKKwlzdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBcCisJc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFy
c2VyLmNwcCBcCisJc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAgXAogCXN2Zy9TVkdQYXRoRWxl
bWVudC5jcHAgXAogCXN2Zy9TVkdQYXRoUGFyc2VyLmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdBcmMu
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjQ0NjYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MDQxLDcgKzQwNDEsMTQgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaCBcCiAJV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ1aWxkZXIuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oIFwKKwlX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwIFwKKwlXZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
Q29uc3VtZXIuaCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCBcCisJV2Vi
Q29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmggXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9zdmcv
U1ZHUGF0aFBhcnNlci5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY0NDY2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM3OTksNyArMzc5OSwxNCBAQAogICAgICAg
ICAgICAgJ3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1Bh
dGhCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhCdWlsZGVyLmgnLAorICAg
ICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oJywKKyAgICAgICAgICAgICdzdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAnc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5oJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCcsCiAg
ICAgICAgICAgICAnc3ZnL1NWR1BhdGhDb25zdW1lci5oJywKKyAgICAgICAgICAgICdzdmcvU1ZH
UGF0aERhdGFCdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAnc3ZnL1NWR1BhdGhEYXRhQnVpbGRl
ci5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwJywKICAgICAgICAgICAg
ICdzdmcvU1ZHUGF0aEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhQYXJzZXIu
Y3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gNjQ0NjYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODMwLDYgKzI4MzAsOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U1ZHPTEpIHsKICAgICAgICAgc3ZnL1NWR1BhaW50LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcCBcCisgICAg
ICAgIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKyAgICAgICAgc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyLmNwcCBcCisgICAgICAgIHN2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIu
Y3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQ
YXRoUGFyc2VyLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnQXJjLmNwcCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY0NDY2KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkx
NDEsMTAgKzQ5MTQxLDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoQnl0ZVN0cmVhbS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aENvbnN1
bWVyLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcU1ZHUGF0aERhdGFCdWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aEVsZW1lbnQuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNjQ0NjcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDEzIEBACiAJCTg0
MjI0MThFMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0
MThCMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50SW50ZXJuYWwu
aCAqLzsgfTsKIAkJODQyMjQxOTMxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQyMjQxOTAxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwICov
OyB9OwogCQk4NDIyNDE5NDEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQx
OTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKKwkJ
ODQyQTk4MkMxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNTExRkUxMjc1MDA0
NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCAqLzsgfTsKKwkJODQyQTk4MkQxMUZFMTI3NTAw
NDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNjExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCAqLzsgfTsKKwkJODQyQTk4MkUxMUZFMTI3NTAw
NDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyQTk4MjcxMUZFMTI3NTAwNDU4OTIyIC8qIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oICovOyB9OworCQk4NDJBOTgyRjExRkUxMjc1MDA0NTg5
MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyQTk4MjgxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLzsgfTsKKwkJODQyQTk4MzAxMUZFMTI3NTAwNDU4OTIy
IC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyOTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5
dGVTdHJlYW1QYXJzZXIuaCAqLzsgfTsKKwkJODQyQTk4MzExMUZFMTI3NTAwNDU4OTIyIC8qIFNW
R1BhdGhEYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDJBOTgyQTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVy
LmNwcCAqLzsgfTsKKwkJODQyQTk4MzIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQy
QTk4MkIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5oICovOyB9OwogCQk4
NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi87IH07CiAJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRjkw
RkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi87IH07CiAJCTg0NUU3MkZDMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAq
LzsgfTsKQEAgLTcyMTUsNiArNzIyMiwxMyBAQAogCQk4NDIyNDE5MDEwN0U3OEE3MDA3NjZBODcg
LyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE5MjEwN0U3OEE3
MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDJBOTgyNjExRkUxMjc1MDA0NTg5MjIgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg0MkE5ODI3MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI4MTFGRTEy
NzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI5MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NDJBOTgyQTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhEYXRhQnVpbGRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODJCMTFGRTEyNzUwMDQ1ODkyMiAvKiBT
VkdQYXRoRGF0YUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UGF0aERhdGFCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NUU3MkY3
MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRmlsdGVyLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDkzMiw2ICsxNDk0NiwxMyBAQAogCQlCMjIy
NzdDQTBEMDBCRjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk4NDJBOTgyNTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5
dGVTdHJlYW0uaCAqLywKKwkJCQk4NDJBOTgyNjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyLmNwcCAqLywKKwkJCQk4NDJBOTgyNzExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggKi8sCisJCQkJODQyQTk4MjgxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLywKKwkJCQk4NDJBOTgyOTExRkUx
Mjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCAqLywKKwkJCQk4NDJBOTgy
QTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCAqLywKKwkJCQk4NDJB
OTgyQjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggKi8sCiAJCQkJRTQ2
RTk3ODYwREFBRDYxQjAwNzFFODk0IC8qIGFuaW1hdGlvbiAqLywKIAkJCQlCMjU1OTg4NjBEMDBE
OEI4MDBCQjgyNUMgLyogZ3JhcGhpY3MgKi8sCiAJCQkJQjIyMjc3Q0IwRDAwQkYxRjAwNzFCNzgy
IC8qIENvbG9yRGlzdGFuY2UuY3BwICovLApAQCAtMTk5NTYsNiArMTk5NzcsMTAgQEAKIAkJCQlF
MUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4NDJBOTgyQzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MkE5ODJFMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MkE5ODMwMTFGRTEy
NzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODQyQTk4MzIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yMjM1OCw2ICsyMjM4Myw5IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAw
MUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
QkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODQyQTk4MkQxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDJBOTgyRjExRkUxMjc1MDA0NTg5
MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQy
QTk4MzExMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhEYXRhQnVpbGRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY0NDY2KQorKysgV2ViQ29yZS9z
dmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDkgQEAKICNp
bmNsdWRlICJTVkdQYWludC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCIK
ICNpbmNsdWRlICJTVkdQYXRoQnVpbGRlci5jcHAiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAiCisj
aW5jbHVkZSAiU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVu
dC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlci5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFNl
Z0FyYy5jcHAiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDY0NDY2KQor
KysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OCArMzAsMTEgQEAKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhdGhCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aEJ5dGVTdHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMSwxMCArMTA0
LDE1IEBAIHN0YXRpYyBpbmxpbmUgU1ZHR2x5cGhJZGVudGlmaWVyOjpPcmllbnQKIAogc3RhdGlj
IGlubGluZSBQYXRoIHBhcnNlUGF0aERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsK
KyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ5dGVTdHJlYW0gPSBTVkdQYXRoQnl0ZVN0
cmVhbTo6Y3JlYXRlKCk7CisKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIgYnl0ZVN0cmVh
bUJ1aWxkZXIoYnl0ZVN0cmVhbS5nZXQoKSk7CisgICAgYnl0ZVN0cmVhbUJ1aWxkZXIuYnVpbGRG
cm9tUGF0aERhdGEodmFsdWUpOworCiAgICAgUGF0aCByZXN1bHQ7CiAgICAgU1ZHUGF0aEJ1aWxk
ZXIgYnVpbGRlcihyZXN1bHQpOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYW5hbHlzZSB0aGUg
cmV0dXJuZWQgdmFsdWUuCi0gICAgYnVpbGRlci5idWlsZCh2YWx1ZSk7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhbmFseXNlIHRoZSByZXR1cm5lZCB2YWx1ZS4gCisgICAgYnVpbGRlci5idWls
ZFBhdGhGcm9tQnl0ZVN0cmVhbShieXRlU3RyZWFtLmdldCgpKTsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2NDQ2NikKKysrIFdl
YkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aEJ1aWxkZXIuaCIKIAorI2lu
Y2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw2ICs0MywxMiBAQCBib29sIFNWR1Bh
dGhCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVBh
dGhEYXRhU3RyaW5nKGQsIHRydWUpOwogfQogCitib29sIFNWR1BhdGhCdWlsZGVyOjpidWlsZFBh
dGhGcm9tQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogYnl0ZVN0cmVhbSkKK3sKKyAgICBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBwYXJzZXIodGhpcyk7CisgICAgcmV0dXJuIHBhcnNlci5w
YXJzZUZyb21TdHJlYW0oYnl0ZVN0cmVhbSwgdHJ1ZSk7Cit9CisKIHZvaWQgU1ZHUGF0aEJ1aWxk
ZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBjbG9zZWQsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQogewogICAgIG1fY3VycmVudCA9IG1vZGUgPT0gQWJzb2x1dGVDb29y
ZGluYXRlcyA/IHBvaW50IDogbV9jdXJyZW50ICsgcG9pbnQ7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQYXRoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVy
LmgJKHJldmlzaW9uIDY0NDY2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbS5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zNiw2ICszNyw3IEBAIGNsYXNzIFNWR1BhdGhCdWlsZGVyIDogcHJpdmF0ZSBTVkdQ
YXRoQ28KIHB1YmxpYzoKICAgICBTVkdQYXRoQnVpbGRlcihQYXRoJik7CiAgICAgYm9vbCBidWls
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKFNWR1Bh
dGhCeXRlU3RyZWFtKik7CiAKIHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJp
c25nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1ZH
UGF0aEJ5dGVTdHJlYW1faAorI2RlZmluZSBTVkdQYXRoQnl0ZVN0cmVhbV9oCisKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xp
c3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUg
Ynl0ZSBzdHJlYW0gZGF0YQordHlwZWRlZiB1bmlvbiB7CisgICAgYm9vbCB2YWx1ZTsKKyAgICB1
bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVvZihib29sKV07Cit9IEJvb2xCeXRlOworCit0eXBlZGVm
IHVuaW9uIHsKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVv
ZihmbG9hdCldOworfSBGbG9hdEJ5dGU7CisKK3R5cGVkZWYgdW5pb24geworICAgIHVuc2lnbmVk
IHNob3J0IHZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KV07Cit9IFVuc2lnbmVkU2hvcnRCeXRlOworCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbSA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZH
UGF0aEJ5dGVTdHJlYW0+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNWR1BhdGhCeXRlU3RyZWFtKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBEYXRhOworICAgIHR5cGVkZWYgRGF0YTo6Y29uc3RfaXRlcmF0b3IgRGF0YUl0
ZXJhdG9yOworCisgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorICAgIERhdGFJdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9Cisg
ICAgRGF0YUl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQorICAgIHZvaWQg
YXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBtX2RhdGEuYXBwZW5kKGJ5dGUpOyB9CisgICAg
dm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KKworcHJpdmF0ZToKKyAgICBTVkdQYXRo
Qnl0ZVN0cmVhbSgpIHsgfQorICAgIERhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdQYXRoQnl0ZVN0
cmVhbV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyLmgiCisKKyNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJTVkdQYXRoUGFyc2VyLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgorI2luY2x1
ZGUgIlNWR1BhdGhTZWdDbG9zZVBhdGguaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1
YmljLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgorI2luY2x1
ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGguaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCIKKyNpbmNsdWRlICJTVkdQYXRo
U2VnTGluZXRvVmVydGljYWwuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTW92ZXRvLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIoU1ZHUGF0aEJ5dGVTdHJlYW0qIGJ5dGVTdHJlYW0pCisgICAgOiBtX2J5
dGVTdHJlYW0oYnl0ZVN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKK30KKwor
Ym9vbCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmJ1aWxkRnJvbVBhdGhEYXRhKGNvbnN0IFN0
cmluZyYgZCkKK3sKKyAgICBtX2J5dGVTdHJlYW0tPmNsZWFyKCk7CisKKyAgICBTVkdQYXRoUGFy
c2VyIHBhcnNlcih0aGlzKTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlUGF0aERhdGFTdHJpbmco
ZCwgVW5hbHRlcmVkUGFyc2luZyk7Cit9CisKKworCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0
ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29y
ZGluYXRlcyA/ICBQYXRoU2VnTW92ZVRvUmVsIDogUGF0aFNlZ01vdmVUb0Ficyk7CisgICAgd3Jp
dGVGbG9hdFBvaW50KHBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6
OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUp
Cit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQ
YXRoU2VnTGluZVRvUmVsIDogUGF0aFNlZ0xpbmVUb0Ficyk7CisgICAgd3JpdGVGbG9hdFBvaW50
KHBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb0hvcml6
b250YWwoZmxvYXQgeCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdt
ZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbFJlbCA6IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzKTsKKyAgICB3cml0ZUZsb2F0KHgp
OworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvVmVydGljYWwoZmxv
YXQgeSwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZSht
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvVmVydGljYWxSZWwgOiBQ
YXRoU2VnTGluZVRvVmVydGljYWxBYnMpOworICAgIHdyaXRlRmxvYXQoeSk7Cit9CisKK3ZvaWQg
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwgOiBQYXRoU2Vn
Q3VydmVUb0N1YmljQWJzKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQxKTsKKyAgICB3cml0
ZUZsb2F0UG9pbnQocG9pbnQyKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQpOworfQorCit2
b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNTbW9vdGhBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDIpOworICAgIHdyaXRlRmxv
YXRQb2ludChwb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2
ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUo
bW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwg
OiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0Ficyk7CisgICAgd3JpdGVGbG9hdFBvaW50KHBvaW50
MSk7CisgICAgd3JpdGVGbG9hdFBvaW50KHBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9k
ZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhS
ZWwgOiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyk7CisgICAgd3JpdGVGbG9hdFBv
aW50KHBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmFyY1RvKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCByMSwgZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBi
b29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIFBhdGhDb29yZGluYXRlTW9kZSBtb2Rl
KQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8g
UGF0aFNlZ0FyY1JlbCA6IFBhdGhTZWdBcmNBYnMpOworICAgIHdyaXRlRmxvYXQocjEpOworICAg
IHdyaXRlRmxvYXQocjIpOworICAgIHdyaXRlRmxvYXQoYW5nbGUpOworICAgIHdyaXRlRmxhZyhs
YXJnZUFyY0ZsYWcpOworICAgIHdyaXRlRmxhZyhzd2VlcEZsYWcpOworICAgIHdyaXRlRmxvYXRQ
b2ludChwb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjbG9zZVBh
dGgoKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUoUGF0aFNlZ0Nsb3NlUGF0aCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXJfaAorI2RlZmluZSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaAorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0u
aCIKKyNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
IDogcHJpdmF0ZSBTVkdQYXRoQ29uc3VtZXIgeworcHVibGljOgorICAgIFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcihTVkdQYXRoQnl0ZVN0cmVhbSopOworCisgICAgYm9vbCBidWlsZEZyb21QYXRo
RGF0YShjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICAvLyBVc2VkIGluIFVuYWx0ZXJl
ZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVhbCB2b2lkIG1vdmVU
byhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgorICAgIC8vIE9ubHkg
dXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hv
cml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxp
bmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGlj
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29s
IHN3ZWVwRmxhZywgUGF0aENvb3JkaW5hdGVNb2RlKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlVHlwZT4KKyAgICB2b2lkIHdyaXRlVHlwZShjb25zdCBCeXRlVHlwZSYg
dHlwZSkKKyAgICB7CisgICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihCeXRlVHlwZSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkKKyAgICAgICAg
ICAgIG1fYnl0ZVN0cmVhbS0+YXBwZW5kKHR5cGUuYnl0ZXNbaV0pOworICAgIH0KKworICAgIHZv
aWQgd3JpdGVGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBCb29sQnl0ZSBkYXRhOwor
ICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdyaXRlRmxvYXQoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBG
bG9hdEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3cml0
ZVR5cGUoZGF0YSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCisgICAgeworICAgICAgICB3cml0ZUZsb2F0KHBvaW50LngoKSk7Cisg
ICAgICAgIHdyaXRlRmxvYXQocG9pbnQueSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlU2Vn
bWVudFR5cGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCisgICAgeworICAgICAgICBVbnNpZ25lZFNo
b3J0Qnl0ZSBkYXRhOworICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRl
VHlwZShkYXRhKTsKKyAgICB9CisKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSogbV9ieXRlU3RyZWFt
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
KyNlbmRpZiAvLyBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaApJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgVGhlIEthcmJvbiBEZXZlbG9wZXJzCisg
KiAgICAgICAgICAgICAgIDIwMDYgICAgICAgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2Rl
Lm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ3RoIChDKSAyMDA3LCAyMDA5IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIgorCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZy5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3N0
YXRpYyBjb25zdCBmbG9hdCBnT25lT3ZlclRocmVlID0gMSAvIDMuZjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIoU1ZHUGF0aENvbnN1bWVyKiBjb25zdW1lcikKKyAgICA6IG1fY29uc3VtZXIoY29uc3VtZXIp
Cit7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2Vn
bWVudCgpCit7CisgICAgLy8gUmVzZXQgbV9jdXJyZW50UG9pbnQgZm9yIHRoZSBuZXh0IHBhdGgu
CisgICAgaWYgKG1fbm9ybWFsaXplZCkKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBtX3N1YlBh
dGhQb2ludDsKKyAgICBtX3BhdGhDbG9zZWQgPSB0cnVlOworICAgIG1fY29uc3VtZXItPmNsb3Nl
UGF0aCgpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoKQoreworICAgIEZsb2F0UG9pbnQgdG9Qb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29v
cmRpbmF0ZXMpCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0b1BvaW50OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRvUG9pbnQ7CisgICAgICAgIG1f
c3ViUGF0aFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1fY29uc3VtZXItPm1vdmVU
byhtX2N1cnJlbnRQb2ludCwgbV9wYXRoQ2xvc2VkLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+bW92ZVRvKHRvUG9pbnQsIG1fcGF0aENsb3Nl
ZCwgbV9tb2RlKTsKKyAgICBtX3BhdGhDbG9zZWQgPSBmYWxzZTsKK30KKwordm9pZCBTVkdQYXRo
Qnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKK3sKKyAgICBGbG9hdFBvaW50
IHRvUG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQgKz0gdG9Qb2ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQgPSB0b1BvaW50OworICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8obV9jdXJyZW50
UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1
bWVyLT5saW5lVG8odG9Qb2ludCwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlcjo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCit7CisgICAgZmxvYXQgdG9Y
ID0gcmVhZEZsb2F0KCk7CisKKyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIGlmICht
X21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50
Lm1vdmUodG9YLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQu
c2V0WCh0b1gpOworICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFi
c29sdXRlQ29vcmRpbmF0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1bWVyLT5saW5l
VG9Ib3Jpem9udGFsKHRvWCwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWSA9IHJl
YWRGbG9hdCgpOworCisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5tb3Zl
KDAsIHRvWSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFko
dG9ZKTsKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0
ZUNvb3JkaW5hdGVzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvVmVy
dGljYWwodG9ZLCBtX21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpw
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQoreworICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gcmVh
ZEZsb2F0UG9pbnQoKTsKKyAgICBGbG9hdFBvaW50IHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7
CisgICAgRmxvYXRQb2ludCBwb2ludDMgPSByZWFkRmxvYXRQb2ludCgpOworICAgIGlmIChtX25v
cm1hbGl6ZWQpIHsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7
CisgICAgICAgICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBwb2lu
dDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBwb2ludDMgKz0gbV9jdXJyZW50UG9p
bnQ7CisgICAgICAgIH0KKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwg
cG9pbnQyLCBwb2ludDMsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworCisgICAgICAgIG1fY29udHJv
bFBvaW50ID0gcG9pbnQyOworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50MzsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBw
b2ludDMsIG1fbW9kZSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCit7CisgICAgaWYgKG1fbGFzdENvbW1hbmQgIT0g
UGF0aFNlZ0N1cnZlVG9DdWJpY0FicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3Vy
dmVUb0N1YmljU21vb3RoQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1
cnZlVG9DdWJpY1Ntb290aFJlbCkKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBtX2N1cnJlbnRQ
b2ludDsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBG
bG9hdFBvaW50IHBvaW50MyA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgaWYgKG1fbm9ybWFsaXpl
ZCkgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAg
ICBwb2ludDEuc2NhbGUoMiwgMik7CisgICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2lu
dC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0
aXZlQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsK
KyAgICAgICAgICAgIHBvaW50MyArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBBYnNv
bHV0ZUNvb3JkaW5hdGVzKTsKKworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKKyAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
c3VtZXItPmN1cnZlVG9DdWJpY1Ntb290aChwb2ludDIsIHBvaW50MywgbV9tb2RlKTsKK30KKwor
dm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCgpCit7CisgICAgRmxvYXRQb2ludCBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIEZs
b2F0UG9pbnQgcG9pbnQzID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBpZiAobV9ub3JtYWxpemVk
KSB7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQxOworICAgICAgICBwb2ludDEgPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY29udHJvbFBvaW50Lngo
KSwgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHBv
aW50My54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCBwb2ludDMueSgpICsgMiAqIG1fY29u
dHJvbFBvaW50LnkoKSk7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykgeworICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBvaW50LngoKSwgMiAq
IG1fY3VycmVudFBvaW50LnkoKSk7CisgICAgICAgICAgICBwb2ludDIubW92ZSgzICogbV9jdXJy
ZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKKyAgICAgICAgICAgIHBvaW50
MyArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgfQorICAgICAgICBwb2ludDEuc2NhbGUoZ09u
ZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7CisgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3Zl
clRocmVlLCBnT25lT3ZlclRocmVlKTsKKworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3Vi
aWMocG9pbnQxLCBwb2ludDIsIHBvaW50MywgQWJzb2x1dGVDb29yZGluYXRlcyk7CisKKyAgICAg
ICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAgbV9jb250
cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcG9p
bnQzOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKHBv
aW50MSwgcG9pbnQzLCBtX21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2Vy
OjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKK3sKKyAgICBGbG9hdFBvaW50
IHBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKworICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBh
dGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsKQorICAgICAgICBtX2NvbnRyb2xQb2lu
dCA9IG1fY3VycmVudFBvaW50OworCisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBG
bG9hdFBvaW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgY3ViaWNQb2lu
dC5zY2FsZSgyLCAyKTsKKyAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54
KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1
cnJlbnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSAr
IDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHBvaW50Lngo
KSArIDIgKiBjdWJpY1BvaW50LngoKSwgcG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDMocG9pbnQueCgpLCBwb2ludC55KCkpOworICAgICAg
ICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIHBvaW50
MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHBvaW50MyArPSBtX2N1cnJlbnRQb2lu
dDsKKyAgICAgICAgfQorICAgICAgICBwb2ludDEuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92
ZXJUaHJlZSk7CisgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVlLCBnT25lT3ZlclRo
cmVlKTsKKworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIs
IHBvaW50MywgQWJzb2x1dGVDb29yZGluYXRlcyk7CisKKyAgICAgICAgbV9jb250cm9sUG9pbnQg
PSBjdWJpY1BvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50MzsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChwb2ludCwgbV9t
b2RlKTsKK30KKworYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VBcmNUb1NlZ21l
bnQoKQoreworICAgIGZsb2F0IHJ4ID0gcmVhZEZsb2F0KCk7CisgICAgZmxvYXQgcnkgPSByZWFk
RmxvYXQoKTsKKyAgICBmbG9hdCBhbmdsZSA9IHJlYWRGbG9hdCgpOworICAgIGJvb2wgbGFyZ2VB
cmMgPSByZWFkRmxhZygpOworICAgIGJvb2wgc3dlZXAgPSByZWFkRmxhZygpOworICAgIEZsb2F0
UG9pbnQgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKworICAgIC8vIElmIHJ4ID0gMCBvciBy
eSA9IDAgdGhlbiB0aGlzIGFyYyBpcyB0cmVhdGVkIGFzIGEgc3RyYWlnaHQgbGluZSBzZWdtZW50
IChhICJsaW5ldG8iKSBqb2luaW5nIHRoZSBlbmRwb2ludHMuCisgICAgLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjT3V0T2ZSYW5nZVBhcmFtZXRlcnMKKyAgICBy
eCA9IGZhYnNmKHJ4KTsKKyAgICByeSA9IGZhYnNmKHJ5KTsKKyAgICBpZiAoIXJ4IHx8ICFyeSkg
eworICAgICAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgICAgICBpZiAobV9tb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0g
cG9pbnQyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50
ID0gcG9pbnQyOworICAgICAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nv
bnN1bWVyLT5saW5lVG8ocG9pbnQyLCBtX21vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQx
ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcykKKyAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSBwb2ludDI7CisgICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1Ymlj
KGFuZ2xlLCByeCwgcnksIHBvaW50MSwgcG9pbnQyLCBsYXJnZUFyYywgc3dlZXApOworICAgIH0K
KyAgICBtX2NvbnN1bWVyLT5hcmNUbyhwb2ludDIsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBz
d2VlcCwgbV9tb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlcjo6cGFyc2VGcm9tU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBzdHJlYW0sIGJv
b2wgbm9ybWFsaXplZCkKK3sKKyAgICBBU1NFUlQoc3RyZWFtKTsKKyAgICBpZiAoIXN0cmVhbS0+
ZGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdHJlYW1DdXJy
ZW50ID0gc3RyZWFtLT5iZWdpbigpOworICAgIG1fc3RyZWFtRW5kID0gc3RyZWFtLT5lbmQoKTsK
KworICAgIG1fbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisKKyAgICBtX2NvbnRyb2xQb2ludCA9
IEZsb2F0UG9pbnQoKTsKKyAgICBtX2N1cnJlbnRQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBt
X3N1YlBhdGhQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX3BhdGhDbG9zZWQgPSB0cnVlOwor
CisgICAgbV9sYXN0Q29tbWFuZCA9IFBhdGhTZWdVbmtub3duOworICAgIHdoaWxlIChtX3N0cmVh
bUN1cnJlbnQgPCBtX3N0cmVhbUVuZCkgeworICAgICAgICBTVkdQYXRoU2VnVHlwZSBjb21tYW5k
ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKKyAg
ICAgICAgbV9tb2RlID0gQWJzb2x1dGVDb29yZGluYXRlczsKKyAgICAgICAgc3dpdGNoIChjb21t
YW5kKSB7CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb1JlbDoKKyAgICAgICAgICAgIG1fbW9k
ZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoK
KyAgICAgICAgICAgIHBhcnNlTW92ZVRvU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0
aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0FiczoKKyAgICAgICAg
ICAgIHBhcnNlTGluZVRvU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw6CisgICAgICAgICAgICBtX21vZGUgPSBSZWxh
dGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJz
OgorICAgICAgICAgICAgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOgorICAgICAg
ICAgICAgbV9tb2RlID0gUmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2Vn
TGluZVRvVmVydGljYWxBYnM6CisgICAgICAgICAgICBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0Nsb3NlUGF0aDoK
KyAgICAgICAgICAgIHBhcnNlQ2xvc2VQYXRoU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDoKKyAgICAgICAgICAgIG1fbW9k
ZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJp
Y0FiczoKKyAgICAgICAgICAgIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDoKKyAg
ICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0
aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczoKKyAgICAgICAgICAgIHBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNl
Z0N1cnZlVG9RdWFkcmF0aWNSZWw6CisgICAgICAgICAgICBtX21vZGUgPSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOgorICAgICAg
ICAgICAgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWw6CisgICAgICAg
ICAgICBtX21vZGUgPSBSZWxhdGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0
aFNlZ0FyY1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7Cisg
ICAgICAgIGNhc2UgUGF0aFNlZ0FyY0FiczoKKyAgICAgICAgICAgIGlmICghcGFyc2VBcmNUb1Nl
Z21lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBtX2xhc3RDb21tYW5kID0gY29tbWFuZDsKKworICAgICAgICBpZiAobV9sYXN0
Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzICAgICAgICAgICAgICAmJiBtX2xhc3RD
b21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwKKyAgICAgICAgICAgICYmIG1fbGFzdENv
bW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyAgICAgJiYgbV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsCisgICAgICAgICAgICAmJiBtX2xhc3RD
b21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzICAgICAgICYmIG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwKKyAgICAgICAgICAgICYmIG1fbGFzdENv
bW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMgJiYgbV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCkKKyAgICAgICAgICAgIG1fY29u
dHJvbFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgfQorICAgIEFTU0VSVChtX2J5dGVzUmVh
ZCA9PSBtX3NpemUpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHdvcmtzIGJ5
IGNvbnZlcnRpbmcgdGhlIFNWRyBhcmMgdG8gInNpbXBsZSIgYmV6aWVycy4KKy8vIFBhcnRseSBh
ZGFwdGVkIGZyb20gTmlrbydzIGNvZGUgaW4ga2RlbGlicy9rZGVjb3JlL3N2Z2ljb25zLgorLy8g
U2VlIGFsc28gU1ZHIGltcGxlbWVudGF0aW9uIG5vdGVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9T
VkcvaW1wbG5vdGUuaHRtbCNBcmNDb252ZXJzaW9uRW5kcG9pbnRUb0NlbnRlcgorYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYyhmbG9hdCBhbmdsZSwgZmxv
YXQgcngsIGZsb2F0IHJ5LCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Miwg
Ym9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKQoreworICAgIEZsb2F0U2l6ZSBtaWRQ
b2ludERpc3RhbmNlID0gcG9pbnQxIC0gcG9pbnQyOworICAgIG1pZFBvaW50RGlzdGFuY2Uuc2Nh
bGUoMC41Zik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcG9pbnRUcmFuc2Zvcm07CisgICAgcG9p
bnRUcmFuc2Zvcm0ucm90YXRlKC1hbmdsZSk7CisKKyAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVk
TWlkUG9pbnQgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50KG1pZFBvaW50RGlz
dGFuY2Uud2lkdGgoKSwgbWlkUG9pbnREaXN0YW5jZS5oZWlnaHQoKSkpOworICAgIGZsb2F0IHNx
dWFyZVJ4ID0gcnggKiByeDsKKyAgICBmbG9hdCBzcXVhcmVSeSA9IHJ5ICogcnk7CisgICAgZmxv
YXQgc3F1YXJlWCA9IHRyYW5zZm9ybWVkTWlkUG9pbnQueCgpICogdHJhbnNmb3JtZWRNaWRQb2lu
dC54KCk7CisgICAgZmxvYXQgc3F1YXJlWSA9IHRyYW5zZm9ybWVkTWlkUG9pbnQueSgpICogdHJh
bnNmb3JtZWRNaWRQb2ludC55KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgcmFkaWkgYXJlIGJp
ZyBlbm91Z2ggdG8gZHJhdyB0aGUgYXJjLCBzY2FsZSByYWRpaSBpZiBub3QuCisgICAgLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjQ29ycmVjdGlvbk91dE9mUmFu
Z2VSYWRpaQorICAgIGZsb2F0IHJhZGlpU2NhbGUgPSBzcXVhcmVYIC8gc3F1YXJlUnggKyBzcXVh
cmVZIC8gc3F1YXJlUnk7CisgICAgaWYgKHJhZGlpU2NhbGUgPiAxKSB7CisgICAgICAgIHJ4ICo9
IHNxcnRmKHJhZGlpU2NhbGUpOworICAgICAgICByeSAqPSBzcXJ0ZihyYWRpaVNjYWxlKTsKKyAg
ICB9CisKKyAgICBwb2ludFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBwb2ludFRyYW5z
Zm9ybS5zY2FsZSgxIC8gcngsIDEgLyByeSk7CisgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1h
bmdsZSk7CisKKyAgICBwb2ludDEgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpOwor
ICAgIHBvaW50MiA9IHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50Mik7CisgICAgRmxvYXRT
aXplIGRlbHRhID0gcG9pbnQyIC0gcG9pbnQxOworCisgICAgZmxvYXQgZCA9IGRlbHRhLndpZHRo
KCkgKiBkZWx0YS53aWR0aCgpICsgZGVsdGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWlnaHQoKTsKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvclNxdWFyZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAuMjVmLCAwLmYp
OworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzcXJ0ZihzY2FsZUZhY3RvclNxdWFyZWQpOwor
ICAgIGlmIChzd2VlcEZsYWcgPT0gbGFyZ2VBcmNGbGFnKQorICAgICAgICBzY2FsZUZhY3RvciA9
IC1zY2FsZUZhY3RvcjsKKworICAgIGRlbHRhLnNjYWxlKHNjYWxlRmFjdG9yKTsKKyAgICBGbG9h
dFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludCgwLjVmICogKHBvaW50MS54KCkgKyBwb2lu
dDIueCgpKSAtIGRlbHRhLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuNWYgKiAocG9pbnQxLnkoKSArIHBvaW50Mi55KCkpICsgZGVsdGEud2lkdGgo
KSk7CisKKyAgICBmbG9hdCB0aGV0YTEgPSBhdGFuMmYocG9pbnQxLnkoKSAtIGNlbnRlclBvaW50
LnkoKSwgcG9pbnQxLngoKSAtIGNlbnRlclBvaW50LngoKSk7CisgICAgZmxvYXQgdGhldGEyID0g
YXRhbjJmKHBvaW50Mi55KCkgLSBjZW50ZXJQb2ludC55KCksIHBvaW50Mi54KCkgLSBjZW50ZXJQ
b2ludC54KCkpOworCisgICAgZmxvYXQgdGhldGFBcmMgPSB0aGV0YTIgLSB0aGV0YTE7CisgICAg
aWYgKHRoZXRhQXJjIDwgMCAmJiBzd2VlcEZsYWcpCisgICAgICAgIHRoZXRhQXJjICs9IDIgKiBw
aUZsb2F0OworICAgIGVsc2UgaWYgKHRoZXRhQXJjID4gMCAmJiAhc3dlZXBGbGFnKQorICAgICAg
ICB0aGV0YUFyYyAtPSAyICogcGlGbG9hdDsKKworICAgIHBvaW50VHJhbnNmb3JtLm1ha2VJZGVu
dGl0eSgpOworICAgIHBvaW50VHJhbnNmb3JtLnJvdGF0ZShhbmdsZSk7CisgICAgcG9pbnRUcmFu
c2Zvcm0uc2NhbGUocngsIHJ5KTsKKworICAgIC8vIFNvbWUgcmVzdWx0cyBvZiBhdGFuMiBvbiBz
b21lIHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IGV4YWN0IGVub3VnaC4gU28gdGhh
dCB3ZSBnZXQgbW9yZQorICAgIC8vIGN1YmljIGN1cnZlcyB0aGFuIGV4cGVjdGVkIGhlcmUuIEFk
ZGluZyAwLjAwMWYgcmVkdWNlcyB0aGUgY291bnQgb2Ygc2dlbWVudHMgdG8gdGhlIGNvcnJlY3Qg
Y291bnQuCisgICAgaW50IHNlZ21lbnRzID0gY2VpbGYoZmFic2YodGhldGFBcmMgLyAocGlPdmVy
VHdvRmxvYXQgKyAwLjAwMWYpKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWdtZW50czsg
KytpKSB7CisgICAgICAgIGZsb2F0IHN0YXJ0VGhldGEgPSB0aGV0YTEgKyBpICogdGhldGFBcmMg
LyBzZWdtZW50czsKKyAgICAgICAgZmxvYXQgZW5kVGhldGEgPSB0aGV0YTEgKyAoaSArIDEpICog
dGhldGFBcmMgLyBzZWdtZW50czsKKworICAgICAgICBmbG9hdCB0ID0gKDggLyA2LmYpICogdGFu
ZigwLjI1ZiAqIChlbmRUaGV0YSAtIHN0YXJ0VGhldGEpKTsKKyAgICAgICAgaWYgKCFpc2Zpbml0
ZSh0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZmxvYXQgc2luU3RhcnRU
aGV0YSA9IHNpbmYoc3RhcnRUaGV0YSk7CisgICAgICAgIGZsb2F0IGNvc1N0YXJ0VGhldGEgPSBj
b3NmKHN0YXJ0VGhldGEpOworICAgICAgICBmbG9hdCBzaW5FbmRUaGV0YSA9IHNpbmYoZW5kVGhl
dGEpOworICAgICAgICBmbG9hdCBjb3NFbmRUaGV0YSA9IGNvc2YoZW5kVGhldGEpOworCisgICAg
ICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoY29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRh
LCBzaW5TdGFydFRoZXRhICsgdCAqIGNvc1N0YXJ0VGhldGEpOworICAgICAgICBwb2ludDEubW92
ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQzID0gRmxvYXRQb2ludChjb3NFbmRUaGV0YSwgc2luRW5kVGhldGEpOworICAgICAgICBw
b2ludDMubW92ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIHBv
aW50MiA9IHBvaW50MzsKKyAgICAgICAgcG9pbnQyLm1vdmUodCAqIHNpbkVuZFRoZXRhLCAtdCAq
IGNvc0VuZFRoZXRhKTsKKworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnRU
cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQxKSwgcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50VHJhbnNmb3JtLm1hcFBv
aW50KHBvaW50MyksIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1BhdGhCeXRlU3Ry
ZWFtUGFyc2VyX2gKKyNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXJfaAorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciB7CitwdWJsaWM6CisgICAgU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXIoU1ZHUGF0aENvbnN1bWVyKik7CisKKyAgICBib29sIHBhcnNl
RnJvbVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGJvb2wgbm9tcm1hbGl6ZWQpOworCitwcml2
YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlLCB0eXBlbmFtZSBCeXRlVHlwZT4K
KyAgICBEYXRhVHlwZSByZWFkVHlwZSgpCisgICAgeworICAgICAgICBCeXRlVHlwZSBkYXRhOwor
ICAgICAgICBzaXplX3QgdHlwZVNpemUgPSBzaXplb2YoQnl0ZVR5cGUpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkgeworICAgICAgICAgICAgQVNTRVJU
KG1fc3RyZWFtQ3VycmVudCA8IG1fZW5kQ3VycmVudCk7CisgICAgICAgICAgICBkYXRhLmJ5dGVz
W2ldID0gKm1fc3RyZWFtQ3VycmVudDsKKyAgICAgICAgICAgICsrbV9zdHJlYW1DdXJyZW50Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7CisgICAgfQorCisgICAgYm9v
bCByZWFkRmxhZygpIHsgcmV0dXJuIHJlYWRUeXBlPGJvb2wsIEJvb2xCeXRlPigpOyB9CisgICAg
ZmxvYXQgcmVhZEZsb2F0KCkgeyByZXR1cm4gcmVhZFR5cGU8ZmxvYXQsIEZsb2F0Qnl0ZT4oKTsg
fQorICAgIHVuc2lnbmVkIHNob3J0IHJlYWRTVkdTZWdtZW50VHlwZSgpIHsgcmV0dXJuIHJlYWRU
eXBlPHVuc2lnbmVkIHNob3J0LCBVbnNpZ25lZFNob3J0Qnl0ZT4oKTsgfQorICAgIEZsb2F0UG9p
bnQgcmVhZEZsb2F0UG9pbnQoKQorICAgIHsKKyAgICAgICAgZmxvYXQgeCA9IHJlYWRUeXBlPGZs
b2F0LCBGbG9hdEJ5dGU+KCk7CisgICAgICAgIGZsb2F0IHkgPSByZWFkVHlwZTxmbG9hdCwgRmxv
YXRCeXRlPigpOworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAgICB9CisKKyAg
ICBTVkdQYXRoQnl0ZVN0cmVhbTo6RGF0YUl0ZXJhdG9yIG1fc3RyZWFtQ3VycmVudDsKKyAgICBT
VkdQYXRoQnl0ZVN0cmVhbTo6RGF0YUl0ZXJhdG9yIG1fc3RyZWFtRW5kOworCitwcml2YXRlOgor
ICAgIHZvaWQgcGFyc2VDbG9zZVBhdGhTZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZU1vdmVUb1Nl
Z21lbnQoKTsKKyAgICB2b2lkIHBhcnNlTGluZVRvU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VM
aW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoKTsKKyAgICB2b2lkIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgIHZvaWQg
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCk7CisgICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudCgpOworICAgIGJvb2wgZGVjb21w
b3NlQXJjVG9DdWJpYyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBGbG9hdFBvaW50JiwgRmxvYXRQb2lu
dCYsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CisKKyAgICBTVkdQYXRoQ29u
c3VtZXIqIG1fY29uc3VtZXI7CisgICAgUGF0aENvb3JkaW5hdGVNb2RlIG1fbW9kZTsKKyAgICBj
b25zdCBVQ2hhciogbV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIFNWR1BhdGhT
ZWdUeXBlIG1fbGFzdENvbW1hbmQ7CisgICAgYm9vbCBtX25vcm1hbGl6ZWQ7CisgICAgYm9vbCBt
X3BhdGhDbG9zZWQ7CisgICAgRmxvYXRQb2ludCBtX2NvbnRyb2xQb2ludDsKKyAgICBGbG9hdFBv
aW50IG1fY3VycmVudFBvaW50OworICAgIEZsb2F0UG9pbnQgbV9zdWJQYXRoUG9pbnQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlm
IC8vIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhD
b25zdW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCShy
ZXZpc2lvbiA2NDQ2NikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQwLDcgKzQxLDcgQEAgZW51bSBQYXRoUGFyc2luZ01vZGUgewogICAgIFVuYWx0
ZXJlZFBhcnNpbmcKIH07CiAKLWNsYXNzIFNWR1BhdGhDb25zdW1lciB7CitjbGFzcyBTVkdQYXRo
Q29uc3VtZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIC8vIFVzZWQgaW4g
VW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KICAgICB2aXJ0dWFsIHZv
aWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVN
b2RlKSA9IDA7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aERhdGFCdWlsZGVyLmgiCisKKyNp
bmNsdWRlICJTVkdQYXRoUGFyc2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHUGF0
aERhdGFCdWlsZGVyOjpTVkdQYXRoRGF0YUJ1aWxkZXIoKQoreworfQorCitTdHJpbmcgU1ZHUGF0
aERhdGFCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcmIGQsIFBhdGhQYXJzaW5nTW9kZSBwYXJz
aW5nTW9kZSkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuY2xlYXIoKTsKKworICAgIFNWR1BhdGhQ
YXJzZXIgcGFyc2VyKHRoaXMpOworICAgIHBhcnNlci5wYXJzZVBhdGhEYXRhU3RyaW5nKGQsIHBh
cnNpbmdNb2RlID09IFVuYWx0ZXJlZFBhcnNpbmcpOworICAgIHJldHVybiBtX3N0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKK30KKwordm9pZCBTVkdQYXRoRGF0
YUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgibSAlLjZsZyAl
LjZsZyAiLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiTSAlLjZsZyAlLjZsZyAiLCBwb2ludC54
KCksIHBvaW50LnkoKSkpOworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6bGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBp
ZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJsICUuNmxnICUuNmxnICIsIHBvaW50LngoKSwgcG9pbnQu
eSgpKSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6
Zm9ybWF0KCJMICUuNmxnICUuNmxnICIsIHBvaW50LngoKSwgcG9pbnQueSgpKSk7Cit9CisKK3Zv
aWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKGZsb2F0IHgsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMp
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoImggJS42bGcg
IiwgeCkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiSCAlLjZsZyAiLCB4KSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjps
aW5lVG9WZXJ0aWNhbChmbG9hdCB5LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBp
ZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJ2ICUuNmxnICIsIHkpKTsKKyAgICBlbHNlCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlYgJS42bGcgIiwgeSkpOwor
fQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiYyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgp
LCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCBwb2ludC54KCksIHBvaW50Lnko
KSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiQyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgp
LCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCBwb2ludC54KCksIHBvaW50Lnko
KSkpOworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMp
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInMgJS42bGcg
JS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgcG9pbnQueCgpLCBw
b2ludC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoIlMgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQyLngoKSwgcG9p
bnQyLnkoKSwgcG9pbnQueCgpLCBwb2ludC55KCkpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1
aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChTdHJpbmc6OmZvcm1hdCgicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgp
LCBwb2ludDEueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiUSAlLjZsZyAlLjZsZyAlLjZs
ZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSkp
OworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAg
aWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgidCAlLjZsZyAlLjZsZyAiLCBwb2ludC54KCksIHBvaW50
LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiVCAlLjZsZyAlLjZsZyAiLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworfQorCit2
b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6YXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3
ZWVwRmxhZywgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiYSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyAiLCByMSwgcjIs
IGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgcG9pbnQueCgpLCBwb2ludC55KCkpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
IkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGcgIiwgcjEsIHIyLCBhbmdsZSwg
bGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHBvaW50LngoKSwgcG9pbnQueSgpKSk7Cit9CisKK3Zv
aWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjbG9zZVBhdGgoKQoreworICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlogIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdQYXRoRGF0YUJ1aWxk
ZXJfaAorI2RlZmluZSBTVkdQYXRoRGF0YUJ1aWxkZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUGF0aERhdGFCdWlsZGVyIDogcHJpdmF0ZSBT
VkdQYXRoQ29uc3VtZXIgeworcHVibGljOgorICAgIFNWR1BhdGhEYXRhQnVpbGRlcigpOworICAg
IFN0cmluZyBidWlsZChjb25zdCBTdHJpbmcmLCBQYXRoUGFyc2luZ01vZGUpOworCitwcml2YXRl
OgorICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rl
cy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3Nl
ZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRv
Q3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7
CisKK3ByaXZhdGU6CisgICAgLy8gT25seSB1c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4K
KyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGljYWwoZmxvYXQsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAg
IHZpcnR1YWwgdm9pZCBhcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OworCisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhE
YXRhQnVpbGRlcl9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCShyZXZpc2lvbiA2NDQ2NikKKysrIFdlYkNvcmUv
c3ZnL1NWR1BhdGhTZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjMgKzI4LDg4IEBACiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNz
IFNWR1BhdGhFbGVtZW50OwotICAgIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CiAKLSAgICBjbGFz
cyBTVkdQYXRoU2VnIDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHUGF0aFNlZz4gewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZygpIHsgfQotCi0gICAgICAgIGVudW0gU1ZH
UGF0aFNlZ1R5cGUgewotICAgICAgICAgICAgUEFUSFNFR19VTktOT1dOICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMCwKLSAgICAgICAgICAgIFBBVEhTRUdfQ0xPU0VQQVRIICAgICAgICAgICAg
ICAgICAgICAgICA9IDEsCi0gICAgICAgICAgICBQQVRIU0VHX01PVkVUT19BQlMgICAgICAgICAg
ICAgICAgICAgICAgPSAyLAotICAgICAgICAgICAgUEFUSFNFR19NT1ZFVE9fUkVMICAgICAgICAg
ICAgICAgICAgICAgID0gMywKLSAgICAgICAgICAgIFBBVEhTRUdfTElORVRPX0FCUyAgICAgICAg
ICAgICAgICAgICAgICA9IDQsCi0gICAgICAgICAgICBQQVRIU0VHX0xJTkVUT19SRUwgICAgICAg
ICAgICAgICAgICAgICAgPSA1LAotICAgICAgICAgICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX0FC
UyAgICAgICAgICAgICAgID0gNiwKLSAgICAgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19S
RUwgICAgICAgICAgICAgICA9IDcsCi0gICAgICAgICAgICBQQVRIU0VHX0NVUlZFVE9fUVVBRFJB
VElDX0FCUyAgICAgICAgICAgPSA4LAotICAgICAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURS
QVRJQ19SRUwgICAgICAgICAgID0gOSwKLSAgICAgICAgICAgIFBBVEhTRUdfQVJDX0FCUyAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDEwLAotICAgICAgICAgICAgUEFUSFNFR19BUkNfUkVMICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMTEsCi0gICAgICAgICAgICBQQVRIU0VHX0xJTkVUT19I
T1JJWk9OVEFMX0FCUyAgICAgICAgICAgPSAxMiwKLSAgICAgICAgICAgIFBBVEhTRUdfTElORVRP
X0hPUklaT05UQUxfUkVMICAgICAgICAgICA9IDEzLAotICAgICAgICAgICAgUEFUSFNFR19MSU5F
VE9fVkVSVElDQUxfQUJTICAgICAgICAgICAgID0gMTQsCi0gICAgICAgICAgICBQQVRIU0VHX0xJ
TkVUT19WRVJUSUNBTF9SRUwgICAgICAgICAgICAgPSAxNSwKLSAgICAgICAgICAgIFBBVEhTRUdf
Q1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTICAgICAgICA9IDE2LAotICAgICAgICAgICAgUEFUSFNF
R19DVVJWRVRPX0NVQklDX1NNT09USF9SRUwgICAgICAgID0gMTcsCi0gICAgICAgICAgICBQQVRI
U0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlMgICAgPSAxOCwKLSAgICAgICAgICAgIFBB
VEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTCAgICA9IDE5Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIFBBVEhTRUdfVU5LTk9XTjsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlw
ZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiAiIjsgfQotCi0gICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFtZXM6
OmRBdHRyOyB9Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgU1ZHUGF0aFNlZygp
IHsgfQorZW51bSBTVkdQYXRoU2VnVHlwZSB7CisgICAgUGF0aFNlZ1Vua25vd24gPSAwLAorICAg
IFBhdGhTZWdDbG9zZVBhdGggPSAxLAorICAgIFBhdGhTZWdNb3ZlVG9BYnMgPSAyLAorICAgIFBh
dGhTZWdNb3ZlVG9SZWwgPSAzLAorICAgIFBhdGhTZWdMaW5lVG9BYnMgPSA0LAorICAgIFBhdGhT
ZWdMaW5lVG9SZWwgPSA1LAorICAgIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMgPSA2LAorICAgIFBh
dGhTZWdDdXJ2ZVRvQ3ViaWNSZWwgPSA3LAorICAgIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJz
ID0gOCwKKyAgICBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbCA9IDksCisgICAgUGF0aFNlZ0Fy
Y0FicyA9IDEwLAorICAgIFBhdGhTZWdBcmNSZWwgPSAxMSwKKyAgICBQYXRoU2VnTGluZVRvSG9y
aXpvbnRhbEFicyA9IDEyLAorICAgIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsID0gMTMsCisg
ICAgUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzID0gMTQsCisgICAgUGF0aFNlZ0xpbmVUb1ZlcnRp
Y2FsUmVsID0gMTUsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyA9IDE2LAorICAg
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwgPSAxNywKKyAgICBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aEFicyA9IDE4LAorICAgIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
UmVsID0gMTkKK307CisKK2NsYXNzIFNWR1BhdGhFbGVtZW50OworY2xhc3MgU1ZHU3R5bGVkRWxl
bWVudDsKKworY2xhc3MgU1ZHUGF0aFNlZyA6IHB1YmxpYyBSZWZDb3VudGVkPFNWR1BhdGhTZWc+
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnKCkgeyB9CisKKyAgICAvLyBGb3J3
YXJkIGRlY2xhcmUgdGhlc2UgZW51bXMgaW4gdGhlIHczYyBuYW1pbmcgc2NoZW1lLCBmb3IgSURM
IGdlbmVyYXRpb24KKyAgICBlbnVtIHsKKyAgICAgICAgUEFUSFNFR19VTktOT1dOID0gUGF0aFNl
Z1Vua25vd24sCisgICAgICAgIFBBVEhTRUdfQ0xPU0VQQVRIID0gUGF0aFNlZ0Nsb3NlUGF0aCwK
KyAgICAgICAgUEFUSFNFR19NT1ZFVE9fQUJTID0gUGF0aFNlZ01vdmVUb0FicywKKyAgICAgICAg
UEFUSFNFR19NT1ZFVE9fUkVMID0gUGF0aFNlZ01vdmVUb1JlbCwKKyAgICAgICAgUEFUSFNFR19M
SU5FVE9fQUJTID0gUGF0aFNlZ0xpbmVUb0FicywKKyAgICAgICAgUEFUSFNFR19MSU5FVE9fUkVM
ID0gUGF0aFNlZ0xpbmVUb1JlbCwKKyAgICAgICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUyA9
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19S
RUwgPSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fUVVB
RFJBVElDX0FCUyA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzLAorICAgICAgICBQQVRIU0VH
X0NVUlZFVE9fUVVBRFJBVElDX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsLAorICAg
ICAgICBQQVRIU0VHX0FSQ19BQlMgPSBQYXRoU2VnQXJjQWJzLAorICAgICAgICBQQVRIU0VHX0FS
Q19SRUwgPSBQYXRoU2VnQXJjUmVsLAorICAgICAgICBQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFM
X0FCUyA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzLAorICAgICAgICBQQVRIU0VHX0xJTkVU
T19IT1JJWk9OVEFMX1JFTCA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsLAorICAgICAgICBQ
QVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlMgPSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMsCisg
ICAgICAgIFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTCA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbCwKKyAgICAgICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlMgPSBQYXRoU2Vn
Q3VydmVUb0N1YmljU21vb3RoQWJzLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01P
T1RIX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwsCisgICAgICAgIFBBVEhTRUdf
Q1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUyA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoQWJzLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUwgPSBQ
YXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbAogICAgIH07CiAKLSAgICBjbGFzcyBTVkdQ
YXRoU2VnU2luZ2xlQ29vcmQgOiBwdWJsaWMgU1ZHUGF0aFNlZyB7IAotICAgIHB1YmxpYzoKLSAg
ICAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDog
U1ZHUGF0aFNlZygpICwgbV94KHgpICwgbV95KHkpIHt9Ci0KLSAgICAgICAgdm9pZCBzZXRYKGZs
b2F0IHgpIHsgbV94ID0geDsgfQotICAgICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQotICAgICAgICBm
bG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgKyBTdHJpbmc6
OmZvcm1hdCgiICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBmbG9hdCBtX3g7Ci0gICAgICAgIGZsb2F0IG1feTsKLSAgICB9OworICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX1VOS05P
V047IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gIiI7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
ICIiOyB9CisKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIFNWR05hbWVzOjpkQXR0cjsgfQorICAgIAorcHJvdGVjdGVkOgor
ICAgIFNWR1BhdGhTZWcoKSB7IH0KK307CisKK2NsYXNzIFNWR1BhdGhTZWdTaW5nbGVDb29yZCA6
IHB1YmxpYyBTVkdQYXRoU2VnIHsgCitwdWJsaWM6CisgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3Jk
KGZsb2F0IHgsIGZsb2F0IHkpCisgICAgOiBTVkdQYXRoU2VnKCkgLCBtX3goeCkgLCBtX3koeSkg
e30KKworICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KKyAgICBmbG9hdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV94OyB9CisKKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5
OyB9CisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgKyBT
dHJpbmc6OmZvcm1hdCgiICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CisKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsKK307CiAKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAkocmV2aXNpb24gNjQ0NjYpCisrKyBXZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE5ICs2Niwx
OSBAQCB1bnNpZ25lZCBTVkdQYXRoU2VnTGlzdDo6Z2V0UGF0aFNlZ0F0TGVuCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgIHN3
aXRjaCAoc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSkgewotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfTU9WRVRPX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvQWJzOgogICAg
ICAgICB7CiAgICAgICAgICAgICBTVkdQYXRoU2VnTW92ZXRvQWJzKiBtb3ZlVG8gPSBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzKj4oc2VnbWVudCk7CiAgICAgICAgICAgICBzZWdtZW50
TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUubW92ZVRvKEZsb2F0UG9pbnQobW92ZVRvLT54KCksIG1v
dmVUby0+eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnTGlu
ZVRvQWJzOgogICAgICAgICB7CiAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJzKiBsaW5l
VG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzKj4oc2VnbWVudCk7CiAgICAgICAg
ICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUubGluZVRvKEZsb2F0UG9pbnQobGlu
ZVRvLT54KCksIGxpbmVUby0+eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6CisgICAg
ICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczoKICAgICAgICAgewogICAgICAgICAgICAg
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyogY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNBYnMqPihzZWdtZW50KTsKICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGgg
PSB0cmF2ZXJzYWxTdGF0ZS5jdWJpY0JlemllclRvKEZsb2F0UG9pbnQoY3VydmVUby0+eDEoKSwg
Y3VydmVUby0+eTEoKSksCkBAIC04Niw3ICs4Niw3IEBAIHVuc2lnbmVkIFNWR1BhdGhTZWdMaXN0
OjpnZXRQYXRoU2VnQXRMZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmxvYXRQb2ludChjdXJ2ZVRvLT54KCksIGN1cnZlVG8tPnkoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NMT1NFUEFU
SDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xvc2VQYXRoOgogICAgICAgICAgICAgc2VnbWVudExl
bmd0aCA9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMTgsNDggKzExOCw0NCBAQCBQYXRoIFNWR1BhdGhTZWdM
aXN0Ojp0b1BhdGhEYXRhKCkKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIFBh
dGgoKTsKICAgICAgICAgc3dpdGNoIChzZWdtZW50LT5wYXRoU2VnVHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTW92ZXRvQWJzKiBtb3ZlVG8gPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTW92ZXRvQWJzKj4oc2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBlbmRQb2ludChtb3ZlVG8tPngoKSwgbW92ZVRvLT55KCkpOwotICAgICAgICAgICAgICAg
IHBhdGhEYXRhLm1vdmVUbyhlbmRQb2ludCk7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQ
b2ludCA9IGVuZFBvaW50OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0FicyogbGluZVRvID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficyo+KHNlZ21lbnQpOwotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgZW5kUG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKLSAgICAgICAg
ICAgICAgICBwYXRoRGF0YS5hZGRMaW5lVG8oZW5kUG9pbnQpOwotICAgICAgICAgICAgICAgIHBy
ZXZpb3VzRW5kUG9pbnQgPSBlbmRQb2ludDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NV
QklDX0FCUzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzKiBjdXJ2ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fi
cyo+KHNlZ21lbnQpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQoY3VydmVU
by0+eCgpLCBjdXJ2ZVRvLT55KCkpOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLmFkZEJlemll
ckN1cnZlVG8oRmxvYXRQb2ludChjdXJ2ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoY3VydmVUby0+
eDIoKSwgY3VydmVUby0+eTIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmRQb2ludCk7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCA9IGVu
ZFBvaW50OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMOgotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwqIGN1cnZlVG8g
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKj4oc2VnbWVudCk7Ci0gICAg
ICAgICAgICAgICAgRmxvYXRTaXplIGVuZFBvaW50KGN1cnZlVG8tPngoKSwgY3VydmVUby0+eSgp
KTsKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5hZGRCZXppZXJDdXJ2ZVRvKHByZXZpb3VzRW5k
UG9pbnQgKyBGbG9hdFNpemUoY3VydmVUby0+eDEoKSwgY3VydmVUby0+eTEoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ICsgRmxv
YXRTaXplKGN1cnZlVG8tPngyKCksIGN1cnZlVG8tPnkyKCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCArIGVuZFBvaW50KTsKLSAg
ICAgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ICs9IGVuZFBvaW50OwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQ
QVRIU0VHX0NMT1NFUEFUSDoKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5jbG9zZVN1YnBhdGgo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsgLy8gRklYTUU6IFRoaXMgb25seSB3b3JrcyB3aXRoIG5v
cm1hbGl6ZWQvcHJvY2Vzc2VkIHBhdGggZGF0YS4KLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvQWJzOiB7CisgICAgICAgICAgICBTVkdQYXRoU2VnTW92
ZXRvQWJzKiBtb3ZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzKj4oc2VnbWVu
dCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8t
PnkoKSk7CisgICAgICAgICAgICBwYXRoRGF0YS5tb3ZlVG8oZW5kUG9pbnQpOworICAgICAgICAg
ICAgcHJldmlvdXNFbmRQb2ludCA9IGVuZFBvaW50OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvQWJzOiB7CisgICAgICAgICAgICBTVkdQ
YXRoU2VnTGluZXRvQWJzKiBsaW5lVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJz
Kj4oc2VnbWVudCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50KGxpbmVUby0+eCgp
LCBsaW5lVG8tPnkoKSk7CisgICAgICAgICAgICBwYXRoRGF0YS5hZGRMaW5lVG8oZW5kUG9pbnQp
OworICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCA9IGVuZFBvaW50OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOiB7
CisgICAgICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKiBjdXJ2ZVRvID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KHNlZ21lbnQpOworICAgICAgICAgICAg
RmxvYXRQb2ludCBlbmRQb2ludChjdXJ2ZVRvLT54KCksIGN1cnZlVG8tPnkoKSk7CisgICAgICAg
ICAgICBwYXRoRGF0YS5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3VydmVUby0+eDEoKSwg
Y3VydmVUby0+eTEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQoY3VydmVUby0+eDIoKSwgY3VydmVUby0+eTIoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZFBvaW50KTsKKyAgICAgICAgICAgIHByZXZpb3VzRW5k
UG9pbnQgPSBlbmRQb2ludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDogeworICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1JlbCogY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNSZWwqPihzZWdtZW50KTsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBlbmRQb2ludChjdXJ2ZVRv
LT54KCksIGN1cnZlVG8tPnkoKSk7CisgICAgICAgICAgICBwYXRoRGF0YS5hZGRCZXppZXJDdXJ2
ZVRvKHByZXZpb3VzRW5kUG9pbnQgKyBGbG9hdFNpemUoY3VydmVUby0+eDEoKSwgY3VydmVUby0+
eTEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRW5k
UG9pbnQgKyBGbG9hdFNpemUoY3VydmVUby0+eDIoKSwgY3VydmVUby0+eTIoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgKyBlbmRQb2lu
dCk7CisgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ICs9IGVuZFBvaW50OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xvc2VQYXRoOgorICAg
ICAgICAgICAgcGF0aERhdGEuY2xvc2VTdWJwYXRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7IC8vIEZJWE1FOiBUaGlz
IG9ubHkgd29ya3Mgd2l0aCBub3JtYWxpemVkL3Byb2Nlc3NlZCBwYXRoIGRhdGEuCisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTIxNSw2OCArMjExLDY4IEBA
IFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0xpc3Q+IFNWR1BhdGhTZWdMaXMKICAgICAgICAgU1ZHUGF0
aFNlZyogdG8gPSB0b0xpc3QtPmdldEl0ZW0obiwgZWMpLmdldCgpOwogICAgICAgICBpZiAoZWMp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGZyb20tPnBhdGhTZWdUeXBlKCkg
PT0gU1ZHUGF0aFNlZzo6UEFUSFNFR19VTktOT1dOIHx8IGZyb20tPnBhdGhTZWdUeXBlKCkgIT0g
dG8tPnBhdGhTZWdUeXBlKCkpCisgICAgICAgIGlmIChmcm9tLT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdVbmtub3duIHx8IGZyb20tPnBhdGhTZWdUeXBlKCkgIT0gdG8tPnBhdGhTZWdUeXBlKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IHNlZ21l
bnQgPSAwOwotICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFNWR1BhdGhTZWc6OlNWR1BhdGhT
ZWdUeXBlPihmcm9tLT5wYXRoU2VnVHlwZSgpKSkgewotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ0xPU0VQQVRIOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdUeXBlPihmcm9tLT5wYXRoU2VnVHlwZSgpKSkgeworICAgICAgICBjYXNlIFBhdGhTZWdDbG9z
ZVBhdGg6CiAgICAgICAgICAgICBzZWdtZW50ID0gU1ZHUGF0aFNlZ0Nsb3NlUGF0aDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VH
X0xJTkVUT19IT1JJWk9OVEFMX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbEFiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcxKFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsQWJzLCB4KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOgorICAgICAgICBjYXNl
IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5E
UEFUSFNFRzEoU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwsIHgpOwogICAgICAgICAgICAg
YnJlYWs7ICAgCi0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElD
QUxfQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFiczoKICAgICAgICAg
ICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcxKFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicywg
eSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VH
X0xJTkVUT19WRVJUSUNBTF9SRUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1ZlcnRpY2Fs
UmVsOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzEoU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsUmVsLCB5KTsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgCi0gICAgICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdN
b3ZlVG9BYnM6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMihTVkdQYXRoU2Vn
TW92ZXRvQWJzLCB4LCB5KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfTU9WRVRPX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVs
OgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNlZ01vdmV0b1Jl
bCwgeCwgeSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQ
QVRIU0VHX0xJTkVUT19BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0FiczoKICAgICAg
ICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcyKFNWR1BhdGhTZWdMaW5ldG9BYnMsIHgsIHkp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19M
SU5FVE9fUkVMOgorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9SZWw6CiAgICAgICAgICAgICBz
ZWdtZW50ID0gQkxFTkRQQVRIU0VHMihTVkdQYXRoU2VnTGluZXRvUmVsLCB4LCB5KTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19D
VUJJQ19BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczoKICAgICAgICAg
ICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc2KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMsIHgs
IHksIHgxLCB5MSwgeDIsIHkyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6CisgICAgICAgIGNhc2UgUGF0aFNl
Z0N1cnZlVG9DdWJpY1JlbDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc2KFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwsIHgsIHksIHgxLCB5MSwgeDIsIHkyKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJ
Q19TTU9PVEhfQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM6
CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHNChTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoQWJzLCB4LCB5LCB4MiwgeTIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw6CisgICAg
ICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDoKICAgICAgICAgICAgIHNlZ21l
bnQgPSBCTEVORFBBVEhTRUc0KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwsIHgsIHks
IHgyLCB5Mik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQ
QVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY0FiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc0KFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLCB4LCB5LCB4MSwgeTEpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19S
RUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw6CiAgICAgICAgICAg
ICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHNChTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCwg
eCwgeSwgeDEsIHkxKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhT
ZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUzoKKyAgICAgICAgY2FzZSBQ
YXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBC
TEVORFBBVEhTRUcyKFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLCB4LCB5KTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VS
VkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFJlbDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcyKFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLCB4LCB5KTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQVJDX0FCUzoKKyAgICAgICAg
Y2FzZSBQYXRoU2VnQXJjQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzco
U1ZHUGF0aFNlZ0FyY0FicywgeCwgeSwgcjEsIHIyLCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2Vl
cEZsYWcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19BUkNfUkVMOgorICAgICAgICBjYXNlIFBhdGhTZWdBcmNSZWw6CiAgICAgICAgICAgICBz
ZWdtZW50ID0gQkxFTkRQQVRIU0VHNyhTVkdQYXRoU2VnQXJjUmVsLCB4LCB5LCByMSwgcjIsIGFu
Z2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX1VOS05PV046CisgICAgICAgIGNhc2UgUGF0aFNl
Z1Vua25vd246CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQog
ICAgICAgICByZXN1bHQtPmFwcGVuZEl0ZW0oc2VnbWVudCwgZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63433</attachid>
            <date>2010-08-04 03:03:50 -0700</date>
            <delta_ts>2010-08-04 14:48:52 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>svgByteStreamBuilder-11.patch</filename>
            <type>text/plain</type>
            <size>73588</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDYzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDEwLTA4LTA0ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29t
ZSB1cCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHJlcHJlc2VudCBQYXRoIHNlZ21lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTE1OQor
CisgICAgICAgIEV2ZXJ5IFNWR1BhdGhFbGVtZW50IGJ1aWxkcyBhIFNWR1BhdGhTZWdMaXN0IGZp
cnN0IGFuZCBjcmVhdGVzIHRoZSBQYXRoIGFmdGVyd2FyZHMuIFRoaXMKKyAgICAgICAgaXMgbmVp
dGhlciBtZW1vcnkgZWZmaWNpZW50LCBub3IgdmVyeSBmYXN0IGZvciB0aGUgZmFjdCB0aGF0IHdl
IGRvbid0IHJlYWxseSBuZWVkIFNWR1BhdGhTZWdMaXN0IG1vc3QKKyAgICAgICAgb2YgdGhlIHRp
bWUuIEl0IGlzIGp1c3QgbmVlZGVkIGZvciBtYW5pcHVsYXRpbmcgU1ZHUGF0aEVsZW1lbnRzIHZp
YSBTVkdET00uCisgICAgICAgIFNWR1BhdGhCeXRlU3RyZWFtIGlzIGEgc2ltcGxlIGJ5dGUgc3Ry
ZWFtIGFuZCBjYW4gYmUgcGFyc2VkIHZlcnkgcXVpY2tseS4gSXQgc2F2ZXMgbWVtb3J5IGR1ZSB0
bworICAgICAgICBpdHMgY29tcGFjdCBmb3JtIGJ5IGxpbmtpbmcgdXAgc2hvcnQgaW50ZWdlciB2
YWx1ZXMgZm9yIHRoZSBzZWdlbWVudCB0eXBlcyBhbmQgZmxvYXQgdmFsdWVzIGZvcgorICAgICAg
ICB0aGUgcG9pbnRzIG9mIGEgc2VnbWVudC4gSXQgd2lsbCBtYWtlIGl0IHBvc3NpYmxlIHRvIHN5
bmNocm9uaXplIHRoZSB1bmFsdGVyZWQgYW5kIG5vcm1hbGl6ZWQKKyAgICAgICAgU1ZHUGF0aFNl
Z0xpc3QgdG9nZXRoZXIgd2l0aCB0aGUgc3ZnIHBhdGggZGF0YSBmb3IgdGhlIGQgYXR0cmlidXRl
LgorICAgICAgICBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBwYXJzZXMgYW4gZXhpc3RpbmcgU1ZH
UGF0aEJ5dGVTdHJlYW0gYW5kIGNyZWF0ZXMgYSBTdHJpbmcsIFNWR1BhdGhTZWdMaXN0IG9yCisg
ICAgICAgIFBhdGggYW5kIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciBjcmVhdGVzIGEgU1ZHUGF0
aEJ5dGVTdHJlYW0gb3V0IG9mIHN2ZyBwYXRoIGRhdGEgKGQgYXR0cmlidXRlIHN0cmluZykuCisg
ICAgICAgIFRoaXMgcGF0Y2ggZHVwbGljYXRlcyB0aGUgbm9ybWFsaXphdGlvbiBhbGdvcml0aG1z
IG9mIFNWR1BhdGhQYXJzZXIgaW4gU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIgYXQgdGhlIG1vbWVu
dC4KKyAgICAgICAgVGhlIG5vcm1hbGl6YXRpb24gY29kZSB3aWxsIGdldCByZW1vdmVkIGZyb20g
U1ZHUGF0aFBhcnNlciwgb25jZSB3ZSBjb21wbGV0ZWx5IG1vdmVkIHRvIFNWR1BhdGhCeXRlU3Ry
ZWFtCisgICAgICAgIGluIG9uZSBvZiB0aGUgbmV4dCBwYXRjaGVzLgorICAgICAgICBTVkdQYXRo
RGF0YUJ1aWxkZXIgaXMgYSBuZXcgU1ZHUGF0aENvbnN1bWVyIGp1c3QgbGlrZSBTVkdQYXRoQnVp
bGRlciBhbmQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyCisgICAgICAgIGFuZCBjcmVhdGVzIGEgU3Ry
aW5nIGZyb20gdGhlIHBhdGggc2VnbWVudHMgb2YgYSBTVkdQYXRoQnl0ZVN0cmVhbS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIERvZXNuJ3QgaW5mbHVlbmNlIHJlbmRlcmluZy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdHbHlwaEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQYXRoRGF0YSk6Cisg
ICAgICAgICogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhCdWlsZGVyOjpidWlsZFBhdGhGcm9tQnl0ZVN0cmVhbSk6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhCdWlsZGVyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmg6IEFkZGVkLiBC
eXRlVmVjdG9yIHRvIG1hbmFnZSBTVkdQYXRoIGRhdGEKKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpkYXRhKTogR2V0IHRoZSBWZWN0b3IgZGF0YS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpiZWdpbik6IEdpdmVzIGEgY29uc3Qg
aXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6ZW5kKTogR2l2
ZXMgYSBjb25zdCBpdGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
OjphcHBlbmQpOiBBcHBlbmQgYSBieXRlIHRvIHRoZSBWZWN0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnl0ZVN0cmVhbTo6Y2xlYXIpOiBDbGVhciB0aGUgVmVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OlNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcDogQWRkZWQuIENyZWF0ZXMgYSBTVkdQ
YXRoQnl0ZVN0cmVhbQorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyOjpidWlsZEZyb21QYXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb0hvcml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9WZXJ0aWNhbCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0
aWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRv
UXVhZHJhdGljU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcjo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpjbG9zZVBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRl
RmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRl
RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0
ZUZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
Ojp3cml0ZVNlZ21lbnRUeXBlKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIuY3BwOiBBZGRlZC4gUGFyc2VzIHRoZSBCeXRlU3RyZWFtIGFuZCBjcmVhdGVzIGFuIFNWR1Bh
dGhDb25zdW1lciBvdXQgb2YgaXQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlcjo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUxpbmVUb1NlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1QYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
cjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VBcmNUb1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNl
RnJvbVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6
ZGVjb21wb3NlQXJjVG9DdWJpYyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFy
c2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6
OnJlYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpy
ZWFkRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cmVh
ZEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpyZWFk
U1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXI6OnJlYWRGbG9hdFBvaW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aENvbnN1bWVyLmg6IElu
aGVyaXQgZnJvbSBOb25jb3B5YWJsZQorICAgICAgICAqIHN2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIu
Y3BwOiBBZGRlZC4gU2VyaWFsaXplcyBhIFNWR1BhdGhCeXRlU3RyZWFtIGludG8gYSBTdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OlNWR1BhdGhEYXRhQnVpbGRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRGF0YUJ1aWxkZXI6OmJ1aWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6bGluZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhEYXRhQnVpbGRlcjo6bGluZVRvSG9yaXpvbnRhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRGF0YUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhE
YXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhEYXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRGF0YUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjphcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
RGF0YUJ1aWxkZXI6OmNsb3NlUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhEYXRhQnVpbGRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZy5oOiBNb3ZlIHRoZSBlbnVtZXJh
dGlvbiBvdXQgb2YgdGhlIGNsYXNzIHRvIHVzZSBpdCBvbiBvdGhlciBwbGFjZXMgYXMgd2VsbC4K
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjp+U1ZH
UGF0aFNlZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjopOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZzo6cGF0aFNlZ1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjphc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjpTVkdQYXRoU2VnKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6U1ZHUGF0aFNlZ1Npbmds
ZUNvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6c2V0WCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OngpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkOjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6eSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
U2luZ2xlQ29vcmQ6OnRvU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3QuY3Bw
OiBVc2UgdGhlIG5ldyBpbnRyb2R1Y2UgZW51bWVyYXRpb24gb2YgU1ZHUGF0aFNlZworICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3Q6OmdldFBhdGhTZWdBdExlbmd0aCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdDo6dG9QYXRoRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdDo6Y3JlYXRlQW5pbWF0ZWQpOgorCiAyMDEwLTA4LTA0ICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBzb3J0IG9mIFhD
b2RlIHByb2plY3QgZmlsZS4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDY0NjM2KQorKysgV2ViQ29yZS9BbmRyb2lk
Lm1rCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsNiArODYzLDkgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJc3ZnL1NWR1BhaW50LmNwcCBcCiAJc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5jcHAgXAogCXN2Zy9TVkdQYXRoQnVpbGRlci5jcHAgXAorCXN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKwlzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3Bw
IFwKKwlzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCBcCiAJc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cCBcCiAJc3ZnL1NWR1BhdGhQYXJzZXIuY3BwIFwKIAlzdmcvU1ZHUGF0aFNlZ0FyYy5jcHAgXApJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA2NDYzNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTQwNDksNyArNDA0OSwxNCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
QnVpbGRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmggXAorCVdlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlci5jcHAgXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIFwK
KwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgXAorCVdlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1l
ci5oIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3N2
Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
UGFyc2VyLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzgwNiw3ICszODA2LDE0IEBACiAgICAgICAgICAgICAn
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ1aWxk
ZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ1aWxkZXIuaCcsCisgICAgICAgICAg
ICAnc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAn
LAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHUGF0aENvbnN1bWVyLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoRGF0
YUJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmgnLAog
ICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9T
VkdQYXRoRWxlbWVudC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFBhcnNlci5jcHAnLApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA2NDYzNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTI4MzQsNiArMjgzNCw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkg
ewogICAgICAgICBzdmcvU1ZHUGFpbnQuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwIFwKKyAgICAgICAgc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAgXAorICAgICAgICBzdmcvU1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXIuY3BwIFwKKyAgICAgICAgc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAgXAog
ICAgICAgICBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhQYXJz
ZXIuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdBcmMuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTE2MSwxMCAr
NDkxNjEsMjYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3RyZWFtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoQ29uc3VtZXIuaCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2
Z1xTVkdQYXRoRGF0YUJ1aWxkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoRWxlbWVudC5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA2NDYzNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI1LDYgKzE0MjUsMTMgQEAKIAkJODQyMjQxOEUx
MDdFNzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOEIxMDdF
Nzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnRJbnRlcm5hbC5oICovOyB9
OwogCQk4NDIyNDE5MzEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5
MDEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi87IH07CiAJ
CTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3
OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OworCQk4NDJBOTgy
QzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAv
KiBTVkdQYXRoQnl0ZVN0cmVhbS5oICovOyB9OworCQk4NDJBOTgyRDExRkUxMjc1MDA0NTg5MjIg
LyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuY3BwICovOyB9OworCQk4NDJBOTgyRTExRkUxMjc1MDA0NTg5MjIg
LyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyLmggKi87IH07CisJCTg0MkE5ODJGMTFGRTEyNzUwMDQ1ODkyMiAvKiBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyODExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXIuY3BwICovOyB9OworCQk4NDJBOTgzMDExRkUxMjc1MDA0NTg5MjIgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MkE5ODI5MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlci5oICovOyB9OworCQk4NDJBOTgzMTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERh
dGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0MkE5ODJBMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICov
OyB9OworCQk4NDJBOTgzMjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyQjEx
RkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggKi87IH07CiAJCTg0NUU3MkY4
MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAq
LzsgfTsKIAkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGOTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLzsgfTsKIAkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3
RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwpA
QCAtNzIyMSw2ICs3MjI4LDEzIEBACiAJCTg0MjI0MTkwMTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MjI0MTkyMTA3RTc4QTcwMDc2NkE4
NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBT
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODQyQTk4MjUxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODQyQTk4MjcxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MjgxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MjkxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODJB
MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aERhdGFCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MkIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhE
YXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoRGF0
YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ1RTcyRjcwRkQyNjFF
RTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
aWx0ZXIuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0OTQzLDYgKzE0OTU3LDEzIEBACiAJCUIyMjI3N0NBMEQw
MEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bS5oICovLAorCQkJCTg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXIuY3BwICovLAorCQkJCTg0MkE5ODI3MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuaCAqLywKKwkJCQk4NDJBOTgyODExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwICovLAorCQkJCTg0MkE5ODI5MTFGRTEyNzUwMDQ1
ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oICovLAorCQkJCTg0MkE5ODJBMTFGRTEy
NzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICovLAorCQkJCTg0MkE5ODJCMTFG
RTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuaCAqLywKIAkJCQlFNDZFOTc4NjBE
QUFENjFCMDA3MUU4OTQgLyogYW5pbWF0aW9uICovLAogCQkJCUIyNTU5ODg2MEQwMEQ4QjgwMEJC
ODI1QyAvKiBncmFwaGljcyAqLywKIAkJCQlCMjIyNzdDQjBEMDBCRjFGMDA3MUI3ODIgLyogQ29s
b3JEaXN0YW5jZS5jcHAgKi8sCkBAIC0xOTk4Myw2ICsyMDAwNCwxMCBAQAogCQkJCUUxQkU1MTJF
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg0MkE5ODJDMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODQyQTk4MkUxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQyQTk4MzAxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDJB
OTgzMjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIyMzg2LDYgKzIyNDExLDkgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMg
LyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQw
Q0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NDJBOTgyRDExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0MkE5ODJGMTFGRTEyNzUwMDQ1ODkyMiAvKiBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDJBOTgzMTEx
RkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0FsbEluT25lLmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdB
bGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOSBAQAogI2luY2x1ZGUg
IlNWR1BhaW50LmNwcCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIgogI2luY2x1
ZGUgIlNWR1BhdGhCdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuY3BwIgorI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCIKKyNpbmNsdWRl
ICJTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmNwcCIK
ICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmNw
cCIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJD
b3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwx
MSBAQAogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAxLDEwICsxMDQsMTQgQEAg
c3RhdGljIGlubGluZSBTVkdHbHlwaElkZW50aWZpZXI6Ok9yaWVudAogCiBzdGF0aWMgaW5saW5l
IFBhdGggcGFyc2VQYXRoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogeworICAgIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlciBieXRlU3RyZWFtQnVpbGRlcjsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGFuYWx5c2UgdGhlIHJldHVybmVkIHZhbHVlLiAKKyAgICBib29sIHBhcnNlZENv
cnJlY3RseTsKKyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ5dGVTdHJlYW0gPSBieXRl
U3RyZWFtQnVpbGRlci5idWlsZEZyb21QYXRoRGF0YSh2YWx1ZSwgcGFyc2VkQ29ycmVjdGx5KTsK
KwogICAgIFBhdGggcmVzdWx0OwogICAgIFNWR1BhdGhCdWlsZGVyIGJ1aWxkZXIocmVzdWx0KTsK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFuYWx5c2UgdGhlIHJldHVybmVkIHZhbHVlLgotICAg
IGJ1aWxkZXIuYnVpbGQodmFsdWUpOworICAgIGJ1aWxkZXIuYnVpbGRQYXRoRnJvbUJ5dGVTdHJl
YW0oYnl0ZVN0cmVhbS5nZXQoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1BhdGhCdWlsZGVyLmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRo
QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlNWR1BhdGhCdWlsZGVyLmgiCiAKKyNpbmNsdWRlICJTVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlci5oIgogI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDEsNiArNDIsMTIgQEAgYm9vbCBTVkdQYXRoQnVpbGRlcjo6YnVpbGQo
Y29uc3QgU3RyaW5nJgogICAgIHJldHVybiBwYXJzZXIucGFyc2VQYXRoRGF0YVN0cmluZyhkLCB0
cnVlKTsKIH0KIAorYm9vbCBTVkdQYXRoQnVpbGRlcjo6YnVpbGRQYXRoRnJvbUJ5dGVTdHJlYW0o
U1ZHUGF0aEJ5dGVTdHJlYW0qIGJ5dGVTdHJlYW0pCit7CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1Q
YXJzZXIgcGFyc2VyKHRoaXMpOworICAgIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyZWFtKGJ5
dGVTdHJlYW0sIHRydWUpOworfQorCiB2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
IHsKICAgICBtX2N1cnJlbnQgPSBtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBwb2ludCA6
IG1fY3VycmVudCArIHBvaW50OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA2NDYz
NikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRl
ICJTVkdQYXRoQ29uc3VtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzUsNiArMzYs
NyBAQCBjbGFzcyBTVkdQYXRoQnVpbGRlciA6IHByaXZhdGUgU1ZHUGF0aENvCiBwdWJsaWM6CiAg
ICAgU1ZHUGF0aEJ1aWxkZXIoUGF0aCYpOwogICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBidWlsZFBhdGhGcm9tQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSopOwog
CiBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFy
c2luZyBtb2Rlcy4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1BhdGhCeXRlU3RyZWFtX2gK
KyNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1faAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUeXBlIGRlZmlu
aXRpb25zIGZvciB0aGUgYnl0ZSBzdHJlYW0gZGF0YQordHlwZWRlZiB1bmlvbiB7CisgICAgYm9v
bCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVvZihib29sKV07Cit9IEJvb2xC
eXRlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBj
aGFyIGJ5dGVzW3NpemVvZihmbG9hdCldOworfSBGbG9hdEJ5dGU7CisKK3R5cGVkZWYgdW5pb24g
eworICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KV07Cit9IFVuc2lnbmVkU2hvcnRCeXRlOworCitjbGFzcyBTVkdQ
YXRoQnl0ZVN0cmVhbSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFNWR1BhdGhCeXRlU3RyZWFtKTsKKyAgICB9CisKKyAgICB0eXBl
ZGVmIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBEYXRhOworICAgIHR5cGVkZWYgRGF0YTo6Y29uc3Rf
aXRlcmF0b3IgRGF0YUl0ZXJhdG9yOworCisgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQorICAgIERhdGFJdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fZGF0
YS5iZWdpbigpOyB9CisgICAgRGF0YUl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQo
KTsgfQorICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGNoYXIgYnl0ZSkgeyBtX2RhdGEuYXBwZW5k
KGJ5dGUpOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KKyAgICBib29s
IGlzRW1wdHkoKSB7IHJldHVybiAhbV9kYXRhLnNpemUoKTsgfQorCitwcml2YXRlOgorICAgIFNW
R1BhdGhCeXRlU3RyZWFtKCkgeyB9CisgICAgRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhC
eXRlU3RyZWFtX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuaCIKKworI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWMuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaCIKKyNpbmNsdWRlICJTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG8u
aCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oIgorI2luY2x1ZGUgIlNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdNb3ZldG8uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OlNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8U1ZHUGF0aEJ5dGVTdHJl
YW0+IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YnVpbGRGcm9tUGF0aERhdGEoY29uc3QgU3Ry
aW5nJiBkLCBib29sJiBvaykKK3sKKyAgICBtX2J5dGVTdHJlYW0gPSBTVkdQYXRoQnl0ZVN0cmVh
bTo6Y3JlYXRlKCk7CisKKyAgICBTVkdQYXRoUGFyc2VyIHBhcnNlcih0aGlzKTsKKyAgICBvayA9
IHBhcnNlci5wYXJzZVBhdGhEYXRhU3RyaW5nKGQsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ieXRl
U3RyZWFtLnJlbGVhc2UoKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1v
dmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMg
PyAgUGF0aFNlZ01vdmVUb1JlbCA6IFBhdGhTZWdNb3ZlVG9BYnMpOworICAgIHdyaXRlRmxvYXRQ
b2ludChwb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8o
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAg
IHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0xp
bmVUb1JlbCA6IFBhdGhTZWdMaW5lVG9BYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2ludCk7
Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKGZs
b2F0IHgsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUo
bW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwg
OiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyk7CisgICAgd3JpdGVGbG9hdCh4KTsKK30KKwor
dm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKGZsb2F0IHksIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBS
ZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsIDogUGF0aFNlZ0xp
bmVUb1ZlcnRpY2FsQWJzKTsKKyAgICB3cml0ZUZsb2F0KHkpOworfQorCit2b2lkIFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0
aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3VydmVUb0N1YmljUmVsIDogUGF0aFNlZ0N1cnZlVG9D
dWJpY0Ficyk7CisgICAgd3JpdGVGbG9hdFBvaW50KHBvaW50MSk7CisgICAgd3JpdGVGbG9hdFBv
aW50KHBvaW50Mik7CisgICAgd3JpdGVGbG9hdFBvaW50KHBvaW50KTsKK30KKwordm9pZCBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwgOiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3Ro
QWJzKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQyKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQo
cG9pbnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRy
YXRpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0g
UmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsIDogUGF0aFNl
Z0N1cnZlVG9RdWFkcmF0aWNBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDEpOworICAg
IHdyaXRlRmxvYXRQb2ludChwb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsIDogUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2lu
dCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjphcmNUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJn
ZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAg
ICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdB
cmNSZWwgOiBQYXRoU2VnQXJjQWJzKTsKKyAgICB3cml0ZUZsb2F0KHIxKTsKKyAgICB3cml0ZUZs
b2F0KHIyKTsKKyAgICB3cml0ZUZsb2F0KGFuZ2xlKTsKKyAgICB3cml0ZUZsYWcobGFyZ2VBcmNG
bGFnKTsKKyAgICB3cml0ZUZsYWcoc3dlZXBGbGFnKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9p
bnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRoKCkKK3sK
KyAgICB3cml0ZVNlZ21lbnRUeXBlKFBhdGhTZWdDbG9zZVBhdGgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKKyNk
ZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciA6IHByaXZhdGUgU1ZHUGF0aENvbnN1bWVyIHsKK3B1
YmxpYzoKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIoKTsKKworICAgIFBhc3NPd25QdHI8
U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ1aWxkRnJvbVBhdGhEYXRhKGNvbnN0IFN0cmluZyYsIGJvb2wm
IG9rKTsKKworcHJpdmF0ZToKKyAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcvTm9ybWFs
aXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBv
aW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgorICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVy
ZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQs
IFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZs
b2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNT
bW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgUGF0
aENvb3JkaW5hdGVNb2RlKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
VHlwZT4KKyAgICB2b2lkIHdyaXRlVHlwZShjb25zdCBCeXRlVHlwZSYgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihCeXRlVHlwZSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1fYnl0ZVN0cmVh
bS0+YXBwZW5kKHR5cGUuYnl0ZXNbaV0pOworICAgIH0KKworICAgIHZvaWQgd3JpdGVGbGFnKGJv
b2wgdmFsdWUpCisgICAgeworICAgICAgICBCb29sQnl0ZSBkYXRhOworICAgICAgICBkYXRhLnZh
bHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKKyAgICB9CisKKyAgICB2b2lk
IHdyaXRlRmxvYXQoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBGbG9hdEJ5dGUgZGF0YTsK
KyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3cml0ZVR5cGUoZGF0YSk7Cisg
ICAgfQorCisgICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CisgICAgeworICAgICAgICB3cml0ZUZsb2F0KHBvaW50LngoKSk7CisgICAgICAgIHdyaXRlRmxv
YXQocG9pbnQueSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlU2VnbWVudFR5cGUodW5zaWdu
ZWQgc2hvcnQgdmFsdWUpCisgICAgeworICAgICAgICBVbnNpZ25lZFNob3J0Qnl0ZSBkYXRhOwor
ICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKKyAg
ICB9CisKKyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fYnl0ZVN0cmVhbTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYg
Ly8gU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFRoZSBLYXJib24gRGV2ZWxvcGVycworICogICAgICAg
ICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWd0aCAoQykgMjAwNywgMjAwOSBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCIKKworI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IlNWR1BhdGhTZWcuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitzdGF0aWMgY29u
c3QgZmxvYXQgZ09uZU92ZXJUaHJlZSA9IDEgLyAzLmY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyKFNWR1Bh
dGhDb25zdW1lciogY29uc3VtZXIpCisgICAgOiBtX2NvbnN1bWVyKGNvbnN1bWVyKQoreworfQor
Cit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUNsb3NlUGF0aFNlZ21lbnQoKQor
eworICAgIC8vIFJlc2V0IG1fY3VycmVudFBvaW50IGZvciB0aGUgbmV4dCBwYXRoLgorICAgIGlm
IChtX25vcm1hbGl6ZWQpCisgICAgICAgIG1fY3VycmVudFBvaW50ID0gbV9zdWJQYXRoUG9pbnQ7
CisgICAgbV9wYXRoQ2xvc2VkID0gdHJ1ZTsKKyAgICBtX2NvbnN1bWVyLT5jbG9zZVBhdGgoKTsK
K30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkK
K3sKKyAgICBGbG9hdFBvaW50IHRvUG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIGlmICht
X25vcm1hbGl6ZWQpIHsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVz
KQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdG9Qb2ludDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0b1BvaW50OworICAgICAgICBtX3N1YlBhdGhQ
b2ludCA9IG1fY3VycmVudFBvaW50OworICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJy
ZW50UG9pbnQsIG1fcGF0aENsb3NlZCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fY29uc3VtZXItPm1vdmVUbyh0b1BvaW50LCBtX3BhdGhDbG9zZWQsIG1fbW9k
ZSk7CisgICAgbV9wYXRoQ2xvc2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJl
YW1QYXJzZXI6OnBhcnNlTGluZVRvU2VnbWVudCgpCit7CisgICAgRmxvYXRQb2ludCB0b1BvaW50
ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBpZiAobV9ub3JtYWxpemVkKSB7CisgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ICs9IHRvUG9pbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50
ID0gdG9Qb2ludDsKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBB
YnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+bGlu
ZVRvKHRvUG9pbnQsIG1fbW9kZSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWCA9IHJlYWRG
bG9hdCgpOworCisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBpZiAobV9tb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5tb3ZlKHRv
WCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFgodG9Y
KTsKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNv
b3JkaW5hdGVzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpv
bnRhbCh0b1gsIG1fbW9kZSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKK3sKKyAgICBmbG9hdCB0b1kgPSByZWFkRmxvYXQo
KTsKKworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgwLCB0b1kp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHRvWSk7Cisg
ICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGlu
YXRlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKHRv
WSwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2
ZVRvQ3ViaWNTZWdtZW50KCkKK3sKKyAgICBGbG9hdFBvaW50IHBvaW50MSA9IHJlYWRGbG9hdFBv
aW50KCk7CisgICAgRmxvYXRQb2ludCBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOworICAgIEZs
b2F0UG9pbnQgcG9pbnQzID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBpZiAobV9ub3JtYWxpemVk
KSB7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgeworICAgICAg
ICAgICAgcG9pbnQxICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcG9pbnQyICs9IG1f
Y3VycmVudFBvaW50OworICAgICAgICAgICAgcG9pbnQzICs9IG1fY3VycmVudFBvaW50OworICAg
ICAgICB9CisgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50Miwg
cG9pbnQzLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKworICAgICAgICBtX2NvbnRyb2xQb2ludCA9
IHBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBt
X21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQoKQoreworICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b0N1YmljQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJp
Y1Ntb290aEFicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNTbW9vdGhSZWwpCisgICAgICAgIG1fY29udHJvbFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CisK
KyAgICBGbG9hdFBvaW50IHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgRmxvYXRQb2lu
dCBwb2ludDMgPSByZWFkRmxvYXRQb2ludCgpOworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgcG9pbnQx
LnNjYWxlKDIsIDIpOworICAgICAgICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAt
bV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzKSB7CisgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAg
ICAgICBwb2ludDMgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICBtX2Nv
bnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHBvaW50MywgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CisKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7CisgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gcG9pbnQzOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1bWVyLT5j
dXJ2ZVRvQ3ViaWNTbW9vdGgocG9pbnQyLCBwb2ludDMsIG1fbW9kZSk7Cit9CisKK3ZvaWQgU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQorewor
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBGbG9hdFBvaW50
IHBvaW50MyA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MTsKKyAgICAgICAgcG9pbnQxID0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54KCksIDIgKiBt
X2NvbnRyb2xQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50Mihwb2ludDMueCgp
ICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgcG9pbnQzLnkoKSArIDIgKiBtX2NvbnRyb2xQb2lu
dC55KCkpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKKyAg
ICAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJl
bnRQb2ludC55KCkpOworICAgICAgICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50
LngoKSwgMyAqIG1fY3VycmVudFBvaW50LnkoKSk7CisgICAgICAgICAgICBwb2ludDMgKz0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhy
ZWUsIGdPbmVPdmVyVGhyZWUpOworICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSwg
Z09uZU92ZXJUaHJlZSk7CisKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50
MSwgcG9pbnQyLCBwb2ludDMsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworCisgICAgICAgIGlmICht
X21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1fY29udHJvbFBvaW50
ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50MzsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhwb2ludDEsIHBv
aW50MywgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCit7CisgICAgRmxvYXRQb2ludCBwb2ludCA9
IHJlYWRGbG9hdFBvaW50KCk7CisKKyAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY0FicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljUmVsCisgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNTbW9vdGhBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCkKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBtX2N1
cnJlbnRQb2ludDsKKworICAgIGlmIChtX25vcm1hbGl6ZWQpIHsKKyAgICAgICAgRmxvYXRQb2lu
dCBjdWJpY1BvaW50ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIGN1YmljUG9pbnQuc2NhbGUo
MiwgMik7CisgICAgICAgIGN1YmljUG9pbnQubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9j
b250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDEobV9jdXJyZW50UG9p
bnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkgKyAyICogY3Vi
aWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50Mihwb2ludC54KCkgKyAyICog
Y3ViaWNQb2ludC54KCksIHBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQzKHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgICAgICAgaWYgKG1f
bW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBwb2ludDIgKz0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgICAgICBwb2ludDMgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUsIGdPbmVPdmVyVGhyZWUp
OworICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7CisK
KyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBwb2ludDMs
IEFic29sdXRlQ29vcmRpbmF0ZXMpOworCisgICAgICAgIG1fY29udHJvbFBvaW50ID0gY3ViaWNQ
b2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgocG9pbnQsIG1fbW9kZSk7Cit9
CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkKK3sK
KyAgICBmbG9hdCByeCA9IHJlYWRGbG9hdCgpOworICAgIGZsb2F0IHJ5ID0gcmVhZEZsb2F0KCk7
CisgICAgZmxvYXQgYW5nbGUgPSByZWFkRmxvYXQoKTsKKyAgICBib29sIGxhcmdlQXJjID0gcmVh
ZEZsYWcoKTsKKyAgICBib29sIHN3ZWVwID0gcmVhZEZsYWcoKTsKKyAgICBGbG9hdFBvaW50IHBv
aW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisKKyAgICAvLyBJZiByeCA9IDAgb3IgcnkgPSAwIHRo
ZW4gdGhpcyBhcmMgaXMgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCAoYSAibGlu
ZXRvIikgam9pbmluZyB0aGUgZW5kcG9pbnRzLgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRy9pbXBsbm90ZS5odG1sI0FyY091dE9mUmFuZ2VQYXJhbWV0ZXJzCisgICAgcnggPSBmYWJz
ZihyeCk7CisgICAgcnkgPSBmYWJzZihyeSk7CisgICAgaWYgKCFyeCB8fCAhcnkpIHsKKyAgICAg
ICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQorICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHBvaW50MjsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50
MjsKKyAgICAgICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1
dGVDb29yZGluYXRlcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb25zdW1lci0+
bGluZVRvKHBvaW50MiwgbV9tb2RlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKG1fbm9ybWFsaXplZCkgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3Vy
cmVudFBvaW50OworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisg
ICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBv
aW50ID0gcG9pbnQyOworICAgICAgICByZXR1cm4gZGVjb21wb3NlQXJjVG9DdWJpYyhhbmdsZSwg
cngsIHJ5LCBwb2ludDEsIHBvaW50MiwgbGFyZ2VBcmMsIHN3ZWVwKTsKKyAgICB9CisgICAgbV9j
b25zdW1lci0+YXJjVG8ocG9pbnQyLCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIG1f
bW9kZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXI6OnBhcnNlRnJvbVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBib29sIG5vcm1h
bGl6ZWQpCit7CisgICAgQVNTRVJUKHN0cmVhbSk7CisgICAgaWYgKHN0cmVhbS0+aXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0cmVhbUN1cnJlbnQgPSBzdHJlYW0t
PmJlZ2luKCk7CisgICAgbV9zdHJlYW1FbmQgPSBzdHJlYW0tPmVuZCgpOworCisgICAgbV9ub3Jt
YWxpemVkID0gbm9ybWFsaXplZDsKKworICAgIG1fY29udHJvbFBvaW50ID0gRmxvYXRQb2ludCgp
OworICAgIG1fY3VycmVudFBvaW50ID0gRmxvYXRQb2ludCgpOworICAgIG1fc3ViUGF0aFBvaW50
ID0gRmxvYXRQb2ludCgpOworICAgIG1fcGF0aENsb3NlZCA9IHRydWU7CisKKyAgICBtX2xhc3RD
b21tYW5kID0gUGF0aFNlZ1Vua25vd247CisgICAgd2hpbGUgKG1fc3RyZWFtQ3VycmVudCA8IG1f
c3RyZWFtRW5kKSB7CisgICAgICAgIFNWR1BhdGhTZWdUeXBlIGNvbW1hbmQgPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworICAgICAgICBtX21vZGUg
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAg
ICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVD
b29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvQWJzOgorICAgICAgICAgICAg
cGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
YXRoU2VnTGluZVRvUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVDb29yZGluYXRl
czsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvQWJzOgorICAgICAgICAgICAgcGFyc2VMaW5l
VG9TZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGlu
ZVRvSG9yaXpvbnRhbFJlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0
ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnM6CisgICAgICAgICAg
ICBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw6CisgICAgICAgICAgICBtX21vZGUg
PSBSZWxhdGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bEFiczoKKyAgICAgICAgICAgIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xvc2VQYXRoOgorICAgICAgICAgICAg
cGFyc2VDbG9zZVBhdGhTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVD
b29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOgorICAgICAg
ICAgICAgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOgorICAgICAgICAgICAgbV9t
b2RlID0gUmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1
YmljU21vb3RoQWJzOgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAg
ICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM6CisgICAgICAgICAgICBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9
IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNTbW9vdGhBYnM6CisgICAgICAgICAgICBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQXJjUmVsOgor
ICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQ
YXRoU2VnQXJjQWJzOgorICAgICAgICAgICAgaWYgKCFwYXJzZUFyY1RvU2VnbWVudCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1f
bGFzdENvbW1hbmQgPSBjb21tYW5kOworCisgICAgICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBh
dGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKKyAgICAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0
aFNlZ0N1cnZlVG9DdWJpY1JlbAorICAgICAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAhPSBQYXRo
U2VnQ3VydmVUb0N1YmljU21vb3RoQWJzCisgICAgICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwKKyAgICAgICAgICAgICYmIG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMKKyAgICAgICAgICAgICYmIG1fbGFzdENv
bW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwKKyAgICAgICAgICAgICYmIG1fbGFz
dENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMKKyAgICAgICAgICAg
ICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpCisg
ICAgICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50OworICAgIH0KKyAgICBB
U1NFUlQobV9zdHJlYW1DdXJyZW50ID09IG1fc3RyZWFtRW5kKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8gVGhpcyB3b3JrcyBieSBjb252ZXJ0aW5nIHRoZSBTVkcgYXJjIHRvICJzaW1w
bGUiIGJlemllcnMuCisvLyBQYXJ0bHkgYWRhcHRlZCBmcm9tIE5pa28ncyBjb2RlIGluIGtkZWxp
YnMva2RlY29yZS9zdmdpY29ucy4KKy8vIFNlZSBhbHNvIFNWRyBpbXBsZW1lbnRhdGlvbiBub3Rl
czogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjQ29udmVyc2lvbkVu
ZHBvaW50VG9DZW50ZXIKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OmRlY29tcG9zZUFy
Y1RvQ3ViaWMoZmxvYXQgYW5nbGUsIGZsb2F0IHJ4LCBmbG9hdCByeSwgRmxvYXRQb2ludCYgcG9p
bnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxh
ZykKK3sKKyAgICBGbG9hdFNpemUgbWlkUG9pbnREaXN0YW5jZSA9IHBvaW50MSAtIHBvaW50MjsK
KyAgICBtaWRQb2ludERpc3RhbmNlLnNjYWxlKDAuNWYpOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IHBvaW50VHJhbnNmb3JtOworICAgIHBvaW50VHJhbnNmb3JtLnJvdGF0ZSgtYW5nbGUpOworCisg
ICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZE1pZFBvaW50ID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9p
bnQoRmxvYXRQb2ludChtaWRQb2ludERpc3RhbmNlLndpZHRoKCksIG1pZFBvaW50RGlzdGFuY2Uu
aGVpZ2h0KCkpKTsKKyAgICBmbG9hdCBzcXVhcmVSeCA9IHJ4ICogcng7CisgICAgZmxvYXQgc3F1
YXJlUnkgPSByeSAqIHJ5OworICAgIGZsb2F0IHNxdWFyZVggPSB0cmFuc2Zvcm1lZE1pZFBvaW50
LngoKSAqIHRyYW5zZm9ybWVkTWlkUG9pbnQueCgpOworICAgIGZsb2F0IHNxdWFyZVkgPSB0cmFu
c2Zvcm1lZE1pZFBvaW50LnkoKSAqIHRyYW5zZm9ybWVkTWlkUG9pbnQueSgpOworCisgICAgLy8g
Q2hlY2sgaWYgdGhlIHJhZGlpIGFyZSBiaWcgZW5vdWdoIHRvIGRyYXcgdGhlIGFyYywgc2NhbGUg
cmFkaWkgaWYgbm90LgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90ZS5o
dG1sI0FyY0NvcnJlY3Rpb25PdXRPZlJhbmdlUmFkaWkKKyAgICBmbG9hdCByYWRpaVNjYWxlID0g
c3F1YXJlWCAvIHNxdWFyZVJ4ICsgc3F1YXJlWSAvIHNxdWFyZVJ5OworICAgIGlmIChyYWRpaVNj
YWxlID4gMSkgeworICAgICAgICByeCAqPSBzcXJ0ZihyYWRpaVNjYWxlKTsKKyAgICAgICAgcnkg
Kj0gc3FydGYocmFkaWlTY2FsZSk7CisgICAgfQorCisgICAgcG9pbnRUcmFuc2Zvcm0ubWFrZUlk
ZW50aXR5KCk7CisgICAgcG9pbnRUcmFuc2Zvcm0uc2NhbGUoMSAvIHJ4LCAxIC8gcnkpOworICAg
IHBvaW50VHJhbnNmb3JtLnJvdGF0ZSgtYW5nbGUpOworCisgICAgcG9pbnQxID0gcG9pbnRUcmFu
c2Zvcm0ubWFwUG9pbnQocG9pbnQxKTsKKyAgICBwb2ludDIgPSBwb2ludFRyYW5zZm9ybS5tYXBQ
b2ludChwb2ludDIpOworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvaW50MiAtIHBvaW50MTsKKwor
ICAgIGZsb2F0IGQgPSBkZWx0YS53aWR0aCgpICogZGVsdGEud2lkdGgoKSArIGRlbHRhLmhlaWdo
dCgpICogZGVsdGEuaGVpZ2h0KCk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3JTcXVhcmVkID0gc3Rk
OjptYXgoMSAvIGQgLSAwLjI1ZiwgMC5mKTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc3Fy
dGYoc2NhbGVGYWN0b3JTcXVhcmVkKTsKKyAgICBpZiAoc3dlZXBGbGFnID09IGxhcmdlQXJjRmxh
ZykKKyAgICAgICAgc2NhbGVGYWN0b3IgPSAtc2NhbGVGYWN0b3I7CisKKyAgICBkZWx0YS5zY2Fs
ZShzY2FsZUZhY3Rvcik7CisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQo
MC41ZiAqIChwb2ludDEueCgpICsgcG9pbnQyLngoKSkgLSBkZWx0YS5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmICogKHBvaW50MS55KCkgKyBw
b2ludDIueSgpKSArIGRlbHRhLndpZHRoKCkpOworCisgICAgZmxvYXQgdGhldGExID0gYXRhbjJm
KHBvaW50MS55KCkgLSBjZW50ZXJQb2ludC55KCksIHBvaW50MS54KCkgLSBjZW50ZXJQb2ludC54
KCkpOworICAgIGZsb2F0IHRoZXRhMiA9IGF0YW4yZihwb2ludDIueSgpIC0gY2VudGVyUG9pbnQu
eSgpLCBwb2ludDIueCgpIC0gY2VudGVyUG9pbnQueCgpKTsKKworICAgIGZsb2F0IHRoZXRhQXJj
ID0gdGhldGEyIC0gdGhldGExOworICAgIGlmICh0aGV0YUFyYyA8IDAgJiYgc3dlZXBGbGFnKQor
ICAgICAgICB0aGV0YUFyYyArPSAyICogcGlGbG9hdDsKKyAgICBlbHNlIGlmICh0aGV0YUFyYyA+
IDAgJiYgIXN3ZWVwRmxhZykKKyAgICAgICAgdGhldGFBcmMgLT0gMiAqIHBpRmxvYXQ7CisKKyAg
ICBwb2ludFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBwb2ludFRyYW5zZm9ybS5yb3Rh
dGUoYW5nbGUpOworICAgIHBvaW50VHJhbnNmb3JtLnNjYWxlKHJ4LCByeSk7CisKKyAgICAvLyBT
b21lIHJlc3VsdHMgb2YgYXRhbjIgb24gc29tZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgYXJl
IG5vdCBleGFjdCBlbm91Z2guIFNvIHRoYXQgd2UgZ2V0IG1vcmUKKyAgICAvLyBjdWJpYyBjdXJ2
ZXMgdGhhbiBleHBlY3RlZCBoZXJlLiBBZGRpbmcgMC4wMDFmIHJlZHVjZXMgdGhlIGNvdW50IG9m
IHNnZW1lbnRzIHRvIHRoZSBjb3JyZWN0IGNvdW50LgorICAgIGludCBzZWdtZW50cyA9IGNlaWxm
KGZhYnNmKHRoZXRhQXJjIC8gKHBpT3ZlclR3b0Zsb2F0ICsgMC4wMDFmKSkpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2VnbWVudHM7ICsraSkgeworICAgICAgICBmbG9hdCBzdGFydFRoZXRh
ID0gdGhldGExICsgaSAqIHRoZXRhQXJjIC8gc2VnbWVudHM7CisgICAgICAgIGZsb2F0IGVuZFRo
ZXRhID0gdGhldGExICsgKGkgKyAxKSAqIHRoZXRhQXJjIC8gc2VnbWVudHM7CisKKyAgICAgICAg
ZmxvYXQgdCA9ICg4IC8gNi5mKSAqIHRhbmYoMC4yNWYgKiAoZW5kVGhldGEgLSBzdGFydFRoZXRh
KSk7CisgICAgICAgIGlmICghaXNmaW5pdGUodCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGZsb2F0IHNpblN0YXJ0VGhldGEgPSBzaW5mKHN0YXJ0VGhldGEpOworICAgICAg
ICBmbG9hdCBjb3NTdGFydFRoZXRhID0gY29zZihzdGFydFRoZXRhKTsKKyAgICAgICAgZmxvYXQg
c2luRW5kVGhldGEgPSBzaW5mKGVuZFRoZXRhKTsKKyAgICAgICAgZmxvYXQgY29zRW5kVGhldGEg
PSBjb3NmKGVuZFRoZXRhKTsKKworICAgICAgICBwb2ludDEgPSBGbG9hdFBvaW50KGNvc1N0YXJ0
VGhldGEgLSB0ICogc2luU3RhcnRUaGV0YSwgc2luU3RhcnRUaGV0YSArIHQgKiBjb3NTdGFydFRo
ZXRhKTsKKyAgICAgICAgcG9pbnQxLm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55
KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MyA9IEZsb2F0UG9pbnQoY29zRW5kVGhldGEs
IHNpbkVuZFRoZXRhKTsKKyAgICAgICAgcG9pbnQzLm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50
ZXJQb2ludC55KCkpOworICAgICAgICBwb2ludDIgPSBwb2ludDM7CisgICAgICAgIHBvaW50Mi5t
b3ZlKHQgKiBzaW5FbmRUaGV0YSwgLXQgKiBjb3NFbmRUaGV0YSk7CisKKyAgICAgICAgbV9jb25z
dW1lci0+Y3VydmVUb0N1YmljKHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50MSksIHBvaW50
VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDMpLCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
UGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXJfaAorI2RlZmluZSBTVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhDb25z
dW1lci5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Citw
dWJsaWM6CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIoU1ZHUGF0aENvbnN1bWVyKik7CisK
KyAgICBib29sIHBhcnNlRnJvbVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGJvb2wgbm9ybWFs
aXplZCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGUsIHR5cGVu
YW1lIEJ5dGVUeXBlPgorICAgIERhdGFUeXBlIHJlYWRUeXBlKCkKKyAgICB7CisgICAgICAgIEJ5
dGVUeXBlIGRhdGE7CisgICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihCeXRlVHlwZSk7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0eXBlU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBBU1NFUlQobV9zdHJlYW1DdXJyZW50IDwgbV9lbmRDdXJyZW50KTsKKyAgICAgICAg
ICAgIGRhdGEuYnl0ZXNbaV0gPSAqbV9zdHJlYW1DdXJyZW50OworICAgICAgICAgICAgKyttX3N0
cmVhbUN1cnJlbnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTsKKyAg
ICB9CisKKyAgICBib29sIHJlYWRGbGFnKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWFkVHlw
ZTxib29sLCBCb29sQnl0ZT4oKTsKKyAgICB9CisKKyAgICBmbG9hdCByZWFkRmxvYXQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlYWRUeXBlPGZsb2F0LCBGbG9hdEJ5dGU+KCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgc2hvcnQgcmVhZFNWR1NlZ21lbnRUeXBlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWFkVHlwZTx1bnNpZ25lZCBzaG9ydCwgVW5zaWduZWRTaG9ydEJ5dGU+KCk7Cisg
ICAgfQorCisgICAgRmxvYXRQb2ludCByZWFkRmxvYXRQb2ludCgpCisgICAgeworICAgICAgICBm
bG9hdCB4ID0gcmVhZFR5cGU8ZmxvYXQsIEZsb2F0Qnl0ZT4oKTsKKyAgICAgICAgZmxvYXQgeSA9
IHJlYWRUeXBlPGZsb2F0LCBGbG9hdEJ5dGU+KCk7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50
KHgsIHkpOworICAgIH0KKworICAgIFNWR1BhdGhCeXRlU3RyZWFtOjpEYXRhSXRlcmF0b3IgbV9z
dHJlYW1DdXJyZW50OworICAgIFNWR1BhdGhCeXRlU3RyZWFtOjpEYXRhSXRlcmF0b3IgbV9zdHJl
YW1FbmQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYXJzZUNsb3NlUGF0aFNlZ21lbnQoKTsKKyAg
ICB2b2lkIHBhcnNlTW92ZVRvU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VMaW5lVG9TZWdtZW50
KCk7CisgICAgdm9pZCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCk7CisgICAgdm9pZCBw
YXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KCk7CisgICAgdm9pZCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKTsKKyAg
ICB2b2lkIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKTsKKyAgICB2b2lkIHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50
KCk7CisgICAgYm9vbCBkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0LCBmbG9hdCwgZmxvYXQsIEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFn
KTsKKworICAgIFNWR1BhdGhDb25zdW1lciogbV9jb25zdW1lcjsKKyAgICBQYXRoQ29vcmRpbmF0
ZU1vZGUgbV9tb2RlOworICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICBjb25zdCBVQ2hhciog
bV9lbmQ7CisgICAgU1ZHUGF0aFNlZ1R5cGUgbV9sYXN0Q29tbWFuZDsKKyAgICBib29sIG1fbm9y
bWFsaXplZDsKKyAgICBib29sIG1fcGF0aENsb3NlZDsKKyAgICBGbG9hdFBvaW50IG1fY29udHJv
bFBvaW50OworICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9pbnQ7CisgICAgRmxvYXRQb2ludCBt
X3N1YlBhdGhQb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXJfaApJbmRleDog
V2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHUGF0aENvbnN1bWVyLmgJKHJldmlzaW9uIDY0NjM2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0
aENvbnN1bWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lmIEVOQUJM
RShTVkcpCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDcgKzQwLDcgQEAgZW51bSBQYXRo
UGFyc2luZ01vZGUgewogICAgIFVuYWx0ZXJlZFBhcnNpbmcKIH07CiAKLWNsYXNzIFNWR1BhdGhD
b25zdW1lciB7CitjbGFzcyBTVkdQYXRoQ29uc3VtZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewog
cHVibGljOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2lu
ZyBtb2Rlcy4KICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29s
IGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQ
YXRoRGF0YUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRh
QnVpbGRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZH
UGF0aERhdGFCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJTVkdQYXRoUGFyc2VyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU1ZHUGF0aERhdGFCdWlsZGVyOjpTVkdQYXRoRGF0YUJ1aWxkZXIo
KQoreworfQorCitTdHJpbmcgU1ZHUGF0aERhdGFCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcm
IGQsIFBhdGhQYXJzaW5nTW9kZSBwYXJzaW5nTW9kZSkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIu
Y2xlYXIoKTsKKworICAgIFNWR1BhdGhQYXJzZXIgcGFyc2VyKHRoaXMpOworICAgIHBhcnNlci5w
YXJzZVBhdGhEYXRhU3RyaW5nKGQsIHBhcnNpbmdNb2RlID09IFVuYWx0ZXJlZFBhcnNpbmcpOwor
ICAgIHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKwordm9pZCBTVkdQYXRo
RGF0YUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1fc3RyaW5nQnVpbGRlci5sZW5ndGgoKSkK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOworICAgIGlmIChtb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIm0gJS42bGcgJS42bGciLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworICAgIGVs
c2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiTSAlLjZs
ZyAlLjZsZyIsIHBvaW50LngoKSwgcG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFC
dWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiBsICUuNmxnICUuNmxnIiwg
cG9pbnQueCgpLCBwb2ludC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiBMICUuNmxnICUuNmxnIiwgcG9pbnQueCgpLCBwb2lu
dC55KCkpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmxpbmVUb0hvcml6b250YWwo
ZmxvYXQgeCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiIGggJS42bGciLCB4KSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgSCAlLjZsZyIsIHgpKTsKK30KKwordm9pZCBTVkdQ
YXRoRGF0YUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKGZsb2F0IHksIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiB2ICUuNmxnIiwgeSkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgi
IFYgJS42bGciLCB5KSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvQ3Vi
aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBp
ZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgYyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAl
LjZsZyIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHBv
aW50LngoKSwgcG9pbnQueSgpKSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgQyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAl
LjZsZyIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHBv
aW50LngoKSwgcG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2
ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MiwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiIHMgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBwb2ludDIueCgpLCBwb2ludDIu
eSgpLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiIFMgJS42bGcgJS42bGcgJS42bGcgJS42bGci
LCBwb2ludDIueCgpLCBwb2ludDIueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSkpOworfQorCit2
b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3sKKyAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgcSAlLjZsZyAlLjZsZyAlLjZsZyAl
LjZsZyIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50LngoKSwgcG9pbnQueSgpKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIg
USAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50
LngoKSwgcG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRv
UXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgdCAlLjZsZyAlLjZsZyIs
IHBvaW50LngoKSwgcG9pbnQueSgpKSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgVCAlLjZsZyAlLjZsZyIsIHBvaW50LngoKSwgcG9p
bnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjphcmNUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJn
ZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAg
ICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgYSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZs
ZyAlLjZsZyIsIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCBwb2ludC54
KCksIHBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChTdHJpbmc6OmZvcm1hdCgiIEEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGci
LCByMSwgcjIsIGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgcG9pbnQueCgpLCBwb2lu
dC55KCkpKTsKK30KKwordm9pZCBTVkdQYXRoRGF0YUJ1aWxkZXI6OmNsb3NlUGF0aCgpCit7Cisg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiIFoiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhE
YXRhQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhEYXRhQnVpbGRl
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFNWR1BhdGhEYXRhQnVpbGRlcl9oCisjZGVmaW5lIFNWR1BhdGhEYXRhQnVpbGRlcl9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgorI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdQYXRoRGF0YUJ1
aWxkZXIgOiBwcml2YXRlIFNWR1BhdGhDb25zdW1lciB7CitwdWJsaWM6CisgICAgU1ZHUGF0aERh
dGFCdWlsZGVyKCk7CisgICAgU3RyaW5nIGJ1aWxkKGNvbnN0IFN0cmluZyYsIFBhdGhQYXJzaW5n
TW9kZSk7CisKK3ByaXZhdGU6CisgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1h
bGl6ZWRQYXJzaW5nIG1vZGVzLgorICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVBhdGgoKTsKKworcHJpdmF0ZToKKyAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRl
cmVkUGFyc2luZyBtb2RlLgorICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChm
bG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1Ymlj
U21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIFBh
dGhDb29yZGluYXRlTW9kZSk7CisKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisj
ZW5kaWYgLy8gU1ZHUGF0aERhdGFCdWlsZGVyX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmgJKHJldmlzaW9uIDY0
NjM2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
MyArMjgsODggQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgY2xhc3MgU1ZHUGF0aEVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHU3R5bGVkRWxl
bWVudDsKIAotICAgIGNsYXNzIFNWR1BhdGhTZWcgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdQYXRo
U2VnPiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnKCkgeyB9Ci0K
LSAgICAgICAgZW51bSBTVkdQYXRoU2VnVHlwZSB7Ci0gICAgICAgICAgICBQQVRIU0VHX1VOS05P
V04gICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAotICAgICAgICAgICAgUEFUSFNFR19DTE9T
RVBBVEggICAgICAgICAgICAgICAgICAgICAgID0gMSwKLSAgICAgICAgICAgIFBBVEhTRUdfTU9W
RVRPX0FCUyAgICAgICAgICAgICAgICAgICAgICA9IDIsCi0gICAgICAgICAgICBQQVRIU0VHX01P
VkVUT19SRUwgICAgICAgICAgICAgICAgICAgICAgPSAzLAotICAgICAgICAgICAgUEFUSFNFR19M
SU5FVE9fQUJTICAgICAgICAgICAgICAgICAgICAgID0gNCwKLSAgICAgICAgICAgIFBBVEhTRUdf
TElORVRPX1JFTCAgICAgICAgICAgICAgICAgICAgICA9IDUsCi0gICAgICAgICAgICBQQVRIU0VH
X0NVUlZFVE9fQ1VCSUNfQUJTICAgICAgICAgICAgICAgPSA2LAotICAgICAgICAgICAgUEFUSFNF
R19DVVJWRVRPX0NVQklDX1JFTCAgICAgICAgICAgICAgID0gNywKLSAgICAgICAgICAgIFBBVEhT
RUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTICAgICAgICAgICA9IDgsCi0gICAgICAgICAgICBQQVRI
U0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTCAgICAgICAgICAgPSA5LAotICAgICAgICAgICAgUEFU
SFNFR19BUkNfQUJTICAgICAgICAgICAgICAgICAgICAgICAgID0gMTAsCi0gICAgICAgICAgICBQ
QVRIU0VHX0FSQ19SRUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMSwKLSAgICAgICAgICAg
IFBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTICAgICAgICAgICA9IDEyLAotICAgICAgICAg
ICAgUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUwgICAgICAgICAgID0gMTMsCi0gICAgICAg
ICAgICBQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlMgICAgICAgICAgICAgPSAxNCwKLSAgICAg
ICAgICAgIFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTCAgICAgICAgICAgICA9IDE1LAotICAg
ICAgICAgICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlMgICAgICAgID0gMTYsCi0g
ICAgICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTCAgICAgICAgPSAxNywK
LSAgICAgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUyAgICA9IDE4
LAotICAgICAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMICAgID0g
MTkKLSAgICAgICAgfTsKLQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdU
eXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19VTktOT1dOOyB9Ci0gICAgICAgIHZpcnR1YWwg
U3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiIjsgfQotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0KLSAgICAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7
IHJldHVybiBTVkdOYW1lczo6ZEF0dHI7IH0KLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBTVkdQYXRoU2VnKCkgeyB9CitlbnVtIFNWR1BhdGhTZWdUeXBlIHsKKyAgICBQYXRoU2Vn
VW5rbm93biA9IDAsCisgICAgUGF0aFNlZ0Nsb3NlUGF0aCA9IDEsCisgICAgUGF0aFNlZ01vdmVU
b0FicyA9IDIsCisgICAgUGF0aFNlZ01vdmVUb1JlbCA9IDMsCisgICAgUGF0aFNlZ0xpbmVUb0Fi
cyA9IDQsCisgICAgUGF0aFNlZ0xpbmVUb1JlbCA9IDUsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJp
Y0FicyA9IDYsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCA9IDcsCisgICAgUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNBYnMgPSA4LAorICAgIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsID0g
OSwKKyAgICBQYXRoU2VnQXJjQWJzID0gMTAsCisgICAgUGF0aFNlZ0FyY1JlbCA9IDExLAorICAg
IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzID0gMTIsCisgICAgUGF0aFNlZ0xpbmVUb0hvcml6
b250YWxSZWwgPSAxMywKKyAgICBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgPSAxNCwKKyAgICBQ
YXRoU2VnTGluZVRvVmVydGljYWxSZWwgPSAxNSwKKyAgICBQYXRoU2VnQ3VydmVUb0N1YmljU21v
b3RoQWJzID0gMTYsCisgICAgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCA9IDE3LAorICAg
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzID0gMTgsCisgICAgUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNTbW9vdGhSZWwgPSAxOQorfTsKKworY2xhc3MgU1ZHUGF0aEVsZW1lbnQ7Citj
bGFzcyBTVkdTdHlsZWRFbGVtZW50OworCitjbGFzcyBTVkdQYXRoU2VnIDogcHVibGljIFJlZkNv
dW50ZWQ8U1ZHUGF0aFNlZz4geworcHVibGljOgorICAgIHZpcnR1YWwgflNWR1BhdGhTZWcoKSB7
IH0KKworICAgIC8vIEZvcndhcmQgZGVjbGFyZSB0aGVzZSBlbnVtcyBpbiB0aGUgdzNjIG5hbWlu
ZyBzY2hlbWUsIGZvciBJREwgZ2VuZXJhdGlvbgorICAgIGVudW0geworICAgICAgICBQQVRIU0VH
X1VOS05PV04gPSBQYXRoU2VnVW5rbm93biwKKyAgICAgICAgUEFUSFNFR19DTE9TRVBBVEggPSBQ
YXRoU2VnQ2xvc2VQYXRoLAorICAgICAgICBQQVRIU0VHX01PVkVUT19BQlMgPSBQYXRoU2VnTW92
ZVRvQWJzLAorICAgICAgICBQQVRIU0VHX01PVkVUT19SRUwgPSBQYXRoU2VnTW92ZVRvUmVsLAor
ICAgICAgICBQQVRIU0VHX0xJTkVUT19BQlMgPSBQYXRoU2VnTGluZVRvQWJzLAorICAgICAgICBQ
QVRIU0VHX0xJTkVUT19SRUwgPSBQYXRoU2VnTGluZVRvUmVsLAorICAgICAgICBQQVRIU0VHX0NV
UlZFVE9fQ1VCSUNfQUJTID0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicywKKyAgICAgICAgUEFUSFNF
R19DVVJWRVRPX0NVQklDX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwsCisgICAgICAgIFBB
VEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMs
CisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMID0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNSZWwsCisgICAgICAgIFBBVEhTRUdfQVJDX0FCUyA9IFBhdGhTZWdBcmNBYnMsCisg
ICAgICAgIFBBVEhTRUdfQVJDX1JFTCA9IFBhdGhTZWdBcmNSZWwsCisgICAgICAgIFBBVEhTRUdf
TElORVRPX0hPUklaT05UQUxfQUJTID0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnMsCisgICAg
ICAgIFBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMID0gUGF0aFNlZ0xpbmVUb0hvcml6b250
YWxSZWwsCisgICAgICAgIFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUyA9IFBhdGhTZWdMaW5l
VG9WZXJ0aWNhbEFicywKKyAgICAgICAgUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMID0gUGF0
aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01P
T1RIX0FCUyA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMsCisgICAgICAgIFBBVEhTRUdf
Q1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCwK
KyAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTID0gUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFU
SUNfU01PT1RIX1JFTCA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsCiAgICAgfTsK
IAotICAgIGNsYXNzIFNWR1BhdGhTZWdTaW5nbGVDb29yZCA6IHB1YmxpYyBTVkdQYXRoU2VnIHsg
Ci0gICAgcHVibGljOgotICAgICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmQoZmxvYXQgeCwgZmxv
YXQgeSkKLSAgICAgICAgOiBTVkdQYXRoU2VnKCkgLCBtX3goeCkgLCBtX3koeSkge30KLQotICAg
ICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgICAgIGZsb2F0IHgoKSBj
b25zdCB7IHJldHVybiBtX3g7IH0KLQotICAgICAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kg
PSB5OyB9Ci0gICAgICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSArIFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGZsb2F0IG1feDsKLSAgICAgICAgZmxvYXQgbV95OwotICAg
IH07CisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIFBBVEhTRUdfVU5LTk9XTjsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gIiI7IH0KKworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gU1ZHTmFtZXM6OmRBdHRyOyB9Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgU1ZHUGF0aFNlZygpIHsgfQorfTsKKworY2xhc3MgU1ZHUGF0
aFNlZ1NpbmdsZUNvb3JkIDogcHVibGljIFNWR1BhdGhTZWcgeyAKK3B1YmxpYzoKKyAgICBTVkdQ
YXRoU2VnU2luZ2xlQ29vcmQoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICA6IFNWR1BhdGhTZWcoKSAs
IG1feCh4KSAsIG1feSh5KSB7fQorCisgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsg
fQorICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKworICAgIHZvaWQgc2V0WShm
bG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9
CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSArIFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGciLCBtX3gsIG1feSk7
IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworfTsKIAogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCShyZXZpc2lv
biA2NDYzNikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsMTkgKzY0LDE5IEBAIHVuc2lnbmVkIFNWR1BhdGhTZWdMaXN0OjpnZXRQYXRoU2Vn
QXRMZW4KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBmbG9hdCBzZWdtZW50TGVuZ3Ro
ID0gMDsKICAgICAgICAgc3dpdGNoIChzZWdtZW50LT5wYXRoU2VnVHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJTOgorICAgICAgICBjYXNlIFBhdGhT
ZWdNb3ZlVG9BYnM6CiAgICAgICAgIHsKICAgICAgICAgICAgIFNWR1BhdGhTZWdNb3ZldG9BYnMq
IG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9BYnMqPihzZWdtZW50KTsKICAg
ICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8oRmxvYXRQb2lu
dChtb3ZlVG8tPngoKSwgbW92ZVRvLT55KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fQUJTOgorICAgICAg
ICBjYXNlIFBhdGhTZWdMaW5lVG9BYnM6CiAgICAgICAgIHsKICAgICAgICAgICAgIFNWR1BhdGhT
ZWdMaW5ldG9BYnMqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihz
ZWdtZW50KTsKICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5saW5l
VG8oRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRP
X0NVQklDX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOgogICAgICAg
ICB7CiAgICAgICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKiBjdXJ2ZVRvID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KHNlZ21lbnQpOwogICAgICAgICAg
ICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmN1YmljQmV6aWVyVG8oRmxvYXRQb2lu
dChjdXJ2ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpKSwKQEAgLTg0LDcgKzg0LDcgQEAgdW5zaWdu
ZWQgU1ZHUGF0aFNlZ0xpc3Q6OmdldFBhdGhTZWdBdExlbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGN1cnZlVG8tPngoKSwgY3VydmVUby0+eSgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ0xPU0VQQVRIOgorICAgICAgICBjYXNlIFBhdGhTZWdDbG9zZVBhdGg6CiAgICAg
ICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY2xvc2VTdWJwYXRoKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExNiw0OCArMTE2LDQ0IEBA
IFBhdGggU1ZHUGF0aFNlZ0xpc3Q6OnRvUGF0aERhdGEoKQogICAgICAgICBpZiAoZWMpCiAgICAg
ICAgICAgICByZXR1cm4gUGF0aCgpOwogICAgICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBhdGhTZWdU
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJT
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdNb3ZldG9BYnMqIG1v
dmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9BYnMqPihzZWdtZW50KTsKLSAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7
Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKGVuZFBvaW50KTsKLSAgICAgICAgICAg
ICAgICBwcmV2aW91c0VuZFBvaW50ID0gZW5kUG9pbnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElO
RVRPX0FCUzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRv
QWJzKiBsaW5lVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzKj4oc2VnbWVudCk7
Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBlbmRQb2ludChsaW5lVG8tPngoKSwgbGluZVRv
LT55KCkpOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLmFkZExpbmVUbyhlbmRQb2ludCk7Ci0g
ICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCA9IGVuZFBvaW50OwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQ
QVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMqIGN1cnZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzKj4oc2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBlbmRQb2ludChjdXJ2ZVRvLT54KCksIGN1cnZlVG8tPnkoKSk7Ci0gICAgICAgICAgICAgICAg
cGF0aERhdGEuYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KGN1cnZlVG8tPngxKCksIGN1cnZl
VG8tPnkxKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv
YXRQb2ludChjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55MigpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvaW50KTsKLSAgICAgICAgICAgICAgICBwcmV2
aW91c0VuZFBvaW50ID0gZW5kUG9pbnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJ
Q19SRUw6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1JlbCogY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwq
PihzZWdtZW50KTsKLSAgICAgICAgICAgICAgICBGbG9hdFNpemUgZW5kUG9pbnQoY3VydmVUby0+
eCgpLCBjdXJ2ZVRvLT55KCkpOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLmFkZEJlemllckN1
cnZlVG8ocHJldmlvdXNFbmRQb2ludCArIEZsb2F0U2l6ZShjdXJ2ZVRvLT54MSgpLCBjdXJ2ZVRv
LT55MSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzRW5kUG9pbnQgKyBGbG9hdFNpemUoY3VydmVUby0+eDIoKSwgY3VydmVUby0+eTIoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50
ICsgZW5kUG9pbnQpOwotICAgICAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgKz0gZW5kUG9p
bnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOgotICAgICAgICAgICAgICAgIHBhdGhE
YXRhLmNsb3NlU3VicGF0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOyAvLyBGSVhNRTogVGhpcyBv
bmx5IHdvcmtzIHdpdGggbm9ybWFsaXplZC9wcm9jZXNzZWQgcGF0aCBkYXRhLgotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhTZWdNb3ZlVG9BYnM6IHsKKyAgICAgICAg
ICAgIFNWR1BhdGhTZWdNb3ZldG9BYnMqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdN
b3ZldG9BYnMqPihzZWdtZW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQobW92
ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICAgICAgICAgIHBhdGhEYXRhLm1vdmVUbyhlbmRQ
b2ludCk7CisgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ID0gZW5kUG9pbnQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9BYnM6IHsK
KyAgICAgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9BYnMqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdMaW5ldG9BYnMqPihzZWdtZW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5k
UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICAgICAgICAgIHBhdGhEYXRhLmFk
ZExpbmVUbyhlbmRQb2ludCk7CisgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ID0gZW5kUG9p
bnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNBYnM6IHsKKyAgICAgICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMq
IGN1cnZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKj4oc2VnbWVu
dCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50KGN1cnZlVG8tPngoKSwgY3VydmVU
by0+eSgpKTsKKyAgICAgICAgICAgIHBhdGhEYXRhLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2lu
dChjdXJ2ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRQb2ludChjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55MigpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9pbnQpOworICAgICAg
ICAgICAgcHJldmlvdXNFbmRQb2ludCA9IGVuZFBvaW50OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOiB7CisgICAgICAg
ICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKiBjdXJ2ZVRvID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KHNlZ21lbnQpOworICAgICAgICAgICAgRmxvYXRTaXpl
IGVuZFBvaW50KGN1cnZlVG8tPngoKSwgY3VydmVUby0+eSgpKTsKKyAgICAgICAgICAgIHBhdGhE
YXRhLmFkZEJlemllckN1cnZlVG8ocHJldmlvdXNFbmRQb2ludCArIEZsb2F0U2l6ZShjdXJ2ZVRv
LT54MSgpLCBjdXJ2ZVRvLT55MSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNFbmRQb2ludCArIEZsb2F0U2l6ZShjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRv
LT55MigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNF
bmRQb2ludCArIGVuZFBvaW50KTsKKyAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgKz0gZW5k
UG9pbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBhdGhT
ZWdDbG9zZVBhdGg6CisgICAgICAgICAgICBwYXRoRGF0YS5jbG9zZVN1YnBhdGgoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsgLy8gRklYTUU6IFRoaXMgb25seSB3b3JrcyB3aXRoIG5vcm1hbGl6ZWQvcHJvY2Vzc2VkIHBh
dGggZGF0YS4KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
MjEzLDY4ICsyMDksNjggQEAgUGFzc1JlZlB0cjxTVkdQYXRoU2VnTGlzdD4gU1ZHUGF0aFNlZ0xp
cwogICAgICAgICBTVkdQYXRoU2VnKiB0byA9IHRvTGlzdC0+Z2V0SXRlbShuLCBlYykuZ2V0KCk7
CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoZnJv
bS0+cGF0aFNlZ1R5cGUoKSA9PSBTVkdQYXRoU2VnOjpQQVRIU0VHX1VOS05PV04gfHwgZnJvbS0+
cGF0aFNlZ1R5cGUoKSAhPSB0by0+cGF0aFNlZ1R5cGUoKSkKKyAgICAgICAgaWYgKGZyb20tPnBh
dGhTZWdUeXBlKCkgPT0gUGF0aFNlZ1Vua25vd24gfHwgZnJvbS0+cGF0aFNlZ1R5cGUoKSAhPSB0
by0+cGF0aFNlZ1R5cGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBSZWZQdHI8
U1ZHUGF0aFNlZz4gc2VnbWVudCA9IDA7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZzo6U1ZHUGF0aFNlZ1R5cGU+KGZyb20tPnBhdGhTZWdUeXBlKCkpKSB7Ci0gICAgICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBBVEg6CisgICAgICAgIHN3aXRjaCAoc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KGZyb20tPnBhdGhTZWdUeXBlKCkpKSB7CisgICAgICAg
IGNhc2UgUGF0aFNlZ0Nsb3NlUGF0aDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBTVkdQYXRoU2Vn
Q2xvc2VQYXRoOjpjcmVhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOgorICAgICAgICBjYXNlIFBh
dGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFU
SFNFRzEoU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMsIHgpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9S
RUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw6CiAgICAgICAgICAg
ICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMShTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCwg
eCk7CiAgICAgICAgICAgICBicmVhazsgICAKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRI
U0VHX0xJTkVUT19WRVJUSUNBTF9BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1ZlcnRp
Y2FsQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzEoU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsQWJzLCB5KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDoKKyAgICAgICAgY2FzZSBQYXRo
U2VnTGluZVRvVmVydGljYWxSZWw6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VH
MShTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwsIHkpOwogICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19BQlM6CisgICAg
ICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBB
VEhTRUcyKFNWR1BhdGhTZWdNb3ZldG9BYnMsIHgsIHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fUkVMOgorICAgICAgICBjYXNl
IFBhdGhTZWdNb3ZlVG9SZWw6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMihT
VkdQYXRoU2VnTW92ZXRvUmVsLCB4LCB5KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2Vn
TGluZVRvQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNl
Z0xpbmV0b0FicywgeCwgeSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0xJTkVUT19SRUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1Jl
bDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcyKFNWR1BhdGhTZWdMaW5ldG9S
ZWwsIHgsIHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1
YmljQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzYoU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0FicywgeCwgeSwgeDEsIHkxLCB4MiwgeTIpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDoKKyAg
ICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOgogICAgICAgICAgICAgc2VnbWVudCA9
IEJMRU5EUEFUSFNFRzYoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCwgeCwgeSwgeDEsIHkxLCB4
MiwgeTIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZl
VG9DdWJpY1Ntb290aEFiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc0KFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMsIHgsIHksIHgyLCB5Mik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
U01PT1RIX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOgog
ICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzQoU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aFJlbCwgeCwgeSwgeDIsIHkyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOgorICAgICAgICBj
YXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJM
RU5EUEFUSFNFRzQoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMsIHgsIHksIHgxLCB5MSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NV
UlZFVE9fUVVBRFJBVElDX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRp
Y1JlbDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc0KFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsLCB4LCB5LCB4MSwgeTEpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJT
OgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOgogICAgICAg
ICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnMsIHgsIHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0
aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMOgorICAgICAgICBjYXNl
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOgogICAgICAgICAgICAgc2VnbWVudCA9
IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwsIHgsIHkp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19B
UkNfQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdBcmNBYnM6CiAgICAgICAgICAgICBzZWdtZW50
ID0gQkxFTkRQQVRIU0VHNyhTVkdQYXRoU2VnQXJjQWJzLCB4LCB5LCByMSwgcjIsIGFuZ2xlLCBs
YXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19SRUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0FyY1Jl
bDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc3KFNWR1BhdGhTZWdBcmNSZWws
IHgsIHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfVU5LTk9XTjoKKyAg
ICAgICAgY2FzZSBQYXRoU2VnVW5rbm93bjoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdC0+YXBwZW5kSXRlbShzZWdtZW50LCBlYyk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63494</attachid>
            <date>2010-08-04 14:48:52 -0700</date>
            <delta_ts>2010-08-07 06:24:20 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>svgByteStreamBuilder-13.patch</filename>
            <type>text/plain</type>
            <size>98883</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDY3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTU5IEBACisyMDEwLTA4LTA0ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29t
ZSB1cCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHJlcHJlc2VudCBQYXRoIHNlZ21lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTE1OQor
CisgICAgICAgIEV2ZXJ5IFNWR1BhdGhFbGVtZW50IGJ1aWxkcyBhIFNWR1BhdGhTZWdMaXN0IGZp
cnN0IGFuZCBjcmVhdGVzIHRoZSBQYXRoIGFmdGVyd2FyZHMuIFRoaXMKKyAgICAgICAgaXMgbmVp
dGhlciBtZW1vcnkgZWZmaWNpZW50LCBub3IgdmVyeSBmYXN0IGZvciB0aGUgZmFjdCB0aGF0IHdl
IGRvbid0IHJlYWxseSBuZWVkIFNWR1BhdGhTZWdMaXN0IG1vc3QKKyAgICAgICAgb2YgdGhlIHRp
bWUuIEl0IGlzIGp1c3QgbmVlZGVkIGZvciBtYW5pcHVsYXRpbmcgU1ZHUGF0aEVsZW1lbnRzIHZp
YSBTVkdET00uCisgICAgICAgIFNWR1BhdGhCeXRlU3RyZWFtIGlzIGEgc2ltcGxlIGJ5dGUgc3Ry
ZWFtIGFuZCBjYW4gYmUgcGFyc2VkIHZlcnkgcXVpY2tseS4gSXQgc2F2ZXMgbWVtb3J5IGR1ZSB0
bworICAgICAgICBpdHMgY29tcGFjdCBmb3JtIGJ5IGxpbmtpbmcgdXAgc2hvcnQgaW50ZWdlciB2
YWx1ZXMgZm9yIHRoZSBzZWdlbWVudCB0eXBlcyBhbmQgZmxvYXQgdmFsdWVzIGZvcgorICAgICAg
ICB0aGUgcG9pbnRzIG9mIGEgc2VnbWVudC4gSXQgd2lsbCBtYWtlIGl0IHBvc3NpYmxlIHRvIHN5
bmNocm9uaXplIHRoZSB1bmFsdGVyZWQgYW5kIG5vcm1hbGl6ZWQKKyAgICAgICAgU1ZHUGF0aFNl
Z0xpc3QgdG9nZXRoZXIgd2l0aCB0aGUgc3ZnIHBhdGggZGF0YSBmb3IgdGhlIGQgYXR0cmlidXRl
LgorICAgICAgICBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBwYXJzZXMgYW4gZXhpc3RpbmcgU1ZH
UGF0aEJ5dGVTdHJlYW0gYW5kIGNyZWF0ZXMgYSBTdHJpbmcsIFNWR1BhdGhTZWdMaXN0IG9yCisg
ICAgICAgIFBhdGggYW5kIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciBjcmVhdGVzIGEgU1ZHUGF0
aEJ5dGVTdHJlYW0gb3V0IG9mIHN2ZyBwYXRoIGRhdGEgKGQgYXR0cmlidXRlIHN0cmluZykuCisg
ICAgICAgIFRoaXMgcGF0Y2ggZHVwbGljYXRlcyB0aGUgbm9ybWFsaXphdGlvbiBhbGdvcml0aG1z
IG9mIFNWR1BhdGhQYXJzZXIgaW4gU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIgYXQgdGhlIG1vbWVu
dC4KKyAgICAgICAgVGhlIG5vcm1hbGl6YXRpb24gY29kZSB3aWxsIGdldCByZW1vdmVkIGZyb20g
U1ZHUGF0aFBhcnNlciwgb25jZSB3ZSBjb21wbGV0ZWx5IG1vdmVkIHRvIFNWR1BhdGhCeXRlU3Ry
ZWFtCisgICAgICAgIGluIG9uZSBvZiB0aGUgbmV4dCBwYXRjaGVzLgorICAgICAgICBTVkdQYXRo
RGF0YUJ1aWxkZXIgaXMgYSBuZXcgU1ZHUGF0aENvbnN1bWVyIGp1c3QgbGlrZSBTVkdQYXRoQnVp
bGRlciBhbmQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyCisgICAgICAgIGFuZCBjcmVhdGVzIGEgU3Ry
aW5nIGZyb20gdGhlIHBhdGggc2VnbWVudHMgb2YgYSBTVkdQYXRoQnl0ZVN0cmVhbS4KKworICAg
ICAgICBTb21lIGdlbmVyYWwgY2xlYW4tdXAgb2YgU1ZHUGF0aCBjb25zdW1lcnMuIFVuaWZ5IHBh
cmFtZXRlcnMgb2YgYWxsIGZ1bmN0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyCisgICAgICAg
IG9mIFNWR1BhdGggZGF0YSB2YWx1ZXMsIHNlZSBTVkdQYXRoIHNwZWNpZmljYXRpb24uCisKKyAg
ICAgICAgSXQgaXMgbm93IHBvc3NpYmxlIHRvIGNvbmNhdGVuYXRlIFN0cmluZ3MsIHNlcGVyYXRl
ZCBieSBhIHNwYWNlIHdpdGggU3RyaW5nQnVpbGRlci4gCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBEb2Vzbid0IGluZmx1ZW5jZSByZW5kZXJpbmcuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0J1aWxkZXI6OnRvU3RyaW5nKTogSW5zZXJ0IHNwYWNlcyBiZXR3ZWVuIHZlY3RvciBpdGVt
cyBmb3IgQ29uY2F0QWRkaW5nU3BhY2VzQmV0d2VlbkluZGl2aWR1YWxTdHJpbmdzCisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmg6IEFkZGVkIENvbmNhdE1vZGUgdG8gY29u
Y2F0IFN0cmluZ3Mgd2l0aCBhIHNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6KTogQ2xlYW4tdXAg
Zm9sbG93aW5nIHRoZSBXZWJLaXQgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWls
ZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0J1aWxkZXI6OnNl
dE5vbk51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQnVpbGRlcjo6aXNOdWxsKToKKyAg
ICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICog
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6IFVzZSB0aGUgbmV3IFNWR1BhdGhCeXRlU3RyZWFtIGZv
ciBkcmF3aW5nIGdseWhzLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQYXRoRGF0YSk6CisgICAg
ICAgICogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcDogU29tZSBjbGVhbi11cC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCdWlsZGVyOjpidWlsZFBhdGhGcm9tQnl0ZVN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ1aWxkZXI6
OmN1cnZlVG9DdWJpYyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCdWlsZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnVpbGRlcjo6YXJjVG8pOgorICAgICAgICAqIHN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhCeXRlU3RyZWFtOjpkYXRhKTogR2V0IHRoZSBWZWN0b3IgZGF0YS4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpiZWdpbik6IEdpdmVzIGEgY29uc3QgaXRlcmF0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6ZW5kKTogR2l2ZXMgYSBjb25zdCBp
dGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQpOiBB
cHBlbmQgYSBieXRlIHRvIHRoZSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0
ZVN0cmVhbTo6Y2xlYXIpOiBDbGVhciB0aGUgVmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW06OmlzRW1wdHkpOiBDaGVjayBpZiBWZWN0b3IgaXMgZW1wdHkuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6U1ZHUGF0aEJ5dGVTdHJlYW0pOgorICAg
ICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwOiBBZGRlZC4gQ3JlYXRlcyBh
IFNWR1BhdGhCeXRlU3RyZWFtLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpidWlsZEZyb21QYXRoRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb0hvcml6b250YWwpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9WZXJ0aWNhbCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290
aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpj
dXJ2ZVRvUXVhZHJhdGljU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyOjpjbG9zZVBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6
OndyaXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6
OndyaXRlRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6
OndyaXRlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
Ojp3cml0ZUZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyOjp3cml0ZVNlZ21lbnRUeXBlKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW1QYXJzZXIuY3BwOiBBZGRlZC4gUGFyc2VzIHRoZSBCeXRlU3RyZWFtIGFuZCBjcmVhdGVzIGFu
IFNWR1BhdGhDb25zdW1lciBvdXQgb2YgaXQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0
ZVN0cmVhbVBhcnNlcjo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUxpbmVU
b1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5
dGVTdHJlYW1QYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VB
cmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6
OnBhcnNlRnJvbVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Q
YXJzZXI6OnJlYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFy
c2VyOjpyZWFkRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
cjo6cmVhZEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtUGFyc2Vy
OjpyZWFkU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1QYXJzZXI6OnJlYWRGbG9hdFBvaW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aENvbnN1bWVy
Lmg6IFNvbWUgY2xlYW4tdXAuCisgICAgICAgICogc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHA6
IEFkZGVkLiBTZXJpYWxpemVzIGEgU1ZHUGF0aEJ5dGVTdHJlYW0gaW50byBhIFN0cmluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6U1ZHUGF0aERhdGFCdWlsZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRhQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aERhdGFCdWlsZGVyOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERh
dGFCdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhE
YXRhQnVpbGRlcjo6bGluZVRvVmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERh
dGFCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERhdGFC
dWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aERh
dGFCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhE
YXRhQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRGF0YUJ1aWxkZXI6OmFyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhEYXRh
QnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoUGFyc2VyLmNwcDogU29tZSBjbGVhbi11cC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFBhcnNlcjo6cGFyc2VQYXRoRGF0YVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
UGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1YmljKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFBhcnNl
ci5oOiBTb21lIGNsZWFuLXVwLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnLmg6IE1vdmUgdGhl
IGVudW1lcmF0aW9uIG91dCBvZiB0aGUgY2xhc3MgdG8gdXNlIGl0IG9uIG90aGVyIHBsYWNlcyBh
cyB3ZWxsLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWc6On5TVkdQYXRoU2VnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWc6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjpwYXRoU2VnVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWc6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWc6OmFzc29j
aWF0ZWRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWc6OlNWR1Bh
dGhTZWcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkOjpTVkdQYXRo
U2VnU2luZ2xlQ29vcmQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3Jk
OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdTaW5nbGVDb29yZDo6eCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OnNldFkpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkOjp5KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdTaW5nbGVDb29yZDo6dG9TdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2Vn
TGlzdC5jcHA6IFVzZSB0aGUgbmV3IGludHJvZHVjZSBlbnVtZXJhdGlvbiBvZiBTVkdQYXRoU2Vn
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3Q6OmdldFBhdGhTZWdBdExlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdDo6dG9QYXRoRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdDo6Y3JlYXRlQW5pbWF0ZWQpOgorICAgICAgICAqIHN2
Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwOiBTb21lIGNsZWFuLXVwLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmFyY1RvKToKKyAgICAgICAgKiBz
dmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmg6IFNvbWUgY2xlYW4tdXAuCisKIDIwMTAtMDgtMDQg
IFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDY0NjM2KQorKysgV2ViQ29yZS9BbmRyb2lk
Lm1rCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsNiArODYzLDkgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJc3ZnL1NWR1BhaW50LmNwcCBcCiAJc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5jcHAgXAogCXN2Zy9TVkdQYXRoQnVpbGRlci5jcHAgXAorCXN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIFwKKwlzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3Bw
IFwKKwlzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCBcCiAJc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cCBcCiAJc3ZnL1NWR1BhdGhQYXJzZXIuY3BwIFwKIAlzdmcvU1ZHUGF0aFNlZ0FyYy5jcHAgXApJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiA2NDYzNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTQwNDksNyArNDA0OSwxNCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
QnVpbGRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmggXAorCVdlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlci5jcHAgXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIFwK
KwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgXAorCVdlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1l
ci5oIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3N2
Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
UGFyc2VyLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzgwNiw3ICszODA2LDE0IEBACiAgICAgICAgICAgICAn
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ1aWxk
ZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ1aWxkZXIuaCcsCisgICAgICAgICAg
ICAnc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAn
LAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHUGF0aENvbnN1bWVyLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoRGF0
YUJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmgnLAog
ICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9T
VkdQYXRoRWxlbWVudC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFBhcnNlci5jcHAnLApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA2NDYzNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTI4MzQsNiArMjgzNCw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkg
ewogICAgICAgICBzdmcvU1ZHUGFpbnQuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwIFwKKyAgICAgICAgc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAgXAorICAgICAgICBzdmcvU1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXIuY3BwIFwKKyAgICAgICAgc3ZnL1NWR1BhdGhEYXRhQnVpbGRlci5jcHAgXAog
ICAgICAgICBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhQYXJz
ZXIuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdBcmMuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTE2MSwxMCAr
NDkxNjEsMjYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3RyZWFtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoQ29uc3VtZXIuaCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2
Z1xTVkdQYXRoRGF0YUJ1aWxkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdQYXRoRWxlbWVudC5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA2NDYzNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI1LDYgKzE0MjUsMTMgQEAKIAkJODQyMjQxOEUx
MDdFNzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOEIxMDdF
Nzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnRJbnRlcm5hbC5oICovOyB9
OwogCQk4NDIyNDE5MzEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5
MDEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi87IH07CiAJ
CTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3
OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OworCQk4NDJBOTgy
QzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAv
KiBTVkdQYXRoQnl0ZVN0cmVhbS5oICovOyB9OworCQk4NDJBOTgyRDExRkUxMjc1MDA0NTg5MjIg
LyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuY3BwICovOyB9OworCQk4NDJBOTgyRTExRkUxMjc1MDA0NTg5MjIg
LyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyNzExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyLmggKi87IH07CisJCTg0MkE5ODJGMTFGRTEyNzUwMDQ1ODkyMiAvKiBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyODExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVT
dHJlYW1QYXJzZXIuY3BwICovOyB9OworCQk4NDJBOTgzMDExRkUxMjc1MDA0NTg5MjIgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MkE5ODI5MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlci5oICovOyB9OworCQk4NDJBOTgzMTExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERh
dGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0MkE5ODJBMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICov
OyB9OworCQk4NDJBOTgzMjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDJBOTgyQjEx
RkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggKi87IH07CiAJCTg0NUU3MkY4
MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAq
LzsgfTsKIAkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGOTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLzsgfTsKIAkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3
RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwpA
QCAtNzIyMSw2ICs3MjI4LDEzIEBACiAJCTg0MjI0MTkwMTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MjI0MTkyMTA3RTc4QTcwMDc2NkE4
NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBT
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODQyQTk4MjUxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODQyQTk4MjcxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MjgxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MjkxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MkE5ODJB
MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aERhdGFCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQyQTk4MkIxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhE
YXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoRGF0
YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ1RTcyRjcwRkQyNjFF
RTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
aWx0ZXIuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0OTQzLDYgKzE0OTU3LDEzIEBACiAJCUIyMjI3N0NBMEQw
MEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTg0MkE5ODI1MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bS5oICovLAorCQkJCTg0MkE5ODI2MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXIuY3BwICovLAorCQkJCTg0MkE5ODI3MTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuaCAqLywKKwkJCQk4NDJBOTgyODExRkUxMjc1MDA0NTg5MjIgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuY3BwICovLAorCQkJCTg0MkE5ODI5MTFGRTEyNzUwMDQ1
ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oICovLAorCQkJCTg0MkE5ODJBMTFGRTEy
NzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuY3BwICovLAorCQkJCTg0MkE5ODJCMTFG
RTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoRGF0YUJ1aWxkZXIuaCAqLywKIAkJCQlFNDZFOTc4NjBE
QUFENjFCMDA3MUU4OTQgLyogYW5pbWF0aW9uICovLAogCQkJCUIyNTU5ODg2MEQwMEQ4QjgwMEJC
ODI1QyAvKiBncmFwaGljcyAqLywKIAkJCQlCMjIyNzdDQjBEMDBCRjFGMDA3MUI3ODIgLyogQ29s
b3JEaXN0YW5jZS5jcHAgKi8sCkBAIC0xOTk4Myw2ICsyMDAwNCwxMCBAQAogCQkJCUUxQkU1MTJF
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg0MkE5ODJDMTFGRTEyNzUwMDQ1ODkyMiAvKiBTVkdQYXRoQnl0ZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODQyQTk4MkUxMUZFMTI3NTAwNDU4OTIyIC8qIFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQyQTk4MzAxMUZFMTI3NTAwNDU4
OTIyIC8qIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDJB
OTgzMjExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIyMzg2LDYgKzIyNDExLDkgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMg
LyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQw
Q0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NDJBOTgyRDExRkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0MkE5ODJGMTFGRTEyNzUwMDQ1ODkyMiAvKiBT
VkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDJBOTgzMTEx
RkUxMjc1MDA0NTg5MjIgLyogU1ZHUGF0aERhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkocmV2aXNpb24gNjQ2
MzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjgsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVu
ZChjaGFyIGMpCiAgICAgbV9zdHJpbmdzLmFwcGVuZChTdHJpbmcoJmMsIDEpKTsKIH0KIAotU3Ry
aW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKK1N0cmluZyBTdHJpbmdCdWlsZGVy
Ojp0b1N0cmluZyhDb25jYXRNb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC04MCwxNyArODEsMzUgQEAgU3RyaW5nIFN0cmlu
Z0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fc3RyaW5nc1swXTsK
IAogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRl
VW5pbml0aWFsaXplZChtX3RvdGFsTGVuZ3RoLCBidWZmZXIpOworICAgIFN0cmluZyByZXN1bHQg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV90b3RhbExlbmd0aCArIChtb2RlID09IENv
bmNhdEFkZGluZ1NwYWNlc0JldHdlZW5JbmRpdmlkdWFsU3RyaW5ncyA/IGNvdW50IC0gMTogMCks
IGJ1ZmZlcik7CiAKICAgICBVQ2hhciogcCA9IGJ1ZmZlcjsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBtX3N0
cmluZ3NbaV0uaW1wbCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0
aCgpOyAKLSAgICAgICAgbWVtY3B5KHAsIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGggKiAy
KTsKLSAgICAgICAgcCArPSBsZW5ndGg7Ci0gICAgfQogCi0gICAgQVNTRVJUKHAgPT0gbV90b3Rh
bExlbmd0aCArIGJ1ZmZlcik7CisgICAgLy8gV2UgY291bGQgaGFuZGxlIGJvdGggQ29uY2F0IG1v
ZGVzIGluIGEgc2luZ2xlIGZvciBsb29wLCBub3QgZG9pbmcgdGhhdCBmb3IgcGVyZm9ybWFuY2Ug
cmVhc29ucy4KKyAgICBpZiAobW9kZSA9PSBDb25jYXRVbmFsdGVyZWQpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0lt
cGwqIHN0cmluZyA9IG1fc3RyaW5nc1tpXS5pbXBsKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOyAKKyAgICAgICAgICAgIG1lbWNweShwLCBzdHJpbmct
PmNoYXJhY3RlcnMoKSwgbGVuZ3RoICogMik7CisgICAgICAgICAgICBwICs9IGxlbmd0aDsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQocCA9PSB0b3RhbExlbmd0aCArIGJ1ZmZlcik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gQ29uY2F0QWRkaW5nU3BhY2VzQmV0d2Vl
bkluZGl2aWR1YWxTdHJpbmdzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IG1fc3RyaW5nc1tp
XS5pbXBsKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgp
OyAKKyAgICAgICAgICAgIG1lbWNweShwLCBzdHJpbmctPmNoYXJhY3RlcnMoKSwgbGVuZ3RoICog
Mik7CisgICAgICAgICAgICBwICs9IGxlbmd0aDsKKworICAgICAgICAgICAgLy8gQWRkIHNwYWNl
IGFmdGVyIHN0cmluZyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHN0cmluZywgaWYgd2Un
cmUgbm90IHByb2Nlc3NpbmcgdGhlIGxhc3Qgc3RyaW5nLgorICAgICAgICAgICAgaWYgKGkgPCBj
b3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICAqcCA9ICcgJzsKKyAgICAgICAgICAgICAgICAr
K3A7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHAgPT0gdG90YWxM
ZW5ndGggKyBidWZmZXIgKyBjb3VudCAtIDEpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgJKHJldmlzaW9uIDY0
NjM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMjcgKzMzLDM2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFN0cmluZ0J1aWxkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaW5nQnVpbGRlcigp
IDogbV90b3RhbExlbmd0aChVSU5UX01BWCkge30KLQotICAgICAgICB2b2lkIHNldE5vbk51bGwo
KSB7IGlmIChtX3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYKSBtX3RvdGFsTGVuZ3RoID0gMDsgfQot
Ci0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2b2lkIGFwcGVu
ZChVQ2hhcik7Ci0gICAgICAgIHZvaWQgYXBwZW5kKGNoYXIpOwotICAgICAgICAKLSAgICAgICAg
dm9pZCBjbGVhcigpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgICAg
ICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbExlbmd0aCA9PSBVSU5UX01BWDsgfQotCi0g
ICAgICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmcsIDE2
PiBtX3N0cmluZ3M7Ci0gICAgfTsKK2VudW0gQ29uY2F0TW9kZSB7CisgICAgQ29uY2F0VW5hbHRl
cmVkLAorICAgIENvbmNhdEFkZGluZ1NwYWNlc0JldHdlZW5JbmRpdmlkdWFsU3RyaW5ncworfTsK
KworY2xhc3MgU3RyaW5nQnVpbGRlciB7CitwdWJsaWM6CisgICAgU3RyaW5nQnVpbGRlcigpIDog
bV90b3RhbExlbmd0aChVSU5UX01BWCkge30KKworICAgIHZvaWQgc2V0Tm9uTnVsbCgpCisgICAg
eworICAgICAgICBpZiAobV90b3RhbExlbmd0aCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIG1f
dG90YWxMZW5ndGggPSAwOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChjaGFyKTsKKyAgICAK
KyAgICB2b2lkIGNsZWFyKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisKKyAgICBT
dHJpbmcgdG9TdHJpbmcoQ29uY2F0TW9kZSBtb2RlID0gQ29uY2F0VW5hbHRlcmVkKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxMZW5n
dGggPT0gVUlOVF9NQVg7IH0KKworICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7CisgICAgVmVj
dG9yPFN0cmluZywgMTY+IG1fc3RyaW5nczsKK307CiAKIH0KIApJbmRleDogV2ViQ29yZS9zdmcv
U1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNw
cAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOSBAQAogI2luY2x1ZGUgIlNWR1BhaW50LmNwcCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhCdWlsZGVy
LmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIgorI2luY2x1ZGUg
IlNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoRGF0YUJ1aWxk
ZXIuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmNwcCIKICNpbmNsdWRlICJTVkdQYXRo
UGFyc2VyLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQXJjLmNwcCIKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR2x5
cGhFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIlNW
R0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
UGF0aEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUg
IlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMTAxLDExICsxMDQsMTQgQEAgc3RhdGljIGlubGluZSBTVkdH
bHlwaElkZW50aWZpZXI6Ok9yaWVudAogCiBzdGF0aWMgaW5saW5lIFBhdGggcGFyc2VQYXRoRGF0
YShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogeworICAgIFNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlciBieXRlU3RyZWFtQnVpbGRlcjsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFuYWx5c2Ug
dGhlIHJldHVybmVkIHZhbHVlLiAKKyAgICBib29sIHBhcnNlZENvcnJlY3RseTsKKyAgICBPd25Q
dHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ5dGVTdHJlYW0gPSBieXRlU3RyZWFtQnVpbGRlci5idWls
ZEZyb21QYXRoRGF0YSh2YWx1ZSwgcGFyc2VkQ29ycmVjdGx5KTsKKyAgICAKICAgICBQYXRoIHJl
c3VsdDsKICAgICBTVkdQYXRoQnVpbGRlciBidWlsZGVyKHJlc3VsdCk7Ci0gICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhbmFseXNlIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAgICBidWlsZGVyLmJ1aWxk
KHZhbHVlKTsKLQorICAgIGJ1aWxkZXIuYnVpbGRQYXRoRnJvbUJ5dGVTdHJlYW0oYnl0ZVN0cmVh
bS5nZXQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVy
LmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlNWR1BhdGhCdWlsZGVyLmgiCiAKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBhcnNl
ci5oIgogI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDEsMjcgKzQyLDMzIEBAIGJvb2wgU1ZHUGF0aEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmlu
ZyYKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlUGF0aERhdGFTdHJpbmcoZCwgdHJ1ZSk7CiB9CiAK
LXZvaWQgU1ZHUGF0aEJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9v
bCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQorYm9vbCBTVkdQYXRoQnVpbGRlcjo6
YnVpbGRQYXRoRnJvbUJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIGJ5dGVTdHJlYW0pCiB7
Ci0gICAgbV9jdXJyZW50ID0gbW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gcG9pbnQgOiBt
X2N1cnJlbnQgKyBwb2ludDsKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciBwYXJzZXIodGhp
cyk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJlYW0oYnl0ZVN0cmVhbSwgTm9ybWFs
aXplZFBhcnNpbmcpOworfQorCit2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3sKKyAgICBtX2N1cnJlbnQgPSBtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0YXJn
ZXRQb2ludCA6IG1fY3VycmVudCArIHRhcmdldFBvaW50OwogICAgIGlmIChjbG9zZWQpCiAgICAg
ICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBtX3BhdGgubW92ZVRvKG1fY3VycmVudCk7
CiB9CiAKLXZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVyOjpsaW5lVG8o
Y29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQog
ewotICAgIG1fY3VycmVudCA9IG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHBvaW50IDog
bV9jdXJyZW50ICsgcG9pbnQ7CisgICAgbV9jdXJyZW50ID0gbW9kZSA9PSBBYnNvbHV0ZUNvb3Jk
aW5hdGVzID8gdGFyZ2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0YXJnZXRQb2ludDsKICAgICBtX3Bh
dGguYWRkTGluZVRvKG1fY3VycmVudCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmN1cnZl
VG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9p
ZCBTVkdQYXRoQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gUmVsYXRpdmVDb29y
ZGluYXRlcykgewotICAgICAgICBtX3BhdGguYWRkQmV6aWVyQ3VydmVUbyhtX2N1cnJlbnQgKyBw
b2ludDEsIG1fY3VycmVudCArIHBvaW50MiwgbV9jdXJyZW50ICsgcG9pbnQpOwotICAgICAgICBt
X2N1cnJlbnQgKz0gcG9pbnQ7CisgICAgICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKG1fY3Vy
cmVudCArIHBvaW50MSwgbV9jdXJyZW50ICsgcG9pbnQyLCBtX2N1cnJlbnQgKyB0YXJnZXRQb2lu
dCk7CisgICAgICAgIG1fY3VycmVudCArPSB0YXJnZXRQb2ludDsKICAgICB9IGVsc2UgewotICAg
ICAgICBtX2N1cnJlbnQgPSBwb2ludDsKKyAgICAgICAgbV9jdXJyZW50ID0gdGFyZ2V0UG9pbnQ7
CiAgICAgICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKHBvaW50MSwgcG9pbnQyLCBtX2N1cnJl
bnQpOwogICAgIH0gICAgCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmgJKHJldmlzaW9uIDY0NjM2
KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgogI2luY2x1ZGUg
IlNWR1BhdGhDb25zdW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSw2ICszNiw3
IEBAIGNsYXNzIFNWR1BhdGhCdWlsZGVyIDogcHJpdmF0ZSBTVkdQYXRoQ28KIHB1YmxpYzoKICAg
ICBTVkdQYXRoQnVpbGRlcihQYXRoJik7CiAgICAgYm9vbCBidWlsZChjb25zdCBTdHJpbmcmKTsK
KyAgICBib29sIGJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKik7CiAK
IHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJz
aW5nIG1vZGVzLgpAQCAtNTAsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJv
b2wsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CiAKICAgICBQYXRoJiBtX3BhdGg7CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnQ7CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBTVkdQYXRoQnl0ZVN0cmVhbV9oCisjZGVmaW5lIFNWR1BhdGhCeXRl
U3RyZWFtX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGJ5dGUg
c3RyZWFtIGRhdGEKK3R5cGVkZWYgdW5pb24geworICAgIGJvb2wgdmFsdWU7CisgICAgdW5zaWdu
ZWQgY2hhciBieXRlc1tzaXplb2YoYm9vbCldOworfSBCb29sQnl0ZTsKKwordHlwZWRlZiB1bmlv
biB7CisgICAgZmxvYXQgdmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieXRlc1tzaXplb2YoZmxv
YXQpXTsKK30gRmxvYXRCeXRlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgICB1bnNpZ25lZCBzaG9y
dCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW3NpemVvZih1bnNpZ25lZCBzaG9ydCld
OworfSBVbnNpZ25lZFNob3J0Qnl0ZTsKKworY2xhc3MgU1ZHUGF0aEJ5dGVTdHJlYW0gOiBwdWJs
aWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR1BhdGhC
eXRlU3RyZWFtPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBT
VkdQYXRoQnl0ZVN0cmVhbSk7CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gRGF0YTsKKyAgICB0eXBlZGVmIERhdGE6OmNvbnN0X2l0ZXJhdG9yIERhdGFJdGVyYXRv
cjsKKworICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAg
ICBEYXRhSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQorICAgIERh
dGFJdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKyAgICB2b2lkIGFwcGVu
ZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChieXRlKTsgfQorICAgIHZvaWQg
Y2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4g
IW1fZGF0YS5zaXplKCk7IH0KKworcHJpdmF0ZToKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSgpIHsg
fQorICAgIERhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdQYXRoQnl0ZVN0cmVhbV9oCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCIKKwor
I2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIoKQoreworfQorCitQYXNzT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmJ1aWxkRnJvbVBhdGhEYXRhKGNvbnN0IFN0cmluZyYg
ZCwgYm9vbCYgb2spCit7CisgICAgbV9ieXRlU3RyZWFtID0gU1ZHUGF0aEJ5dGVTdHJlYW06OmNy
ZWF0ZSgpOworCisgICAgU1ZHUGF0aFBhcnNlciBwYXJzZXIodGhpcyk7CisgICAgb2sgPSBwYXJz
ZXIucGFyc2VQYXRoRGF0YVN0cmluZyhkLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYnl0ZVN0cmVh
bS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjptb3ZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBt
b2RlKQoreworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVz
ID8gIFBhdGhTZWdNb3ZlVG9SZWwgOiBQYXRoU2VnTW92ZVRvQWJzKTsKKyAgICB3cml0ZUZsb2F0
UG9pbnQodGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6
bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3sKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cyA/IFBhdGhTZWdMaW5lVG9SZWwgOiBQYXRoU2VnTGluZVRvQWJzKTsKKyAgICB3cml0ZUZsb2F0
UG9pbnQodGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6
bGluZVRvSG9yaXpvbnRhbChmbG9hdCB4LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAg
ICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdM
aW5lVG9Ib3Jpem9udGFsUmVsIDogUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnMpOworICAgIHdy
aXRlRmxvYXQoeCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9W
ZXJ0aWNhbChmbG9hdCB5LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICB3cml0ZVNl
Z21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdMaW5lVG9WZXJ0
aWNhbFJlbCA6IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFicyk7CisgICAgd3JpdGVGbG9hdCh5KTsK
K30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIHdyaXRl
U2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9D
dWJpY1JlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChw
b2ludDEpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDIpOworICAgIHdyaXRlRmxvYXRQb2lu
dCh0YXJnZXRQb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2
ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdt
ZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3VydmVUb0N1Ymlj
U21vb3RoUmVsIDogUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyk7CisgICAgd3JpdGVGbG9h
dFBvaW50KHBvaW50Mik7CisgICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKK30KKwor
dm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZl
Q29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbCA6IFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljQWJzKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQxKTsKKyAgICB3cml0ZUZs
b2F0UG9pbnQodGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
cjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCA6
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQo
dGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8o
ZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wg
c3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVN
b2RlIG1vZGUpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRp
bmF0ZXMgPyBQYXRoU2VnQXJjUmVsIDogUGF0aFNlZ0FyY0Ficyk7CisgICAgd3JpdGVGbG9hdChy
MSk7CisgICAgd3JpdGVGbG9hdChyMik7CisgICAgd3JpdGVGbG9hdChhbmdsZSk7CisgICAgd3Jp
dGVGbGFnKGxhcmdlQXJjRmxhZyk7CisgICAgd3JpdGVGbGFnKHN3ZWVwRmxhZyk7CisgICAgd3Jp
dGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXI6OmNsb3NlUGF0aCgpCit7CisgICAgd3JpdGVTZWdtZW50VHlwZShQYXRoU2VnQ2xvc2VQ
YXRoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyX2gKKyNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKKworI2lm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQ
YXRoQ29uc3VtZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciA6IHByaXZhdGUgU1ZH
UGF0aENvbnN1bWVyIHsKK3B1YmxpYzoKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIoKTsK
KworICAgIFBhc3NPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ1aWxkRnJvbVBhdGhEYXRhKGNv
bnN0IFN0cmluZyYsIGJvb2wmIG9rKTsKKworcHJpdmF0ZToKKyAgICAvLyBVc2VkIGluIFVuYWx0
ZXJlZFBhcnNpbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVhbCB2b2lkIG1v
dmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgorICAgIC8vIE9u
bHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGxpbmVU
b0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJh
dGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxv
YXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKworcHJpdmF0ZToKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlVHlwZT4KKyAgICB2b2lkIHdyaXRlVHlwZShjb25zdCBCeXRlVHlw
ZSYgdHlwZSkKKyAgICB7CisgICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihCeXRlVHlw
ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkKKyAgICAg
ICAgICAgIG1fYnl0ZVN0cmVhbS0+YXBwZW5kKHR5cGUuYnl0ZXNbaV0pOworICAgIH0KKworICAg
IHZvaWQgd3JpdGVGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBCb29sQnl0ZSBkYXRh
OworICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsK
KyAgICB9CisKKyAgICB2b2lkIHdyaXRlRmxvYXQoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAg
ICBGbG9hdEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3
cml0ZVR5cGUoZGF0YSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCisgICAgeworICAgICAgICB3cml0ZUZsb2F0KHBvaW50LngoKSk7
CisgICAgICAgIHdyaXRlRmxvYXQocG9pbnQueSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRl
U2VnbWVudFR5cGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCisgICAgeworICAgICAgICBVbnNpZ25l
ZFNob3J0Qnl0ZSBkYXRhOworICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdy
aXRlVHlwZShkYXRhKTsKKyAgICB9CisKKyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1f
Ynl0ZVN0cmVhbTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFRoZSBLYXJib24gRGV2
ZWxvcGVycworICogICAgICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxsZXR0IDxs
eXBhbm92QGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWd0aCAoQykgMjAwNywgMjAwOSBBcHBsZSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oIgorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
Kworc3RhdGljIGNvbnN0IGZsb2F0IGdPbmVPdmVyVGhyZWUgPSAxIC8gMy5mOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1NWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpTVkdQYXRoQnl0ZVN0cmVh
bVBhcnNlcihTVkdQYXRoQ29uc3VtZXIqIGNvbnN1bWVyKQorICAgIDogbV9jb25zdW1lcihjb25z
dW1lcikKK3sKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VDbG9zZVBh
dGhTZWdtZW50KCkKK3sKKyAgICAvLyBSZXNldCBtX2N1cnJlbnRQb2ludCBmb3IgdGhlIG5leHQg
cGF0aC4KKyAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpCisg
ICAgICAgIG1fY3VycmVudFBvaW50ID0gbV9zdWJQYXRoUG9pbnQ7CisgICAgbV9jbG9zZVBhdGgg
PSB0cnVlOworICAgIG1fY29uc3VtZXItPmNsb3NlUGF0aCgpOworfQorCit2b2lkIFNWR1BhdGhC
eXRlU3RyZWFtUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQoreworICAgIEZsb2F0UG9pbnQg
dG9Qb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09
IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29y
ZGluYXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRvUG9pbnQ7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdG9Qb2ludDsKKyAgICAgICAgbV9z
dWJQYXRoUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9jb25zdW1lci0+bW92ZVRv
KG1fY3VycmVudFBvaW50LCBtX2Nsb3NlUGF0aCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fY29uc3VtZXItPm1vdmVUbyh0b1BvaW50LCBtX2Nsb3NlUGF0aCwg
bV9tb2RlKTsKKyAgICBtX2Nsb3NlUGF0aCA9IGZhbHNlOworfQorCit2b2lkIFNWR1BhdGhCeXRl
U3RyZWFtUGFyc2VyOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQoreworICAgIEZsb2F0UG9pbnQgdG9Q
b2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5v
cm1hbGl6ZWRQYXJzaW5nKSB7CisgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRvUG9pbnQ7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdG9Qb2ludDsKKyAgICAgICAgbV9jb25z
dW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKHRvUG9pbnQsIG1fbW9kZSk7Cit9CisK
K3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQoKQoreworICAgIGZsb2F0IHRvWCA9IHJlYWRGbG9hdCgpOworCisgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CisgICAgICAgIGlmIChtX21vZGUgPT0g
UmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUodG9Y
LCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WCh0b1gp
OworICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9u
dGFsKHRvWCwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQoreworICAgIGZsb2F0IHRvWSA9IHJlYWRGbG9hdCgp
OworCisgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7Cisg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAgICAgICAgIG1f
Y3VycmVudFBvaW50Lm1vdmUoMCwgdG9ZKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQuc2V0WSh0b1kpOworICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8obV9jdXJy
ZW50UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBtX2Nv
bnN1bWVyLT5saW5lVG9WZXJ0aWNhbCh0b1ksIG1fbW9kZSk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5
dGVTdHJlYW1QYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCit7CisgICAgRmxvYXRQ
b2ludCBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIEZsb2F0UG9pbnQgcG9pbnQyID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50ID0gcmVhZEZsb2F0
UG9pbnQoKTsKKyAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CisgICAgICAg
ICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBwb2ludDIgKz0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsK
KyAgICAgICAgfQorICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2lu
dDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKworICAgICAgICBtX2NvbnRy
b2xQb2ludCA9IHBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9p
bnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbVBh
cnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKK3sKKyAgICBpZiAobV9sYXN0
Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicworICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFuZCAh
PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsKQorICAgICAgICBtX2NvbnRyb2xQb2ludCA9
IG1fY3VycmVudFBvaW50OworCisgICAgRmxvYXRQb2ludCBwb2ludDIgPSByZWFkRmxvYXRQb2lu
dCgpOworICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAg
IGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgeworICAgICAgICBG
bG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBwb2ludDEuc2NhbGUo
MiwgMik7CisgICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRy
b2xQb2ludC55KCkpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMp
IHsKKyAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHRh
cmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICB9CisKKyAgICAgICAgbV9jb25z
dW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVD
b29yZGluYXRlcyk7CisKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7CisgICAgICAg
IG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
c3VtZXItPmN1cnZlVG9DdWJpY1Ntb290aChwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOwor
fQorCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
ZWdtZW50KCkKK3sKKyAgICBGbG9hdFBvaW50IHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgaWYgKG1f
cGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CisgICAgICAgIG1fY29udHJv
bFBvaW50ID0gcG9pbnQxOworICAgICAgICBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAg
ICAgcG9pbnQxLm1vdmUoMiAqIG1fY29udHJvbFBvaW50LngoKSwgMiAqIG1fY29udHJvbFBvaW50
LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50LngoKSArIDIgKiBt
X2NvbnRyb2xQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55
KCkpOworICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKKyAgICAg
ICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQ
b2ludC55KCkpOworICAgICAgICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50Lngo
KSwgMyAqIG1fY3VycmVudFBvaW50LnkoKSk7CisgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgfQorICAgICAgICBwb2ludDEuc2NhbGUoZ09uZU92ZXJU
aHJlZSwgZ09uZU92ZXJUaHJlZSk7CisgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVl
LCBnT25lT3ZlclRocmVlKTsKKworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9p
bnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKworICAgICAg
ICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICBtX2NvbnRy
b2xQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJn
ZXRQb2ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRp
Yyhwb2ludDEsIHRhcmdldFBvaW50LCBtX21vZGUpOworfQorCit2b2lkIFNWR1BhdGhCeXRlU3Ry
ZWFtUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKK3sKKyAgICBG
bG9hdFBvaW50IHBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKworICAgIGlmIChtX2xhc3RDb21t
YW5kICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzCisgICAgICAgICYmIG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwKKyAgICAgICAgJiYgbV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicworICAgICAgICAmJiBtX2xhc3RD
b21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsKQorICAgICAgICBtX2Nv
bnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50OworCisgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2Rl
ID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CisgICAgICAgIEZsb2F0UG9pbnQgY3ViaWNQb2ludCA9
IG1fY3VycmVudFBvaW50OworICAgICAgICBjdWJpY1BvaW50LnNjYWxlKDIsIDIpOworICAgICAg
ICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50Lnko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBj
dWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIocG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgp
LCBwb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBS
ZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9p
bnQ7CisgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAg
fQorICAgICAgICBwb2ludDEuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7Cisg
ICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVlLCBnT25lT3ZlclRocmVlKTsKKworICAg
ICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IGN1Ymlj
UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgfSBlbHNl
CisgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgocG9pbnQsIG1fbW9k
ZSk7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50
KCkKK3sKKyAgICBmbG9hdCByeCA9IHJlYWRGbG9hdCgpOworICAgIGZsb2F0IHJ5ID0gcmVhZEZs
b2F0KCk7CisgICAgZmxvYXQgYW5nbGUgPSByZWFkRmxvYXQoKTsKKyAgICBib29sIGxhcmdlQXJj
ID0gcmVhZEZsYWcoKTsKKyAgICBib29sIHN3ZWVwID0gcmVhZEZsYWcoKTsKKyAgICBGbG9hdFBv
aW50IHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKworICAgIC8vIElmIHJ4ID0gMCBv
ciByeSA9IDAgdGhlbiB0aGlzIGFyYyBpcyB0cmVhdGVkIGFzIGEgc3RyYWlnaHQgbGluZSBzZWdt
ZW50IChhICJsaW5ldG8iKSBqb2luaW5nIHRoZSBlbmRwb2ludHMuCisgICAgLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjT3V0T2ZSYW5nZVBhcmFtZXRlcnMKKyAg
ICByeCA9IGZhYnNmKHJ4KTsKKyAgICByeSA9IGZhYnNmKHJ5KTsKKyAgICBpZiAoIXJ4IHx8ICFy
eSkgeworICAgICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKKyAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAg
ICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8odGFy
Z2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgeworICAgICAgICBGbG9h
dFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQ
b2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0
dXJuIGRlY29tcG9zZUFyY1RvQ3ViaWMoYW5nbGUsIHJ4LCByeSwgcG9pbnQxLCB0YXJnZXRQb2lu
dCwgbGFyZ2VBcmMsIHN3ZWVwKTsKKyAgICB9CisgICAgbV9jb25zdW1lci0+YXJjVG8ocngsIHJ5
LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6cGFyc2VGcm9tU3Ry
ZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBzdHJlYW0sIFBhdGhQYXJzaW5nTW9kZSBwYXRoUGFyc2lu
Z01vZGUpCit7CisgICAgQVNTRVJUKHN0cmVhbSk7CisgICAgaWYgKHN0cmVhbS0+aXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0cmVhbUN1cnJlbnQgPSBzdHJlYW0t
PmJlZ2luKCk7CisgICAgbV9zdHJlYW1FbmQgPSBzdHJlYW0tPmVuZCgpOworCisgICAgbV9wYXRo
UGFyc2luZ01vZGUgPSBwYXRoUGFyc2luZ01vZGU7CisKKyAgICBtX2NvbnRyb2xQb2ludCA9IEZs
b2F0UG9pbnQoKTsKKyAgICBtX2N1cnJlbnRQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX3N1
YlBhdGhQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX2Nsb3NlUGF0aCA9IHRydWU7CisKKyAg
ICBtX2xhc3RDb21tYW5kID0gUGF0aFNlZ1Vua25vd247CisgICAgd2hpbGUgKG1fc3RyZWFtQ3Vy
cmVudCA8IG1fc3RyZWFtRW5kKSB7CisgICAgICAgIFNWR1BhdGhTZWdUeXBlIGNvbW1hbmQgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworICAgICAg
ICBtX21vZGUgPSBBYnNvbHV0ZUNvb3JkaW5hdGVzOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmQp
IHsKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgorICAgICAgICAgICAgbV9tb2RlID0g
UmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvQWJzOgorICAg
ICAgICAgICAgcGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQYXRoU2VnTGluZVRvUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVD
b29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvQWJzOgorICAgICAgICAgICAg
cGFyc2VMaW5lVG9TZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
YXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZl
Q29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnM6Cisg
ICAgICAgICAgICBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw6CisgICAgICAgICAg
ICBtX21vZGUgPSBSZWxhdGl2ZUNvb3JkaW5hdGVzOworICAgICAgICBjYXNlIFBhdGhTZWdMaW5l
VG9WZXJ0aWNhbEFiczoKKyAgICAgICAgICAgIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xvc2VQYXRoOgorICAg
ICAgICAgICAgcGFyc2VDbG9zZVBhdGhTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOgorICAgICAgICAgICAgbV9tb2RlID0g
UmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljQWJz
OgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOgorICAgICAg
ICAgICAgbV9tb2RlID0gUmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAgICAgY2FzZSBQYXRoU2Vn
Q3VydmVUb0N1YmljU21vb3RoQWJzOgorICAgICAgICAgICAgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9v
dGhTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1JlbDoKKyAgICAgICAgICAgIG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0
ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM6CisgICAgICAgICAg
ICBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDoKKyAgICAgICAgICAg
IG1fbW9kZSA9IFJlbGF0aXZlQ29vcmRpbmF0ZXM7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNTbW9vdGhBYnM6CisgICAgICAgICAgICBwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2Vn
QXJjUmVsOgorICAgICAgICAgICAgbV9tb2RlID0gUmVsYXRpdmVDb29yZGluYXRlczsKKyAgICAg
ICAgY2FzZSBQYXRoU2VnQXJjQWJzOgorICAgICAgICAgICAgaWYgKCFwYXJzZUFyY1RvU2VnbWVu
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG1fbGFzdENvbW1hbmQgPSBjb21tYW5kOworCisgICAgICAgIGlmIChtX2xhc3RDb21t
YW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKKyAgICAgICAgICAgICYmIG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbAorICAgICAgICAgICAgJiYgbV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzCisgICAgICAgICAgICAmJiBtX2xhc3RD
b21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwKKyAgICAgICAgICAgICYmIG1f
bGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMKKyAgICAgICAgICAgICYm
IG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwKKyAgICAgICAgICAg
ICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMKKyAg
ICAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9v
dGhSZWwpCisgICAgICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50OworICAg
IH0KKyAgICBBU1NFUlQobV9zdHJlYW1DdXJyZW50ID09IG1fc3RyZWFtRW5kKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBUaGlzIHdvcmtzIGJ5IGNvbnZlcnRpbmcgdGhlIFNWRyBhcmMg
dG8gInNpbXBsZSIgYmV6aWVycy4KKy8vIFBhcnRseSBhZGFwdGVkIGZyb20gTmlrbydzIGNvZGUg
aW4ga2RlbGlicy9rZGVjb3JlL3N2Z2ljb25zLgorLy8gU2VlIGFsc28gU1ZHIGltcGxlbWVudGF0
aW9uIG5vdGVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNBcmNDb252
ZXJzaW9uRW5kcG9pbnRUb0NlbnRlcgorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcjo6ZGVj
b21wb3NlQXJjVG9DdWJpYyhmbG9hdCBhbmdsZSwgZmxvYXQgcngsIGZsb2F0IHJ5LCBGbG9hdFBv
aW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wg
c3dlZXBGbGFnKQoreworICAgIEZsb2F0U2l6ZSBtaWRQb2ludERpc3RhbmNlID0gcG9pbnQxIC0g
cG9pbnQyOworICAgIG1pZFBvaW50RGlzdGFuY2Uuc2NhbGUoMC41Zik7CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gcG9pbnRUcmFuc2Zvcm07CisgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1hbmds
ZSk7CisKKyAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVkTWlkUG9pbnQgPSBwb2ludFRyYW5zZm9y
bS5tYXBQb2ludChGbG9hdFBvaW50KG1pZFBvaW50RGlzdGFuY2Uud2lkdGgoKSwgbWlkUG9pbnRE
aXN0YW5jZS5oZWlnaHQoKSkpOworICAgIGZsb2F0IHNxdWFyZVJ4ID0gcnggKiByeDsKKyAgICBm
bG9hdCBzcXVhcmVSeSA9IHJ5ICogcnk7CisgICAgZmxvYXQgc3F1YXJlWCA9IHRyYW5zZm9ybWVk
TWlkUG9pbnQueCgpICogdHJhbnNmb3JtZWRNaWRQb2ludC54KCk7CisgICAgZmxvYXQgc3F1YXJl
WSA9IHRyYW5zZm9ybWVkTWlkUG9pbnQueSgpICogdHJhbnNmb3JtZWRNaWRQb2ludC55KCk7CisK
KyAgICAvLyBDaGVjayBpZiB0aGUgcmFkaWkgYXJlIGJpZyBlbm91Z2ggdG8gZHJhdyB0aGUgYXJj
LCBzY2FsZSByYWRpaSBpZiBub3QuCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2lt
cGxub3RlLmh0bWwjQXJjQ29ycmVjdGlvbk91dE9mUmFuZ2VSYWRpaQorICAgIGZsb2F0IHJhZGlp
U2NhbGUgPSBzcXVhcmVYIC8gc3F1YXJlUnggKyBzcXVhcmVZIC8gc3F1YXJlUnk7CisgICAgaWYg
KHJhZGlpU2NhbGUgPiAxKSB7CisgICAgICAgIHJ4ICo9IHNxcnRmKHJhZGlpU2NhbGUpOworICAg
ICAgICByeSAqPSBzcXJ0ZihyYWRpaVNjYWxlKTsKKyAgICB9CisKKyAgICBwb2ludFRyYW5zZm9y
bS5tYWtlSWRlbnRpdHkoKTsKKyAgICBwb2ludFRyYW5zZm9ybS5zY2FsZSgxIC8gcngsIDEgLyBy
eSk7CisgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1hbmdsZSk7CisKKyAgICBwb2ludDEgPSBw
b2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpOworICAgIHBvaW50MiA9IHBvaW50VHJhbnNm
b3JtLm1hcFBvaW50KHBvaW50Mik7CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9pbnQyIC0gcG9p
bnQxOworCisgICAgZmxvYXQgZCA9IGRlbHRhLndpZHRoKCkgKiBkZWx0YS53aWR0aCgpICsgZGVs
dGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWlnaHQoKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvclNxdWFy
ZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAuMjVmLCAwLmYpOworCisgICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBzcXJ0ZihzY2FsZUZhY3RvclNxdWFyZWQpOworICAgIGlmIChzd2VlcEZsYWcgPT0gbGFy
Z2VBcmNGbGFnKQorICAgICAgICBzY2FsZUZhY3RvciA9IC1zY2FsZUZhY3RvcjsKKworICAgIGRl
bHRhLnNjYWxlKHNjYWxlRmFjdG9yKTsKKyAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxv
YXRQb2ludCgwLjVmICogKHBvaW50MS54KCkgKyBwb2ludDIueCgpKSAtIGRlbHRhLmhlaWdodCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYgKiAocG9pbnQx
LnkoKSArIHBvaW50Mi55KCkpICsgZGVsdGEud2lkdGgoKSk7CisKKyAgICBmbG9hdCB0aGV0YTEg
PSBhdGFuMmYocG9pbnQxLnkoKSAtIGNlbnRlclBvaW50LnkoKSwgcG9pbnQxLngoKSAtIGNlbnRl
clBvaW50LngoKSk7CisgICAgZmxvYXQgdGhldGEyID0gYXRhbjJmKHBvaW50Mi55KCkgLSBjZW50
ZXJQb2ludC55KCksIHBvaW50Mi54KCkgLSBjZW50ZXJQb2ludC54KCkpOworCisgICAgZmxvYXQg
dGhldGFBcmMgPSB0aGV0YTIgLSB0aGV0YTE7CisgICAgaWYgKHRoZXRhQXJjIDwgMCAmJiBzd2Vl
cEZsYWcpCisgICAgICAgIHRoZXRhQXJjICs9IDIgKiBwaUZsb2F0OworICAgIGVsc2UgaWYgKHRo
ZXRhQXJjID4gMCAmJiAhc3dlZXBGbGFnKQorICAgICAgICB0aGV0YUFyYyAtPSAyICogcGlGbG9h
dDsKKworICAgIHBvaW50VHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIHBvaW50VHJhbnNm
b3JtLnJvdGF0ZShhbmdsZSk7CisgICAgcG9pbnRUcmFuc2Zvcm0uc2NhbGUocngsIHJ5KTsKKwor
ICAgIC8vIFNvbWUgcmVzdWx0cyBvZiBhdGFuMiBvbiBzb21lIHBsYXRmb3JtIGltcGxlbWVudGF0
aW9ucyBhcmUgbm90IGV4YWN0IGVub3VnaC4gU28gdGhhdCB3ZSBnZXQgbW9yZQorICAgIC8vIGN1
YmljIGN1cnZlcyB0aGFuIGV4cGVjdGVkIGhlcmUuIEFkZGluZyAwLjAwMWYgcmVkdWNlcyB0aGUg
Y291bnQgb2Ygc2dlbWVudHMgdG8gdGhlIGNvcnJlY3QgY291bnQuCisgICAgaW50IHNlZ21lbnRz
ID0gY2VpbGYoZmFic2YodGhldGFBcmMgLyAocGlPdmVyVHdvRmxvYXQgKyAwLjAwMWYpKSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWdtZW50czsgKytpKSB7CisgICAgICAgIGZsb2F0IHN0
YXJ0VGhldGEgPSB0aGV0YTEgKyBpICogdGhldGFBcmMgLyBzZWdtZW50czsKKyAgICAgICAgZmxv
YXQgZW5kVGhldGEgPSB0aGV0YTEgKyAoaSArIDEpICogdGhldGFBcmMgLyBzZWdtZW50czsKKwor
ICAgICAgICBmbG9hdCB0ID0gKDggLyA2LmYpICogdGFuZigwLjI1ZiAqIChlbmRUaGV0YSAtIHN0
YXJ0VGhldGEpKTsKKyAgICAgICAgaWYgKCFpc2Zpbml0ZSh0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZmxvYXQgc2luU3RhcnRUaGV0YSA9IHNpbmYoc3RhcnRUaGV0YSk7
CisgICAgICAgIGZsb2F0IGNvc1N0YXJ0VGhldGEgPSBjb3NmKHN0YXJ0VGhldGEpOworICAgICAg
ICBmbG9hdCBzaW5FbmRUaGV0YSA9IHNpbmYoZW5kVGhldGEpOworICAgICAgICBmbG9hdCBjb3NF
bmRUaGV0YSA9IGNvc2YoZW5kVGhldGEpOworCisgICAgICAgIHBvaW50MSA9IEZsb2F0UG9pbnQo
Y29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5TdGFydFRoZXRhICsgdCAqIGNv
c1N0YXJ0VGhldGEpOworICAgICAgICBwb2ludDEubW92ZShjZW50ZXJQb2ludC54KCksIGNlbnRl
clBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50
KGNvc0VuZFRoZXRhLCBzaW5FbmRUaGV0YSk7CisgICAgICAgIHRhcmdldFBvaW50Lm1vdmUoY2Vu
dGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpOworICAgICAgICBwb2ludDIgPSB0YXJnZXRQ
b2ludDsKKyAgICAgICAgcG9pbnQyLm1vdmUodCAqIHNpbkVuZFRoZXRhLCAtdCAqIGNvc0VuZFRo
ZXRhKTsKKworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnRUcmFuc2Zvcm0u
bWFwUG9pbnQocG9pbnQxKSwgcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQyKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHRhcmdl
dFBvaW50KSwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVBhcnNlci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXJfaAorI2RlZmluZSBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlcl9oCisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5o
IgorI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbVBhcnNlciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1QYXJz
ZXIoU1ZHUGF0aENvbnN1bWVyKik7CisKKyAgICBib29sIHBhcnNlRnJvbVN0cmVhbShTVkdQYXRo
Qnl0ZVN0cmVhbSosIFBhdGhQYXJzaW5nTW9kZSk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRGF0YVR5cGUsIHR5cGVuYW1lIEJ5dGVUeXBlPgorICAgIERhdGFUeXBlIHJlYWRU
eXBlKCkKKyAgICB7CisgICAgICAgIEJ5dGVUeXBlIGRhdGE7CisgICAgICAgIHNpemVfdCB0eXBl
U2l6ZSA9IHNpemVvZihCeXRlVHlwZSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0eXBlU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9zdHJlYW1DdXJyZW50IDwg
bV9zdHJlYW1FbmQpOworICAgICAgICAgICAgZGF0YS5ieXRlc1tpXSA9ICptX3N0cmVhbUN1cnJl
bnQ7CisgICAgICAgICAgICArK21fc3RyZWFtQ3VycmVudDsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlOworICAgIH0KKworICAgIGJvb2wgcmVhZEZsYWcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlYWRUeXBlPGJvb2wsIEJvb2xCeXRlPigpOworICAgIH0KKworICAg
IGZsb2F0IHJlYWRGbG9hdCgpCisgICAgeworICAgICAgICByZXR1cm4gcmVhZFR5cGU8ZmxvYXQs
IEZsb2F0Qnl0ZT4oKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCByZWFkU1ZHU2VnbWVu
dFR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlYWRUeXBlPHVuc2lnbmVkIHNob3J0LCBV
bnNpZ25lZFNob3J0Qnl0ZT4oKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IHJlYWRGbG9hdFBv
aW50KCkKKyAgICB7CisgICAgICAgIGZsb2F0IHggPSByZWFkVHlwZTxmbG9hdCwgRmxvYXRCeXRl
PigpOworICAgICAgICBmbG9hdCB5ID0gcmVhZFR5cGU8ZmxvYXQsIEZsb2F0Qnl0ZT4oKTsKKyAg
ICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeCwgeSk7CisgICAgfQorCisgICAgU1ZHUGF0aEJ5dGVT
dHJlYW06OkRhdGFJdGVyYXRvciBtX3N0cmVhbUN1cnJlbnQ7CisgICAgU1ZHUGF0aEJ5dGVTdHJl
YW06OkRhdGFJdGVyYXRvciBtX3N0cmVhbUVuZDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBhcnNl
Q2xvc2VQYXRoU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAg
dm9pZCBwYXJzZUxpbmVUb1NlZ21lbnQoKTsKKyAgICB2b2lkIHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKTsKKyAgICB2b2lkIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCk7CisgICAg
dm9pZCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKTsKKyAgICB2b2lkIHBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCgpOworICAgIHZvaWQgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCgpOworICAgIHZvaWQgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpOworICAg
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoKTsKKyAgICBib29sIGRlY29tcG9zZUFyY1RvQ3ViaWMo
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBib29sIGxhcmdl
QXJjRmxhZywgYm9vbCBzd2VlcEZsYWcpOworCisgICAgU1ZHUGF0aENvbnN1bWVyKiBtX2NvbnN1
bWVyOworICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX21vZGU7CisgICAgUGF0aFBhcnNpbmdNb2Rl
IG1fcGF0aFBhcnNpbmdNb2RlOworICAgIFNWR1BhdGhTZWdUeXBlIG1fbGFzdENvbW1hbmQ7Cisg
ICAgYm9vbCBtX2Nsb3NlUGF0aDsKKyAgICBGbG9hdFBvaW50IG1fY29udHJvbFBvaW50OworICAg
IEZsb2F0UG9pbnQgbV9jdXJyZW50UG9pbnQ7CisgICAgRmxvYXRQb2ludCBtX3N1YlBhdGhQb2lu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
CisjZW5kaWYgLy8gU1ZHUGF0aEJ5dGVTdHJlYW1QYXJzZXJfaApJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUGF0aENvbnN1bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1
bWVyLmgJKHJldmlzaW9uIDY0NjM2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDcgKzQwLDcgQEAgZW51bSBQYXRoUGFyc2luZ01vZGUg
ewogICAgIFVuYWx0ZXJlZFBhcnNpbmcKIH07CiAKLWNsYXNzIFNWR1BhdGhDb25zdW1lciB7Citj
bGFzcyBTVkdQYXRoQ29uc3VtZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAg
IC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KICAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0
aENvb3JkaW5hdGVNb2RlKSA9IDA7CkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290
aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29s
IGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1v
ZGUpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIFNWR1BhdGhDb25zdW1lcigpIHsgfQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHUGF0aERhdGFCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcv
U1ZHUGF0aERhdGFCdWlsZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisj
aW5jbHVkZSAiU1ZHUGF0aERhdGFCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbVBhcnNlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1BhdGhEYXRhQnVpbGRl
cjo6U1ZHUGF0aERhdGFCdWlsZGVyKCkKK3sKK30KKworU3RyaW5nIFNWR1BhdGhEYXRhQnVpbGRl
cjo6YnVpbGQoU1ZHUGF0aEJ5dGVTdHJlYW0qIGJ5dGVTdHJlYW0sIFBhdGhQYXJzaW5nTW9kZSBw
YXJzaW5nTW9kZSkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuY2xlYXIoKTsKKworICAgIFNWR1Bh
dGhCeXRlU3RyZWFtUGFyc2VyIHBhcnNlcih0aGlzKTsKKyAgICBwYXJzZXIucGFyc2VGcm9tU3Ry
ZWFtKGJ5dGVTdHJlYW0sIHBhcnNpbmdNb2RlKTsKKyAgICByZXR1cm4gbV9zdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKENvbmNhdEFkZGluZ1NwYWNlc0JldHdlZW5JbmRpdmlkdWFsU3RyaW5ncyk7Cit9
CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
U3RyaW5nOjpmb3JtYXQoIk0gJS42bGcgJS42bGciLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgibSAlLjZsZyAlLjZsZyIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmICht
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoU3RyaW5nOjpmb3JtYXQoIkwgJS42bGcgJS42bGciLCB0YXJnZXRQb2ludC54KCksIHRhcmdl
dFBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgibCAlLjZsZyAlLjZsZyIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9p
bnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFs
KGZsb2F0IHgsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIkggJS42bGciLCB4KSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJoICUuNmxnIiwgeCkpOworfQorCit2b2lkIFNWR1Bh
dGhEYXRhQnVpbGRlcjo6bGluZVRvVmVydGljYWwoZmxvYXQgeSwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiViAlLjZsZyIsIHkpKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYg
JS42bGciLCB5KSk7Cit9CisKK3ZvaWQgU1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0
IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAg
ICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJDICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxn
ICUuNmxnIiwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwg
dGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoImMgJS42bGcgJS42bGcgJS42bGcg
JS42bGcgJS42bGcgJS42bGciLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBw
b2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworfQorCit2b2lk
IFNWR1BhdGhEYXRhQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlMgJS42bGcgJS42bGcgJS42
bGcgJS42bGciLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdl
dFBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgicyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIHBvaW50Mi54KCksIHBv
aW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQg
U1ZHUGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBt
b2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlEgJS42bGcgJS42bGcgJS42bGcg
JS42bGciLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIHBvaW50MS54KCksIHBvaW50
MS55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZH
UGF0aERhdGFCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0
cmluZzo6Zm9ybWF0KCJUICUuNmxnICUuNmxnIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2lu
dC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoInQgJS42bGcgJS42bGciLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50Lnko
KSkpOworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0
IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25z
dCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7Cisg
ICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiQSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZs
ZyAlLjZsZyIsIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCB0YXJnZXRQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiYSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAl
LjZsZyAlLjZsZyIsIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCB0YXJn
ZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworfQorCit2b2lkIFNWR1BhdGhEYXRhQnVp
bGRlcjo6Y2xvc2VQYXRoKCkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJaIik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdQYXRoRGF0YUJ1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1BhdGhEYXRhQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFNWR1BhdGhEYXRhQnVpbGRlcl9oCisjZGVmaW5lIFNWR1BhdGhE
YXRhQnVpbGRlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1l
ci5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTVkdQYXRoRGF0YUJ1aWxkZXIgOiBwcml2YXRlIFNWR1BhdGhDb25zdW1lciB7Citw
dWJsaWM6CisgICAgU1ZHUGF0aERhdGFCdWlsZGVyKCk7CisgICAgU3RyaW5nIGJ1aWxkKFNWR1Bh
dGhCeXRlU3RyZWFtKiwgUGF0aFBhcnNpbmdNb2RlKTsKKworcHJpdmF0ZToKKyAgICAvLyBVc2Vk
IGluIFVuYWx0ZXJlZFBhcnNpbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVh
bCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0
aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgor
ICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2
b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAg
IHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2
ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBG
bGFnLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKworICAgIFN0cmlu
Z0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdQYXRoRGF0YUJ1aWxkZXJfaApJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDY0NjM2KQorKysgV2ViQ29yZS9zdmcv
U1ZHUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUNsb3NlUGF0aFNlZ21lbgogICAgIC8vIFJlc2V0IG1fY3VycmVu
dFBvaW50IGZvciB0aGUgbmV4dCBwYXRoLgogICAgIGlmIChtX25vcm1hbGl6ZWQpCiAgICAgICAg
IG1fY3VycmVudFBvaW50ID0gbV9zdWJQYXRoUG9pbnQ7Ci0gICAgbV9wYXRoQ2xvc2VkID0gdHJ1
ZTsKKyAgICBtX2Nsb3NlUGF0aCA9IHRydWU7CiAgICAgbV9jb25zdW1lci0+Y2xvc2VQYXRoKCk7
CiB9CiAKQEAgLTY2LDEwICs2NiwxMCBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTW92ZVRv
U2VnbWVudCgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdG9Q
b2ludDsKICAgICAgICAgbV9zdWJQYXRoUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAg
bV9jb25zdW1lci0+bW92ZVRvKG1fY3VycmVudFBvaW50LCBtX3BhdGhDbG9zZWQsIEFic29sdXRl
Q29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJyZW50UG9pbnQs
IG1fY2xvc2VQYXRoLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bV9jb25zdW1lci0+bW92ZVRvKHRvUG9pbnQsIG1fcGF0aENsb3NlZCwgbV9tb2RlKTsKLSAgICBt
X3BhdGhDbG9zZWQgPSBmYWxzZTsKKyAgICAgICAgbV9jb25zdW1lci0+bW92ZVRvKHRvUG9pbnQs
IG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAgIG1fY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE0NCwxOSArMTQ0LDE5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWcKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQxKHgxLCB5MSk7CiAg
ICAgRmxvYXRQb2ludCBwb2ludDIoeDIsIHkyKTsKLSAgICBGbG9hdFBvaW50IHBvaW50Myh0b1gs
IHRvWSk7CisgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCh0b1gsIHRvWSk7CiAgICAgaWYgKG1f
bm9ybWFsaXplZCkgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMp
IHsKICAgICAgICAgICAgIHBvaW50MSArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgICAgIHBv
aW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50MyArPSBtX2N1cnJlbnRQ
b2ludDsKKyAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICB9Ci0gICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcG9p
bnQzLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1
YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAK
ICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7Ci0gICAgICAgIG1fY3VycmVudFBvaW50
ID0gcG9pbnQzOworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwogICAgIH0g
ZWxzZQotICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHBv
aW50MywgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTc5LDIyICsxNzksMjIgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Nt
bwogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50OwogCiAgICAgRmxvYXRQ
b2ludCBwb2ludDIoeDIsIHkyKTsKLSAgICBGbG9hdFBvaW50IHBvaW50Myh0b1gsIHRvWSk7Cisg
ICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCh0b1gsIHRvWSk7CiAgICAgaWYgKG1fbm9ybWFsaXpl
ZCkgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICBwb2ludDEuc2NhbGUoMiwgMik7CiAgICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2lu
dC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0
aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsK
LSAgICAgICAgICAgIHBvaW50MyArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHRhcmdl
dFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb25zdW1l
ci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBwb2ludDMsIEFic29sdXRlQ29vcmRpbmF0
ZXMpOworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRh
cmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBtX2NvbnRyb2xQb2lu
dCA9IHBvaW50MjsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDM7CisgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9DdWJpY1Ntb290aChwb2ludDIsIHBvaW50MywgbV9tb2RlKTsKKyAgICAgICAg
bV9jb25zdW1lci0+Y3VydmVUb0N1YmljU21vb3RoKHBvaW50MiwgdGFyZ2V0UG9pbnQsIG1fbW9k
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQCBib29sIFNWR1Bh
dGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlciht
X3B0ciwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9p
bnQgcG9pbnQzKHRvWCwgdG9ZKTsKKyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRvWCwgdG9Z
KTsKICAgICBpZiAobV9ub3JtYWxpemVkKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0g
bV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiB4MSwgMiAqIHkxKTsKQEAg
LTIxOCwxOSArMjE4LDE5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGkKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAg
ICAgICBwb2ludDEubW92ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAyICogbV9jdXJyZW50UG9p
bnQueSgpKTsKICAgICAgICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1cnJlbnRQb2ludC54KCks
IDMgKiBtX2N1cnJlbnRQb2ludC55KCkpOwotICAgICAgICAgICAgcG9pbnQzICs9IG1fY3VycmVu
dFBvaW50OworICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAg
ICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUsIGdPbmVPdmVyVGhyZWUp
OwogICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSwgZ09uZU92ZXJUaHJlZSk7CiAK
LSAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCBwb2ludDMs
IEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKICAgICAgICAgaWYgKG1f
bW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQogICAgICAgICAgICAgbV9jb250cm9sUG9pbnQg
Kz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gcG9pbnQzOworICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBt
X2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKEZsb2F0UG9pbnQoeDEsIHkxKSwgcG9pbnQzLCBt
X21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKEZsb2F0UG9pbnQo
eDEsIHkxKSwgdGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTI0MCw2ICsyNDAsNyBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
CiAgICAgZmxvYXQgdG9ZOwogICAgIGlmICghcGFyc2VOdW1iZXIobV9wdHIsIG1fZW5kLCB0b1gp
IHx8ICFwYXJzZU51bWJlcihtX3B0ciwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIGlmIChtX2xhc3RDb21tYW5kICE9ICdxJwogICAgICAgICAmJiBtX2xhc3RDb21t
YW5kICE9ICdRJwogICAgICAgICAmJiBtX2xhc3RDb21tYW5kICE9ICd0JwpAQCAtMjUyLDE4ICsy
NTMsMTggQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAg
ICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50Lnko
KSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBj
dWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsK
ICAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodG9YICsgMiAqIGN1YmljUG9pbnQueCgpLCB0b1kg
KyAyICogY3ViaWNQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Myh0b1gsIHRv
WSk7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQodG9YLCB0b1kpOwogICAgICAgICBp
ZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiAr
PSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50MyArPSBtX2N1cnJlbnRQb2ludDsK
KyAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAg
ICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlLCBnT25lT3ZlclRocmVlKTsKICAgICAg
ICAgcG9pbnQyLnNjYWxlKGdPbmVPdmVyVGhyZWUsIGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAg
IG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcG9pbnQzLCBBYnNvbHV0
ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAKICAgICAgICAgbV9j
b250cm9sUG9pbnQgPSBjdWJpY1BvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50
MzsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChGbG9hdFBvaW50KHRvWCwg
dG9ZKSwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4Nyw3ICsyODgsNyBAQCBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkKICAgICAgICAgfHwgIXBhcnNlTnVt
YmVyKG1fcHRyLCBtX2VuZCwgdG9ZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxv
YXRQb2ludCBwb2ludDIgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5
ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRyZWF0ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQg
KGEgImxpbmV0byIpIGpvaW5pbmcgdGhlIGVuZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNBcmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIHJ4
ID0gZmFic2YocngpOwpAQCAtMjk1LDIzICsyOTYsMjMgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpw
YXJzZUFyY1RvU2VnbWVudCgpCiAgICAgaWYgKCFyeCB8fCAhcnkpIHsKICAgICAgICAgaWYgKG1f
bm9ybWFsaXplZCkgewogICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHBvaW50MjsKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHBvaW50MjsKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwogICAgICAgICAgICAgbV9jb25zdW1lci0+
bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX2NvbnN1bWVyLT5saW5lVG8ocG9pbnQyLCBtX21vZGUpOworICAg
ICAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKHRhcmdldFBvaW50LCBtX21vZGUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9ub3JtYWxpemVkKSB7CiAgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQ
b2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBwb2ludDI7Ci0gICAgICAgIHJldHVybiBk
ZWNvbXBvc2VBcmNUb0N1YmljKGFuZ2xlLCByeCwgcnksIHBvaW50MSwgcG9pbnQyLCBsYXJnZUFy
Yywgc3dlZXApOworICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Cisg
ICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBkZWNv
bXBvc2VBcmNUb0N1YmljKGFuZ2xlLCByeCwgcnksIHBvaW50MSwgdGFyZ2V0UG9pbnQsIGxhcmdl
QXJjLCBzd2VlcCk7CiAgICAgfQotICAgIG1fY29uc3VtZXItPmFyY1RvKHBvaW50MiwgcngsIHJ5
LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCBtX21vZGUpOworICAgIG1fY29uc3VtZXItPmFyY1Rv
KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMyNCw3ICszMjUsNyBAQCBib29sIFNWR1BhdGhQYXJz
ZXI6OnBhcnNlUGF0aERhdGFTdHJpbmcoCiAgICAgbV9jb250cm9sUG9pbnQgPSBGbG9hdFBvaW50
KCk7CiAgICAgbV9jdXJyZW50UG9pbnQgPSBGbG9hdFBvaW50KCk7CiAgICAgbV9zdWJQYXRoUG9p
bnQgPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9wYXRoQ2xvc2VkID0gdHJ1ZTsKKyAgICBtX2Nsb3Nl
UGF0aCA9IHRydWU7CiAKICAgICAvLyBTa2lwIGFueSBsZWFkaW5nIHNwYWNlcy4KICAgICBpZiAo
IXNraXBPcHRpb25hbFNwYWNlcyhtX3B0ciwgbV9lbmQpKQpAQCAtNDkyLDEzICs0OTMsMTMgQEAg
Ym9vbCBTVkdQYXRoUGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1YmljKAogCiAgICAgICAgIHBvaW50
MSA9IEZsb2F0UG9pbnQoY29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5TdGFy
dFRoZXRhICsgdCAqIGNvc1N0YXJ0VGhldGEpOwogICAgICAgICBwb2ludDEubW92ZShjZW50ZXJQ
b2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQzID0g
RmxvYXRQb2ludChjb3NFbmRUaGV0YSwgc2luRW5kVGhldGEpOwotICAgICAgICBwb2ludDMubW92
ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7Ci0gICAgICAgIHBvaW50MiA9IHBv
aW50MzsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY29zRW5k
VGhldGEsIHNpbkVuZFRoZXRhKTsKKyAgICAgICAgdGFyZ2V0UG9pbnQubW92ZShjZW50ZXJQb2lu
dC54KCksIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50Owog
ICAgICAgICBwb2ludDIubW92ZSh0ICogc2luRW5kVGhldGEsIC10ICogY29zRW5kVGhldGEpOwog
CiAgICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludFRyYW5zZm9ybS5tYXBQb2lu
dChwb2ludDEpLCBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQzKSwgQWJz
b2x1dGVDb29yZGluYXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dFRyYW5zZm9ybS5tYXBQb2ludCh0YXJnZXRQb2ludCksIEFic29sdXRlQ29vcmRpbmF0ZXMpOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhQYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmgJKHJldmlzaW9u
IDY0NjM2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgVUNoYXIqIG1fZW5kOwogICAgIGNo
YXIgbV9sYXN0Q29tbWFuZDsKICAgICBib29sIG1fbm9ybWFsaXplZDsKLSAgICBib29sIG1fcGF0
aENsb3NlZDsKKyAgICBib29sIG1fY2xvc2VQYXRoOwogICAgIEZsb2F0UG9pbnQgbV9jb250cm9s
UG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsKICAgICBGbG9hdFBvaW50IG1f
c3ViUGF0aFBvaW50OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWcuaAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYzICsyOCw4OCBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFz
cyBTVkdQYXRoRWxlbWVudDsKLSAgICBjbGFzcyBTVkdTdHlsZWRFbGVtZW50OwogCi0gICAgY2xh
c3MgU1ZHUGF0aFNlZyA6IHB1YmxpYyBSZWZDb3VudGVkPFNWR1BhdGhTZWc+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWcoKSB7IH0KLQotICAgICAgICBlbnVtIFNW
R1BhdGhTZWdUeXBlIHsKLSAgICAgICAgICAgIFBBVEhTRUdfVU5LTk9XTiAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDAsCi0gICAgICAgICAgICBQQVRIU0VHX0NMT1NFUEFUSCAgICAgICAgICAg
ICAgICAgICAgICAgPSAxLAotICAgICAgICAgICAgUEFUSFNFR19NT1ZFVE9fQUJTICAgICAgICAg
ICAgICAgICAgICAgID0gMiwKLSAgICAgICAgICAgIFBBVEhTRUdfTU9WRVRPX1JFTCAgICAgICAg
ICAgICAgICAgICAgICA9IDMsCi0gICAgICAgICAgICBQQVRIU0VHX0xJTkVUT19BQlMgICAgICAg
ICAgICAgICAgICAgICAgPSA0LAotICAgICAgICAgICAgUEFUSFNFR19MSU5FVE9fUkVMICAgICAg
ICAgICAgICAgICAgICAgID0gNSwKLSAgICAgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19B
QlMgICAgICAgICAgICAgICA9IDYsCi0gICAgICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
UkVMICAgICAgICAgICAgICAgPSA3LAotICAgICAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURS
QVRJQ19BQlMgICAgICAgICAgID0gOCwKLSAgICAgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19RVUFE
UkFUSUNfUkVMICAgICAgICAgICA9IDksCi0gICAgICAgICAgICBQQVRIU0VHX0FSQ19BQlMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxMCwKLSAgICAgICAgICAgIFBBVEhTRUdfQVJDX1JFTCAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDExLAotICAgICAgICAgICAgUEFUSFNFR19MSU5FVE9f
SE9SSVpPTlRBTF9BQlMgICAgICAgICAgID0gMTIsCi0gICAgICAgICAgICBQQVRIU0VHX0xJTkVU
T19IT1JJWk9OVEFMX1JFTCAgICAgICAgICAgPSAxMywKLSAgICAgICAgICAgIFBBVEhTRUdfTElO
RVRPX1ZFUlRJQ0FMX0FCUyAgICAgICAgICAgICA9IDE0LAotICAgICAgICAgICAgUEFUSFNFR19M
SU5FVE9fVkVSVElDQUxfUkVMICAgICAgICAgICAgID0gMTUsCi0gICAgICAgICAgICBQQVRIU0VH
X0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUyAgICAgICAgPSAxNiwKLSAgICAgICAgICAgIFBBVEhT
RUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMICAgICAgICA9IDE3LAotICAgICAgICAgICAgUEFU
SFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTICAgID0gMTgsCi0gICAgICAgICAgICBQ
QVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUwgICAgPSAxOQotICAgICAgICB9Owot
Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBQQVRIU0VHX1VOS05PV047IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5
cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KLQotICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIFNWR05hbWVz
OjpkQXR0cjsgfQotICAgICAgICAKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNWR1BhdGhTZWco
KSB7IH0KK2VudW0gU1ZHUGF0aFNlZ1R5cGUgeworICAgIFBhdGhTZWdVbmtub3duID0gMCwKKyAg
ICBQYXRoU2VnQ2xvc2VQYXRoID0gMSwKKyAgICBQYXRoU2VnTW92ZVRvQWJzID0gMiwKKyAgICBQ
YXRoU2VnTW92ZVRvUmVsID0gMywKKyAgICBQYXRoU2VnTGluZVRvQWJzID0gNCwKKyAgICBQYXRo
U2VnTGluZVRvUmVsID0gNSwKKyAgICBQYXRoU2VnQ3VydmVUb0N1YmljQWJzID0gNiwKKyAgICBQ
YXRoU2VnQ3VydmVUb0N1YmljUmVsID0gNywKKyAgICBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0Fi
cyA9IDgsCisgICAgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwgPSA5LAorICAgIFBhdGhTZWdB
cmNBYnMgPSAxMCwKKyAgICBQYXRoU2VnQXJjUmVsID0gMTEsCisgICAgUGF0aFNlZ0xpbmVUb0hv
cml6b250YWxBYnMgPSAxMiwKKyAgICBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCA9IDEzLAor
ICAgIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFicyA9IDE0LAorICAgIFBhdGhTZWdMaW5lVG9WZXJ0
aWNhbFJlbCA9IDE1LAorICAgIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMgPSAxNiwKKyAg
ICBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsID0gMTcsCisgICAgUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNTbW9vdGhBYnMgPSAxOCwKKyAgICBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFJlbCA9IDE5Cit9OworCitjbGFzcyBTVkdQYXRoRWxlbWVudDsKK2NsYXNzIFNWR1N0eWxlZEVs
ZW1lbnQ7CisKK2NsYXNzIFNWR1BhdGhTZWcgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdQYXRoU2Vn
PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZHUGF0aFNlZygpIHsgfQorCisgICAgLy8gRm9y
d2FyZCBkZWNsYXJlIHRoZXNlIGVudW1zIGluIHRoZSB3M2MgbmFtaW5nIHNjaGVtZSwgZm9yIElE
TCBnZW5lcmF0aW9uCisgICAgZW51bSB7CisgICAgICAgIFBBVEhTRUdfVU5LTk9XTiA9IFBhdGhT
ZWdVbmtub3duLAorICAgICAgICBQQVRIU0VHX0NMT1NFUEFUSCA9IFBhdGhTZWdDbG9zZVBhdGgs
CisgICAgICAgIFBBVEhTRUdfTU9WRVRPX0FCUyA9IFBhdGhTZWdNb3ZlVG9BYnMsCisgICAgICAg
IFBBVEhTRUdfTU9WRVRPX1JFTCA9IFBhdGhTZWdNb3ZlVG9SZWwsCisgICAgICAgIFBBVEhTRUdf
TElORVRPX0FCUyA9IFBhdGhTZWdMaW5lVG9BYnMsCisgICAgICAgIFBBVEhTRUdfTElORVRPX1JF
TCA9IFBhdGhTZWdMaW5lVG9SZWwsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlMg
PSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzLAorICAgICAgICBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
UkVMID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCwKKyAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FV
QURSQVRJQ19BQlMgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicywKKyAgICAgICAgUEFUSFNF
R19DVVJWRVRPX1FVQURSQVRJQ19SRUwgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbCwKKyAg
ICAgICAgUEFUSFNFR19BUkNfQUJTID0gUGF0aFNlZ0FyY0FicywKKyAgICAgICAgUEFUSFNFR19B
UkNfUkVMID0gUGF0aFNlZ0FyY1JlbCwKKyAgICAgICAgUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRB
TF9BQlMgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicywKKyAgICAgICAgUEFUSFNFR19MSU5F
VE9fSE9SSVpPTlRBTF9SRUwgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCwKKyAgICAgICAg
UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTID0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzLAor
ICAgICAgICBQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUwgPSBQYXRoU2VnTGluZVRvVmVydGlj
YWxSZWwsCisgICAgICAgIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTID0gUGF0aFNl
Z0N1cnZlVG9DdWJpY1Ntb290aEFicywKKyAgICAgICAgUEFUSFNFR19DVVJWRVRPX0NVQklDX1NN
T09USF9SRUwgPSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsLAorICAgICAgICBQQVRIU0VH
X0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlMgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Nt
b290aEFicywKKyAgICAgICAgUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMID0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwKICAgICB9OwogCi0gICAgY2xhc3MgU1ZH
UGF0aFNlZ1NpbmdsZUNvb3JkIDogcHVibGljIFNWR1BhdGhTZWcgeyAKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZChmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6
IFNWR1BhdGhTZWcoKSAsIG1feCh4KSAsIG1feSh5KSB7fQotCi0gICAgICAgIHZvaWQgc2V0WChm
bG9hdCB4KSB7IG1feCA9IHg7IH0KLSAgICAgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQotCi0gICAgICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KLSAgICAgICAg
ZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5n
Ojpmb3JtYXQoIiAlLjZsZyAlLjZsZyIsIG1feCwgbV95KTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgZmxvYXQgbV94OwotICAgICAgICBmbG9hdCBtX3k7Ci0gICAgfTsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19VTktO
T1dOOyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsg
cmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiIjsgfQorCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0ZU5h
bWUoKSBjb25zdCB7IHJldHVybiBTVkdOYW1lczo6ZEF0dHI7IH0KKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBTVkdQYXRoU2VnKCkgeyB9Cit9OworCitjbGFzcyBTVkdQYXRoU2VnU2luZ2xlQ29vcmQg
OiBwdWJsaWMgU1ZHUGF0aFNlZyB7IAorcHVibGljOgorICAgIFNWR1BhdGhTZWdTaW5nbGVDb29y
ZChmbG9hdCB4LCBmbG9hdCB5KQorICAgIDogU1ZHUGF0aFNlZygpICwgbV94KHgpICwgbV95KHkp
IHt9CisKKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgZmxvYXQgeCgp
IGNvbnN0IHsgcmV0dXJuIG1feDsgfQorCisgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0g
eTsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworICAgIHZpcnR1YWwg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5cGVBc0xldHRlcigpICsg
U3RyaW5nOjpmb3JtYXQoIiAlLjZsZyAlLjZsZyIsIG1feCwgbV95KTsgfQorCitwcml2YXRlOgor
ICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7Cit9OwogCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5jcHAJKHJldmlzaW9uIDY0NjM2KQorKysgV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxOSArNjQs
MTkgQEAgdW5zaWduZWQgU1ZHUGF0aFNlZ0xpc3Q6OmdldFBhdGhTZWdBdExlbgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIGZsb2F0IHNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICBz
d2l0Y2ggKHNlZ21lbnQtPnBhdGhTZWdUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2Vn
OjpQQVRIU0VHX01PVkVUT19BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKICAg
ICAgICAgewogICAgICAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b0FicyogbW92ZVRvID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KHNlZ21lbnQpOwogICAgICAgICAgICAgc2VnbWVu
dExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLm1vdmVUbyhGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBt
b3ZlVG8tPnkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xp
bmVUb0FiczoKICAgICAgICAgewogICAgICAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0FicyogbGlu
ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficyo+KHNlZ21lbnQpOwogICAgICAg
ICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmxpbmVUbyhGbG9hdFBvaW50KGxp
bmVUby0+eCgpLCBsaW5lVG8tPnkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOgorICAg
ICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM6CiAgICAgICAgIHsKICAgICAgICAgICAg
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMqIGN1cnZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzKj4oc2VnbWVudCk7CiAgICAgICAgICAgICBzZWdtZW50TGVuZ3Ro
ID0gdHJhdmVyc2FsU3RhdGUuY3ViaWNCZXppZXJUbyhGbG9hdFBvaW50KGN1cnZlVG8tPngxKCks
IGN1cnZlVG8tPnkxKCkpLApAQCAtODQsNyArODQsNyBAQCB1bnNpZ25lZCBTVkdQYXRoU2VnTGlz
dDo6Z2V0UGF0aFNlZ0F0TGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQoY3VydmVUby0+eCgpLCBjdXJ2ZVRvLT55KCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBB
VEg6CisgICAgICAgIGNhc2UgUGF0aFNlZ0Nsb3NlUGF0aDoKICAgICAgICAgICAgIHNlZ21lbnRM
ZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5jbG9zZVN1YnBhdGgoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgpAQCAtMTE2LDQ4ICsxMTYsNDQgQEAgUGF0aCBTVkdQYXRoU2Vn
TGlzdDo6dG9QYXRoRGF0YSgpCiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybiBQ
YXRoKCk7CiAgICAgICAgIHN3aXRjaCAoc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19BQlM6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b0FicyogbW92ZVRvID0gc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KHNlZ21lbnQpOwotICAgICAgICAgICAgICAgIEZsb2F0
UG9pbnQgZW5kUG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKLSAgICAgICAgICAgICAg
ICBwYXRoRGF0YS5tb3ZlVG8oZW5kUG9pbnQpOwotICAgICAgICAgICAgICAgIHByZXZpb3VzRW5k
UG9pbnQgPSBlbmRQb2ludDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fQUJTOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9BYnMqIGxpbmVUbyA9IHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihzZWdtZW50KTsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IGVuZFBvaW50KGxpbmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7Ci0gICAgICAg
ICAgICAgICAgcGF0aERhdGEuYWRkTGluZVRvKGVuZFBvaW50KTsKLSAgICAgICAgICAgICAgICBw
cmV2aW91c0VuZFBvaW50ID0gZW5kUG9pbnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19D
VUJJQ19BQlM6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0FicyogY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnMqPihzZWdtZW50KTsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50KGN1cnZl
VG8tPngoKSwgY3VydmVUby0+eSgpKTsKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5hZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3VydmVUby0+eDEoKSwgY3VydmVUby0+eTEoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGN1cnZlVG8t
PngyKCksIGN1cnZlVG8tPnkyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kUG9pbnQpOwotICAgICAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgPSBl
bmRQb2ludDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDoKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKiBjdXJ2ZVRv
ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KHNlZ21lbnQpOwotICAg
ICAgICAgICAgICAgIEZsb2F0U2l6ZSBlbmRQb2ludChjdXJ2ZVRvLT54KCksIGN1cnZlVG8tPnko
KSk7Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkQmV6aWVyQ3VydmVUbyhwcmV2aW91c0Vu
ZFBvaW50ICsgRmxvYXRTaXplKGN1cnZlVG8tPngxKCksIGN1cnZlVG8tPnkxKCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCArIEZs
b2F0U2l6ZShjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55MigpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgKyBlbmRQb2ludCk7Ci0g
ICAgICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCArPSBlbmRQb2ludDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19DTE9TRVBBVEg6Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEuY2xvc2VTdWJwYXRo
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIEFTU0VSVChmYWxzZSk7IC8vIEZJWE1FOiBUaGlzIG9ubHkgd29ya3Mgd2l0aCBu
b3JtYWxpemVkL3Byb2Nlc3NlZCBwYXRoIGRhdGEuCi0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczogeworICAgICAgICAgICAgU1ZHUGF0aFNlZ01v
dmV0b0FicyogbW92ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KHNlZ21l
bnQpOworICAgICAgICAgICAgRmxvYXRQb2ludCBlbmRQb2ludChtb3ZlVG8tPngoKSwgbW92ZVRv
LT55KCkpOworICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKGVuZFBvaW50KTsKKyAgICAgICAg
ICAgIHByZXZpb3VzRW5kUG9pbnQgPSBlbmRQb2ludDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0FiczogeworICAgICAgICAgICAgU1ZH
UGF0aFNlZ0xpbmV0b0FicyogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Fi
cyo+KHNlZ21lbnQpOworICAgICAgICAgICAgRmxvYXRQb2ludCBlbmRQb2ludChsaW5lVG8tPngo
KSwgbGluZVRvLT55KCkpOworICAgICAgICAgICAgcGF0aERhdGEuYWRkTGluZVRvKGVuZFBvaW50
KTsKKyAgICAgICAgICAgIHByZXZpb3VzRW5kUG9pbnQgPSBlbmRQb2ludDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY0Ficzog
eworICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyogY3VydmVUbyA9IHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMqPihzZWdtZW50KTsKKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgZW5kUG9pbnQoY3VydmVUby0+eCgpLCBjdXJ2ZVRvLT55KCkpOworICAgICAg
ICAgICAgcGF0aERhdGEuYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KGN1cnZlVG8tPngxKCks
IGN1cnZlVG8tPnkxKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
bG9hdFBvaW50KGN1cnZlVG8tPngyKCksIGN1cnZlVG8tPnkyKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmRQb2ludCk7CisgICAgICAgICAgICBwcmV2aW91c0Vu
ZFBvaW50ID0gZW5kUG9pbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw6IHsKKyAgICAgICAgICAgIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNSZWwqIGN1cnZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljUmVsKj4oc2VnbWVudCk7CisgICAgICAgICAgICBGbG9hdFNpemUgZW5kUG9pbnQoY3VydmVU
by0+eCgpLCBjdXJ2ZVRvLT55KCkpOworICAgICAgICAgICAgcGF0aERhdGEuYWRkQmV6aWVyQ3Vy
dmVUbyhwcmV2aW91c0VuZFBvaW50ICsgRmxvYXRTaXplKGN1cnZlVG8tPngxKCksIGN1cnZlVG8t
PnkxKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Vu
ZFBvaW50ICsgRmxvYXRTaXplKGN1cnZlVG8tPngyKCksIGN1cnZlVG8tPnkyKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0VuZFBvaW50ICsgZW5kUG9p
bnQpOworICAgICAgICAgICAgcHJldmlvdXNFbmRQb2ludCArPSBlbmRQb2ludDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUGF0aFNlZ0Nsb3NlUGF0aDoKKyAg
ICAgICAgICAgIHBhdGhEYXRhLmNsb3NlU3VicGF0aCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOyAvLyBGSVhNRTogVGhp
cyBvbmx5IHdvcmtzIHdpdGggbm9ybWFsaXplZC9wcm9jZXNzZWQgcGF0aCBkYXRhLgorICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yMTMsNjggKzIwOSw2OCBA
QCBQYXNzUmVmUHRyPFNWR1BhdGhTZWdMaXN0PiBTVkdQYXRoU2VnTGlzCiAgICAgICAgIFNWR1Bh
dGhTZWcqIHRvID0gdG9MaXN0LT5nZXRJdGVtKG4sIGVjKS5nZXQoKTsKICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChmcm9tLT5wYXRoU2VnVHlwZSgp
ID09IFNWR1BhdGhTZWc6OlBBVEhTRUdfVU5LTk9XTiB8fCBmcm9tLT5wYXRoU2VnVHlwZSgpICE9
IHRvLT5wYXRoU2VnVHlwZSgpKQorICAgICAgICBpZiAoZnJvbS0+cGF0aFNlZ1R5cGUoKSA9PSBQ
YXRoU2VnVW5rbm93biB8fCBmcm9tLT5wYXRoU2VnVHlwZSgpICE9IHRvLT5wYXRoU2VnVHlwZSgp
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBzZWdt
ZW50ID0gMDsKLSAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnOjpTVkdQYXRo
U2VnVHlwZT4oZnJvbS0+cGF0aFNlZ1R5cGUoKSkpIHsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2Vn
OjpQQVRIU0VHX0NMT1NFUEFUSDoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnVHlwZT4oZnJvbS0+cGF0aFNlZ1R5cGUoKSkpIHsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xv
c2VQYXRoOgogICAgICAgICAgICAgc2VnbWVudCA9IFNWR1BhdGhTZWdDbG9zZVBhdGg6OmNyZWF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19MSU5FVE9fSE9SSVpPTlRBTF9BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6
b250YWxBYnM6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMShTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEFicywgeCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDoKKyAgICAgICAgY2Fz
ZSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVO
RFBBVEhTRUcxKFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLCB4KTsKICAgICAgICAgICAg
IGJyZWFrOyAgIAotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJ
Q0FMX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM6CiAgICAgICAg
ICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMShTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMs
IHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19MSU5FVE9fVkVSVElDQUxfUkVMOgorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcxKFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbFJlbCwgeSk7CiAgICAgICAgICAgICBicmVhazsgICAgICAgIAotICAgICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2Vn
TW92ZVRvQWJzOgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNl
Z01vdmV0b0FicywgeCwgeSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX01PVkVUT19SRUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb1Jl
bDoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUcyKFNWR1BhdGhTZWdNb3ZldG9S
ZWwsIHgsIHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19MSU5FVE9fQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9BYnM6CiAgICAg
ICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMihTVkdQYXRoU2VnTGluZXRvQWJzLCB4LCB5
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdf
TElORVRPX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvUmVsOgogICAgICAgICAgICAg
c2VnbWVudCA9IEJMRU5EUEFUSFNFRzIoU1ZHUGF0aFNlZ0xpbmV0b1JlbCwgeCwgeSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9f
Q1VCSUNfQUJTOgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM6CiAgICAgICAg
ICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHNihTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLCB4
LCB5LCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBT
VkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMOgorICAgICAgICBjYXNlIFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNSZWw6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHNihT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLCB4LCB5LCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VC
SUNfU01PT1RIX0FCUzoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJz
OgogICAgICAgICAgICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzQoU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aEFicywgeCwgeSwgeDIsIHkyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMOgorICAg
ICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw6CiAgICAgICAgICAgICBzZWdt
ZW50ID0gQkxFTkRQQVRIU0VHNChTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLCB4LCB5
LCB4MiwgeTIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNBYnM6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHNChTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicywgeCwgeSwgeDEsIHkxKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNf
UkVMOgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsOgogICAgICAgICAg
ICAgc2VnbWVudCA9IEJMRU5EUEFUSFNFRzQoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWws
IHgsIHksIHgxLCB5MSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRo
U2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlM6CisgICAgICAgIGNhc2Ug
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnM6CiAgICAgICAgICAgICBzZWdtZW50ID0g
QkxFTkRQQVRIU0VHMihTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicywgeCwgeSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NV
UlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNTbW9vdGhSZWw6CiAgICAgICAgICAgICBzZWdtZW50ID0gQkxFTkRQQVRIU0VHMihT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCwgeCwgeSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19BQlM6CisgICAgICAg
IGNhc2UgUGF0aFNlZ0FyY0FiczoKICAgICAgICAgICAgIHNlZ21lbnQgPSBCTEVORFBBVEhTRUc3
KFNWR1BhdGhTZWdBcmNBYnMsIHgsIHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dl
ZXBGbGFnKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfQVJDX1JFTDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQXJjUmVsOgogICAgICAgICAgICAg
c2VnbWVudCA9IEJMRU5EUEFUSFNFRzcoU1ZHUGF0aFNlZ0FyY1JlbCwgeCwgeSwgcjEsIHIyLCBh
bmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19VTktOT1dOOgorICAgICAgICBjYXNlIFBhdGhT
ZWdVbmtub3duOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmVzdWx0LT5hcHBlbmRJdGVtKHNlZ21lbnQsIGVjKTsKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywyMyArNTcs
MjMgQEAgYm9vbCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IAogICAgIHJldHVy
biBwYXJzZXIucGFyc2VQYXRoRGF0YVN0cmluZyhkLCBwYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVk
UGFyc2luZyk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBT
VkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9w
YXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01v
dmV0b0Ficyhwb2ludC54KCksIHBvaW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlz
dC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyh0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSksIGVjKTsKICAgICBlbHNlCi0gICAgICAg
IG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhT
ZWdNb3ZldG9SZWwocG9pbnQueCgpLCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNl
Z0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9S
ZWwodGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpLCBlYyk7CiAgICAgQVNTRVJUKCFl
Yyk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlz
dEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5k
SXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Ficyhwb2ludC54KCks
IHBvaW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Ficyh0YXJnZXRQb2ludC54KCksIHRh
cmdldFBvaW50LnkoKSksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFw
cGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWwocG9pbnQu
eCgpLCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0o
U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWwodGFyZ2V0UG9pbnQueCgp
LCB0YXJnZXRQb2ludC55KCkpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiB9CiAKQEAgLTk3LDUz
ICs5Nyw1MyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bGluZVRvVmVydGljCiAgICAg
QVNTRVJUKCFlYyk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3Vi
aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQotICAgICAgICBtX3BhdGhTZWdM
aXN0LT5hcHBlbmRJdGVtKFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzKHBvaW50LngoKSwgcG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2lu
dDIueCgpLCBwb2ludDIueSgpKSwgZWMpOworICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJ
dGVtKFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKHRhcmdl
dFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2lu
dDIueCgpLCBwb2ludDIueSgpKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlz
dC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1JlbChwb2ludC54KCksIHBvaW50LnkoKSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQy
LngoKSwgcG9pbnQyLnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRl
bShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh0YXJnZXRQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQy
LngoKSwgcG9pbnQyLnkoKSksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKIH0KIAotdm9pZCBTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
K3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5k
SXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFi
cyhwb2ludDIueCgpLCBwb2ludDIueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSksIGVjKTsKKyAg
ICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIG1f
cGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhSZWwocG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgcG9pbnQueCgpLCBw
b2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0
aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwodGFyZ2V0UG9p
bnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCkpLCBlYyk7CiAg
ICAgQVNTRVJUKCFlYyk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRv
UXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6
OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAg
ICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMocG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQu
eCgpLCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0o
U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKHRhcmdl
dFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEueSgpKSwgZWMp
OwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwocG9pbnQxLngoKSwgcG9p
bnQxLnkoKSwgcG9pbnQueCgpLCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xp
c3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBw
b2ludDEueSgpKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQogCi12b2lkIFNWR1BhdGhTZWdM
aXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6
Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0
aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+
YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnMocG9pbnQueCgpLCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNl
Z0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljU21vb3RoQWJzKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMp
OwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwocG9pbnQueCgp
LCBwb2ludC55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZH
UGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHRh
cmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwog
fQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6YXJjVG8oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFn
LCBib29sIHN3ZWVwRmxhZywgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhT
ZWdMaXN0QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9v
bCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRo
U2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0FyY0Fi
cyhwb2ludC54KCksIHBvaW50LnkoKSwgcjEsIHIyLCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2Vl
cEZsYWcpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVs
ZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnModGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2lu
dC55KCksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnKSwgZWMpOwogICAg
IGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6
Y3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChwb2ludC54KCksIHBvaW50LnkoKSwgcjEsIHIyLCBhbmds
ZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3Qt
PmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwodGFyZ2V0
UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywg
c3dlZXBGbGFnKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQogCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQ
YXRoU2VnTGlzdEJ1aWxkZXIuaAkocmV2aXNpb24gNjQ2MzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQ
YXRoU2VnTGlzdEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRp
Y1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJv
b2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0Zs
YWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKIAogICAgIFNWR1BhdGhTZWdMaXN0KiBtX3BhdGhTZWdMaXN0OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63816</attachid>
            <date>2010-08-07 06:24:20 -0700</date>
            <delta_ts>2010-08-07 07:01:37 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>svgByteStreamBuilderPart2-1.patch</filename>
            <type>text/plain</type>
            <size>40351</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDkwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTAtMDgtMDcgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21l
IHVwIHdpdGggYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gcmVwcmVzZW50IFBhdGggc2VnbWVudHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTU5CisK
KyAgICAgICAgSW50cm9kdWNlIFNWR1BhdGhCeXRlU3RyZWFtIHRvIGhhdmUgYSBmYXN0IGFuZCBl
ZmZpZWNpZW50IHdheSB0byBvcmdhbml6ZSB0aGUgc3luY2hyb25pemF0aW9uCisgICAgICAgIG9m
IFBhdGgsIFNWRyBwYXRoIGRhdGEgc3RyaW5nIGFuZCB0aGUgZGlmZmVyZW50IFNWR1BhdGhTZWdM
aXN0cy4KKyAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkgaXMgbm93IGFibGUgdG8gcGFyc2Ug
YSBTVkdQYXRoQnl0ZVN0cmVhbSBhcyBhIFNWR1BhdGhTb3VyY2Ugb3IKKyAgICAgICAgY3JlYXRl
IGEgU1ZHUGF0aEJ5dGVTdHJlYW0gZnJvbSBhIFNWRyBwYXRoIGRhdGEgc3RyaW5nLgorCisgICAg
ICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6Cisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOgorICAgICAg
ICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCeXRlU3RyZWFtOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjphcHBlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtOjpTVkdQYXRoQnl0ZVN0cmVhbSk6CisgICAgICAgICogc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjptb3ZlVG8pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvVmVydGljYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3Vi
aWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpj
dXJ2ZVRvUXVhZHJhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OmFyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyOjpzZXRDdXJyZW50Qnl0ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRlRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OndyaXRlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0ZUZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjp3cml0ZVNlZ21lbnRUeXBlKToKKyAgICAgICAgKiBz
dmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6flNWR1BhdGhCeXRlU3RyZWFt
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpoYXNN
b3JlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpuZXh0Q29tbWFuZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cmVhZFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnJlYWRGbGFn
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpyZWFkRmxvYXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnJlYWRTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cmVh
ZEZsb2F0UG9pbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnbG9iYWxTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkUGF0aEZyb21CeXRlU3RyZWFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXJGYWN0b3J5OjpidWlsZFNWR1BhdGhT
ZWdMaXN0RnJvbUJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlckZh
Y3Rvcnk6OmJ1aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aFBhcnNlckZhY3RvcnkuaDoKKwogMjAxMC0wOC0wNyAgRGlyayBTY2h1bHplICA8a3Jp
dEB3ZWJraXQub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gU29ydCBYQ29kZSBwcm9qZWN0
IGZpbGUuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9B
bmRyb2lkLm1rCShyZXZpc2lvbiA2NDkwNykKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2lu
ZyBjb3B5KQpAQCAtODcxLDYgKzg3MSw4IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NS
Q19GSUxFUykgXAogCXN2Zy9TVkdQYWludC5jcHAgXAogCXN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMu
Y3BwIFwKIAlzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwIFwKKwlzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyLmNwcCBcCisJc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcCBcCiAJc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcCBcCiAJc3ZnL1NWR1BhdGhQYXJzZXIuY3BwIFwKIAlzdmcvU1ZHUGF0
aFBhcnNlckZhY3RvcnkuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjQ5MDcpCisrKyBXZWJD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjc5LDYgKzE2NzksOCBAQCBJ
RiAoRU5BQkxFX1NWRykKICAgICAgICAgc3ZnL1NWR1BhaW50LmNwcAogICAgICAgICBzdmcvU1ZH
UGFyc2VyVXRpbGl0aWVzLmNwcAogICAgICAgICBzdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCisgICAg
ICAgIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCisgICAgICAgIHN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZS5jcHAKICAgICAgICAgc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAogICAg
ICAgICBzdmcvU1ZHUGF0aFBhcnNlci5jcHAKICAgICAgICAgc3ZnL1NWR1BhdGhQYXJzZXJGYWN0
b3J5LmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2NDkwNykKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNzQsNiArNDA3NCwxMSBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oIFwKIAlXZWJDb3JlL3N2
Zy9TVkdQYXRoQnVpbGRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmggXAor
CVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlci5jcHAgXAorCVdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlci5oIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAgXAorCVdl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmggXAogCVdlYkNvcmUvc3ZnL1NWR1Bh
dGhDb25zdW1lci5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgXAogCVdlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY0OTA3KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM4MjgsNiArMzgyOCwxMSBAQAog
ICAgICAgICAgICAgJ3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAnc3Zn
L1NWR1BhdGhCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhCdWlsZGVyLmgn
LAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oJywKKyAgICAgICAgICAgICdz
dmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCcsCisgICAgICAgICAgICAnc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlci5oJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2UuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2Uu
aCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhDb25zdW1lci5oJywKICAgICAgICAgICAgICdz
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aEVsZW1lbnQu
aCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHJldmlzaW9uIDY0OTA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1Myw2ICsyODUzLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NW
Rz0xKSB7CiAgICAgICAgIHN2Zy9TVkdQYWludC5jcHAgXAogICAgICAgICBzdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRoQnVpbGRlci5jcHAgXAorICAgICAg
ICBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBcCisgICAgICAgIHN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZS5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIFwK
ICAgICAgICAgc3ZnL1NWR1BhdGhQYXJzZXIuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhQYXJz
ZXJGYWN0b3J5LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHJldmlzaW9uIDY0OTA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDk0NDEsNiArNDk0NDEsMTggQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhCeXRlU3Ry
ZWFtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN2Z1xTVkdQYXRoQ29uc3VtZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjQ5
MDgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyMywxNSArMTQyMywxOCBAQAogCQk3QUVEM0UwNjBGQkIxRUFBMDBEMkIw
M0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdBRUQzRTA0MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9u
dGVuZC5oICovOyB9OwogCQk3QUZENEE4QjExMzFDMjc2MDAzNUI4ODMgLyogU2NyaXB0QnJlYWtw
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FG
RDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QUZENEZGNDExMzI3N0I2MDAz
NUI4ODMgLyogU2NyaXB0RGVidWdMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRDRGRjMxMTMyNzdCNjAwMzVCODgzIC8qIFNjcmlwdERl
YnVnTGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk4MUJFMjA5ODExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDkzMTFGNEFCOEQw
MDkxNURGQSAvKiBJREJDdXJzb3IuY3BwICovOyB9OwogCQk4MUJFMjA5NzExRjRBQjhEMDA5MTVE
RkEgLyogSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MUJFMjA5MjExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yLmggKi87IH07CiAJ
CTgxQkUyMDk4MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjA5MzExRjRB
QjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk4MUJFMjA5
OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDk0MTFGNEFCOEQwMDkxNURG
QSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovOyB9OwotCQk4MUJFMjA5QjExRjRBQjhEMDA5
MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTYxMUY0QUI4RDAwOTE1REZBIC8qIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKKwkJODFCRTIwOTkxMUY0QUI4RDAwOTE1
REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTgxQkUyMEQyMTFGNEJDMzIwMDkxNURG
QSAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICov
OyB9OwogCQk4MUJFMjBEMzExRjRCQzMyMDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE4MTFGNEI2NkYw
MDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovOyB9OwogCQk4MkI2NTg5ODExODlFMzkyMDBFMDUy
QTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NT
dG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTgyQjY1ODlBMTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5OTExODlFNDc2
MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwICovOyB9OworCQk4NDE5RDJBNzEyMEQ5
MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MTlEMkE0MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbS5oICovOyB9OworCQk4NDE5RDJBODEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0MTlEMkE1MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXIuY3BwICovOyB9OworCQk4NDE5RDJBOTEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDE5RDJBNjEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyLmggKi87IH07CisJCTg0MTlEMkFDMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDE5RDJBQTEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuY3BwICovOyB9OworCQk4NDE5RDJBRDEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0MTlEMkFCMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZS5oICovOyB9OwogCQk4NDFGREMyNjExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODQxRkRDMjQxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCAqLzsgfTsKIAkJODQxRkRDMjcxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDFGREMyNTExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLzsg
fTsKIAkJODQyMjQxODMxMDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIy
NDE4MTEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLzsg
fTsKQEAgLTcyNTQsMTMgKzcyNTcsMTcgQEAKIAkJN0FGRDRGRjMxMTMyNzdCNjAwMzVCODgzIC8q
IFNjcmlwdERlYnVnTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0RGVidWdMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJF
MjA5MjExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MUJFMjA5MzExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCQ3Vyc29yQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjA5QzExRjRBQkJEMDA5MTVE
RkEgLyogSURCQ3Vyc29yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJDdXJzb3IuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEg
LyogSlNJREJDdXJzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJREJDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjBBODEx
RjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNJREJDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODJC
NjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgyQjY1ODk5MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NT
dG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JD
U1NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MTlEMkE0MTIwRDky
RDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4NDE5RDJBNTEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MTlEMkE2MTIw
RDkyRDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0MTlEMkFBMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg0MTlEMkFCMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDFGREMyNDExNzhDOUJFMDBGOEFD
OUIgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NDFGREMyNTExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQyMjQxODEx
MDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwODcsOCArMTAwOTQsOCBAQAogCQlC
NjU2NjI2ODEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjY1NjYyNjkxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZEMTIwQjExNkIwMDZFQTg1QyAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTSURCVHJhbnNhY3Rpb24uaDsgcGF0aCA9
IEpTSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYy
NkYxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNJREJUcmFuc2FjdGlvbi5jcHA7IHBhdGggPSBKU0lE
QlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjY1NjYyNkUx
MjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCNjU2NjI2RjEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODAxMTlCOTkxMTAwNjU4N0JE
IC8qIEZvbnRUcmFuc2NvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZvbnRUcmFuc2NvZGVyLmNwcDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNzM0QjE4MjExOUI5OTFEMDA2NTg3
QkQgLyogRm9udFRyYW5zY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Rm9udFRyYW5zY29kZXIuaDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjc3NkQ0M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFBy
aW50Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludENvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDU4LDEyICsxMTQ2NSwxMSBA
QAogCQkJCUM1ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLywKIAkJCQlDNTg1
QTY5QTExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmlkbCAqLywKIAkJCQlDNTg1QTY5QjExRDRG
QjNEMDA0QzNFNEIgLyogSURCQ2FsbGJhY2tzLmggKi8sCi0JCQkJODFCRTIwOTIxMUY0QUI4RDAw
OTE1REZBIC8qIElEQkN1cnNvci5jcHAgKi8sCisJCQkJODFCRTIwOTIxMUY0QUI4RDAwOTE1REZB
IC8qIElEQkN1cnNvci5oICovLAogCQkJCTgxQkUyMDkyMTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3IuaCAqLywKIAkJCQk4MUJFMjA5QzExRjRBQkJEMDA5MTVERkEgLyogSURCQ3Vyc29yLmlk
bCAqLywKIAkJCQk4MUJFMjA5MzExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwICovLAotCQkJCTgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNr
ZW5kSW1wbC5oICovLAotCQkJCTgxQkUyMDk1MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLywKIAkJCQlDNTg1QTZBMzExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2UuY3BwICovLAogCQkJCUM1ODVBNkE0MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZS5oICovLAogCQkJCUM1ODVBNkE1MTFENEZCM0QwMDRDM0U0QiAvKiBJREJE
YXRhYmFzZS5pZGwgKi8sCkBAIC0xNTAzMCw2ICsxNTAzNiwxMSBAQAogCQlCMjIyNzdDQTBEMDBC
RjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4NDE5RDJBQTEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuY3BwICovLAorCQkJCTg0MTlEMkFCMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZS5oICovLAorCQkJCTg0MTlEMkE0MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbS5oICovLAorCQkJCTg0MTlEMkE1MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwICovLAorCQkJCTg0MTlEMkE2MTIwRDkyRDAwMDE0MUY4
RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCAqLywKIAkJCQlFNDZFOTc4NjBEQUFENjFC
MDA3MUU4OTQgLyogYW5pbWF0aW9uICovLAogCQkJCUIyNTU5ODg2MEQwMEQ4QjgwMEJCODI1QyAv
KiBncmFwaGljcyAqLywKIAkJCQlCMjIyNzdDQjBEMDBCRjFGMDA3MUI3ODIgLyogQ29sb3JEaXN0
YW5jZS5jcHAgKi8sCkBAIC0xODcwMCw4ICsxODcxMSw3IEBACiAJCQkJQzU4NUE2NjMxMUQ0RkFD
NTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
ODVBNkNGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgxQkUyMDk3MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJODFCRTIwOUIxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTgxQkUyMDk5MTFGNEFCOEQw
MDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTg1QTZEODExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUI2MTc2MjYyMTIwMzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNjE3NjI1NDEyMDMzNzRGMDBFRjkxMTQgLyogSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTIwMTA2LDYgKzIwMTE2
LDkgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21N
b2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDE5RDJBNzEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MTlEMkE5MTIwRDkyRDAwMDE0
MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0
MTlEMkFEMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yMTE0Nyw3ICsyMTE2MCw3IEBACiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAw
REMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2Q0MxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjEx
RDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk4MUJFMjA5ODExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTgxQkUyMDk4MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MUJFMjA5ODExRjRBQjhEMDA5MTVERkEgLyogSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjY5MUMxRjkxMjA2RDRB
MDAwMjVEOTgwIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1ODVBNkQ1
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjI1MjUsNiArMjI1MzgsOCBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFC
QyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEy
RDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTg0MTlEMkE4MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQxOUQyQUMxMjBEOTJGQzAwMTQxRjhGIC8q
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FsbElu
T25lLmNwcAkocmV2aXNpb24gNjQ5MDcpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQAogI2luY2x1ZGUgIlNWR1BhaW50LmNw
cCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhC
dWlsZGVyLmNwcCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIgorI2lu
Y2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoRWxl
bWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlci5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0
aFBhcnNlckZhY3RvcnkuY3BwIgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdQYXRoQnl0ZVN0cmVh
bV9oCisjZGVmaW5lIFNWR1BhdGhCeXRlU3RyZWFtX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVHlwZSBk
ZWZpbml0aW9ucyBmb3IgdGhlIGJ5dGUgc3RyZWFtIGRhdGEKK3R5cGVkZWYgdW5pb24geworICAg
IGJvb2wgdmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieXRlc1tzaXplb2YoYm9vbCldOworfSBC
b29sQnl0ZTsKKwordHlwZWRlZiB1bmlvbiB7CisgICAgZmxvYXQgdmFsdWU7CisgICAgdW5zaWdu
ZWQgY2hhciBieXRlc1tzaXplb2YoZmxvYXQpXTsKK30gRmxvYXRCeXRlOworCit0eXBlZGVmIHVu
aW9uIHsKKyAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5dGVz
W3NpemVvZih1bnNpZ25lZCBzaG9ydCldOworfSBVbnNpZ25lZFNob3J0Qnl0ZTsKKworY2xhc3Mg
U1ZHUGF0aEJ5dGVTdHJlYW0gOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTVkdQYXRoQnl0ZVN0cmVhbSk7CisgICAgfQorCisgICAg
dHlwZWRlZiBWZWN0b3I8dW5zaWduZWQgY2hhcj4gRGF0YTsKKyAgICB0eXBlZGVmIERhdGE6OmNv
bnN0X2l0ZXJhdG9yIERhdGFJdGVyYXRvcjsKKworICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBEYXRhSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBt
X2RhdGEuYmVnaW4oKTsgfQorICAgIERhdGFJdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEu
ZW5kKCk7IH0KKyAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFw
cGVuZChieXRlKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0YS5jbGVhcigpOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgeyByZXR1cm4gIW1fZGF0YS5zaXplKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBTVkdQYXRoQnl0ZVN0cmVhbSgpIHsgfQorICAgIERhdGEgbV9kYXRhOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdQ
YXRoQnl0ZVN0cmVhbV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuaCIKKworI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKKyNpbmNs
dWRlICJTVkdQYXRoU2VnLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXI6OlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcigpCisgICAgOiBtX2J5dGVT
dHJlYW0oMCkKK3sKK30KKwordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1vdmVUbyhj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCit7CisgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CisgICAgd3JpdGVTZWdtZW50VHlwZSht
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyAgUGF0aFNlZ01vdmVUb1JlbCA6IFBhdGhTZWdN
b3ZlVG9BYnMpOworICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7Cit9CisKK3ZvaWQg
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChtX2J5dGVTdHJl
YW0pOworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8g
UGF0aFNlZ0xpbmVUb1JlbCA6IFBhdGhTZWdMaW5lVG9BYnMpOworICAgIHdyaXRlRmxvYXRQb2lu
dCh0YXJnZXRQb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5l
VG9Ib3Jpem9udGFsKGZsb2F0IHgsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIEFT
U0VSVChtX2J5dGVTdHJlYW0pOworICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwgOiBQYXRoU2VnTGluZVRv
SG9yaXpvbnRhbEFicyk7CisgICAgd3JpdGVGbG9hdCh4KTsKK30KKwordm9pZCBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb1ZlcnRpY2FsKGZsb2F0IHksIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQoreworICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOworICAgIHdyaXRlU2VnbWVudFR5
cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVs
IDogUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzKTsKKyAgICB3cml0ZUZsb2F0KHkpOworfQorCit2
b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fYnl0
ZVN0cmVhbSk7CisgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMgPyBQYXRoU2VnQ3VydmVUb0N1YmljUmVsIDogUGF0aFNlZ0N1cnZlVG9DdWJpY0Ficyk7Cisg
ICAgd3JpdGVGbG9hdFBvaW50KHBvaW50MSk7CisgICAgd3JpdGVGbG9hdFBvaW50KHBvaW50Mik7
CisgICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKK30KKwordm9pZCBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3sKKyAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwg
OiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQocG9p
bnQyKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3sKKyAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKKyAgICB3cml0ZVNlZ21lbnRUeXBl
KG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVs
IDogUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludChwb2lu
dDEpOworICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7Cit9CisKK3ZvaWQgU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQo
bV9ieXRlU3RyZWFtKTsKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29y
ZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsIDogUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNTbW9vdGhBYnMpOworICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7
Cit9CisKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjphcmNUbyhmbG9hdCByMSwgZmxv
YXQgcjIsIGZsb2F0IGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNv
bnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sK
KyAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKKyAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0g
UmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdBcmNSZWwgOiBQYXRoU2VnQXJjQWJzKTsKKyAg
ICB3cml0ZUZsb2F0KHIxKTsKKyAgICB3cml0ZUZsb2F0KHIyKTsKKyAgICB3cml0ZUZsb2F0KGFu
Z2xlKTsKKyAgICB3cml0ZUZsYWcobGFyZ2VBcmNGbGFnKTsKKyAgICB3cml0ZUZsYWcoc3dlZXBG
bGFnKTsKKyAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworfQorCit2b2lkIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRoKCkKK3sKKyAgICBBU1NFUlQobV9ieXRlU3Ry
ZWFtKTsKKyAgICB3cml0ZVNlZ21lbnRUeXBlKFBhdGhTZWdDbG9zZVBhdGgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaAor
I2RlZmluZSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyIDogcHVibGljIFNWR1BhdGhDb25zdW1lciB7Citw
dWJsaWM6CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyKCk7CisKKyAgICB2b2lkIHNldEN1
cnJlbnRCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBieXRlU3RyZWFtKSB7IG1fYnl0ZVN0
cmVhbSA9IGJ5dGVTdHJlYW07IH0KKworcHJpdmF0ZToKKyAgICAvLyBVc2VkIGluIFVuYWx0ZXJl
ZFBhcnNpbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCisgICAgdmlydHVhbCB2b2lkIG1vdmVU
byhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOworCitwcml2YXRlOgorICAgIC8vIE9ubHkg
dXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hv
cml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxp
bmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGlj
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQs
IGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlVHlwZT4KKyAgICB2b2lkIHdyaXRlVHlwZShjb25zdCBCeXRlVHlwZSYg
dHlwZSkKKyAgICB7CisgICAgICAgIHNpemVfdCB0eXBlU2l6ZSA9IHNpemVvZihCeXRlVHlwZSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZVNpemU7ICsraSkKKyAgICAgICAg
ICAgIG1fYnl0ZVN0cmVhbS0+YXBwZW5kKHR5cGUuYnl0ZXNbaV0pOworICAgIH0KKworICAgIHZv
aWQgd3JpdGVGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBCb29sQnl0ZSBkYXRhOwor
ICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdyaXRlRmxvYXQoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBG
bG9hdEJ5dGUgZGF0YTsKKyAgICAgICAgZGF0YS52YWx1ZSA9IHZhbHVlOworICAgICAgICB3cml0
ZVR5cGUoZGF0YSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCisgICAgeworICAgICAgICB3cml0ZUZsb2F0KHBvaW50LngoKSk7Cisg
ICAgICAgIHdyaXRlRmxvYXQocG9pbnQueSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlU2Vn
bWVudFR5cGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCisgICAgeworICAgICAgICBVbnNpZ25lZFNo
b3J0Qnl0ZSBkYXRhOworICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHdyaXRl
VHlwZShkYXRhKTsKKyAgICB9CisKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSogbV9ieXRlU3RyZWFt
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
KyNlbmRpZiAvLyBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaApJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oIgorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UoU1ZHUGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSkK
KyAgICA6IG1fc3RyZWFtKHN0cmVhbSkKKyAgICAsIG1fc3RyZWFtQ3VycmVudChzdHJlYW0tPmJl
Z2luKCkpCisgICAgLCBtX3N0cmVhbUVuZChzdHJlYW0tPmVuZCgpKQoreworICAgIEFTU0VSVChz
dHJlYW0pOworfQorCitTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6flNWR1BhdGhCeXRlU3RyZWFt
U291cmNlKCkKK3sKK30KKworYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6aGFzTW9yZURh
dGEoKSBjb25zdAoreworICAgIHJldHVybiAobV9zdHJlYW1DdXJyZW50IDwgbV9zdHJlYW1FbmQp
OworfQorCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUZsb2F0KGZsb2F0JiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlRmxhZyhib29sJiByZXN1bHQp
Cit7CisgICAgcmVzdWx0ID0gcmVhZEZsYWcoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2Vn
VHlwZSYgcGF0aFNlZ1R5cGUpCit7CisgICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworICAgIHJldHVybiB0cnVlOworfQor
CitTVkdQYXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZH
UGF0aFNlZ1R5cGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihy
ZWFkU1ZHU2VnbWVudFR5cGUoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlX2gKKyNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2VfaAorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0u
aCIKKyNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZSA6IHB1YmxpYyBTVkdQYXRoU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4gY3JlYXRlKFNWR1BhdGhCeXRlU3RyZWFtKiBzdHJl
YW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlKHN0cmVhbSkpOworICAgIH0KKworICAgIHZpcnR1YWwgflNWR1BhdGhCeXRlU3RyZWFt
U291cmNlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgbW92ZVRvTmV4dFRva2VuKCk7CisgICAgdmlydHVhbCBib29sIHBhcnNlRmxv
YXQoZmxvYXQmIHJlc3VsdCk7CisgICAgdmlydHVhbCBib29sIHBhcnNlRmxhZyhib29sJiByZXN1
bHQpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBl
Jik7CisgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlw
ZSk7Citwcml2YXRlOgorICAgIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlKFNWR1BhdGhCeXRlU3Ry
ZWFtKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZSwgdHlwZW5hbWUgQnl0ZVR5
cGU+CisgICAgRGF0YVR5cGUgcmVhZFR5cGUoKQorICAgIHsKKyAgICAgICAgQnl0ZVR5cGUgZGF0
YTsKKyAgICAgICAgc2l6ZV90IHR5cGVTaXplID0gc2l6ZW9mKEJ5dGVUeXBlKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX3N0cmVhbUN1cnJlbnQgPCBtX3N0cmVhbUVuZCk7CisgICAgICAgICAgICBkYXRhLmJ5
dGVzW2ldID0gKm1fc3RyZWFtQ3VycmVudDsKKyAgICAgICAgICAgICsrbV9zdHJlYW1DdXJyZW50
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7CisgICAgfQorCisgICAg
Ym9vbCByZWFkRmxhZygpCisgICAgeworICAgICAgICByZXR1cm4gcmVhZFR5cGU8Ym9vbCwgQm9v
bEJ5dGU+KCk7CisgICAgfQorCisgICAgZmxvYXQgcmVhZEZsb2F0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWFkVHlwZTxmbG9hdCwgRmxvYXRCeXRlPigpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHNob3J0IHJlYWRTVkdTZWdtZW50VHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVh
ZFR5cGU8dW5zaWduZWQgc2hvcnQsIFVuc2lnbmVkU2hvcnRCeXRlPigpOworICAgIH0KKworICAg
IEZsb2F0UG9pbnQgcmVhZEZsb2F0UG9pbnQoKQorICAgIHsKKyAgICAgICAgZmxvYXQgeCA9IHJl
YWRUeXBlPGZsb2F0LCBGbG9hdEJ5dGU+KCk7CisgICAgICAgIGZsb2F0IHkgPSByZWFkVHlwZTxm
bG9hdCwgRmxvYXRCeXRlPigpOworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAg
ICB9CisKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSogbV9zdHJlYW07CisgICAgU1ZHUGF0aEJ5dGVT
dHJlYW06OkRhdGFJdGVyYXRvciBtX3N0cmVhbUN1cnJlbnQ7CisgICAgU1ZHUGF0aEJ5dGVTdHJl
YW06OkRhdGFJdGVyYXRvciBtX3N0cmVhbUVuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAkocmV2aXNpb24g
NjQ5MDcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFjdG9yeS5o
IgogCiAjaW5jbHVkZSAiU1ZHUGF0aEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlNWR1BhdGhQYXJzZXIuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdEJ1aWxkZXIu
aCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nU291cmNlLmgiCkBAIC00Nyw2ICs0OSwxNSBAQCBz
dGF0aWMgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKiBnbG9iYWxTVkdQCiAgICAgcmV0dXJuIHNfYnVp
bGRlcjsKIH0KIAorc3RhdGljIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciogZ2xvYmFsU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyKCkKK3sKKyAgICBzdGF0aWMgU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyKiBzX2J1aWxkZXIgPSAwOworICAgIGlmICghc19idWlsZGVyKQorICAgICAgICBzX2J1aWxk
ZXIgPSBuZXcgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOworCisgICAgcmV0dXJuIHNfYnVpbGRl
cjsKK30KKwogc3RhdGljIFNWR1BhdGhQYXJzZXIqIGdsb2JhbFNWR1BhdGhQYXJzZXIoKQogewog
ICAgIHN0YXRpYyBTVkdQYXRoUGFyc2VyKiBzX3BhcnNlciA9IDA7CkBAIC05NCw2ICsxMDUsMjcg
QEAgYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRQYXRoRnJvbQogICAgIHJldHVybiBv
azsKIH0KIAorYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRQYXRoRnJvbUJ5dGVTdHJl
YW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSwgUGF0aCYgcmVzdWx0KQoreworICAgIGlmIChz
dHJlYW0tPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1ZHUGF0aEJ1
aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoQnVpbGRlcigpOworICAgIGJ1aWxkZXItPnNl
dEN1cnJlbnRQYXRoKCZyZXN1bHQpOworCisgICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xv
YmFsU1ZHUGF0aFBhcnNlcigpOworICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKGJ1aWxk
ZXIpOworCisgICAgT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtU291cmNlPiBzb3VyY2UgPSBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6Y3JlYXRlKHN0cmVhbSk7CisgICAgcGFyc2VyLT5zZXRDdXJy
ZW50U291cmNlKHNvdXJjZS5nZXQoKSk7CisKKyAgICBib29sIG9rID0gcGFyc2VyLT5wYXJzZVBh
dGhEYXRhRnJvbVNvdXJjZShOb3JtYWxpemVkUGFyc2luZyk7CisgICAgcGFyc2VyLT5zZXRDdXJy
ZW50Q29uc3VtZXIoMCk7CisgICAgcGFyc2VyLT5zZXRDdXJyZW50U291cmNlKDApOworICAgIGJ1
aWxkZXItPnNldEN1cnJlbnRQYXRoKDApOworICAgIHJldHVybiBvazsKK30KKwogYm9vbCBTVkdQ
YXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRTVkdQYXRoU2VnTGlzdEZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBkLCBTVkdQYXRoU2VnTGlzdCogcmVzdWx0LCBQYXRoUGFyc2luZ01vZGUgcGFyc2luZ01v
ZGUpCiB7CiAgICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0xMTYsNiArMTQ4LDQ2IEBAIGJvb2wgU1ZH
UGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU1ZHUGF0aFMKICAgICByZXR1cm4gb2s7CiB9CiAKK2Jv
b2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU1ZHUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVh
bShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBTVkdQYXRoU2VnTGlzdCogcmVzdWx0LCBQYXRo
UGFyc2luZ01vZGUgcGFyc2luZ01vZGUpCit7CisgICAgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKiBi
dWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKCk7CisgICAgYnVpbGRlci0+c2V0
Q3VycmVudFNWR1BhdGhTZWdMaXN0KHJlc3VsdCk7CisKKyAgICBTVkdQYXRoUGFyc2VyKiBwYXJz
ZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKCk7CisgICAgcGFyc2VyLT5zZXRDdXJyZW50Q29uc3Vt
ZXIoYnVpbGRlcik7CisKKyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+IHNvdXJj
ZSA9IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpjcmVhdGUoc3RyZWFtKTsKKyAgICBwYXJzZXIt
PnNldEN1cnJlbnRTb3VyY2Uoc291cmNlLmdldCgpKTsKKworICAgIGJvb2wgb2sgPSBwYXJzZXIt
PnBhcnNlUGF0aERhdGFGcm9tU291cmNlKHBhcnNpbmdNb2RlKTsKKyAgICBwYXJzZXItPnNldEN1
cnJlbnRDb25zdW1lcigwKTsKKyAgICBwYXJzZXItPnNldEN1cnJlbnRTb3VyY2UoMCk7CisgICAg
YnVpbGRlci0+c2V0Q3VycmVudFNWR1BhdGhTZWdMaXN0KDApOworICAgIHJldHVybiBvazsKK30K
KworUGFzc093blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1
aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgZCwgUGF0aFBhcnNp
bmdNb2RlIHBhcnNpbmdNb2RlLCBib29sJiBvaykKK3sKKyAgICBpZiAoZC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciogYnVp
bGRlciA9IGdsb2JhbFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcigpOworICAgIE93blB0cjxTVkdQ
YXRoQnl0ZVN0cmVhbT4gc3RyZWFtID0gU1ZHUGF0aEJ5dGVTdHJlYW06OmNyZWF0ZSgpOworICAg
IGJ1aWxkZXItPnNldEN1cnJlbnRCeXRlU3RyZWFtKHN0cmVhbS5nZXQoKSk7CisKKyAgICBTVkdQ
YXRoUGFyc2VyKiBwYXJzZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKCk7CisgICAgcGFyc2VyLT5z
ZXRDdXJyZW50Q29uc3VtZXIoYnVpbGRlcik7CisKKyAgICBPd25QdHI8U1ZHUGF0aFN0cmluZ1Nv
dXJjZT4gc291cmNlID0gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6Y3JlYXRlKGQpOworICAgIHBhcnNl
ci0+c2V0Q3VycmVudFNvdXJjZShzb3VyY2UuZ2V0KCkpOworCisgICAgb2sgPSBwYXJzZXItPnBh
cnNlUGF0aERhdGFGcm9tU291cmNlKHBhcnNpbmdNb2RlKTsKKyAgICBwYXJzZXItPnNldEN1cnJl
bnRDb25zdW1lcigwKTsKKyAgICBwYXJzZXItPnNldEN1cnJlbnRTb3VyY2UoMCk7CisgICAgYnVp
bGRlci0+c2V0Q3VycmVudEJ5dGVTdHJlYW0oMCk7CisgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNl
KCk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFj
dG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmgJ
KHJldmlzaW9uIDY0OTA3KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xp
c3QuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgPE93blB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMzLDggKzM1LDEyIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIHNlbGYoKTsKIAogICAgIGJvb2wgYnVpbGRQ
YXRoRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmLCBQYXRoJik7CisgICAgYm9vbCBidWlsZFBhdGhG
cm9tQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIFBhdGgmIHJlc3VsdCk7CiAKICAgICBi
b29sIGJ1aWxkU1ZHUGF0aFNlZ0xpc3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIFNWR1BhdGhT
ZWdMaXN0KiwgUGF0aFBhcnNpbmdNb2RlKTsKKyAgICBib29sIGJ1aWxkU1ZHUGF0aFNlZ0xpc3RG
cm9tQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIFNWR1BhdGhTZWdMaXN0KiwgUGF0aFBh
cnNpbmdNb2RlKTsKKworICAgIFBhc3NPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IGJ1aWxkU1ZH
UGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIFBhdGhQYXJzaW5nTW9kZSwg
Ym9vbCYgb2spOwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7Cg==
</data>
<flag name="review"
          id="52234"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>