<?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>105821</bug_id>
          
          <creation_ts>2012-12-28 00:29:10 -0800</creation_ts>
          <short_desc>Optimize the texture packing for texImage2D() and texSubImage2D() in WebGL</short_desc>
          <delta_ts>2013-01-22 19:04:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Jun Jiang">jun.a.jiang</reporter>
          <assigned_to name="Jun Jiang">jun.a.jiang</assigned_to>
          <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>junov</cc>
    
    <cc>kbr</cc>
    
    <cc>noam</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>797792</commentid>
    <comment_count>0</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-28 00:29:10 -0800</bug_when>
    <thetext>In texture packing for texImage2D() and texSubImage2D() in WebGL, there are hundreds of unpack and pack operations and instances for different combinations of source format, destination format and Alpha operations. Current Implementation uses function pointers to denote each corresponding unpack and pack operation. The code logic is a little complex and could be made cleaner and simpler. Mozilla has done some optimizations based on this implementation, we could merge it back. There are basically two things: 1. use template functions and avoid code bloat. 2. merge the flipY operation into the packing operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797797</commentid>
    <comment_count>1</comment_count>
      <attachid>180850</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-28 00:49:54 -0800</bug_when>
    <thetext>Created attachment 180850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798314</commentid>
    <comment_count>2</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-31 00:44:43 -0800</bug_when>
    <thetext>After applying the patch, the binary size of GraphicsContext3D.o for Non-CG ports are smaller than before. Taking chromium on Linux for example, the size of  GraphicsContext3D.o decreases from 60976 bytes to 33488 bytes (release build). 
While for CG port, the binary size of GraphicsContext3D.o is bigger than before, increasing from 405600 bytes to 1194444 bytes(release build, symbols not striped). The difference between CG port and other ports is that the number of possible source formats for Image from DOM elements are bigger. The detail is in FormatConverter::convert(). This difference introduces much more instances for template functions and results a binary size increase for CG port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801249</commentid>
    <comment_count>3</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-01-07 05:49:18 -0800</bug_when>
    <thetext>find two ways to reduce the binary size of GraphicsContext3D.o for CG port, one is to optimize  the convert() template function, another is to reduce possible formats from HTMLImageElement by considering the little/big endian of the machine.  Simulated CG setting by using these two methods in SKIA port and the size is smaller than original. Will upload a successive  patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802543</commentid>
    <comment_count>4</comment_count>
      <attachid>181738</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-01-08 13:03:53 -0800</bug_when>
    <thetext>Created attachment 181738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806898</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-01-14 19:13:18 -0800</bug_when>
    <thetext>Thanks for your patch and sorry for the delay reviewing it. I&apos;m reviewing it now. Other reviewers, please hold off r+&apos;ing this patch for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807448</commentid>
    <comment_count>6</comment_count>
      <attachid>181738</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-01-15 10:41:36 -0800</bug_when>
    <thetext>Comment on attachment 181738
Patch

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

This is nice work that gets closer to unifying the pixel packing/unpacking code again between Firefox and WebKit. Some relatively small issues, plus one higher-level one. Per offline discussion it sounds like a bug was caught during testing of this patch, so r-&apos;ing this one, but please post a revision when ready.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:320
&gt; +// Some code are merged back from Mozilla code in content/canvas/src/WebGLTexelConversions.h

A high-level point: it would be better if the code that is expected to be shared between Firefox and WebKit were clearly marked at its beginning and end, as it is in Firefox&apos;s http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/WebGLTexelConversions.h .

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1237
&gt; +        || format == GraphicsContext3D::DataFormatA16Little

Since the 16-bit per channel big and little endian formats are only used by the Core Graphics port, and their use is rare, I wonder whether they could be handled differently to reduce the code size on all platforms.

Specifically, perhaps data of this format could be converted to one of the 8-bit formats inside GraphicsContext3DCG.cpp, and the cross-platform code wouldn&apos;t need to know about these formats.

If you agree, it isn&apos;t necessary to make that change in this patch -- it&apos;s large enough as it is -- but please file another bug and make it depend on this one to track that work.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1350
&gt; +ALWAYS_INLINE unsigned TexelBytesForFormat(int format)

Can this take &quot;GraphicsContext3D::DataFormat&quot; rather than int?

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1408
&gt; +        unpackedIntermediateSrcData = malloc(mWidth * MaxNumberOfComponents *MaxBytesPerComponent);

Use unpackedIntermediateSrcData = adoptArrayPtr(new uint8_t[mWidth * MaxNumberOfComponents * MaxBytesPerComponent]).

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1414
&gt; +            free(unpackedIntermediateSrcData);

With OwnArrayPtr the call to free() is unnecessary.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1430
&gt; +    const unsigned mWidth, mHeight;

Use WebKit naming convention here and throughout: m_ prefix.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1435
&gt; +    void* unpackedIntermediateSrcData;

Avoid use of raw pointers -- use OwnArrayPtr&lt;uint8_t&gt; instead. Also, fix naming convention.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1549
&gt; +    const bool CanSrcFormatComeFromDOMElementOrImageData = GraphicsContext3D::srcFormatComeFromDOMElementOrImageData(SrcFormat);

Capitalization: canSrcFormat...

Grammar: srcFormatComesFrom...

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1571
&gt; +    const bool trivialPack = (DstFormat == GraphicsContext3D::DataFormatRGBA8 || DstFormat == GraphicsContext3D::DataFormatRGBA32F) &amp;&amp; alphaOp == GraphicsContext3D::AlphaDoNothing &amp;&amp; mDstStride &gt; 0;

This method looks similar to Firefox&apos;s WebGLImageConverter::run. Why does this version need to compute these two flags?

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1577
&gt; +        if (!trivialUnpack &amp;&amp; trivialPack) {

Have you measured the cost of having these three if/else branches inside the loop? The alternative would be to clone the loop.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1591
&gt; +bool webGLPackPixels(const uint8_t* sourceData, GraphicsContext3D::DataFormat sourceFormat, unsigned width, unsigned height, unsigned sourceUnpackAlignment, unsigned destinationFormat, unsigned destinationType, GraphicsContext3D::AlphaOp alphaOp, void* destinationData, bool flipY)

Avoid referring to &quot;WebGL&quot; inside GraphicsContext3D. This separate function doesn&apos;t appear to be needed at all; just put its body into GraphicsContext3D::packPixels.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1594
&gt; +    int reminder = sourceUnpackAlignment ? (validSrc % sourceUnpackAlignment) : 0;

Typo: reminder -&gt; remainder

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1600
&gt; +        destinationData = (uint8_t *)destinationData + dstStride*(height - 1);

Use C++-style rather than C-style casts in WebKit code: static_cast&lt;uint8_t*&gt;(...). Also, spaces around &quot;*&quot; operator.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1610
&gt; +        uint8_t* dst = (uint8_t*)destinationData;

Fix C-style cast.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:645
&gt; +    // The formats from DOM elements vary with Graphics ports. It can only be RGBA8 or BGRA8 for non-CG port while much more for CGi port.

Typo: CGi -&gt; CG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807509</commentid>
    <comment_count>7</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-01-15 11:34:42 -0800</bug_when>
    <thetext>Kenneth, thanks for your useful comments. That Mozilla did not use the trivialUnpack and trivialPack flags has some intrinsic reasons. Mozilla depends on compiler to do optimization instead of algorithm level. The unpack, convert, pack operations are done in a per-pixel basis and all these functions are inlined. During compilation, compiler will optimize off the cost for unnecessary unpack, convert or pack operations. It indeed brings performance gain. But it still has several drawbacks: first, in some cases, per-pixel assignment in a loop is slower than a single memcpy() for a row; Second, some ARCHs, like arm, could not use instruction acceleration(NEON) for the unpack and pack on a per-row basis to transfer more data in a single trip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808241</commentid>
    <comment_count>8</comment_count>
      <attachid>182953</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-01-16 03:30:54 -0800</bug_when>
    <thetext>Created attachment 182953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808902</commentid>
    <comment_count>9</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-01-16 17:50:09 -0800</bug_when>
    <thetext>Make changes according to Kenneth&apos;s suggestions and fix some issue with uploading textures to floating-point formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813660</commentid>
    <comment_count>10</comment_count>
      <attachid>182953</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-01-22 18:37:38 -0800</bug_when>
    <thetext>Comment on attachment 182953
Patch

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

Thanks for persisting with this patch. It gets much closer to unifying this code again with Mozilla&apos;s, which will make it easier to share code in the future. Two tiny nits, but neither is worth continuing to delay your patch. r=me

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1239
&gt; +        || format == GraphicsContext3D::DataFormatA16Little

Please see the question in the previous review regarding these 16-bit per channel formats. Since they are exposed here only for the Core Graphics port, and they don&apos;t seem to be useful to represent any existing high dynamic range file format, I think we should hide their use inside CG-specific code and normalize incoming images to 8 bits per channel if necessary. Do you agree? If so please file another bug.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:1434
&gt; +    OwnArrayPtr&lt;uint8_t&gt; unpackedIntermediateSrcData;

Should have been m_unpackedIntermediateSrcData. Not a huge deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813674</commentid>
    <comment_count>11</comment_count>
      <attachid>182953</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 19:04:20 -0800</bug_when>
    <thetext>Comment on attachment 182953
Patch

Clearing flags on attachment: 182953

Committed r140497: &lt;http://trac.webkit.org/changeset/140497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813675</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 19:04:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180850</attachid>
            <date>2012-12-28 00:49:54 -0800</date>
            <delta_ts>2013-01-08 13:03:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105821-20121228164846.patch</filename>
            <type>text/plain</type>
            <size>100417</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVhMmFhYjE3NzkxOWY4
MTk0MWQwZmMxZDA3NzY4M2E5YTlkYWZjOS4uN2U2NjYxNjc1NzJhYThlYTI1YmE3YjY0OTVjMjhh
Yjc3MDg2ODU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEyLTI4ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUgdGhlIHRl
eHR1cmUgcGFja2luZyBmb3IgdGV4SW1hZ2UyRCgpIGFuZCB0ZXhTdWJJbWFnZTJEKCkgaW4gV2Vi
R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTgy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBv
cmlnaW5hbCB0ZXh0dXJlIHBhY2tpbmcgY29kZSB1c2VzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRl
bm90ZSBlYWNoIHVucGFjayBhbmQgcGFjayBvcGVyYXRpb25zIGZvciBkaWZmZXJlbnQgY29tYmlu
YXRpb24KKyAgICAgICAgb2YgU291cmNlIGZvcm1hdHMsIERlc3RpbmF0aW9uIGZvcm1hdHMgYW5k
IEFscGhhIE9wZXJhdGlvbnMuIEl0IGNvdWxkIGJlIG1hZGUgY2xlYW5lciBhbmQgc2ltcGxlci4g
SW4gdGhpcyBwYXRjaCwgdGVtcGxhdGUgZnVuY3Rpb25zCisgICAgICAgIGFyZSB1c2VkIGFuZCB0
cnkgYmVzdCB0byBhdm9pZCBnZW5lcmF0aW5nIHVzZWxlc3MgY29kZSBmb3IgdW5yZWFjaGFibGUg
cGF0aCB0byBhdm9pZCBjb2RlIGJsb2F0LiBNb3Jlb3ZlciwgdGhlIGZsaXBZIG9wZXJhdGlvbiBp
cyBtb3ZlZCBpbnRvIAorICAgICAgICB0aGUgcGFjayBvcGVyYXRpb24gaW5zdGVhZCBvZiBvcGVy
YXRpbmcgaW4gYSBzdGFuZGFsb25lIG1ldGhvZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorCisg
ICAgICAgIEFscmVhZHkgY292ZXJlZCBieSBjdXJyZW50IHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RUZXh0dXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWNrUGl4ZWxzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoR3Jh
cGhpY3NDb250ZXh0M0QpOgorCiAyMDEyLTEyLTI3ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHN0eWxpbmcvZm9ybWF0dGluZyBlcnJvcnMs
IHBvaW50ZWQgb3V0IGJ5IERhcmluIEFkbGVyIHdoaWxlIHJldmlld2luZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmlu
ZGV4IGYzMDI1NWMzMzlkMWMyNDc5YjAzOGZmZWZkMjI2YTY1NzNjNDgwYWUuLjdiZWJiZWQ1NGRk
Nzg1NDJiM2RjMTBlYjdlZTZhMWNiMDFjNTA2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1vemlsbGEgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5NywyOSAr
MTk4LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja0ltYWdlRGF0YSgKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOwogCi0gICAgaWYgKCFw
YWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksCi0gICAg
ICAgIHNvdXJjZUZvcm1hdCwKLSAgICAgICAgd2lkdGgsCi0gICAgICAgIGhlaWdodCwKLSAgICAg
ICAgc291cmNlVW5wYWNrQWxpZ25tZW50LAotICAgICAgICBmb3JtYXQsCi0gICAgICAgIHR5cGUs
Ci0gICAgICAgIGFscGhhT3AsCi0gICAgICAgIGRhdGEuZGF0YSgpKSkKKyAgICBpZiAoIXBhY2tQ
aXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwg
YWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChmbGlwWSkgewotICAgICAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVz
UGVyQ29tcG9uZW50OwotICAgICAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVy
cyhmb3JtYXQsIHR5cGUsCi0gICAgICAgICAgICAmY29tcG9uZW50c1BlclBpeGVsLAotICAgICAg
ICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgLy8gVGhlIGltYWdlIGRhdGEgaXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQg
aXQgYXMgc3VjaC4KLSAgICAgICAgdW5zaWduZWQgdW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICAg
ICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKLSAgICAgICAgICAgIHVu
cGFja0FsaWdubWVudCk7Ci0gICAgfQotCiAgICAgaWYgKEltYWdlT2JzZXJ2ZXIgKm9ic2VydmVy
ID0gaW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcoaW1h
Z2UpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjQzLDI4ICsyMjMsOSBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAo
IXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwKLSAgICAgICAgICAgICAgICAg
ICAgU291cmNlRm9ybWF0UkdCQTgsCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhRG9QcmVtdWx0aXBseSA6IEFscGhhRG9O
b3RoaW5nLAotICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEoKSkpCisgICAgaWYgKCFwYWNr
UGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIFNvdXJjZUZvcm1hdFJHQkE4LCB3aWR0
aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYURvUHJl
bXVsdGlwbHkgOiBBbHBoYURvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChmbGlwWSkgewotICAgICAgICB1bnNpZ25lZCBpbnQgY29t
cG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAgICAgICAgaWYgKCFjb21wdXRl
Rm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50c1BlclBpeGVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNQZXJDb21wb25lbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0
aWdodGx5IHBhY2tlZCwgYW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgotICAgICAgICB1bnNpZ25l
ZCBpbnQgdW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5k
YXRhKCksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNQ
ZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICB1bnBh
Y2tBbGlnbm1lbnQpOwotICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNDIsNTUg
KzMwMyw2NiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0VGV4dHVyZURhdGEodW5z
aWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZwogICAgIHVuc2lnbmVkIGludCBieXRl
c1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiAgICAg
ZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKIAotICAgIGlmICgh
cGFja1BpeGVscyhzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwKLSAgICAgICAg
ICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgIChwcmVtdWx0aXBseUFscGhhID8gQWxwaGFEb1ByZW11
bHRpcGx5IDogQWxwaGFEb05vdGhpbmcpLAotICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEo
KSkpCisgICAgaWYgKCFwYWNrUGl4ZWxzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhl
bHMpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsIGZv
cm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYURvUHJlbXVsdGlwbHkgOiBBbHBo
YURvTm90aGluZyksIGRhdGEuZGF0YSgpLCBmbGlwWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAvLyBUaGUgcGl4ZWwgZGF0YSBpcyBub3cgdGlnaHRseSBwYWNrZWQuCi0gICAgaWYgKGZs
aXBZKQotICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwg
Ynl0ZXNQZXJQaXhlbCwgMSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZmxpcFZlcnRpY2FsbHkodm9pZCogaW1hZ2VEYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBp
eGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHVucGFja0FsaWdubWVudCkKLXsKLSAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpCi0gICAgICAg
IHJldHVybjsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRSb3dCeXRlcyA9IHdpZHRoICogYnl0ZXNQ
ZXJQaXhlbDsKLSAgICB1bnNpZ25lZCBpbnQgdG90YWxSb3dCeXRlcyA9IHZhbGlkUm93Qnl0ZXM7
Ci0gICAgdW5zaWduZWQgaW50IHJlbWFpbmRlciA9IHZhbGlkUm93Qnl0ZXMgJSB1bnBhY2tBbGln
bm1lbnQ7Ci0gICAgaWYgKHJlbWFpbmRlcikKLSAgICAgICAgdG90YWxSb3dCeXRlcyArPSAodW5w
YWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKTsKLSAgICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVp
bnQ4X3RbdmFsaWRSb3dCeXRlc107Ci0gICAgdWludDhfdCogZGF0YSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihpbWFnZURhdGEpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWlnaHQg
LyAyOyBpKyspIHsKLSAgICAgICAgdWludDhfdCogbG93Um93ID0gZGF0YSArICh0b3RhbFJvd0J5
dGVzICogaSk7Ci0gICAgICAgIHVpbnQ4X3QqIGhpZ2hSb3cgPSBkYXRhICsgKHRvdGFsUm93Qnl0
ZXMgKiAoaGVpZ2h0IC0gaSAtIDEpKTsKLSAgICAgICAgbWVtY3B5KHRlbXBSb3csIGxvd1Jvdywg
dmFsaWRSb3dCeXRlcyk7Ci0gICAgICAgIG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHZhbGlkUm93
Qnl0ZXMpOwotICAgICAgICBtZW1jcHkoaGlnaFJvdywgdGVtcFJvdywgdmFsaWRSb3dCeXRlcyk7
Ci0gICAgfQotICAgIGRlbGV0ZVtdIHRlbXBSb3c7Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgcGFj
a2luZyBhbmQgdW5wYWNraW5nIHJvdXRpbmVzIGFyZSBleHByZXNzZWQgaW4gdGVybXMKLS8vIG9m
IGxpbmUtYnktbGluZSBvcGVyYXRpb25zLCBhbmQgcGFzc2VkIGJ5IGZ1bmN0aW9uIHBvaW50ZXIg
cmF0aGVyCi0vLyB0aGFuIHRlbXBsYXRlIHBhcmFtZXRlciwgdG8gYWNoaWV2ZSB0aGUgbWFqb3Jp
dHkgb2YgdGhlIHNwZWVkdXBzIG9mCi0vLyBoYXZpbmcgdGhlbSBpbmxpbmVkIHdoaWxlIHJlZHVj
aW5nIGNvZGUgc2l6ZS4KKy8vIFRoZSBmb2xsb3dpbmcgcGFja2luZyBhbmQgdW5wYWNraW5nIHJv
dXRpbmVzIGFyZSBleHByZXNzZWQgaW4gdGVybXMgb2YgZnVuY3Rpb24gdGVtcGxhdGVzIGFuZCBp
bmxpbmUgZnVuY3Rpb25zIHRvIGFjaGlldmUgZ2VuZXJhbGl0eSBhbmQgc3BlZWR1cC4KKy8vIEV4
cGxpY2l0IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBjb3JyZXNwb25kIHRvIHRoZSBjYXNlcyB0
aGF0IHdvdWxkIG9jY3VyLgorLy8gU29tZSBjb2RlIGFyZSBtZXJnZWQgYmFjayBmcm9tIE1vemls
bGEgY29kZSBpbiBjb250ZW50L2NhbnZhcy9zcmMvV2ViR0xUZXhlbENvbnZlcnNpb25zLioKIAog
bmFtZXNwYWNlIHsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQaXhlbCB1bnBhY2tpbmcgcm91dGlu
ZXMuCiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0JBMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQx
Nl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVy
Um93KQorZW51bSBEYXRhRm9ybWF0IHsKKyAgICBEYXRhRm9ybWF0UkdCQTggPSAwLAorICAgIERh
dGFGb3JtYXRSR0JBMTZMaXR0bGUsCisgICAgRGF0YUZvcm1hdFJHQkExNkJpZywKKyAgICBEYXRh
Rm9ybWF0UkdCQTMyRiwKKyAgICBEYXRhRm9ybWF0UkdCOCwKKyAgICBEYXRhRm9ybWF0UkdCMTZM
aXR0bGUsCisgICAgRGF0YUZvcm1hdFJHQjE2QmlnLAorICAgIERhdGFGb3JtYXRSR0IzMkYsCisg
ICAgRGF0YUZvcm1hdEJHUjgsCisgICAgRGF0YUZvcm1hdEJHUkE4LAorICAgIERhdGFGb3JtYXRC
R1JBMTZMaXR0bGUsCisgICAgRGF0YUZvcm1hdEJHUkExNkJpZywKKyAgICBEYXRhRm9ybWF0QVJH
QjgsCisgICAgRGF0YUZvcm1hdEFSR0IxNkxpdHRsZSwKKyAgICBEYXRhRm9ybWF0QVJHQjE2Qmln
LAorICAgIERhdGFGb3JtYXRBQkdSOCwKKyAgICBEYXRhRm9ybWF0UkdCQTU1NTEsCisgICAgRGF0
YUZvcm1hdFJHQkE0NDQ0LAorICAgIERhdGFGb3JtYXRSR0I1NjUsCisgICAgRGF0YUZvcm1hdFI4
LAorICAgIERhdGFGb3JtYXRSMTZMaXR0bGUsCisgICAgRGF0YUZvcm1hdFIxNkJpZywKKyAgICBE
YXRhRm9ybWF0UjMyRiwKKyAgICBEYXRhRm9ybWF0UkE4LAorICAgIERhdGFGb3JtYXRSQTE2TGl0
dGxlLAorICAgIERhdGFGb3JtYXRSQTE2QmlnLAorICAgIERhdGFGb3JtYXRSQTMyRiwKKyAgICBE
YXRhRm9ybWF0QVI4LAorICAgIERhdGFGb3JtYXRBUjE2TGl0dGxlLAorICAgIERhdGFGb3JtYXRB
UjE2QmlnLAorICAgIERhdGFGb3JtYXRBOCwKKyAgICBEYXRhRm9ybWF0QTE2TGl0dGxlLAorICAg
IERhdGFGb3JtYXRBMTZCaWcsCisgICAgRGF0YUZvcm1hdEEzMkYsCisgICAgRGF0YUZvcm1hdE51
bUZvcm1hdHMKK307CisKK3RlbXBsYXRlPGludCBmb3JtYXQsIHR5cGVuYW1lIFNvdXJjZVR5cGUs
IHR5cGVuYW1lIERzdFR5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrKGNvbnN0IFNvdXJj
ZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxEYXRhRm9ybWF0UkdC
QTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKQEAgLTQwMiw3
ICszNzQsNyBAQCB2b2lkIHVucGFja09uZVJvd09mUkdCQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1
aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdAogICAgIH0KIH0KIAotdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQkExNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFJHQkExNkJpZywgdWludDE2X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVswXSk7CkBAIC00MTQsNyArMzg2LDcgQEAgdm9pZCB1bnBhY2tPbmVS
b3dPZlJHQkExNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0I4VG9SR0JBOChjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERhdGFGb3Jt
YXRSR0I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlv
blswXSA9IHNvdXJjZVswXTsKQEAgLTQyNiw3ICszOTgsNyBAQCB2b2lkIHVucGFja09uZVJvd09m
UkdCOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaQogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjE2TGl0dGxlVG9SR0JBOChj
b25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxEYXRh
Rm9ybWF0UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwpA
QCAtNDM4LDcgKzQxMCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgo
Y29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpCiAgICAgfQogfQogCi12
b2lkIHVucGFja09uZVJvd09mUkdCMTZCaWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERhdGFGb3JtYXRSR0IxNkJpZywgdWludDE2
X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CkBAIC00NTAsNyArNDIyLDcgQEAgdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1I4VG9SR0JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERh
dGFGb3JtYXRCR1I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVsyXTsKQEAgLTQ2Miw3ICs0MzQsNyBAQCB2b2lkIHVucGFja09u
ZVJvd09mQkdSOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaQogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkFSR0I4VG9SR0JBOChj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERhdGFG
b3JtYXRBUkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGlu
YXRpb25bMF0gPSBzb3VyY2VbMV07CkBAIC00NzQsNyArNDQ2LDcgQEAgdm9pZCB1bnBhY2tPbmVS
b3dPZkFSR0I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBUkdCMTZMaXR0bGVUb1JH
QkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PERhdGFGb3JtYXRBUkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2Vb
MV0pOwpAQCAtNDg2LDcgKzQ1OCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZBUkdCMTZMaXR0bGVU
b1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0CiAgICAgfQog
fQogCi12b2lkIHVucGFja09uZVJvd09mQVJHQjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxEYXRhRm9ybWF0QVJHQjE2Qmln
LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKQEAgLTQ5OCw3ICs0NzAsNyBAQCB2
b2lkIHVucGFja09uZVJvd09mQVJHQjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbgogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkFC
R1I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrPERhdGFGb3JtYXRBQkdSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAg
ICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbM107CkBAIC01MTAsNyArNDgyLDcgQEAgdm9p
ZCB1bnBhY2tPbmVSb3dPZkFCR1I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JB
OFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxEYXRhRm9ybWF0QkdSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBjb25zdCB1aW50MzJfdCogc291cmNlMzIgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1
aW50MzJfdCo+KHNvdXJjZSk7CiAgICAgdWludDMyX3QqIGRlc3RpbmF0aW9uMzIgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGRlc3RpbmF0aW9uKTsKQEAgLTUyOCw3ICs1MDAsNyBA
QCB2b2lkIHVucGFja09uZVJvd09mQkdSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVucwogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dP
ZkJHUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdEJHUkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4
X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVsyXSk7CkBAIC01NDAsNyArNTEyLDcgQEAgdm9pZCB1bnBhY2tPbmVS
b3dPZkJHUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXQKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JBMTZCaWdUb1JHQkE4
KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERh
dGFGb3JtYXRCR1JBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMl0pOwpAQCAt
NTUyLDcgKzUyNCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZCR1JBMTZCaWdUb1JHQkE4KGNvbnN0
IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uCiAgICAgfQogfQogCi12b2lk
IHVucGFja09uZVJvd09mUkdCQTU1NTFUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPERhdGFGb3JtYXRSR0JBNTU1MSwgdWludDE2X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQog
ICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTU1NTFUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsc1BlclJvdyk7CkBAIC01NzEsNyArNTQzLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dP
ZlJHQkE1NTUxVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNDQ0NFRvUkdCQTgoY29u
c3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZv
cm1hdFJHQkE0NDQ0LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZSR0JBNDQ0NFRv
UkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTU5MSw3ICs1NjMs
NyBAQCB2b2lkIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLAogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVS
b3dPZlJHQjU2NVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFJHQjU2NSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFj
a09uZVJvd09mUkdCNTY1VG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cp
OwpAQCAtNjEwLDcgKzU4Miw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSR0I1NjVUb1JHQkE4KGNv
bnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1CiAgICAgfQogfQog
Ci12b2lkIHVucGFja09uZVJvd09mUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFI4LCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTYy
Miw3ICs1OTQsNyBAQCB2b2lkIHVucGFja09uZVJvd09mUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbgogICAgIH0KIH0KIAotdm9pZCB1
bnBhY2tPbmVSb3dPZlIxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFIxNkxpdHRsZSwgdWludDE2X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CkBAIC02MzQsNyArNjA2LDcgQEAgdm9pZCB1bnBh
Y2tPbmVSb3dPZlIxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSMTZCaWdUb1JH
QkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PERhdGFGb3JtYXRSMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwpAQCAt
NjQ2LDcgKzYxOCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSMTZCaWdUb1JHQkE4KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1CiAgICAgfQogfQogCi12b2lk
IHVucGFja09uZVJvd09mUkE4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPERhdGFGb3JtYXRSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNjU4LDcg
KzYzMCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnCiAgICAgfQogfQogCi12b2lkIHVucGFj
a09uZVJvd09mUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFJBMTZMaXR0bGUsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwpAQCAtNjcwLDcgKzY0Miw3IEBAIHZvaWQgdW5wYWNr
T25lUm93T2ZSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkExNkJpZ1RvUkdC
QTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
RGF0YUZvcm1hdFJBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwpAQCAt
NjgyLDcgKzY1NCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSQTE2QmlnVG9SR0JBOChjb25zdCB1
aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQg
dW5wYWNrT25lUm93T2ZBUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdEFSOCwgdWludDhfdCwgdWludDhfdD4oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMV07CkBAIC02OTQsNyAr
NjY2LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkFSOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWcKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNr
T25lUm93T2ZBUjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHVucGFjazxEYXRhRm9ybWF0QVIxNkxpdHRsZSwgdWludDE2X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xv
cjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CkBAIC03MDYsNyArNjc4LDcgQEAgdm9pZCB1bnBhY2tP
bmVSb3dPZkFSMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW8KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBUjE2QmlnVG9SR0JB
OChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxE
YXRhRm9ybWF0QVIxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAg
ICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CkBAIC03
MTgsNyArNjkwLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkFSMTZCaWdUb1JHQkE4KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLAogICAgIH0KIH0KIAotdm9pZCB1
bnBhY2tPbmVSb3dPZkE4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPERhdGFGb3JtYXRBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7CkBAIC03MzAsNyArNzAyLDcgQEAg
dm9pZCB1bnBhY2tPbmVSb3dPZkE4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZB
MTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPERhdGFGb3JtYXRBMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7CkBAIC03NDIsNyArNzE0LDcg
QEAgdm9pZCB1bnBhY2tPbmVSb3dPZkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93
T2ZBMTZCaWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPERhdGFGb3JtYXRBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1
aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7CkBAIC03NTQsNyArNzI2LDcgQEAg
dm9pZCB1bnBhY2tPbmVSb3dPZkExNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHUKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZS
R0JBOFRvUkdCQTMyRihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHVucGFjazxEYXRhRm9ybWF0UkdCQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC03NjcsNyArNzM5LDcg
QEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE4VG9SR0JBMzJGKGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93
T2ZCR1JBOFRvUkdCQTMyRihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxEYXRhRm9ybWF0QkdSQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC03ODAsNyArNzUy
LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkJHUkE4VG9SR0JBMzJGKGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25l
Um93T2ZSR0IzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPERhdGFGb3JtYXRSR0IzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQq
IHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTc5Miw3ICs3NjQsNyBAQCB2b2lk
IHVucGFja09uZVJvd09mUkdCMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0
KiBkZXN0aW5hdGlvbiwgdW5zaQogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlIzMkZU
b1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PERhdGFGb3JtYXRSMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbMF07CkBAIC04MDQsNyArNzc2LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dP
ZlIzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSQTMyRlRvUkdCQTMyRihjb25z
dCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8RGF0YUZvcm1hdFJB
MzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3Vy
Y2VbMF07CkBAIC04MTYsNyArNzg4LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJBMzJGVG9SR0JB
MzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWcKICAgICB9
CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxEYXRhRm9ybWF0QTMyRiwgZmxvYXQsIGZs
b2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gMDsKQEAgLTgzMiw3ICs4MDQs
MTMgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkEzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ24KIC8vIFBpeGVsIHBhY2tpbmcgcm91dGluZXMu
CiAvLwogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9BOChjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8aW50IGZvcm1hdCwgaW50IGFscGhhT3AsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1l
IERzdFR5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgcGFjayhjb25zdCBTb3VyY2VUeXBlKiwgRHN0
VHlwZSosIHVuc2lnbmVkKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRBOCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVszXTsKQEAgLTg0MSw3ICs4MTksNyBAQCB2b2lk
IHBhY2tPbmVSb3dPZlJHQkE4VG9BOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZAogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRv
UjgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0
YUZvcm1hdFI4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpA
QCAtODUwLDcgKzgyOCw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1I4KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkCiAgICAgfQogfQogCi12
b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSOCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC04NjIs
NyArODQwLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUjhQcmVtdWx0aXBseShjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW8KIH0KIAogLy8gRklYTUU6IHRoaXMg
cm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93T2ZS
R0JBOFRvUjhVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11
bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7
CkBAIC04NzMsNyArODUxLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUjhVbm11bHRpcGx5
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAK
LXZvaWQgcGFja09uZVJvd09mUkdCQThUb1JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0UkE4LCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtODgzLDcgKzg2MSw3IEBAIHZvaWQgcGFja09u
ZVJvd09mUkdCQThUb1JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SQThQcmVt
dWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxEYXRhRm9ybWF0UkE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCB1
aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTg5Niw3ICs4NzQsNyBAQCB2b2lkIHBhY2tPbmVSb3dP
ZlJHQkE4VG9SQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aQogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJl
IHJlbW92ZWQuCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SQThVbm11bHRpcGx5KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSQTgs
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4o
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVsz
XSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOwpAQCAtOTA4LDcgKzg4Niw3IEBAIHZvaWQg
cGFja09uZVJvd09mUkdCQThUb1JBOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9S
R0I4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERh
dGFGb3JtYXRSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBd
OwpAQCAtOTE5LDcgKzg5Nyw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQjgoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduCiAgICAgfQogfQog
Ci12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0YUZvcm1hdFJHQjgsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpA
QCAtOTM1LDcgKzkxMyw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQjhQcmVtdWx0aXBs
eShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0CiB9CiAKIC8vIEZJWE1F
OiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXZvaWQgcGFja09u
ZVJvd09mUkdCQThUb1JHQjhVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10gPyBzb3VyY2VbM10gLyAyNTUu
MGYgOiAxLjBmKTsKQEAgLTk1MCw3ICs5MjgsMjAgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRv
UkdCOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGkK
ICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQkE4UHJlbXVsdGlwbHkoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBp
eGVsc1BlclJvdykKKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxEYXRhRm9y
bWF0UkdCQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgdWludDhfdCwgdWlu
dDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAg
ICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbMV07CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
c291cmNlWzJdOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICAgICAg
c291cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0JBOCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC05
NjcsNyArOTU4LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmEKIH0KIAogLy8gRklYTUU6IHRo
aXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93
T2ZSR0JBOFRvUkdCQThVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBm
IDogMS4wZik7CkBAIC05ODMsNyArOTc0LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdC
QThVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXQKICAg
ICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0
UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgdWludDhfdCwgdWlu
dDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAg
IFNJTUQ6OnBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NChzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtOTk4LDcgKzk4OSw3IEBAIHZvaWQgcGFja09uZVJv
d09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNo
b3J0NDQ0NFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC0xMDE1LDcgKzEwMDYs
NyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFByZW11bHRpcGx5
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludAogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5l
IGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9V
bnNpZ25lZFNob3J0NDQ0NFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10gPyBzb3VyY2VbM10g
LyAyNTUuMGYgOiAxLjBmKTsKQEAgLTEwMzEsNyArMTAyMiw3IEBAIHZvaWQgcGFja09uZVJvd09m
UkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQxCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0
NTU1MShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
RGF0YUZvcm1hdFJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVp
bnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoc291
cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTEwNDYsNyArMTAzNyw3IEBAIHZv
aWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxKGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDE2X3QqIGRlc3RpCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4
VG9VbnNpZ25lZFNob3J0NTU1MVByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0UkdCQTU1NTEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC0x
MDYzLDcgKzEwNTQsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1
MVByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludAogfQogCiAvLyBGSVhNRTog
dGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi12b2lkIHBhY2tPbmVS
b3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MVVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0JBNTU1MSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10g
PyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKQEAgLTEwNzksNyArMTA3MCw3IEBAIHZvaWQg
cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxVW5tdWx0aXBseShjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQxCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9V
bnNpZ25lZFNob3J0NTY1KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxEYXRhRm9ybWF0UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05v
dGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9y
dDU2NShzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtMTA5Myw3ICsxMDg0
LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NShjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW4KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJv
d09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0YUZvcm1hdFJHQjU2NSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsK
QEAgLTExMDksNyArMTEwMCw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hv
cnQ1NjVQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxCiB9CiAKIC8vIEZJ
WE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXZvaWQgcGFj
a09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93
KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0UkdCNTY1LCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVsz
XSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOwpAQCAtMTEyNCw3ICsxMTE1LDcgQEAgdm9p
ZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVVubXVsdGlwbHkoY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50MTYKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMy
RlRvUkdCMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
RGF0YUZvcm1hdFJHQjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9h
dCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBA
IC0xMTM1LDcgKzExMjYsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQjMyRihjb25z
dCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbgogICAgIH0KIH0KIAot
dm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSR0IzMkYsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTExNDcsNyArMTEzOCw3
IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGUHJlbXVsdGlwbHkoY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0CiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dP
ZlJHQkEzMkZUb1JHQjMyRlVubXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxEYXRhRm9ybWF0UkdCMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTE2MCw3
ICsxMTUxLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0IzMkZVbm11bHRpcGx5KGNv
bnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGkKIH0KIAogLy8gVXNlZCBvbmx5IGR1
cmluZyBSR0JBOCBvciBCR1JBOCAtPiBmbG9hdGluZy1wb2ludCB1cGxvYWRzLgotdm9pZCBwYWNr
T25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8RGF0YUZvcm1hdFJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gc291cmNlWzBdOwpAQCAtMTE3Miw3ICsxMTYzLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JB
MzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWcKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCQTMyRlByZW11bHRp
cGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0YUZv
cm1hdFJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIGZsb2F0
LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsK
QEAgLTExODUsNyArMTE3Niw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCQTMyRlBy
ZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hCiAgICAgfQogfQog
Ci12b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0YUZvcm1hdFJHQkEzMkYsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVsz
XSA6IDEuMGY7CkBAIC0xMTk4LDcgKzExODksNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZU
b1JHQkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdAog
ICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9BMzJGKGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8RGF0YUZvcm1hdEEzMkYsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzNdOwpAQCAtMTIwNyw3ICsxMTk4LDcgQEAgdm9pZCBw
YWNrT25lUm93T2ZSR0JBMzJGVG9BMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRv
UjMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGlu
dCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFG
b3JtYXRSMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9h
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTEyMTYs
NyArMTIwNyw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkCiAgICAgfQogfQogCi12b2lkIHBh
Y2tPbmVSb3dPZlJHQkEzMkZUb1IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSMzJGLCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0xMjI2LDcgKzEyMTcsNyBAQCB2b2lkIHBh
Y2tPbmVSb3dPZlJHQkEzMkZUb1IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdGluYXRpbwogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9S
MzJGVW5tdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPERhdGFGb3JtYXRSMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTIzNiw3ICsxMjI3LDcgQEAgdm9p
ZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SMzJGVW5tdWx0aXBseShjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMy
RlRvUkEzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxE
YXRhRm9ybWF0UkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgZmxvYXQs
IGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAt
MTI0Niw3ICsxMjM3LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SQTMyRihjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmUKICAgICB9CiB9CiAKLXZv
aWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPERhdGFGb3JtYXRSQTMyRiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtMTI1Nyw3ICsxMjQ4LDcgQEAg
dm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SQTMyRlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGkKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdC
QTMyRlRvUkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8RGF0YUZvcm1hdFJBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1Vu
bXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTI2OCw1NDYgKzEy
NTksNjA0IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkZVbm11bHRpcGx5KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvCiAgICAgfQogfQogCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKK0FMV0FZU19JTkxJTkUgYm9vbCBIYXNBbHBoYShpbnQgZm9ybWF0KQor
eworICAgIHJldHVybiBmb3JtYXQgPT0gRGF0YUZvcm1hdEE4CisgICAgICAgIHx8IGZvcm1hdCA9
PSBEYXRhRm9ybWF0QTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0QTE2
QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0QTMyRgorICAgICAgICB8fCBmb3Jt
YXQgPT0gRGF0YUZvcm1hdFJBOAorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEFSOAor
ICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFJBMTZMaXR0bGUKKyAgICAgICAgfHwgZm9y
bWF0ID09IERhdGFGb3JtYXRSQTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0
QVIxNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEFSMTZCaWcKKyAgICAg
ICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRSQTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0
YUZvcm1hdFJHQkE4CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2TGl0dGxl
CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IGZv
cm1hdCA9PSBEYXRhRm9ybWF0QkdSQTgKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRC
R1JBMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRCR1JBMTZCaWcKKyAg
ICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRBUkdCOAorICAgICAgICB8fCBmb3JtYXQgPT0g
RGF0YUZvcm1hdEFSR0IxNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEFS
R0IxNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEFCR1I4CisgICAgICAgIHx8
IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZv
cm1hdFJHQkE0NDQ0CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTU1NTE7Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBIYXNDb2xvcihpbnQgZm9ybWF0KQoreworICAgIHJldHVy
biBmb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkE4CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9y
bWF0UkdCQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2Qmln
CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTMyRgorICAgICAgICB8fCBmb3Jt
YXQgPT0gRGF0YUZvcm1hdFJHQjgKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRSR0Ix
NkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFJHQjE2QmlnCisgICAgICAg
IHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRh
Rm9ybWF0QkdSOAorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEJHUkE4CisgICAgICAg
IHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0QkdSQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9
PSBEYXRhRm9ybWF0QkdSQTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0QVJH
QjgKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRBUkdCMTZMaXR0bGUKKyAgICAgICAg
fHwgZm9ybWF0ID09IERhdGFGb3JtYXRBUkdCMTZCaWcKKyAgICAgICAgfHwgZm9ybWF0ID09IERh
dGFGb3JtYXRBQkdSOAorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkE1NTUxCisg
ICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTQ0NDQKKyAgICAgICAgfHwgZm9ybWF0
ID09IERhdGFGb3JtYXRSR0I1NjUKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRSOAor
ICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFIxNkxpdHRsZQorICAgICAgICB8fCBmb3Jt
YXQgPT0gRGF0YUZvcm1hdFIxNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFIz
MkYKKyAgICAgICAgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRSQTgKKyAgICAgICAgfHwgZm9ybWF0
ID09IERhdGFGb3JtYXRSQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0
UkExNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdFJBMzJGCisgICAgICAgIHx8
IGZvcm1hdCA9PSBEYXRhRm9ybWF0QVI4CisgICAgICAgIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0
QVIxNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEFSMTZCaWc7Cit9CisK
K3RlbXBsYXRlPGludCBGb3JtYXQ+CitzdHJ1Y3QgSXNGbG9hdEZvcm1hdCB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgVmFsdWUgPQorICAgICAgICBGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkEzMkYK
KyAgICAgICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRSR0IzMkYKKyAgICAgICAgfHwgRm9ybWF0
ID09IERhdGFGb3JtYXRSQTMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdFIzMkYK
KyAgICAgICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRBMzJGOworfTsKKwordGVtcGxhdGU8aW50
IEZvcm1hdD4KK3N0cnVjdCBJczE2YnBwRm9ybWF0IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBW
YWx1ZSA9CisgICAgICAgIEZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2TGl0dGxlCisgICAgICAg
IHx8IEZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IEZvcm1hdCA9PSBE
YXRhRm9ybWF0UkdCMTZMaXR0bGUKKyAgICAgICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRSR0Ix
NkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdEJHUkExNkxpdHRsZQorICAgICAg
ICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdEJHUkExNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0g
RGF0YUZvcm1hdEFSR0IxNkxpdHRsZQorICAgICAgICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdEFS
R0IxNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkE1NTUxCisgICAgICAg
IHx8IEZvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTQ0NDQKKyAgICAgICAgfHwgRm9ybWF0ID09IERh
dGFGb3JtYXRSR0I1NjUKKyAgICAgICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRSMTZMaXR0bGUK
KyAgICAgICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRSMTZCaWcKKyAgICAgICAgfHwgRm9ybWF0
ID09IERhdGFGb3JtYXRSQTE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBEYXRhRm9ybWF0
UkExNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gRGF0YUZvcm1hdEFSMTZMaXR0bGUKKyAgICAg
ICAgfHwgRm9ybWF0ID09IERhdGFGb3JtYXRBUjE2QmlnCisgICAgICAgIHx8IEZvcm1hdCA9PSBE
YXRhRm9ybWF0QTE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBEYXRhRm9ybWF0QTE2Qmln
OworfTsKKwordGVtcGxhdGU8aW50IEZvcm1hdCwgYm9vbCBJc0Zsb2F0ID0gSXNGbG9hdEZvcm1h
dDxGb3JtYXQ+OjpWYWx1ZSwgYm9vbCBJczE2YnBwID0gSXMxNmJwcEZvcm1hdDxGb3JtYXQ+OjpW
YWx1ZT4KK3N0cnVjdCBEYXRhVHlwZUZvckZvcm1hdCB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5
cGU7Cit9OworCit0ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0
PEZvcm1hdCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0eXBlZGVmIGZsb2F0IFR5cGU7Cit9OworCit0
ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgZmFs
c2UsIHRydWU+IHsKKyAgICB0eXBlZGVmIHVpbnQxNl90IFR5cGU7Cit9OworCit0ZW1wbGF0ZTxp
bnQgRm9ybWF0Pgorc3RydWN0IEludGVybWVkaWF0ZUZvcm1hdCB7CisgICAgc3RhdGljIGNvbnN0
IGludCBWYWx1ZSA9IElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUgPyBEYXRhRm9ybWF0UkdC
QTMyRiA6IERhdGFGb3JtYXRSR0JBODsKK307CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgVGV4
ZWxCeXRlc0ZvckZvcm1hdChpbnQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBEYXRhRm9ybWF0Ujg6CisgICAgY2FzZSBEYXRhRm9ybWF0QTg6CisgICAgICAgIHJl
dHVybiAxOworICAgIGNhc2UgRGF0YUZvcm1hdFJBODoKKyAgICBjYXNlIERhdGFGb3JtYXRBUjg6
CisgICAgY2FzZSBEYXRhRm9ybWF0UkdCQTU1NTE6CisgICAgY2FzZSBEYXRhRm9ybWF0UkdCQTQ0
NDQ6CisgICAgY2FzZSBEYXRhRm9ybWF0UkdCNTY1OgorICAgIGNhc2UgRGF0YUZvcm1hdFIxNkxp
dHRsZToKKyAgICBjYXNlIERhdGFGb3JtYXRSMTZCaWc6CisgICAgY2FzZSBEYXRhRm9ybWF0QTE2
TGl0dGxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEExNkJpZzoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBEYXRhRm9ybWF0UkdCODoKKyAgICBjYXNlIERhdGFGb3JtYXRCR1I4OgorICAgICAg
ICByZXR1cm4gMzsKKyAgICBjYXNlIERhdGFGb3JtYXRSR0JBODoKKyAgICBjYXNlIERhdGFGb3Jt
YXRBUkdCODoKKyAgICBjYXNlIERhdGFGb3JtYXRBQkdSODoKKyAgICBjYXNlIERhdGFGb3JtYXRS
QTE2TGl0dGxlOgorICAgIGNhc2UgRGF0YUZvcm1hdFJBMTZCaWc6CisgICAgY2FzZSBEYXRhRm9y
bWF0QkdSQTg6CisgICAgY2FzZSBEYXRhRm9ybWF0UjMyRjoKKyAgICBjYXNlIERhdGFGb3JtYXRB
MzJGOgorICAgIGNhc2UgRGF0YUZvcm1hdEFSMTZMaXR0bGU6CisgICAgY2FzZSBEYXRhRm9ybWF0
QVIxNkJpZzoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBEYXRhRm9ybWF0UkdCMTZMaXR0
bGU6CisgICAgY2FzZSBEYXRhRm9ybWF0UkdCMTZCaWc6CisgICAgICAgIHJldHVybiA2OworICAg
IGNhc2UgRGF0YUZvcm1hdFJBMzJGOgorICAgIGNhc2UgRGF0YUZvcm1hdFJHQkExNkxpdHRsZToK
KyAgICBjYXNlIERhdGFGb3JtYXRSR0JBMTZCaWc6CisgICAgY2FzZSBEYXRhRm9ybWF0QkdSQTE2
TGl0dGxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEJHUkExNkJpZzoKKyAgICBjYXNlIERhdGFGb3Jt
YXRBUkdCMTZMaXR0bGU6CisgICAgY2FzZSBEYXRhRm9ybWF0QVJHQjE2QmlnOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICBjYXNlIERhdGFGb3JtYXRSR0IzMkY6CisgICAgICAgIHJldHVybiAxMjsK
KyAgICBjYXNlIERhdGFGb3JtYXRSR0JBMzJGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQogCi0vLyBUaGlzIGlzIHVzZWQgd2hl
bmV2ZXIgdW5wYWNraW5nIGlzIG5lY2Vzc2FyeTsgaS5lLiwgdGhlIHNvdXJjZSBkYXRhCi0vLyBp
cyBub3QgaW4gUkdCQTgvUkdCQTMyRiBmb3JtYXQsIG9yIHRoZSB1bnBhY2sgYWxpZ25tZW50IHNw
ZWNpZmllcwotLy8gdGhhdCByb3dzIGFyZSBub3QgdGlnaHRseSBwYWNrZWQuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBJbnRlcm1lZGlhdGVUeXBlLCB0eXBlbmFtZSBE
ZXN0VHlwZT4KLXN0YXRpYyB2b2lkIGRvVW5wYWNraW5nQW5kUGFja2luZyhjb25zdCBTb3VyY2VU
eXBlKiBzb3VyY2VEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KCpyb3dVbnBhY2tpbmdGdW5jKShjb25zdCBTb3VyY2VUeXBlKiwgSW50ZXJtZWRpYXRlVHlwZSos
IHVuc2lnbmVkIGludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZUVsZW1lbnRzUGVyUm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc3RUeXBlKiBkZXN0aW5hdGlvbkRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAoKnJvd1BhY2tpbmdGdW5jKShjb25zdCBJbnRlcm1lZGlhdGVUeXBlKiwg
RGVzdFR5cGUqLCB1bnNpZ25lZCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpCi17Ci0gICAgaWYg
KCFyb3dQYWNraW5nRnVuYykgewotICAgICAgICAvLyBUaGUgcm93IHBhY2tpbmcgaXMgdHJpdmlh
bCwgc28gZG9uJ3QgYm90aGVyIHdpdGggYSB0ZW1wb3JhcnkgYnVmZmVyLgotICAgICAgICBjb25z
dCBTb3VyY2VUeXBlKiBlbmRQb2ludGVyID0gc291cmNlRGF0YSArIGhlaWdodCAqIHNvdXJjZUVs
ZW1lbnRzUGVyUm93OwotICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1Bl
clJvdyA9IHdpZHRoICogZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOwotICAgICAgICB3aGls
ZSAoc291cmNlRGF0YSA8IGVuZFBvaW50ZXIpIHsKLSAgICAgICAgICAgIHJvd1VucGFja2luZ0Z1
bmMoc291cmNlRGF0YSwgcmVpbnRlcnByZXRfY2FzdDxJbnRlcm1lZGlhdGVUeXBlKj4oZGVzdGlu
YXRpb25EYXRhKSwgd2lkdGgpOwotICAgICAgICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVt
ZW50c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVs
ZW1lbnRzUGVyUm93OworY2xhc3MgRm9ybWF0Q29udmVydGVyIHsKKyAgICBjb25zdCB1bnNpZ25l
ZCBtV2lkdGgsIG1IZWlnaHQ7CisgICAgY29uc3Qgdm9pZCogY29uc3QgbVNyY1N0YXJ0OworICAg
IHZvaWQqIGNvbnN0IG1Ec3RTdGFydDsKKyAgICBjb25zdCBpbnQgbVNyY1N0cmlkZSwgbURzdFN0
cmlkZTsKKyAgICBib29sIG1TdWNjZXNzOworCisgICAgLyoKKyAgICAgKiBUaGVyZSBhcmUgaHVu
ZHJlZHMgb2YgaW5zdGFuY2VzIGZvciB0aGlzIHRlbXBsYXRlIGZ1bmN0aW9uIGFuZCBpdCBpcyBp
bXBvcnRhbnQgdG8gYXZvaWQgY29kZSBibG9hdC4gSW4gcGFydGljdWxhciwgbWFueQorICAgICAq
IGluc3RhbnRpYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gdGVtcGxhdGUgd2lsbCBuZXZlciBiZSBj
YWxsZWQsIHNvIHdlIHRyeQorICAgICAqIHRvIHJldHVybiBpbW1lZGlhdGVseSBpbiB0aGVzZSBj
YXNlcyB0byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gYXZvaWQgZ2VuZXJhdGluZworICAgICAqIHVz
ZWxlc3MgY29kZS4KKyAgICAgKi8KKworICAgIHRlbXBsYXRlPERhdGFGb3JtYXQgU3JjRm9ybWF0
LCBEYXRhRm9ybWF0IERzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFP
cD4KKyAgICB2b2lkIGNvbnZlcnQoKQorICAgIHsKKyAgICAgICAgaWYgKFNyY0Zvcm1hdCA9PSBE
c3RGb3JtYXQgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcp
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKElzRmxvYXRGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFs
dWUgJiYgIUlzRmxvYXRGb3JtYXQ8U3JjRm9ybWF0Pjo6VmFsdWUgJiYgU3JjRm9ybWF0ICE9IERh
dGFGb3JtYXRSR0JBOCAmJiBTcmNGb3JtYXQgIT0gRGF0YUZvcm1hdEJHUkE4KSB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSAmJiBJc0Zs
b2F0Rm9ybWF0PFNyY0Zvcm1hdD46OlZhbHVlKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9u
bHkgdGV4dHVyZXMgdXBsb2FkZWQgZnJvbSBET00gZWxlbWVudHMgb3IgSW1hZ2VEYXRhIGNhbiBh
bGxvdyBEc3RGb3JtYXQgIT0gU3JjRm9ybWF0LgorICAgICAgICAvLyBJbWFnZURhdGEgaXMgYWx3
YXlzIFJHQkE4LgorICAgICAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIERPTSBlbGVtZW50cyB2YXJ5
IHdpdGggR3JhcGhpY3MgcG9ydHMuIEl0IGNhbiBvbmx5IGJlIFJHQkE4IG9yIEJHUkE4IGZvciBu
b24tQ0cgcG9ydCB3aGlsZSBtdWNoIG1vcmUgZm9yIENHLgorI2lmIFVTRShDRykKKyAgICAgICAg
Y29uc3QgYm9vbCBDYW5TcmNGb3JtYXRDb21lRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YSA9IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0QkdSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0JB
OAorICAgICAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRBQkdSOCB8fCBTcmNGb3Jt
YXQgPT0gRGF0YUZvcm1hdEFSR0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QVJHQjE2TGl0
dGxlCisgICAgICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdEFSR0IxNkJpZyB8fCBT
cmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkExNkxpdHRsZSB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdFJHQkExNkJpZworICAgICAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0Ix
NkxpdHRsZSB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQjE2QmlnIHx8IFNyY0Zvcm1hdCA9
PSBEYXRhRm9ybWF0QkdSOAorICAgICAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRS
R0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXRBMTZMaXR0bGUKKyAgICAgICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QTE2Qmln
OworI2Vsc2UKKyAgICAgICAgY29uc3QgYm9vbCBDYW5TcmNGb3JtYXRDb21lRnJvbURPTUVsZW1l
bnRPckltYWdlRGF0YSA9IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QkdSQTggfHwgU3JjRm9ybWF0
ID09IERhdGFGb3JtYXRSR0JBODsKKyNlbmRpZgorICAgICAgICBpZiAoIUNhblNyY0Zvcm1hdENv
bWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIFNyY0Zvcm1hdCAhPSBEc3RGb3JtYXQpIHsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgT3duQXJyYXlQdHI8SW50ZXJtZWRpYXRl
VHlwZT4gdGVtcG9yYXJ5UkdCQURhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyBJbnRlcm1lZGlhdGVU
eXBlW3dpZHRoICogNF0pOwotICAgICAgICBjb25zdCBTb3VyY2VUeXBlKiBlbmRQb2ludGVyID0g
c291cmNlRGF0YSArIGhlaWdodCAqIHNvdXJjZUVsZW1lbnRzUGVyUm93OwotICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclJvdyA9IHdpZHRoICogZGVzdGluYXRpb25F
bGVtZW50c1BlclBpeGVsOwotICAgICAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50ZXIp
IHsKLSAgICAgICAgICAgIHJvd1VucGFja2luZ0Z1bmMoc291cmNlRGF0YSwgdGVtcG9yYXJ5UkdC
QURhdGEuZ2V0KCksIHdpZHRoKTsKLSAgICAgICAgICAgIHJvd1BhY2tpbmdGdW5jKHRlbXBvcmFy
eVJHQkFEYXRhLmdldCgpLCBkZXN0aW5hdGlvbkRhdGEsIHdpZHRoKTsKLSAgICAgICAgICAgIHNv
dXJjZURhdGEgKz0gc291cmNlRWxlbWVudHNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGEgKz0gZGVzdGluYXRpb25FbGVtZW50c1BlclJvdzsKKworICAgICAgICAvLyBMaWtld2lz
ZSwgb25seSB0ZXh0dXJlcyB1cGxvYWRlZCBmcm9tIERPTSBlbGVtZW50cyBvciBJbWFnZURhdGEg
Y2FuIHBvc3NpYmx5IGhhdmUgdG8gYmUgdW5wcmVtdWx0aXBsaWVkLgorICAgICAgICBpZiAoIUNh
blNyY0Zvcm1hdENvbWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIGFscGhhT3AgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5KSB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAg
IGlmICgoIUhhc0FscGhhKFNyY0Zvcm1hdCkgfHwgIUhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwgIUhh
c0NvbG9yKERzdEZvcm1hdCkpICYmIGFscGhhT3AgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
RG9Ob3RoaW5nKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5
cGVGb3JGb3JtYXQ8U3JjRm9ybWF0Pjo6VHlwZSBTcmNUeXBlOworICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIERhdGFUeXBlRm9yRm9ybWF0PERzdEZvcm1hdD46OlR5cGUgRHN0VHlwZTsKKworICAg
ICAgICBjb25zdCBpbnQgSW50ZXJtZWRpYXRlU3JjRm9ybWF0ID0gSW50ZXJtZWRpYXRlRm9ybWF0
PFNyY0Zvcm1hdD46OlZhbHVlOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIERhdGFUeXBlRm9y
Rm9ybWF0PEludGVybWVkaWF0ZVNyY0Zvcm1hdD46OlR5cGUgSW50ZXJtZWRpYXRlU3JjVHlwZTsK
KworICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB0aGUgc3RyaWRlcyBhcmUgbXVsdGlwbGVzIG9m
IHRoZSBzaXplb2Ygb2YgcmVzcGVjdGl2ZSB0eXBlcy4KKyAgICAgICAgLy8gQnV0IGl0IG1pZ2h0
IG5vdCBiZSB0cnVlIGZvcmV2ZXIgYW5kIGlmIGl0IGV2ZW50dWFsbHkgYmVjb21lcyB3cm9uZywg
d2UnbGwgaGF2ZSB0byByZXZlcnQKKyAgICAgICAgLy8gdG8gYWx3YXlzIGl0ZXJhdGluZyB1c2lu
ZyB1aW50OF90KiBwb2ludGVycyByZWdhcmRsZXNzIG9mIHRoZSB0eXBlcyBhdCBoYW5kLgorICAg
ICAgICBjb25zdCBwdHJkaWZmX3Qgc3JjU3RyaWRlSW5FbGVtZW50cyA9IG1TcmNTdHJpZGUgLyBz
aXplb2YoU3JjVHlwZSk7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVsZW1l
bnRzID0gbURzdFN0cmlkZSAvIHNpemVvZihEc3RUeXBlKTsKKworICAgICAgICBjb25zdCBTcmNU
eXBlICpzcmNSb3dTdGFydCA9IHN0YXRpY19jYXN0PGNvbnN0IFNyY1R5cGUqPihtU3JjU3RhcnQp
OworICAgICAgICBEc3RUeXBlKiBkc3RSb3dTdGFydCA9IHN0YXRpY19jYXN0PERzdFR5cGUqPiht
RHN0U3RhcnQpOworCisgICAgICAgIGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0UkdCQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0JBMzJGOwor
ICAgICAgICBjb25zdCBib29sIHRyaXZpYWxQYWNrID0gKERzdEZvcm1hdCA9PSBEYXRhRm9ybWF0
UkdCQTggfHwgRHN0Rm9ybWF0ID09IERhdGFGb3JtYXRSR0JBMzJGKSAmJiBhbHBoYU9wID09IEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiBtRHN0U3RyaWRlID4gMDsKKworICAg
ICAgICBjb25zdCBzaXplX3QgTnVtRWxlbWVudHNQZXJJbnRlcm1lZGlhdGVTcmNGb3JtYXQgPSBU
ZXhlbEJ5dGVzRm9yRm9ybWF0KEludGVybWVkaWF0ZVNyY0Zvcm1hdCkgLyBzaXplb2YoSW50ZXJt
ZWRpYXRlU3JjVHlwZSk7CisgICAgICAgIE93bkFycmF5UHRyPEludGVybWVkaWF0ZVNyY1R5cGU+
IHVucGFja2VkU3JjRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IEludGVybWVkaWF0ZVNyY1R5cGVb
bVdpZHRoICogTnVtRWxlbWVudHNQZXJJbnRlcm1lZGlhdGVTcmNGb3JtYXRdKTsKKyAgICAgICAg
aWYgKCF1bnBhY2tlZFNyY0RhdGEuZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtSGVpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFNyY1R5
cGUgKnNyY1B0ciA9IHNyY1Jvd1N0YXJ0OworICAgICAgICAgICAgRHN0VHlwZSogZHN0UHRyID0g
ZHN0Um93U3RhcnQ7CisKKyAgICAgICAgICAgIGlmICghdHJpdmlhbFVucGFjaykgeworICAgICAg
ICAgICAgICAgIGlmICh0cml2aWFsUGFjaykKKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrPFNy
Y0Zvcm1hdD4oc3JjUHRyLCBkc3RQdHIsIG1XaWR0aCk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICB1bnBhY2s8U3JjRm9ybWF0PihzcmNQdHIsIHVucGFja2VkU3Jj
RGF0YS5nZXQoKSwgbVdpZHRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF0
cml2aWFsUGFjaykgeworICAgICAgICAgICAgICAgIGlmICh0cml2aWFsVW5wYWNrKQorICAgICAg
ICAgICAgICAgICAgICBwYWNrPERzdEZvcm1hdCwgYWxwaGFPcD4oc3JjUHRyLCBkc3RQdHIsIG1X
aWR0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwYWNrPERz
dEZvcm1hdCwgYWxwaGFPcD4odW5wYWNrZWRTcmNEYXRhLmdldCgpLCBkc3RQdHIsIG1XaWR0aCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNSb3dTdGFydCArPSBzcmNTdHJpZGVJbkVs
ZW1lbnRzOworICAgICAgICAgICAgZHN0Um93U3RhcnQgKz0gZHN0U3RyaWRlSW5FbGVtZW50czsK
KyAgICAgICAgfQorCisgICAgICAgIG1TdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLX0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU291cmNlVHlwZT4KLXN0YXRpYyB1bnNpZ25l
ZCBpbnQgY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93KHVuc2lnbmVkIGludCB3aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBieXRlc1BlclBpeGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHVucGFja0FsaWdubWVudCkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgZWxlbWVudFNpemVJbkJ5dGVzID0gc2l6ZW9mKFNvdXJjZVR5cGUpOwotICAgIEFTU0VSVChl
bGVtZW50U2l6ZUluQnl0ZXMgPD0gYnl0ZXNQZXJQaXhlbCk7Ci0gICAgQVNTRVJUKCEoYnl0ZXNQ
ZXJQaXhlbCAlIGVsZW1lbnRTaXplSW5CeXRlcykpOwotICAgIHVuc2lnbmVkIGludCB2YWxpZFJv
d0J5dGVzID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwotICAgIHVuc2lnbmVkIGludCB0b3RhbFJv
d0J5dGVzID0gdmFsaWRSb3dCeXRlczsKLSAgICBpZiAodW5wYWNrQWxpZ25tZW50KSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCByZW1haW5kZXIgPSB2YWxpZFJvd0J5dGVzICUgdW5wYWNrQWxpZ25t
ZW50OwotICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAgdG90YWxSb3dCeXRlcyAr
PSAodW5wYWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKTsKKyAgICB0ZW1wbGF0ZTxEYXRhRm9ybWF0
IFNyY0Zvcm1hdCwgRGF0YUZvcm1hdCBEc3RGb3JtYXQ+CisgICAgdm9pZCBjb252ZXJ0KEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3ApCisgICAgeworI2RlZmluZSBGT1JNQVRDT05W
RVJURVJfQ0FTRV9BTFBIQU9QKGFscGhhT3ApIFwKKyAgICBjYXNlIGFscGhhT3A6IFwKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0LCBEc3RGb3JtYXQsIGFscGhhT3A+KCk7CisKKyAg
ICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZykKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Q
cmVtdWx0aXBseSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5KQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyN1bmRlZiBGT1JNQVRD
T05WRVJURVJfQ0FTRV9BTFBIQU9QCisgICAgfQorCisgICAgdGVtcGxhdGU8RGF0YUZvcm1hdCBT
cmNGb3JtYXQ+CisgICAgdm9pZCBjb252ZXJ0KERhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wKQorICAgIHsKKyNkZWZpbmUgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKERzdEZvcm1hdCkgXAorICAgIGNhc2UgRHN0Rm9ybWF0OiBcCisg
ICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9ybWF0PihhbHBoYU9wKTsKKwor
ICAgICAgICBzd2l0Y2ggKGRzdEZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfRFNURk9STUFUKERhdGFGb3JtYXRSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX0RTVEZPUk1BVChEYXRhRm9ybWF0QTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9EU1RGT1JNQVQoRGF0YUZvcm1hdFIzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoRGF0YUZvcm1hdEEzMkYpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoRGF0YUZvcm1hdFJBOCkKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChEYXRhRm9ybWF0UkEzMkYpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoRGF0YUZvcm1hdFJHQjgpCisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoRGF0YUZvcm1hdFJHQjU2NSkKKyAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChEYXRhRm9ybWF0UkdCMzJGKQor
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKERhdGFGb3JtYXRSR0JB
OCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChEYXRhRm9ybWF0
UkdCQTU1NTEpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoRGF0
YUZvcm1hdFJHQkE0NDQ0KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKERhdGFGb3JtYXRSR0JBMzJGKQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworI3VuZGVmIEZPUk1BVENPTlZFUlRFUl9D
QVNFX0RTVEZPUk1BVAorICAgIH0KKworcHVibGljOgorCisgICAgdm9pZCBjb252ZXJ0KERhdGFG
b3JtYXQgc3JjRm9ybWF0LCBEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3AgYWxwaGFPcCkKKyAgICB7CisjZGVmaW5lIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NS
Q0ZPUk1BVChTcmNGb3JtYXQpIFwKKyAgICBjYXNlIFNyY0Zvcm1hdDogXAorICAgICAgICByZXR1
cm4gY29udmVydDxTcmNGb3JtYXQ+KGRzdEZvcm1hdCwgYWxwaGFPcCk7CisKKyAgICAgICAgc3dp
dGNoIChzcmNGb3JtYXQpIHsKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZP
Uk1BVChEYXRhRm9ybWF0UjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoRGF0YUZvcm1hdEE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUKERhdGFGb3JtYXRSMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
U1JDRk9STUFUKERhdGFGb3JtYXRBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfU1JDRk9STUFUKERhdGFGb3JtYXRSQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1hdFJBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRCR1I4KSAvLyBzb3VyY2UgZm9ybWF0IG9u
bHkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0
UkdCNTY1KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFG
b3JtYXRSR0IzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQo
RGF0YUZvcm1hdFJHQkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9S
TUFUKERhdGFGb3JtYXRSR0JBMTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1hdFJHQkExNkJpZykKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0UkdCMTZMaXR0bGUpCisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1hdFJHQjE2QmlnKQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRCR1JBMTZM
aXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoRGF0YUZv
cm1hdEJHUkExNkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChEYXRhRm9ybWF0QVJHQjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoRGF0YUZvcm1hdEFSR0IxNkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0QVJHQjE2QmlnKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRBQkdSOCkKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0QVI4KQorICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRSMTZMaXR0bGUpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1hdFIxNkJpZykK
KyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0UkEx
NkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRh
Rm9ybWF0UkExNkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChEYXRhRm9ybWF0QVIxNkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChEYXRhRm9ybWF0QVIxNkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0QTE2TGl0dGxlKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRBMTZCaWcpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1hdEJHUkE4KQorICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKERhdGFGb3JtYXRSR0JBNTU1MSkKKyAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChEYXRhRm9ybWF0UkdCQTQ0
NDQpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoRGF0YUZvcm1h
dFJHQkEzMkYpCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorCisjdW5kZWYgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
CiAgICAgfQotICAgIHJldHVybiB0b3RhbFJvd0J5dGVzIC8gZWxlbWVudFNpemVJbkJ5dGVzOwot
fQogCi0vLyBUaGlzIGhhbmRsZXMgYWxsIGNvbnZlcnNpb25zIHdpdGggYSBmYXN0ZXIgcGF0aCBm
b3IgdGlnaHRseSBwYWNrZWQgUkdCQTggc291cmNlIGRhdGEuCi10ZW1wbGF0ZTx0eXBlbmFtZSBE
ZXN0VHlwZT4KLXN0YXRpYyB2b2lkIGRvUGFja2luZyhjb25zdCB2b2lkKiBzb3VyY2VEYXRhLAot
ICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0
IHNvdXJjZURhdGFGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZVVucGFja0FsaWdubWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICBEZXN0VHlwZSogZGVzdGluYXRpb25EYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpyb3dQYWNraW5nRnVuYykoY29uc3QgdWludDhfdCosIERlc3RUeXBl
KiwgdW5zaWduZWQgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dGluYXRpb25FbGVtZW50c1BlclBpeGVsKQorICAgIEZvcm1hdENvbnZlcnRlcih1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAorICAgICAgICBjb25zdCB2b2lkKiBzcmNTdGFydCwgdm9p
ZCogZHN0U3RhcnQsIGludCBzcmNTdHJpZGUsIGludCBkc3RTdHJpZGUpCisgICAgICAgIDogbVdp
ZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtU3JjU3RhcnQoc3JjU3RhcnQpLCBtRHN0U3Rh
cnQoZHN0U3RhcnQpLCBtU3JjU3RyaWRlKHNyY1N0cmlkZSksIG1Ec3RTdHJpZGUoZHN0U3RyaWRl
KSwgbVN1Y2Nlc3MoZmFsc2UpCisgICAgeyB9CisKKyAgICBib29sIFN1Y2Nlc3MoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdWNjZXNzOworICAgIH0KK307CisKK0RhdGFGb3JtYXQg
Z2V0RHN0Rm9ybWF0KHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNpZ25lZCBkZXN0aW5h
dGlvblR5cGUpCiB7Ci0gICAgc3dpdGNoIChzb3VyY2VEYXRhRm9ybWF0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTg6IHsKLSAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVp
bnQ4X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBjb25zdCB1
aW50OF90KiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSk7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVuZFBvaW50ZXIgPSBzb3VyY2UgKyBoZWlnaHQgKiBz
b3VyY2VFbGVtZW50c1BlclJvdzsKLSAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRWxl
bWVudHNQZXJSb3cgPSB3aWR0aCAqIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbDsKLSAgICAg
ICAgd2hpbGUgKHNvdXJjZSA8IGVuZFBvaW50ZXIpIHsKLSAgICAgICAgICAgIGlmIChyb3dQYWNr
aW5nRnVuYykKLSAgICAgICAgICAgICAgICByb3dQYWNraW5nRnVuYyhzb3VyY2UsIGRlc3RpbmF0
aW9uRGF0YSwgd2lkdGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZSwgd2lkdGggKiA0KTsKLSAgICAgICAgICAgIHNvdXJj
ZSArPSBzb3VyY2VFbGVtZW50c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YSAr
PSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93OworICAgIERhdGFGb3JtYXQgZHN0Rm9ybWF0ID0g
RGF0YUZvcm1hdFJHQkE4OworICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChkZXN0
aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBEYXRhRm9ybWF0UkdCODsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gRGF0YUZvcm1hdFJHQkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gRGF0
YUZvcm1hdEE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IERhdGFGb3JtYXRSODsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBEYXRhRm9ybWF0UkE4OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTE2TGl0dGxlOiB7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1Bl
clJvdzx1aW50MTZfdD4od2lkdGgsIDgsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAg
IGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCQTE2
TGl0dGxlVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3Rp
bmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICAgICAgZHN0Rm9ybWF0ID0gRGF0YUZvcm1hdFJHQkE0NDQ0OwogICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTE2QmlnOiB7
Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3Vy
Y2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDgsIHNvdXJjZVVucGFja0FsaWdubWVu
dCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVz
dFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09u
ZVJvd09mUkdCQTE2QmlnVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJS
b3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQ
ZXJQaXhlbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICAgICAgZHN0Rm9ybWF0ID0gRGF0YUZvcm1hdFJHQkE1NTUxOwogICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdC
ODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRl
U291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDMsIHNvdXJjZVVucGFja0FsaWdu
bWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBE
ZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tP
bmVSb3dPZlJHQjhUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywg
ZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBp
eGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgICAgZHN0Rm9ybWF0ID0gRGF0YUZvcm1hdFJHQjU2NTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQjE2TGl0dGxl
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVT
b3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDYsIHNvdXJjZVVucGFja0FsaWdu
bWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwg
RGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFj
a09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50
c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVt
ZW50c1BlclBpeGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VT
X3RleHR1cmVfZmxvYXQKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBEYXRhRm9ybWF0UkdCMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBEYXRhRm9ybWF0
UkdCQTMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IERhdGFGb3JtYXRBMzJGOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IERhdGFGb3JtYXRSMzJGOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IERhdGFGb3JtYXRSQTMyRjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJj
ZUZvcm1hdFJHQjE2QmlnOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1Bl
clJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDYsIHNv
dXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50
MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291
cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVz
dGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICByZXR1cm4gZHN0Rm9ybWF0OworfQorCitE
YXRhRm9ybWF0IGdldFNyY0Zvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1h
dCBzb3VyY2VEYXRhRm9ybWF0KQoreworICAgIERhdGFGb3JtYXQgc291cmNlRm9ybWF0ID0gRGF0
YUZvcm1hdFJHQkE4OworICAgIHN3aXRjaCAoc291cmNlRGF0YUZvcm1hdCkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4OgorICAgICAgICBzb3VyY2VGb3Jt
YXQgPSBEYXRhRm9ybWF0UkdCQTg7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRCR1I4OiB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50
OF90Pih3aWR0aCwgMywgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tp
bmdBbmRQYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mQkdSOFRvUkdCQTgsIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tp
bmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkExNkxpdHRsZToKKyAgICAgICAgc291cmNlRm9ybWF0
ID0gRGF0YUZvcm1hdFJHQkExNkxpdHRsZTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSR0I4OiB7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJv
dzx1aW50OF90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9V
bnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mQVJHQjhUb1JHQkE4
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCBy
b3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBMTZCaWc6CisgICAgICAgIHNvdXJjZUZv
cm1hdCA9IERhdGFGb3JtYXRSR0JBMTZCaWc7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGU6IHsKLSAgICAg
ICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1l
bnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgOCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZB
UkdCMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywg
ZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBp
eGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBMzJGOgor
ICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0UkdCQTMyRjsKICAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSR0IxNkJp
ZzogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRl
U291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3Qs
IERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBh
Y2tPbmVSb3dPZkFSR0IxNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRz
UGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1l
bnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJH
Qjg6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRSR0I4OwogICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QUJHUjg6
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNv
dXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgdWludDhfdCwgRGVz
dFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25l
Um93T2ZBQkdSOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQjE2TGl0dGxl
OgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0UkdCMTZMaXR0bGU7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRC
R1JBODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21w
dXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0Fs
aWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90
LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBh
Y2tPbmVSb3dPZkJHUkE4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJS
b3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQ
ZXJQaXhlbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCMTZC
aWc6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRSR0IxNkJpZzsKICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEJH
UkExNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cg
PSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA4LCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3Qs
IHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURh
dGEpLCB1bnBhY2tPbmVSb3dPZkJHUkExNkxpdHRsZVRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0
aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNv
dXJjZUZvcm1hdFJHQjMyRjoKKyAgICAgICAgc291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdFJHQjMy
RjsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNv
dXJjZUZvcm1hdEJHUkExNkJpZzogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVu
dHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA4
LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8
dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+
KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkJHUkExNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWln
aHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5j
LCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNvdXJjZUZvcm1hdEJHUjg6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRC
R1I4OwogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0UkdCQTU1NTE6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1l
bnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwg
Miwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5n
PHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3Qq
Pihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgsIHdpZHRoLCBoZWln
aHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5j
LCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNvdXJjZUZvcm1hdEJHUkE4OgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0
QkdSQTg7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTb3VyY2VGb3JtYXRSR0JBNDQ0NDogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxl
bWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRo
LCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tp
bmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZf
dCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQkE0NDQ0VG9SR0JBOCwgd2lkdGgsIGhl
aWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1
bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U291cmNlRm9ybWF0QkdSQTE2TGl0dGxlOgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBE
YXRhRm9ybWF0QkdSQTE2TGl0dGxlOwogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCNTY1OiB7Ci0gICAgICAgIHVuc2lnbmVk
IGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1
aW50MTZfdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5w
YWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JB
OCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwg
cm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QkdSQTE2QmlnOgorICAgICAgICBzb3VyY2VG
b3JtYXQgPSBEYXRhRm9ybWF0QkdSQTE2QmlnOwogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0Ujg6IHsKLSAgICAgICAgdW5zaWdu
ZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93
PHVpbnQ4X3Q+KHdpZHRoLCAxLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1Vu
cGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSOFRvUkdCQTgsIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1Bh
Y2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSR0I4OgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBE
YXRhRm9ybWF0QVJHQjg7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VGb3JtYXRSMTZMaXR0bGU6IHsKLSAgICAgICAgdW5zaWduZWQgaW50
IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQx
Nl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tp
bmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSMTZMaXR0bGVUb1JHQkE4
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCBy
b3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGU6CisgICAgICAgIHNvdXJj
ZUZvcm1hdCA9IERhdGFGb3JtYXRBUkdCMTZMaXR0bGU7CiAgICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSMTZCaWc6IHsKLSAgICAg
ICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1l
bnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZS
MTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGlu
YXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZCaWc6CisgICAg
ICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRBUkdCMTZCaWc7CiAgICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTg6IHsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVs
ZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwot
ICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgdWludDhfdCwgRGVzdFR5cGU+
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZS
QThUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRp
b25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBQkdSODoKKyAgICAgICAgc291
cmNlRm9ybWF0ID0gRGF0YUZvcm1hdEFCR1I4OwogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkExNkxpdHRsZTogewotICAgICAg
ICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVu
dHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAg
ICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihz
dGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJB
MTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVz
dGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVs
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBNTU1MToKKyAg
ICAgICAgc291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdFJHQkE1NTUxOwogICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkExNkJpZzog
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291
cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERl
c3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tP
bmVSb3dPZlJBMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJv
dywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1Bl
clBpeGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBNDQ0
NDoKKyAgICAgICAgc291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdFJHQkE0NDQ0OwogICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVI4
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVT
b3VyY2VFbGVtZW50c1BlclJvdzx1aW50OF90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25t
ZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIERl
c3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFja09u
ZVJvd09mQVI4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRl
c3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhl
bCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCNTY1OgorICAg
ICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0UkdCNTY1OwogICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVIxNkxpdHRsZTog
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291
cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERl
c3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tP
bmVSb3dPZkFSMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1Bl
clJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50
c1BlclBpeGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSODoK
KyAgICAgICAgc291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdFI4OwogICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVIxNkJpZzogewot
ICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNl
RWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVS
b3dPZkFSMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywg
ZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBp
eGVsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSMTZMaXR0bGU6
CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRSMTZMaXR0bGU7CiAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBODog
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291
cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDEsIHNvdXJjZVVucGFja0FsaWdubWVu
dCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0
VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVS
b3dPZkE4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3Rp
bmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UjE2QmlnOgorICAgICAg
ICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0UjE2QmlnOwogICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QTE2TGl0dGxlOiB7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VF
bGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7
Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5
cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJv
d09mQTE2TGl0dGxlVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3cs
IGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQ
aXhlbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UjMyRjoKKyAg
ICAgICAgc291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdFIzMkY7CiAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBMTZCaWc6IHsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVs
ZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsK
LSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93
T2ZBMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVz
dGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVs
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTg6CisgICAgICAg
IHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRSQTg7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLS8v
IFRoaXMgc3BlY2lhbGl6ZWQgcm91dGluZSBpcyB1c2VkIG9ubHkgZm9yIGZsb2F0aW5nLXBvaW50
IHRleHR1cmUgdXBsb2Fkcy4gSXQKLS8vIGRvZXMgbm90IG5lZWQgdG8gYmUgYXMgZ2VuZXJhbCBh
cyBkb1BhY2tpbmcsIGFib3ZlOyBiZWNhdXNlIHRoZXJlIGFyZQotLy8gY3VycmVudGx5IG5vIG5h
dGl2ZSBmbG9hdGluZy1wb2ludCBpbWFnZSBmb3JtYXRzIGluIFdlYktpdCwgdGhlcmUgYXJlIG9u
bHkgYQotLy8gZmV3IHVwbG9hZCBwYXRocy4KLXN0YXRpYyB2b2lkIGRvRmxvYXRpbmdQb2ludFBh
Y2tpbmcoY29uc3Qgdm9pZCogc291cmNlRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZURhdGFGb3JtYXQgc291cmNlRGF0YUZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlVW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCogZGVzdGluYXRpb25EYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkIHJvd1BhY2tpbmdGdW5jKGNvbnN0IGZsb2F0KiwgZmxvYXQqLCB1bnNpZ25lZCBpbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGlu
YXRpb25FbGVtZW50c1BlclBpeGVsKQotewotICAgIHN3aXRjaCAoc291cmNlRGF0YUZvcm1hdCkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4OiB7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVt
ZW50c1BlclJvdzx1aW50OF90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIGZsb2F0LCBmbG9hdD4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQkE4VG9S
R0JBMzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25E
YXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTE2TGl0dGxlOgorICAgICAgICBz
b3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0UkExNkxpdHRsZTsKICAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEJHUkE4OiB7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVt
ZW50c1BlclJvdzx1aW50OF90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIGZsb2F0LCBmbG9hdD4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkJHUkE4VG9S
R0JBMzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25E
YXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTE2QmlnOgorICAgICAgICBzb3Vy
Y2VGb3JtYXQgPSBEYXRhRm9ybWF0UkExNkJpZzsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkEzMkY6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRz
UGVyUm93PGZsb2F0Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
Y29uc3QgZmxvYXQqIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0Kj4oc291cmNlRGF0
YSk7Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBlbmRQb2ludGVyID0gc291cmNlICsgaGVpZ2h0ICog
c291cmNlRWxlbWVudHNQZXJSb3c7Ci0gICAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbkVs
ZW1lbnRzUGVyUm93ID0gd2lkdGggKiBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWw7Ci0gICAg
ICAgIHdoaWxlIChzb3VyY2UgPCBlbmRQb2ludGVyKSB7Ci0gICAgICAgICAgICByb3dQYWNraW5n
RnVuYyhzb3VyY2UsIGRlc3RpbmF0aW9uRGF0YSwgd2lkdGgpOwotICAgICAgICAgICAgc291cmNl
ICs9IHNvdXJjZUVsZW1lbnRzUGVyUm93OwotICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhICs9
IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJSb3c7Ci0gICAgICAgIH0KKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTMyRjoKKyAgICAgICAgc291cmNlRm9ybWF0ID0gRGF0
YUZvcm1hdFJBMzJGOwogICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U291cmNlRm9ybWF0UkdCMzJGOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzxmbG9hdD4od2lk
dGgsIDMsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFj
a2luZzxmbG9hdCwgZmxvYXQsIGZsb2F0PihzdGF0aWNfY2FzdDxjb25zdCBmbG9hdCo+KHNvdXJj
ZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQjMyRlRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291
cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3Rp
bmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291
cmNlRm9ybWF0QVI4OgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QVI4OwogICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9y
bWF0UjMyRjogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBj
b21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8ZmxvYXQ+KHdpZHRoLCAxLCBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8ZmxvYXQsIGZsb2F0LCBm
bG9hdD4oc3RhdGljX2Nhc3Q8Y29uc3QgZmxvYXQqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93
T2ZSMzJGVG9SR0JBMzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVz
dGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVs
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUjE2TGl0dGxlOgor
ICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QVIxNkxpdHRsZTsKICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBMzJG
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVT
b3VyY2VFbGVtZW50c1BlclJvdzxmbG9hdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVu
dCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzxmbG9hdCwgZmxvYXQsIGZsb2F0Pihz
dGF0aWNfY2FzdDxjb25zdCBmbG9hdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJBMzJG
VG9SR0JBMzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRp
b25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUjE2QmlnOgorICAgICAgICBz
b3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QVIxNkJpZzsKICAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEEzMkY6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRz
UGVyUm93PGZsb2F0Pih3aWR0aCwgMSwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
ZG9VbnBhY2tpbmdBbmRQYWNraW5nPGZsb2F0LCBmbG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNv
bnN0IGZsb2F0Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mQTMyRlRvUkdCQTMyRiwgd2lk
dGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFj
a2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U291cmNlRm9ybWF0QTg6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFG
b3JtYXRBODsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291
cmNlRm9ybWF0QTE2TGl0dGxlOgorICAgICAgICBzb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QTE2
TGl0dGxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3Vy
Y2VGb3JtYXRBMTZCaWc6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRBMTZCaWc7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1h
dEEzMkY6CisgICAgICAgIHNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRBMzJGOwogICAgICAgICBi
cmVhazsKLSAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQorICAgIHJldHVybiBzb3VyY2VGb3JtYXQ7CiB9CiAKLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLXN0YXRpYyBib29sIGlzRmxvYXRpbmdQb2ludFNvdXJjZShHcmFwaGljc0NvbnRleHQz
RDo6U291cmNlRGF0YUZvcm1hdCBmb3JtYXQpCitib29sIHdlYkdMUGFja1BpeGVscyhjb25zdCB1
aW50OF90KiBzb3VyY2VEYXRhLCBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNp
Z25lZCBkZXN0aW5hdGlvblR5cGUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3As
IHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSkKIHsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkEzMkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCMzJGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBMzJGOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0QTMyRjoKKyAgICBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCA9IGdldFNyY0Zv
cm1hdChzb3VyY2VEYXRhRm9ybWF0KTsKKyAgICBpbnQgdmFsaWRTcmMgPSB3aWR0aCAqIFRleGVs
Qnl0ZXNGb3JGb3JtYXQoc291cmNlRm9ybWF0KTsKKyAgICBpbnQgcmVtaW5kZXIgPSBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpIDogMDsK
KyAgICBpbnQgc3JjU3RyaWRlID0gcmVtaW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQgLSByZW1pbmRlcikgOiB2YWxpZFNyYzsKKworICAgIERhdGFGb3JtYXQgZHN0RGF0
YUZvcm1hdCA9IGdldERzdEZvcm1hdChkZXN0aW5hdGlvbkZvcm1hdCwgZGVzdGluYXRpb25UeXBl
KTsKKyAgICBpbnQgZHN0U3RyaWRlID0gd2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERh
dGFGb3JtYXQpOworICAgIGlmIChmbGlwWSkgeworICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSAo
dWludDhfdCAqKWRlc3RpbmF0aW9uRGF0YSArIGRzdFN0cmlkZSooaGVpZ2h0IC0gMSk7CisgICAg
ICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7CisgICAgfQorICAgIGlmICghSGFzQWxwaGEoc291
cmNlRm9ybWF0KSB8fCAhSGFzQ29sb3Ioc291cmNlRm9ybWF0KSB8fCAhSGFzQ29sb3IoZHN0RGF0
YUZvcm1hdCkpCisgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05v
dGhpbmc7CisKKyAgICBpZiAoc291cmNlRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFP
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcpIHsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogcHRyID0gc291cmNlRGF0YTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRyRW5k
ID0gc291cmNlRGF0YSArIHNyY1N0cmlkZSAqIGhlaWdodDsKKyAgICAgICAgdW5zaWduZWQgcm93
U2l6ZSA9IChkc3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKKyAgICAgICAg
dWludDhfdCogZHN0ID0gKHVpbnQ4X3QqKWRlc3RpbmF0aW9uRGF0YTsKKyAgICAgICAgd2hpbGUg
KHB0ciA8IHB0ckVuZCkgeworICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCByb3dTaXplKTsK
KyAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7CisgICAgICAgICAgICBkc3QgKz0gZHN0U3Ry
aWRlOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBGb3JtYXRDb252ZXJ0ZXIgY29udmVydGVy
KHdpZHRoLCBoZWlnaHQsIHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSwgc3JjU3RyaWRlLCBk
c3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZUZvcm1hdCwgZHN0RGF0YUZv
cm1hdCwgYWxwaGFPcCk7CisKKyAgICBpZiAoIWNvbnZlcnRlci5TdWNjZXNzKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25z
dCB1aW50OF90KiBzb3VyY2VEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZXN0aW5hdGlvbkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBkZXN0aW5hdGlvbkRhdGEpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIEdyYXBoaWNzQ29udGV4dDNEOjpT
b3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGlu
YXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2
b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCiB7Ci0gICAgc3dpdGNoIChkZXN0aW5h
dGlvblR5cGUpIHsKLSAgICBjYXNlIFVOU0lHTkVEX0JZVEU6IHsKLSAgICAgICAgdWludDhfdCog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAg
ICAgICAgaWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0UkdCQTggJiYgZGVzdGlu
YXRpb25Gb3JtYXQgPT0gUkdCQSAmJiBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgPD0gNCAmJiBhbHBo
YU9wID09IEFscGhhRG9Ob3RoaW5nKSB7Ci0gICAgICAgICAgICAvLyBObyBjb252ZXJzaW9uIG5l
Y2Vzc2FyeS4KLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEs
IHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgUkdCOgotICAg
ICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3Ro
aW5nOgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3Rp
bmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCOCwgMyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAgICAg
ICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09m
UkdCQThUb1JHQjhQcmVtdWx0aXBseSwgMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2lu
Zzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkdC
OFVubXVsdGlwbHksIDMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUkdCQToKLSAgICAgICAgICAgIHN3aXRj
aCAoYWxwaGFPcCkgewotICAgICAgICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoc291cmNlRGF0YUZvcm1hdCAhPSBTb3VyY2VGb3JtYXRSR0JBOCB8fCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQgPiA0KTsgLy8gSGFuZGxlZCBhYm92ZSB3aXRoIGZhc3QgY2Fz
ZS4KLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNl
RGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5h
dGlvbiwgMCwgNCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFs
cGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291
cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1JHQkE4UHJlbXVsdGlwbHks
IDQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5t
dWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBk
ZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1JHQkE4VW5tdWx0aXBseSwgNCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9w
ZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCi0gICAgICAgICAgICAvLyBzcGVjaWZp
Y2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIGFscGhhIGNoYW5uZWwgaXMgY2hvc2VuCi0gICAgICAg
ICAgICAvLyBmcm9tIHRoZSBSR0JBIGRhdGEuCi0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDhf
dD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5w
YWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb0E4LCAxKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRToKLSAgICAgICAgICAgIC8v
IEZyb20gdGhlIGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAg
ICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgcmVkIGNoYW5uZWwg
aXMgY2hvc2VuCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSBSR0JBIGRhdGEuCi0gICAgICAgICAg
ICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0g
ICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24s
IHBhY2tPbmVSb3dPZlJHQkE4VG9SOCwgMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tp
bmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
c291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1I4
UHJlbXVsdGlwbHksIDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNr
QWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1I4VW5tdWx0aXBseSwg
MSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBGcm9t
IHRoZSBkZXNrdG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCi0gICAgICAg
ICAgICAvLyBzcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIHJlZCBhbmQgYWxwaGEgY2hh
bm5lbHMKLSAgICAgICAgICAgIC8vIGFyZSBjaG9zZW4gZnJvbSB0aGUgUkdCQSBkYXRhLgotICAg
ICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3Ro
aW5nOgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3Rp
bmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkE4LCAyKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAg
IGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZS
R0JBOFRvUkE4UHJlbXVsdGlwbHksIDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8
dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291
cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1JBOFVu
bXVsdGlwbHksIDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVU5TSUdORURfU0hPUlRfNF80XzRfNDogewotICAgICAgICB1aW50MTZfdCogZGVzdGluYXRp
b24gPSBzdGF0aWNfY2FzdDx1aW50MTZfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0gICAgICAgIHN3
aXRjaCAoYWxwaGFPcCkgewotICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAg
ICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93
T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQx
Nl90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRT
aG9ydDQ0NDRQcmVtdWx0aXBseSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4oc291
cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0
VW5tdWx0aXBseSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBVTlNJR05FRF9TSE9SVF81XzVfNV8xOiB7Ci0gICAgICAg
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRp
b25EYXRhKTsKLSAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgIGNhc2UgQWxwaGFE
b05vdGhpbmc6Ci0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNv
dXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVz
dGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MSwgMSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAg
ICAgICBkb1BhY2tpbmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVS
b3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MVByZW11bHRpcGx5LCAxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgZG9Q
YWNraW5nPHVpbnQxNl90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JB
OFRvVW5zaWduZWRTaG9ydDU1NTFVbm11bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVOU0lHTkVEX1NIT1JU
XzVfNl81OiB7Ci0gICAgICAgIHVpbnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVp
bnQxNl90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0g
ICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDE2
X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNo
b3J0NTY1LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFscGhhRG9QcmVt
dWx0aXBseToKLSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291
cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0
aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVQcmVtdWx0aXBseSwg
MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToK
LSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwg
cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVVbm11bHRpcGx5LCAxKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZMT0FUOiB7Ci0gICAgICAgIC8vIE9wZW5HTCBFUywgYW5kIHRoZXJlZm9yZSBXZWJHTCwgcmVx
dWlyZSB0aGF0IHRoZSBmb3JtYXQgYW5kCi0gICAgICAgIC8vIGludGVybmFsZm9ybWF0IGJlIGlk
ZW50aWNhbC4gVGhpcyBtZWFucyB0aGF0IHdoZW5ldmVyIHRoZQotICAgICAgICAvLyBkZXZlbG9w
ZXIgc3VwcGxpZXMgYW4gQXJyYXlCdWZmZXJWaWV3IG9uIHRoaXMgY29kZSBwYXRoLAotICAgICAg
ICAvLyB0aGUgc291cmNlIGRhdGEgd2lsbCBiZSBpbiBhIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIG9ubHkgdGltZSB0aGUgc291cmNlIGRhdGEgd2ls
bCBub3QgYmUgZmxvYXRpbmctcG9pbnQgaXMKLSAgICAgICAgLy8gd2hlbiB1cGxvYWRpbmcgYSBE
T00gZWxlbWVudCBvciBJbWFnZURhdGEgYXMgYQotICAgICAgICAvLyBmbG9hdGluZy1wb2ludCB0
ZXh0dXJlLiBPbmx5IFJHQkE4IGFuZCBCR1JBOCBhcmUgaGFuZGxlZCBpbgotICAgICAgICAvLyB0
aGlzIGNhc2UuCi0gICAgICAgIEFTU0VSVChpc0Zsb2F0aW5nUG9pbnRTb3VyY2Uoc291cmNlRGF0
YUZvcm1hdCkKLSAgICAgICAgICAgICAgIHx8IHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9y
bWF0UkdCQTgKLSAgICAgICAgICAgICAgIHx8IHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9y
bWF0QkdSQTgpOwotICAgICAgICAvLyBXaGVuIHVwbG9hZGluZyBhIGNhbnZhcyBpbnRvIGEgZmxv
YXRpbmctcG9pbnQgdGV4dHVyZSwKLSAgICAgICAgLy8gdW5tdWx0aXBsaWNhdGlvbiBtYXkgYmUg
bmVjZXNzYXJ5LgotICAgICAgICBBU1NFUlQoKGFscGhhT3AgPT0gQWxwaGFEb05vdGhpbmcgfHwg
YWxwaGFPcCA9PSBBbHBoYURvUHJlbXVsdGlwbHkpCi0gICAgICAgICAgICAgICB8fCAhaXNGbG9h
dGluZ1BvaW50U291cmNlKHNvdXJjZURhdGFGb3JtYXQpKTsKLSAgICAgICAgLy8gRm9yIHRoZSBz
b3VyY2UgZm9ybWF0cyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYW5uZWxzIChSR0JBMzJGLAot
ICAgICAgICAvLyBSQTMyRikgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBwaXhlbCBkYXRhIGlz
IHRpZ2h0bHkgcGFja2VkIGJlY2F1c2UKLSAgICAgICAgLy8gdW5wYWNrIGFsaWdubWVudCA8PSBz
aXplb2YoZmxvYXQpICogbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgICAgICBmbG9hdCogZGVzdGlu
YXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0gICAgICAgIGlm
IChhbHBoYU9wID09IEFscGhhRG9Ob3RoaW5nCi0gICAgICAgICAgICAmJiAoKHNvdXJjZURhdGFG
b3JtYXQgPT0gU291cmNlRm9ybWF0UkdCQTMyRiAmJiBkZXN0aW5hdGlvbkZvcm1hdCA9PSBSR0JB
KQotICAgICAgICAgICAgICAgIHx8IChzb3VyY2VEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdFJB
MzJGICYmIGRlc3RpbmF0aW9uRm9ybWF0ID09IExVTUlOQU5DRV9BTFBIQSkpKSB7Ci0gICAgICAg
ICAgICAvLyBObyBjb252ZXJzaW9uIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIGludCBudW1DaGFu
bmVscyA9IChzb3VyY2VEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdFJHQkEzMkYgPyA0IDogMik7
Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25EYXRhLCBzb3VyY2VEYXRhLCB3aWR0aCAq
IGhlaWdodCAqIG51bUNoYW5uZWxzICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAg
ICAgIGNhc2UgUkdCOgotICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAg
ICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBh
Y2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJG
LCAzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1By
ZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNl
RGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGUHJlbXVsdGlwbHks
IDMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5t
dWx0aXBseToKLSAgICAgICAgICAgICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNraW5nKHNvdXJjZURh
dGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVu
dCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQjMyRlVubXVsdGlwbHksIDMp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUkdCQToKLSAgICAgICAgICAgIC8vIEFscGhhRG9Ob3RoaW5nIGZv
ciBSR0JBMzJGIC0+IFJHQkEgaXMgaGFuZGxlZCBhYm92ZSB3aXRoIGZhc3QgcGF0aC4KLSAgICAg
ICAgICAgIEFTU0VSVChhbHBoYU9wICE9IEFscGhhRG9Ob3RoaW5nIHx8IHNvdXJjZURhdGFGb3Jt
YXQgIT0gU291cmNlRm9ybWF0UkdCQTMyRik7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3Ap
IHsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICAgICAgZG9G
bG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZS
R0JBMzJGVG9SR0JBMzJGLCA0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2lu
dFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291
cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdC
QTMyRlByZW11bHRpcGx5LCA0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQWxwaGFEb1VubXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50
UGFja2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JB
MzJGVW5tdWx0aXBseSwgNCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8v
IEZyb20gdGhlIGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAg
ICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgYWxwaGEgY2hhbm5l
bCBpcyBjaG9zZW4KLSAgICAgICAgICAgIC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAg
ICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09u
ZVJvd09mUkdCQTMyRlRvQTMyRiwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBMVU1JTkFOQ0U6Ci0gICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBjb252
ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCi0gICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9uLCBU
YWJsZSAzLjE1KSwgdGhlIHJlZCBjaGFubmVsIGlzIGNob3NlbgotICAgICAgICAgICAgLy8gZnJv
bSB0aGUgUkdCQSBkYXRhLgotICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2lu
dFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291
cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUjMy
RiwgMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Q
cmVtdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNraW5nKHNvdXJj
ZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdu
bWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1IzMkZQcmVtdWx0aXBseSwg
MSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Vbm11
bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0
YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50
LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRlVubXVsdGlwbHksIDEpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gRnJvbSB0aGUg
ZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAoT3BlbkdMIDIuMQotICAgICAgICAgICAg
Ly8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRoZSByZWQgYW5kIGFscGhhIGNoYW5uZWxz
Ci0gICAgICAgICAgICAvLyBhcmUgY2hvc2VuIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAg
ICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgICAgICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoK
LSAgICAgICAgICAgICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNraW5nKHNvdXJjZURhdGEsIHNvdXJj
ZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGlu
YXRpb24sIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJGLCAyKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAg
ICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09u
ZVJvd09mUkdCQTMyRlRvUkEzMkZQcmVtdWx0aXBseSwgMik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgICAg
IGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJv
d09mUkdCQTMyRlRvUkEzMkZVbm11bHRpcGx5LCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHdlYkdMUGFj
a1BpeGVscyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5cGUsIGFs
cGhhT3AsIGRlc3RpbmF0aW9uRGF0YSwgZmxpcFkpOwogfQogCiB1bnNpZ25lZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51bSBhdHRhY2htZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKaW5kZXggOGMzMjZmNjg2NmMzZGVkNzllZWYwMTA2YjhmNzI2YTlhNjliMmUyMi4u
ZDJiMDc0YjhiZTMwOTI5NWEyZDFkYzFmOGM5YjA1OTYyYzliNmU0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC05
MzYsNyArOTM2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChB
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwog
Ci0gICAgLy8gSGVscGVyIGZvciBnZXRJbWFnZURhdGEgd2hpY2ggaW1wbGVtZW50cyBwYWNraW5n
IG9mIHBpeGVsCisgICAgLy8gSGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURh
dGEvZXh0cmFjdFRleHR1cmVEYXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCiAg
ICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBh
bmQgdHlwZS4KICAgICAvLyBBIHNvdXJjZVVucGFja0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRl
cyB0aGF0IHRoZSBzb3VyY2UKICAgICAvLyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVy
byB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGguCkBAIC05NDksNyArOTQ5LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25UeXBlLAogICAgICAg
ICAgICAgICAgICAgICBBbHBoYU9wIGFscGhhT3AsCi0gICAgICAgICAgICAgICAgICAgIHZvaWQq
IGRlc3RpbmF0aW9uRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9u
RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSk7CiAKICNpZiBQTEFURk9STShN
QUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwg
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidz
IHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181738</attachid>
            <date>2013-01-08 13:03:53 -0800</date>
            <delta_ts>2013-01-16 03:30:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105821-20130109050056.patch</filename>
            <type>text/plain</type>
            <size>120164</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI4YjNkNmI0ZjkzMmIz
ZDBjNDMwNWE5OTcxMmQ1NzUxMjAxZTg1Mi4uMDZhN2ZjYjhlMGExYjJmMjU5OTgyNWNmODI1OGE1
ZmUzMzhlMzNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAxLTA4ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUgdGhlIHRl
eHR1cmUgcGFja2luZyBmb3IgdGV4SW1hZ2UyRCgpIGFuZCB0ZXhTdWJJbWFnZTJEKCkgaW4gV2Vi
R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTgy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBv
cmlnaW5hbCB0ZXh0dXJlIHBhY2tpbmcgY29kZSB1c2VzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRl
bm90ZSBlYWNoIHVucGFjayBhbmQgcGFjayBvcGVyYXRpb25zIGZvciBkaWZmZXJlbnQgY29tYmlu
YXRpb24gb2YgU291cmNlIGZvcm1hdHMsIAorICAgICAgICBEZXN0aW5hdGlvbiBmb3JtYXRzIGFu
ZCBBbHBoYSBPcGVyYXRpb25zLiBJdCBjb3VsZCBiZSBtYWRlIGNsZWFuZXIgYW5kIHNpbXBsZXIu
IEluIHRoaXMgcGF0Y2gsIHRlbXBsYXRlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgdHJ5IGJlc3Qg
dG8gYXZvaWQKKyAgICAgICAgZ2VuZXJhdGluZyB1c2VsZXNzIGNvZGUgZm9yIHVucmVhY2hhYmxl
IHBhdGggdG8gYXZvaWQgY29kZSBibG9hdC4gTW9yZW92ZXIsIHRoZSBmbGlwWSBvcGVyYXRpb24g
aXMgbW92ZWQgaW50byB0aGUgcGFjayBvcGVyYXRpb24gaW5zdGVhZCBvZiAKKyAgICAgICAgb3Bl
cmF0aW5nIGluIGEgc3RhbmRhbG9uZSBtZXRob2QgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAK
KyAgICAgICAgQWxyZWFkeSBjb3ZlcmVkIGJ5IGN1cnJlbnQgdGVzdC4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RUZXh0dXJlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWNrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNyY0Zvcm1hdENv
bWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6
aW1hZ2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoSW1hZ2VFeHRyYWN0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNE
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U291cmNlRGF0YUZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rv
cjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisKIDIwMTMtMDEt
MDggIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gTW9kaWZ5IEFuZHJvaWQncyB1c2VyIGFnZW50IENTUyB0byBub3Qgc2V0IGEgYm9yZGVy
LXJhZGl1cyBvbiBzZWxlY3QgZWxlbWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDJlMGU1MWIzMzllZjliN2Qx
NzkwNTAyMDU0ZmQyNDc5ZDcxOGM3YmYuLjVmYmZhZTllYzNhNTQ0YjI1MTdhMDBhMDFmZjMwYWRm
YmI1MjhlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYyOSwxMiArMzYyOSwxMiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7CiAgICAgY29uc3Qg
dm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwog
CiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKICAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQt
PnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZ
LCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCks
IGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CkBAIC0zODczLDEyICszODczLDEyIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZv
cm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQo
KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0g
aW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKICAgICBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7CiAgICAg
Y29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0
YSgpOwogCiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhh
T3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKICAgICAg
ICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFtX2Nv
bnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUs
IGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdp
ZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKaW5kZXggNzY2OTAx
N2Y0OWQzZTNlYmU4NGIyOTIyMjhkZGNiMmUyMmM5OGJmOS4uYTU1Mzk0MjI2ZTE5OTY5ZjJjNDk5
YTJkZDVmMjVhMGQzZGQ0NzA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNiArNTcsNjcgQEAgdWlu
dDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwogfQogCitHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdDM0RlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBH
QzNEZW51bSBkZXN0aW5hdGlvblR5cGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBODsKKyAg
ICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBODsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFI4Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRV9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE0NDQ0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE1NTUxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0I1NjU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICBzd2l0Y2gg
KGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJHQkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkY7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZHN0Rm9ybWF0OworfQor
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgdW5w
YWNrQWxpZ25tZW50KQpAQCAtMTgyLDcgKzI0NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhY2tJbWFnZURhdGEoCiAgICAgR0MzRGVudW0gdHlwZSwKICAgICBib29sIGZsaXBZLAogICAg
IEFscGhhT3AgYWxwaGFPcCwKLSAgICBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgCisg
ICAgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsCiAgICAgdW5zaWduZWQgd2lkdGgsCiAgICAgdW5z
aWduZWQgaGVpZ2h0LAogICAgIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwKQEAgLTE5
NywyOSArMjU5LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja0ltYWdlRGF0YSgKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOwogCi0gICAg
aWYgKCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyks
Ci0gICAgICAgIHNvdXJjZUZvcm1hdCwKLSAgICAgICAgd2lkdGgsCi0gICAgICAgIGhlaWdodCwK
LSAgICAgICAgc291cmNlVW5wYWNrQWxpZ25tZW50LAotICAgICAgICBmb3JtYXQsCi0gICAgICAg
IHR5cGUsCi0gICAgICAgIGFscGhhT3AsCi0gICAgICAgIGRhdGEuZGF0YSgpKSkKKyAgICBpZiAo
IXBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291
cmNlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwg
dHlwZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChmbGlwWSkgewotICAgICAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWws
IGJ5dGVzUGVyQ29tcG9uZW50OwotICAgICAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFy
YW1ldGVycyhmb3JtYXQsIHR5cGUsCi0gICAgICAgICAgICAmY29tcG9uZW50c1BlclBpeGVsLAot
ICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgLy8gVGhlIGltYWdlIGRhdGEgaXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1
cGxvYWQgaXQgYXMgc3VjaC4KLSAgICAgICAgdW5zaWduZWQgdW5wYWNrQWxpZ25tZW50ID0gMTsK
LSAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIHdpZHRoLCBoZWlnaHQsCi0gICAg
ICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKLSAgICAgICAg
ICAgIHVucGFja0FsaWdubWVudCk7Ci0gICAgfQotCiAgICAgaWYgKEltYWdlT2JzZXJ2ZXIgKm9i
c2VydmVyID0gaW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgb2JzZXJ2ZXItPmRpZERy
YXcoaW1hZ2UpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjQzLDI4ICsyODQsOSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAg
ICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICAgICAgU291cmNlRm9ybWF0UkdCQTgsCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhRG9QcmVtdWx0aXBseSA6IEFs
cGhhRG9Ob3RoaW5nLAotICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEoKSkpCisgICAgaWYg
KCFwYWNrUGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIERhdGFGb3JtYXRSR0JBOCwg
d2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFE
b1ByZW11bHRpcGx5IDogQWxwaGFEb05vdGhpbmcsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgICAgIGlmICghY29t
cHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gVGhlIGltYWdlIGRhdGEg
aXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQgYXMgc3VjaC4KLSAgICAgICAgdW5z
aWduZWQgaW50IHVucGFja0FsaWdubWVudCA9IDE7Ci0gICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRh
dGEuZGF0YSgpLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBjb21wb25l
bnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
dW5wYWNrQWxpZ25tZW50KTsKLSAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc2
LDYyICsyOTgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0VGV4dHVyZURhdGEo
dW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICAv
LyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQu
Ci0gICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0UkdC
QTg7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVTlNJR05FRF9CWVRFOgotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIFJHQkE6Ci0gICAgICAgICAgICBzb3Vy
Y2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0UkdCQTg7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBSR0I6Ci0gICAgICAgICAgICBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9y
bWF0UkdCODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAg
ICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdEE4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTFVNSU5BTkNFOgotICAgICAgICAgICAgc291cmNlRGF0YUZvcm1h
dCA9IFNvdXJjZUZvcm1hdFI4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1h
dFJBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsK
LSAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJj
ZUZvcm1hdFJHQkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSR0I6Ci0g
ICAgICAgICAgICBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0UkdCMzJGOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICBzb3VyY2VEYXRh
Rm9ybWF0ID0gU291cmNlRm9ybWF0QTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIExVTUlOQU5DRToKLSAgICAgICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3VyY2VGb3Jt
YXRSMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhB
OgotICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdFJBMzJGOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVOU0lHTkVE
X1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3VyY2VGb3JtYXRS
R0JBNTU1MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVTlNJR05FRF9TSE9SVF80XzRfNF80
OgotICAgICAgICBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0UkdCQTQ0NDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHNvdXJj
ZURhdGFGb3JtYXQgPSBTb3VyY2VGb3JtYXRSR0I1NjU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBEYXRhRm9y
bWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7CiAKICAg
ICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCiAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVu
dHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CkBAIC0zNDIsNTUgKzMwOSwyNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgaW50IHdpZHRo
LCB1bnNpZ25lZCBpbnQgaGVpZwogICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBpeGVsID0gY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiAgICAgZGF0YS5yZXNpemUod2lk
dGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKIAotICAgIGlmICghcGFja1BpeGVscyhzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwKLSAgICAgICAgICAgICAgICAgICAgc291
cmNlRGF0YUZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdW5wYWNr
QWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgIChwcmVtdWx0aXBseUFscGhhID8gQWxwaGFEb1ByZW11bHRpcGx5IDogQWxwaGFE
b05vdGhpbmcpLAotICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEoKSkpCisgICAgaWYgKCFw
YWNrUGl4ZWxzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VEYXRh
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgKHBy
ZW11bHRpcGx5QWxwaGEgPyBBbHBoYURvUHJlbXVsdGlwbHkgOiBBbHBoYURvTm90aGluZyksIGRh
dGEuZGF0YSgpLCBmbGlwWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgcGl4
ZWwgZGF0YSBpcyBub3cgdGlnaHRseSBwYWNrZWQuCi0gICAgaWYgKGZsaXBZKQotICAgICAgICBm
bGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwgYnl0ZXNQZXJQaXhlbCwg
MSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmxp
cFZlcnRpY2FsbHkodm9pZCogaW1hZ2VEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBpeGVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVucGFja0FsaWdubWVu
dCkKLXsKLSAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICB1
bnNpZ25lZCBpbnQgdmFsaWRSb3dCeXRlcyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbDsKLSAgICB1
bnNpZ25lZCBpbnQgdG90YWxSb3dCeXRlcyA9IHZhbGlkUm93Qnl0ZXM7Ci0gICAgdW5zaWduZWQg
aW50IHJlbWFpbmRlciA9IHZhbGlkUm93Qnl0ZXMgJSB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgaWYg
KHJlbWFpbmRlcikKLSAgICAgICAgdG90YWxSb3dCeXRlcyArPSAodW5wYWNrQWxpZ25tZW50IC0g
cmVtYWluZGVyKTsKLSAgICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3RbdmFsaWRSb3dC
eXRlc107Ci0gICAgdWludDhfdCogZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihpbWFnZURh
dGEpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWlnaHQgLyAyOyBpKyspIHsKLSAg
ICAgICAgdWludDhfdCogbG93Um93ID0gZGF0YSArICh0b3RhbFJvd0J5dGVzICogaSk7Ci0gICAg
ICAgIHVpbnQ4X3QqIGhpZ2hSb3cgPSBkYXRhICsgKHRvdGFsUm93Qnl0ZXMgKiAoaGVpZ2h0IC0g
aSAtIDEpKTsKLSAgICAgICAgbWVtY3B5KHRlbXBSb3csIGxvd1JvdywgdmFsaWRSb3dCeXRlcyk7
Ci0gICAgICAgIG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHZhbGlkUm93Qnl0ZXMpOwotICAgICAg
ICBtZW1jcHkoaGlnaFJvdywgdGVtcFJvdywgdmFsaWRSb3dCeXRlcyk7Ci0gICAgfQotICAgIGRl
bGV0ZVtdIHRlbXBSb3c7Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgcGFja2luZyBhbmQgdW5wYWNr
aW5nIHJvdXRpbmVzIGFyZSBleHByZXNzZWQgaW4gdGVybXMKLS8vIG9mIGxpbmUtYnktbGluZSBv
cGVyYXRpb25zLCBhbmQgcGFzc2VkIGJ5IGZ1bmN0aW9uIHBvaW50ZXIgcmF0aGVyCi0vLyB0aGFu
IHRlbXBsYXRlIHBhcmFtZXRlciwgdG8gYWNoaWV2ZSB0aGUgbWFqb3JpdHkgb2YgdGhlIHNwZWVk
dXBzIG9mCi0vLyBoYXZpbmcgdGhlbSBpbmxpbmVkIHdoaWxlIHJlZHVjaW5nIGNvZGUgc2l6ZS4K
Ky8vIFRoZSBmb2xsb3dpbmcgcGFja2luZyBhbmQgdW5wYWNraW5nIHJvdXRpbmVzIGFyZSBleHBy
ZXNzZWQgaW4gdGVybXMgb2YgZnVuY3Rpb24gdGVtcGxhdGVzIGFuZCBpbmxpbmUgZnVuY3Rpb25z
IHRvIGFjaGlldmUgZ2VuZXJhbGl0eSBhbmQgc3BlZWR1cC4KKy8vIEV4cGxpY2l0IHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9ucyBjb3JyZXNwb25kIHRvIHRoZSBjYXNlcyB0aGF0IHdvdWxkIG9jY3Vy
LgorLy8gU29tZSBjb2RlIGFyZSBtZXJnZWQgYmFjayBmcm9tIE1vemlsbGEgY29kZSBpbiBjb250
ZW50L2NhbnZhcy9zcmMvV2ViR0xUZXhlbENvbnZlcnNpb25zLmgKIAogbmFtZXNwYWNlIHsKIAog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAvLyBQaXhlbCB1bnBhY2tpbmcgcm91dGluZXMuCit0ZW1wbGF0ZTxp
bnQgZm9ybWF0LCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgorQUxXQVlT
X0lOTElORSB2b2lkIHVucGFjayhjb25zdCBTb3VyY2VUeXBlKiwgRHN0VHlwZSosIHVuc2lnbmVk
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi12b2lkIHVucGFja09uZVJvd09m
UkdCQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkxpdHRs
ZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTE2TGl0dGxlVG9SR0JBOChz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtNDA1LDcgKzM0NCw3IEBAIHZv
aWQgdW5wYWNrT25lUm93T2ZSR0JBMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0CiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdC
QTE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkJpZywgdWludDE2
X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CkBAIC00MTcsNyArMzU2LDcgQEAgdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQkExNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0I4VG9SR0JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC00MjksNyArMzY4
LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2kKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25l
Um93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkxp
dHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4
KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC00NDQsNyArMzgzLDcgQEAg
dm9pZCB1bnBhY2tPbmVSb3dPZlJHQjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGkKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZS
R0IxNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkJpZywgdWludDE2
X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CkBAIC00NTYsNyArMzk1LDcgQEAgdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1I4VG9SR0JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMl07CkBAIC00NjgsNyArNDA3
LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkJHUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2kKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25l
Um93T2ZBUkdCOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4LCB1aW50OF90
LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsx
XTsKQEAgLTQ4MCw3ICs0MTksNyBAQCB2b2lkIHVucGFja09uZVJvd09mQVJHQjhUb1JHQkE4KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVucwogICAgIH0KIH0K
IAotdm9pZCB1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cp
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjp1bnBhY2tPbmVSb3dP
ZkFSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsK
QEAgLTQ5NSw3ICs0MzQsNyBAQCB2b2lkIHVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JB
OChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdAogICAgIH0KIH0KIAot
dm9pZCB1bnBhY2tPbmVSb3dPZkFSR0IxNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRBUkdCMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwpAQCAtNTA3
LDcgKzQ0Niw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZBUkdCMTZCaWdUb1JHQkE4KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uCiAgICAgfQogfQogCi12b2lkIHVu
cGFja09uZVJvd09mQUJHUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBQkdSOCwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBz
b3VyY2VbM107CkBAIC01MTksNyArNDU4LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkFCR1I4VG9S
R0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnMKICAg
ICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JBOFRvUkdCQTgoY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdEJHUkE4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29u
c3QgdWludDMyX3QqIHNvdXJjZTMyID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDMy
X3QqPihzb3VyY2UpOwogICAgIHVpbnQzMl90KiBkZXN0aW5hdGlvbjMyID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dWludDMyX3QqPihkZXN0aW5hdGlvbik7CkBAIC01MzcsNyArNDc2LDcgQEAgdm9p
ZCB1bnBhY2tPbmVSb3dPZkJHUkE4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JB
MTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2TGl0dGxlLCB1
aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZCR1JBMTZMaXR0bGVUb1JHQkE4KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC01NTIsNyArNDkxLDcgQEAgdm9pZCB1
bnBhY2tPbmVSb3dPZkJHUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXQKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JBMTZC
aWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2QmlnLCB1aW50MTZfdCwg
dWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzJdKTsKQEAgLTU2NCw3ICs1MDMsNyBAQCB2b2lkIHVucGFja09u
ZVJvd09mQkdSQTE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbgogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE1NTUxVG9SR0JB
OChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxLCB1aW50MTZfdCwgdWludDhfdD4o
Y29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6
dW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxz
UGVyUm93KTsKQEAgLTU4Myw3ICs1MjIsNyBAQCB2b2lkIHVucGFja09uZVJvd09mUkdCQTU1NTFU
b1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLAogICAg
IH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE0NDQ0VG9SR0JBOChjb25zdCB1aW50MTZf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJv
dykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJHQkE0NDQ0LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZS
R0JBNDQ0NFRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTYw
Myw3ICs1NDIsNyBAQCB2b2lkIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLAogICAgIH0KIH0KIAotdm9pZCB1
bnBhY2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I1
NjUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKICAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTYyMiw3ICs1NjEsNyBAQCB2b2lkIHVu
cGFja09uZVJvd09mUkdCNTY1VG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdQogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlI4VG9SR0JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNjM0LDcgKzU3Myw3
IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJv
d09mUjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkxpdHRsZSwg
dWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9
IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CkBAIC02NDYsNyArNTg1LDcgQEAg
dm9pZCB1bnBhY2tPbmVSb3dPZlIxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZS
MTZCaWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2QmlnLCB1aW50MTZfdCwg
dWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzBdKTsKQEAgLTY1OCw3ICs1OTcsNyBAQCB2b2lkIHVucGFja09u
ZVJvd09mUjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdQogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJBOFRvUkdCQTgoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBp
eGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC02NzAsNyArNjA5LDcgQEAg
dm9pZCB1bnBhY2tPbmVSb3dPZlJBOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWcKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZS
QTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZMaXR0bGUsIHVp
bnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBj
b252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwpAQCAtNjgyLDcgKzYyMSw3IEBAIHZv
aWQgdW5wYWNrT25lUm93T2ZSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkEx
NkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2QmlnLCB1aW50MTZfdCwg
dWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzBdKTsKQEAgLTY5NCw3ICs2MzMsNyBAQCB2b2lkIHVucGFja09u
ZVJvd09mUkExNkJpZ1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQVI4VG9SR0JBOChjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QVI4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsxXTsKQEAgLTcwNiw3ICs2NDUsNyBAQCB2
b2lkIHVucGFja09uZVJvd09mQVI4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZwogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkFS
MTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVIxNkxpdHRsZSwgdWlu
dDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CkBAIC03MTgsNyArNjU3LDcgQEAgdm9p
ZCB1bnBhY2tPbmVSb3dPZkFSMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW8KICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBUjE2
QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSMTZCaWcsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29s
b3IxNkJpZ1RvOChzb3VyY2VbMV0pOwpAQCAtNzMwLDcgKzY2OSw3IEBAIHZvaWQgdW5wYWNrT25l
Um93T2ZBUjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBOFRvUkdCQTgoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdEE4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IDB4MDsKQEAgLTc0Miw3ICs2ODEsNyBAQCB2b2lkIHVucGFj
a09uZVJvd09mQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbgogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkExNkxpdHRsZVRv
UkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7CkBAIC03NTQs
NyArNjkzLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWlu
dDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgdW5w
YWNrT25lUm93T2ZBMTZCaWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2Qmln
LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gMHgwOwpAQCAtNzY2LDcgKzcwNSw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZBMTZCaWdUb1JH
QkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1CiAgICAg
fQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdCQThUb1JHQkEzMkYoY29uc3QgdWludDhfdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRSR0JBOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxv
YXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29uc3QgZmxv
YXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTc3OSw3ICs3MTgsNyBAQCB2b2lkIHVu
cGFja09uZVJvd09mUkdCQThUb1JHQkEzMkYoY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVucwogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkJHUkE4VG9S
R0JBMzJGKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC03
OTIsNyArNzMxLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkJHUkE4VG9SR0JBMzJGKGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQg
dW5wYWNrT25lUm93T2ZSR0IzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMzJG
LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2Vb
MF07CkBAIC04MDQsNyArNzQzLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjMyRlRvUkdCQTMy
Rihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2kKICAgICB9CiB9
CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFIzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNv
dXJjZVswXTsKQEAgLTgxNiw3ICs3NTUsNyBAQCB2b2lkIHVucGFja09uZVJvd09mUjMyRlRvUkdC
QTMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbgogICAg
IH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJBMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJBMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbMF07CkBAIC04MjgsNyArNzY3LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJB
MzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWcKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBMzJGVG9SR0JBMzJGKGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJv
dykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdEEzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxv
YXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5h
dGlvblswXSA9IDA7CkBAIC04NDQsNyArNzgzLDEzIEBAIHZvaWQgdW5wYWNrT25lUm93T2ZBMzJG
VG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
CiAvLyBQaXhlbCBwYWNraW5nIHJvdXRpbmVzLgogLy8KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JB
OFRvQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPGludCBmb3JtYXQsIGludCBhbHBoYU9wLCB0
eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgorQUxXQVlTX0lOTElORSB2b2lk
IHBhY2soY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlWzNdOwpAQCAtODUzLDcgKzc5OCw3IEBAIHZvaWQgcGFja09uZVJv
d09mUkdCQThUb0E4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOChjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxz
UGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFI4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291
cmNlWzBdOwpAQCAtODYyLDcgKzgwNyw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1I4KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkCiAgICAg
fQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdIC8gMjU1LjBmOwpAQCAtODc0LDcgKzgxOSw3IEBAIHZvaWQgcGFja09uZVJvd09m
UkdCQThUb1I4UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUg
cmVtb3ZlZC4KLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1I4VW5tdWx0aXBseShjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVy
Um93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFI4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
MS4wZiAvIChzb3VyY2VbM10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKQEAgLTg4NSw3
ICs4MzAsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOFVubXVsdGlwbHkoY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbgogICAgIH0KIH0KIAotdm9pZCBwYWNr
T25lUm93T2ZSR0JBOFRvUkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4LCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtODk1LDcgKzg0MCw3IEBAIHZv
aWQgcGFja09uZVJvd09mUkdCQThUb1JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4
VG9SQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC05MDgs
NyArODUzLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkE4UHJlbXVsdGlwbHkoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGkKIH0KIAogLy8gRklYTUU6IHRoaXMg
cm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93T2ZS
R0JBOFRvUkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNl
WzNdIC8gMjU1LjBmIDogMS4wZik7CkBAIC05MjAsNyArODY1LDcgQEAgdm9pZCBwYWNrT25lUm93
T2ZSR0JBOFRvUkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW8KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQjgoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcs
IHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0g
c291cmNlWzBdOwpAQCAtOTMxLDcgKzg3Niw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JH
QjgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduCiAg
ICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4UHJlbXVsdGlwbHkoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRp
cGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTk0Nyw3ICs4OTIsNyBAQCB2b2lkIHBhY2tP
bmVSb3dPZlJHQkE4VG9SR0I4UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdAogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBt
dXN0IGJlIHJlbW92ZWQuCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4VW5tdWx0aXBseShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5t
dWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYp
OwpAQCAtOTYyLDcgKzkwNywxMyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4VW5tdWx0
aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aQogICAgIH0KIH0K
IAotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90
KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93
KQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgdWlu
dDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291
cmNlLCBwaXhlbHNQZXJSb3cgKiA0KTsKK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4LCBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTk3OSw3
ICs5MzAsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0JBOFByZW11bHRpcGx5KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYQogfQogCiAvLyBGSVhNRTogdGhpcyBy
b3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi12b2lkIHBhY2tPbmVSb3dPZlJH
QkE4VG9SR0JBOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291
cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CkBAIC05OTUsNyArOTQ2LDcgQEAgdm9pZCBwYWNrT25l
Um93T2ZSR0JBOFRvUkdCQThVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXQKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVk
U2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE0NDQ0LCBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JB
OFRvVW5zaWduZWRTaG9ydDQ0NDQoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsK
QEAgLTEwMTAsNyArOTYxLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9y
dDQ0NDQoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGkKICAgICB9CiB9CiAK
LXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0UHJlbXVsdGlwbHkoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURv
UHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC0xMDI3LDcgKzk3OCw3IEBA
IHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0UHJlbXVsdGlwbHkoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMg
bG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2ln
bmVkU2hvcnQ0NDQ0VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4o
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2Vb
M10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKQEAgLTEwNDMsNyArOTk0LDcgQEAgdm9p
ZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDRVbm11bHRpcGx5KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDEKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThU
b1Vuc2lnbmVkU2hvcnQ1NTUxKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxLCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25l
Um93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxz
UGVyUm93KTsKQEAgLTEwNTgsNyArMTAwOSw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vu
c2lnbmVkU2hvcnQ1NTUxKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpCiAg
ICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MVByZW11
bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtMTA3NSw3
ICsxMDI2LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFQcmVt
dWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQKIH0KIAogLy8gRklYTUU6IHRoaXMg
cm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93T2ZS
R0JBOFRvVW5zaWduZWRTaG9ydDU1NTFVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIHVpbnQ4X3Qs
IHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBm
IC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOwpAQCAtMTA5MSw3ICsx
MDQyLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFVbm11bHRp
cGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDEKICAgICB9CiB9CiAKLXZvaWQgcGFja09u
ZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdC
NTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1E
OjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NShzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbHNQZXJSb3cpOwpAQCAtMTEwNSw3ICsxMDU2LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZS
R0JBOFRvVW5zaWduZWRTaG9ydDU2NShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBk
ZXN0aW4KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1
NjVQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I1NjUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC0x
MTIxLDcgKzEwNzIsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1
UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MQogfQogCiAvLyBGSVhNRTog
dGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi12b2lkIHBhY2tPbmVS
b3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0I1NjUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSwgdWludDhf
dCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEu
MGYgLyAoc291cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CkBAIC0xMTM2LDcg
KzEwODcsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1VW5tdWx0
aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNgogICAgIH0KIH0KIAotdm9pZCBwYWNr
T25lUm93T2ZSR0JBMzJGVG9SR0IzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0xMTQ3LDcgKzEwOTgsNyBAQCB2b2lk
IHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQjMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVuc2lnbgogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJG
VG9SR0IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMzJGLCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0xMTU5LDcgKzExMTAsNyBAQCB2
b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQjMyRlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdAogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JB
MzJGVG9SR0IzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEu
MGY7CkBAIC0xMTcyLDcgKzExMjMsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQjMy
RlVubXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aQogfQogCiAv
LyBVc2VkIG9ubHkgZHVyaW5nIFJHQkE4IG9yIEJHUkE4IC0+IGZsb2F0aW5nLXBvaW50IHVwbG9h
ZHMuCi12b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtMTE4NCw3
ICsxMTM1LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWcKICAgICB9CiB9CiAKLXZvaWQgcGFj
a09uZVJvd09mUkdCQTMyRlRvUkdCQTMyRlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
R0JBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0x
MTk3LDcgKzExNDgsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQkEzMkZQcmVtdWx0
aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYQogICAgIH0KIH0KIAotdm9p
ZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGVW5tdWx0aXBseShjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwg
ZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAx
LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTEyMTAsNyArMTE2MSw3IEBAIHZvaWQgcGFja09u
ZVJvd09mUkdCQTMyRlRvUkdCQTMyRlVubXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxv
YXQqIGRlc3RpbmF0CiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb0EzMkYo
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdEEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGlu
ZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNl
WzNdOwpAQCAtMTIxOSw3ICsxMTcwLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9BMzJG
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQKICAgICB9
CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNv
bnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0xMjI4LDcgKzEx
NzksNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1IzMkYoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZAogICAgIH0KIH0KIAotdm9pZCBwYWNrT25l
Um93T2ZSR0JBMzJGVG9SMzJGUHJlbXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTEyMzgsNyArMTE4
OSw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRlByZW11bHRpcGx5KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVS
b3dPZlJHQkEzMkZUb1IzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJGLCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10g
OiAxLjBmOwpAQCAtMTI0OCw3ICsxMTk5LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9S
MzJGVW5tdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24KICAg
ICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkYoY29uc3QgZmxvYXQqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9h
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTEyNTgs
NyArMTIwOSw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkYoY29uc3QgZmxvYXQq
IHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lCiAgICAgfQogfQogCi12b2lkIHBh
Y2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJGUHJlbXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJB
MzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0xMjY5
LDcgKzEyMjAsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJGUHJlbXVsdGlwbHko
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aQogICAgIH0KIH0KIAotdm9pZCBw
YWNrT25lUm93T2ZSR0JBMzJGVG9SQTMyRlVubXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJB
MzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBz
b3VyY2VbM10gOiAxLjBmOwpAQCAtMTI4MCw1NDYgKzEyMzEsNDAyIEBAIHZvaWQgcGFja09uZVJv
d09mUkdCQTMyRlRvUkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvCiAgICAgfQogfQogCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKK0FMV0FZU19J
TkxJTkUgYm9vbCBIYXNBbHBoYShpbnQgZm9ybWF0KQoreworICAgIHJldHVybiBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEEzMkYKKyAgICAgICAgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4CisgICAgICAgIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZCaWcKKyAgICAgICAgfHwgZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVIxNkxpdHRsZQorICAgICAgICB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjE2QmlnCisgICAgICAgIHx8
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMzJGCisgICAgICAgIHx8
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4CisgICAgICAgIHx8
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkxpdHRsZQorICAg
ICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZCaWcK
KyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTgK
KyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2
TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dEJHUkExNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRBUkdCOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRBUkdCMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0QVJHQjE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEFCR1I4CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJHQkEzMkYKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UkdCQTQ0NDQKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTU1NTE7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBI
YXNDb2xvcihpbnQgZm9ybWF0KQoreworICAgIHJldHVybiBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEzMkYKKyAgICAgICAgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCOAorICAgICAgICB8fCBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkxpdHRsZQorICAgICAgICB8fCBmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkJpZworICAgICAgICB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYKKyAgICAgICAgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSOAorICAgICAgICB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBOAorICAgICAgICB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBMTZMaXR0bGUKKyAgICAg
ICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2QmlnCisg
ICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4Cisg
ICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0IxNkxp
dHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRB
UkdCMTZCaWcKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0QUJHUjgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTU1NTEKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkdCQTQ0NDQKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCNTY1CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFI4CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFIxNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSMTZCaWcKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UjMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSQTgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkExNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSQTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJBMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEFSOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRBUjE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdEFSMTZCaWc7Cit9CisKK3RlbXBsYXRlPGludCBGb3JtYXQ+Citz
dHJ1Y3QgSXNGbG9hdEZvcm1hdCB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgVmFsdWUgPQorICAg
ICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGCisgICAg
ICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRgorICAg
ICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRgorICAg
ICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJGCisgICAg
ICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEEzMkY7Cit9Owor
Cit0ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3RydWN0IElzMTZicHBGb3JtYXQgeworICAgIHN0YXRp
YyBjb25zdCBib29sIFZhbHVlID0KKyAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCQTE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkxpdHRsZQorICAgICAgICB8fCBGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkJpZworICAgICAgICB8fCBGb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBMTZMaXR0bGUKKyAgICAgICAgfHwg
Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2QmlnCisgICAgICAg
IHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0IxNkxpdHRsZQor
ICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZC
aWcKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdC
QTU1NTEKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTQ0NDQKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCNTY1CisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFIxNkxpdHRsZQorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRSMTZCaWcKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkExNkxpdHRsZQorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSQTE2QmlnCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEFSMTZMaXR0bGUKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QVIxNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZMaXR0bGUKKyAgICAgICAgfHwgRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2QmlnOworfTsKKwordGVtcGxhdGU8aW50IEZv
cm1hdCwgYm9vbCBJc0Zsb2F0ID0gSXNGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSwgYm9vbCBJ
czE2YnBwID0gSXMxNmJwcEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZT4KK3N0cnVjdCBEYXRhVHlwZUZv
ckZvcm1hdCB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7Cit9OworCit0ZW1wbGF0ZTxpbnQg
Rm9ybWF0Pgorc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgdHJ1ZSwgZmFsc2U+IHsK
KyAgICB0eXBlZGVmIGZsb2F0IFR5cGU7Cit9OworCit0ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3Ry
dWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgZmFsc2UsIHRydWU+IHsKKyAgICB0eXBlZGVm
IHVpbnQxNl90IFR5cGU7Cit9OworCit0ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3RydWN0IEludGVy
bWVkaWF0ZUZvcm1hdCB7CisgICAgc3RhdGljIGNvbnN0IGludCBWYWx1ZSA9IElzRmxvYXRGb3Jt
YXQ8Rm9ybWF0Pjo6VmFsdWUgPyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEzMkYg
OiBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4OworfTsKKworQUxXQVlTX0lOTElO
RSB1bnNpZ25lZCBUZXhlbEJ5dGVzRm9yRm9ybWF0KGludCBmb3JtYXQpCit7CisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0Ujg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEE4OgorICAgICAgICByZXR1cm4g
MTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRSR0JBNDQ0NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZMaXR0bGU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkJpZzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZCaWc6CisgICAgICAgIHJldHVybiAyOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRCR1I4OgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEFSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRBQkdSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkxp
dHRsZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkJpZzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdEEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dEFSMTZMaXR0bGU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSMTZC
aWc6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0IxNkxpdHRsZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCMTZCaWc6CisgICAgICAgIHJldHVybiA2OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTE2TGl0dGxlOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
MTZCaWc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkxpdHRs
ZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2QmlnOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0IxNkJpZzoKKyAgICAgICAgcmV0dXJu
IDg7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRjoKKyAgICAg
ICAgcmV0dXJuIDEyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
MzJGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQogCi0vLyBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgdW5wYWNraW5nIGlzIG5lY2Vz
c2FyeTsgaS5lLiwgdGhlIHNvdXJjZSBkYXRhCi0vLyBpcyBub3QgaW4gUkdCQTgvUkdCQTMyRiBm
b3JtYXQsIG9yIHRoZSB1bnBhY2sgYWxpZ25tZW50IHNwZWNpZmllcwotLy8gdGhhdCByb3dzIGFy
ZSBub3QgdGlnaHRseSBwYWNrZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBl
bmFtZSBJbnRlcm1lZGlhdGVUeXBlLCB0eXBlbmFtZSBEZXN0VHlwZT4KLXN0YXRpYyB2b2lkIGRv
VW5wYWNraW5nQW5kUGFja2luZyhjb25zdCBTb3VyY2VUeXBlKiBzb3VyY2VEYXRhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3dVbnBhY2tpbmdGdW5jKShjb25z
dCBTb3VyY2VUeXBlKiwgSW50ZXJtZWRpYXRlVHlwZSosIHVuc2lnbmVkIGludCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RUeXBlKiBkZXN0aW5hdGlv
bkRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJvd1BhY2tp
bmdGdW5jKShjb25zdCBJbnRlcm1lZGlhdGVUeXBlKiwgRGVzdFR5cGUqLCB1bnNpZ25lZCBpbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5h
dGlvbkVsZW1lbnRzUGVyUGl4ZWwpCi17Ci0gICAgaWYgKCFyb3dQYWNraW5nRnVuYykgewotICAg
ICAgICAvLyBUaGUgcm93IHBhY2tpbmcgaXMgdHJpdmlhbCwgc28gZG9uJ3QgYm90aGVyIHdpdGgg
YSB0ZW1wb3JhcnkgYnVmZmVyLgotICAgICAgICBjb25zdCBTb3VyY2VUeXBlKiBlbmRQb2ludGVy
ID0gc291cmNlRGF0YSArIGhlaWdodCAqIHNvdXJjZUVsZW1lbnRzUGVyUm93OwotICAgICAgICB1
bnNpZ25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclJvdyA9IHdpZHRoICogZGVzdGluYXRp
b25FbGVtZW50c1BlclBpeGVsOwotICAgICAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50
ZXIpIHsKLSAgICAgICAgICAgIHJvd1VucGFja2luZ0Z1bmMoc291cmNlRGF0YSwgcmVpbnRlcnBy
ZXRfY2FzdDxJbnRlcm1lZGlhdGVUeXBlKj4oZGVzdGluYXRpb25EYXRhKSwgd2lkdGgpOwotICAg
ICAgICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVtZW50c1BlclJvdzsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93OworY2xhc3MgRm9y
bWF0Q29udmVydGVyIHsKK3B1YmxpYzoKKyAgICBGb3JtYXRDb252ZXJ0ZXIodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgY29uc3Qgdm9pZCogc3JjU3RhcnQsIHZvaWQq
IGRzdFN0YXJ0LCBpbnQgc3JjU3RyaWRlLCBpbnQgZHN0U3RyaWRlKQorICAgICAgICA6IG1XaWR0
aCh3aWR0aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVNyY1N0YXJ0KHNyY1N0YXJ0KSwgbURzdFN0YXJ0
KGRzdFN0YXJ0KSwgbVNyY1N0cmlkZShzcmNTdHJpZGUpLCBtRHN0U3RyaWRlKGRzdFN0cmlkZSks
IG1TdWNjZXNzKGZhbHNlKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgTWF4TnVtYmVy
T2ZDb21wb25lbnRzID0gNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgTWF4Qnl0ZXNQZXJDb21w
b25lbnQgID0gNDsKKyAgICAgICAgdW5wYWNrZWRJbnRlcm1lZGlhdGVTcmNEYXRhID0gbWFsbG9j
KG1XaWR0aCAqIE1heE51bWJlck9mQ29tcG9uZW50cyAqTWF4Qnl0ZXNQZXJDb21wb25lbnQpOwor
ICAgIH0KKworICAgIH5Gb3JtYXRDb252ZXJ0ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKHVucGFj
a2VkSW50ZXJtZWRpYXRlU3JjRGF0YSkKKyAgICAgICAgICAgIGZyZWUodW5wYWNrZWRJbnRlcm1l
ZGlhdGVTcmNEYXRhKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBk
c3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKyAgICBib29sIFN1Y2Nlc3Mo
KSBjb25zdCB7IHJldHVybiBtU3VjY2VzczsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdD4KKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgY29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKworICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQg
RHN0Rm9ybWF0PgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYU9wKTsKKworICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBjb252ZXJ0KCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBtV2lkdGgsIG1IZWlnaHQ7CisgICAg
Y29uc3Qgdm9pZCogY29uc3QgbVNyY1N0YXJ0OworICAgIHZvaWQqIGNvbnN0IG1Ec3RTdGFydDsK
KyAgICBjb25zdCBpbnQgbVNyY1N0cmlkZSwgbURzdFN0cmlkZTsKKyAgICBib29sIG1TdWNjZXNz
OworICAgIHZvaWQqIHVucGFja2VkSW50ZXJtZWRpYXRlU3JjRGF0YTsKK307CisKK3ZvaWQgRm9y
bWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNyY0Zv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wKQoreworI2RlZmluZSBGT1JNQVRDT05WRVJURVJfQ0FT
RV9TUkNGT1JNQVQoU3JjRm9ybWF0KSBcCisgICAgY2FzZSBTcmNGb3JtYXQ6IFwKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0Pihkc3RGb3JtYXQsIGFscGhhT3ApOworCisgICAgICAg
IHN3aXRjaCAoc3JjRm9ybWF0KSB7CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9T
UkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSOCkKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dEE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEEzMkYpCisgICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRSQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQo
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRikKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjgp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRCR1I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
U1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1KQorICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkdCMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTgpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
MTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZCaWcpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0Ix
NkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjE2QmlnKQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2
TGl0dGxlKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2QmlnKQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjgp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZCaWcp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRBQkdSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSOCkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFIxNkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkJpZykKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJB
MTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2QmlnKQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVIxNkxp
dHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSMTZCaWcpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZMaXR0bGUp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRBMTZCaWcpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBOCkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJHQkE1NTUxKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9S
TUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTQ0NDQpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0JBMzJGKQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBPd25BcnJheVB0cjxJbnRl
cm1lZGlhdGVUeXBlPiB0ZW1wb3JhcnlSR0JBRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IEludGVy
bWVkaWF0ZVR5cGVbd2lkdGggKiA0XSk7Ci0gICAgICAgIGNvbnN0IFNvdXJjZVR5cGUqIGVuZFBv
aW50ZXIgPSBzb3VyY2VEYXRhICsgaGVpZ2h0ICogc291cmNlRWxlbWVudHNQZXJSb3c7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93ID0gd2lkdGggKiBkZXN0
aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWw7Ci0gICAgICAgIHdoaWxlIChzb3VyY2VEYXRhIDwgZW5k
UG9pbnRlcikgewotICAgICAgICAgICAgcm93VW5wYWNraW5nRnVuYyhzb3VyY2VEYXRhLCB0ZW1w
b3JhcnlSR0JBRGF0YS5nZXQoKSwgd2lkdGgpOwotICAgICAgICAgICAgcm93UGFja2luZ0Z1bmMo
dGVtcG9yYXJ5UkdCQURhdGEuZ2V0KCksIGRlc3RpbmF0aW9uRGF0YSwgd2lkdGgpOwotICAgICAg
ICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVtZW50c1BlclJvdzsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93OworI3VuZGVmIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVAorfQorCit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVy
dGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKK3sKKyNkZWZpbmUgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKERzdEZvcm1hdCkgXAorICAgIGNhc2UgRHN0Rm9ybWF0OiBcCisg
ICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9ybWF0PihhbHBoYU9wKTsKKwor
ICAgICAgICBzd2l0Y2ggKGRzdEZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjgpCisgICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMzJGKQor
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0UkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNU
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1KQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMzJGKQor
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0UkdCQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9E
U1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNTU1MSkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJHQkE0NDQ0KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRikKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgfQor
CisjdW5kZWYgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUCiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFNvdXJjZVR5cGU+Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvbXB1dGVTb3VyY2VFbGVt
ZW50c1BlclJvdyh1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJQaXhlbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1
bnBhY2tBbGlnbm1lbnQpCi17Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplSW5CeXRlcyA9
IHNpemVvZihTb3VyY2VUeXBlKTsKLSAgICBBU1NFUlQoZWxlbWVudFNpemVJbkJ5dGVzIDw9IGJ5
dGVzUGVyUGl4ZWwpOwotICAgIEFTU0VSVCghKGJ5dGVzUGVyUGl4ZWwgJSBlbGVtZW50U2l6ZUlu
Qnl0ZXMpKTsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRSb3dCeXRlcyA9IHdpZHRoICogYnl0ZXNQ
ZXJQaXhlbDsKLSAgICB1bnNpZ25lZCBpbnQgdG90YWxSb3dCeXRlcyA9IHZhbGlkUm93Qnl0ZXM7
Ci0gICAgaWYgKHVucGFja0FsaWdubWVudCkgewotICAgICAgICB1bnNpZ25lZCBpbnQgcmVtYWlu
ZGVyID0gdmFsaWRSb3dCeXRlcyAlIHVucGFja0FsaWdubWVudDsKLSAgICAgICAgaWYgKHJlbWFp
bmRlcikKLSAgICAgICAgICAgIHRvdGFsUm93Qnl0ZXMgKz0gKHVucGFja0FsaWdubWVudCAtIHJl
bWFpbmRlcik7Ci0gICAgfQotICAgIHJldHVybiB0b3RhbFJvd0J5dGVzIC8gZWxlbWVudFNpemVJ
bkJ5dGVzOwotfQotCi0vLyBUaGlzIGhhbmRsZXMgYWxsIGNvbnZlcnNpb25zIHdpdGggYSBmYXN0
ZXIgcGF0aCBmb3IgdGlnaHRseSBwYWNrZWQgUkdCQTggc291cmNlIGRhdGEuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBEZXN0VHlwZT4KLXN0YXRpYyB2b2lkIGRvUGFja2luZyhjb25zdCB2b2lkKiBzb3Vy
Y2VEYXRhLAotICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZVVucGFja0FsaWdubWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICBEZXN0VHlwZSogZGVzdGluYXRpb25EYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3dQYWNraW5nRnVuYykoY29uc3QgdWludDhfdCos
IERlc3RUeXBlKiwgdW5zaWduZWQgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKQotewotICAgIHN3aXRjaCAoc291cmNl
RGF0YUZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJH
QkE4OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1
dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50OF90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxp
Z25tZW50KTsKLSAgICAgICAgY29uc3QgdWludDhfdCogc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHNvdXJjZURhdGEpOwotICAgICAgICBjb25zdCB1aW50OF90KiBlbmRQb2lu
dGVyID0gc291cmNlICsgaGVpZ2h0ICogc291cmNlRWxlbWVudHNQZXJSb3c7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93ID0gd2lkdGggKiBkZXN0aW5hdGlv
bkVsZW1lbnRzUGVyUGl4ZWw7Ci0gICAgICAgIHdoaWxlIChzb3VyY2UgPCBlbmRQb2ludGVyKSB7
Ci0gICAgICAgICAgICBpZiAocm93UGFja2luZ0Z1bmMpCi0gICAgICAgICAgICAgICAgcm93UGFj
a2luZ0Z1bmMoc291cmNlLCBkZXN0aW5hdGlvbkRhdGEsIHdpZHRoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25EYXRhLCBzb3VyY2UsIHdpZHRo
ICogNCk7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlRWxlbWVudHNQZXJSb3c7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGEgKz0gZGVzdGluYXRpb25FbGVtZW50c1BlclJvdzsKK3Rl
bXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0PgorQUxXQVlTX0lOTElORSB2b2lkIEZvcm1h
dENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wKQor
eworI2RlZmluZSBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKGFscGhhT3ApIFwKKyAgICBj
YXNlIGFscGhhT3A6IFwKKyAgICAgICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0LCBEc3RGb3Jt
YXQsIGFscGhhT3A+KCk7CisKKyAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURv
Tm90aGluZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5KQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNvdXJjZUZvcm1hdFJHQkExNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNl
RWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdp
ZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBh
Y2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50
MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdCQTgsIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1Bh
Y2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTE2Qmln
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVT
b3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDgsIHNvdXJjZVVucGFja0FsaWdu
bWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwg
RGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFj
a09uZVJvd09mUkdCQTE2QmlnVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQ
ZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVu
dHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTb3VyY2VGb3JtYXRSR0I4OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VF
bGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50OF90Pih3aWR0
aCwgMywgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNr
aW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBk
ZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCMTZMaXR0bGU6IHsKLSAgICAg
ICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1l
bnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgNiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZS
R0IxNkxpdHRsZVRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0UkdCMTZCaWc6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1l
bnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwg
Niwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5n
PHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3Qq
Pihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSR0IxNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWln
aHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5j
LCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QkdSODogewotICAgICAgICB1
bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQ
ZXJSb3c8dWludDhfdD4od2lkdGgsIDMsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAg
IGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkJHUjhUb1JH
QkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRh
LCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFS
R0I4OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1
dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50OF90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxp
Z25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3Qs
IERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFj
a09uZVJvd09mQVJHQjhUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJv
dywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1Bl
clBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNvdXJjZUZvcm1hdEFSR0IxNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+
KHdpZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0Fu
ZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1
aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgs
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJv
d1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVJHQjE2
QmlnOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1
dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDgsIHNvdXJjZVVucGFja0Fs
aWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhf
dCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVu
cGFja09uZVJvd09mQVJHQjE2QmlnVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVu
dHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxl
bWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VGb3JtYXRBQkdSODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4o
d2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5k
UGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkFCR1I4VG9SR0JBOCwgd2lkdGgsIGhl
aWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1
bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRCR1JBODogewotICAgICAg
ICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVu
dHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAg
ICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlwZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkJHUkE4
VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9u
RGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3Jt
YXRCR1JBMTZMaXR0bGU6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVy
Um93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgOCwgc291
cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQx
Nl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3Vy
Y2VEYXRhKSwgdW5wYWNrT25lUm93T2ZCR1JBMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywg
ZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEJHUkExNkJpZzogewotICAgICAg
ICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVu
dHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAg
ICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihz
dGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkJH
UkExNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0
aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291
cmNlRm9ybWF0UkdCQTU1NTE6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwg
c291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVp
bnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihz
b3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBk
ZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTQ0NDQ6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRz
UGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAg
ICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSR0JB
NDQ0NFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5h
dGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNl
Rm9ybWF0UkdCNTY1OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJv
dyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDIsIHNvdXJj
ZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZf
dCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNl
RGF0YSksIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNl
RWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0
aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSODogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhf
dD4od2lkdGgsIDEsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5n
QW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlI4VG9SR0JBOCwgd2lkdGgsIGhl
aWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1
bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSMTZMaXR0bGU6IHsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVs
ZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsK
LSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93
T2ZSMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywg
ZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBp
eGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNvdXJjZUZvcm1hdFIxNkJpZzogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVu
dHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCAy
LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8
dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+
KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlIxNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBk
ZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkE4OiB7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJv
dzx1aW50OF90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9V
bnBhY2tpbmdBbmRQYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkE4VG9SR0JBOCwg
d2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93
UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTE2TGl0
dGxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1
dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0Fs
aWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhf
dCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVu
cGFja09uZVJvd09mUkExNkxpdHRsZVRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1l
bnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVs
ZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkExNkJpZzogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2
X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2lu
Z0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJBMTZCaWdUb1JHQkE4LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQ
YWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSODogewot
ICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNl
RWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7
Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dP
ZkFSOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5h
dGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNl
Rm9ybWF0QVIxNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQ
ZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCA0LCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWlu
dDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNv
dXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkFSMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywg
ZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSMTZCaWc6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRz
UGVyUm93PHVpbnQxNl90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAg
ICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZBUjE2
QmlnVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0
aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VG
b3JtYXRBODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBj
b21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDEsIHNvdXJjZVVucGFj
a0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50
OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1
bnBhY2tPbmVSb3dPZkE4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJS
b3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQ
ZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTb3VyY2VGb3JtYXRBMTZMaXR0bGU6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJj
ZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3
aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQ
YWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZBMTZMaXR0bGVUb1JHQkE4LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNr
aW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEExNkJpZzogewot
ICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNl
RWxlbWVudHNQZXJSb3c8dWludDE2X3Q+KHdpZHRoLCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVS
b3dPZkExNkJpZ1RvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQorI3VuZGVmIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhB
T1AKIH0KIAotLy8gVGhpcyBzcGVjaWFsaXplZCByb3V0aW5lIGlzIHVzZWQgb25seSBmb3IgZmxv
YXRpbmctcG9pbnQgdGV4dHVyZSB1cGxvYWRzLiBJdAotLy8gZG9lcyBub3QgbmVlZCB0byBiZSBh
cyBnZW5lcmFsIGFzIGRvUGFja2luZywgYWJvdmU7IGJlY2F1c2UgdGhlcmUgYXJlCi0vLyBjdXJy
ZW50bHkgbm8gbmF0aXZlIGZsb2F0aW5nLXBvaW50IGltYWdlIGZvcm1hdHMgaW4gV2ViS2l0LCB0
aGVyZSBhcmUgb25seSBhCi0vLyBmZXcgdXBsb2FkIHBhdGhzLgotc3RhdGljIHZvaWQgZG9GbG9h
dGluZ1BvaW50UGFja2luZyhjb25zdCB2b2lkKiBzb3VyY2VEYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgcm93UGFja2luZ0Z1bmMoY29uc3QgZmxvYXQqLCBmbG9hdCosIHVu
c2lnbmVkIGludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpCi17Ci0gICAgc3dpdGNoIChzb3VyY2VE
YXRhRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdC
QTg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0
ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgZmxvYXQsIGZs
b2F0PihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJv
d09mUkdCQThUb1JHQkEzMkYsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0QkdSQTg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCA0LCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWlu
dDhfdCwgZmxvYXQsIGZsb2F0PihzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlRGF0
YSksIHVucGFja09uZVJvd09mQkdSQThUb1JHQkEzMkYsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVs
ZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlv
bkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTMyRjogewotICAgICAgICB1bnNpZ25lZCBp
bnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8Zmxv
YXQ+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBjb25zdCBmbG9h
dCogc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgZmxvYXQqPihzb3VyY2VEYXRhKTsKLSAgICAg
ICAgY29uc3QgZmxvYXQqIGVuZFBvaW50ZXIgPSBzb3VyY2UgKyBoZWlnaHQgKiBzb3VyY2VFbGVt
ZW50c1BlclJvdzsKLSAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJS
b3cgPSB3aWR0aCAqIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbDsKLSAgICAgICAgd2hpbGUg
KHNvdXJjZSA8IGVuZFBvaW50ZXIpIHsKLSAgICAgICAgICAgIHJvd1BhY2tpbmdGdW5jKHNvdXJj
ZSwgZGVzdGluYXRpb25EYXRhLCB3aWR0aCk7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
RWxlbWVudHNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGEgKz0gZGVzdGluYXRp
b25FbGVtZW50c1BlclJvdzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKK3RlbXBsYXRlPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgRHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9w
PgorQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydCgpCit7CisgICAg
Ly8gTWFueSBpbnN0YW50aWF0aW9ucyBvZiB0aGlzIHRlbXBsYXRlIGZ1bmN0aW9uIHdpbGwgbmV2
ZXIgYmUgZW50ZXJlZCwgc28gd2UgdHJ5CisgICAgLy8gdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGlu
IHRoZXNlIGNhc2VzIHRvIGF2b2lkIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSB1c2VsZXNzIGNv
ZGUuCisgICAgaWYgKFNyY0Zvcm1hdCA9PSBEc3RGb3JtYXQgJiYgYWxwaGFPcCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0UkdCMzJGOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50
c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzxmbG9hdD4od2lkdGgsIDMsIHNv
dXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzxmbG9h
dCwgZmxvYXQsIGZsb2F0PihzdGF0aWNfY2FzdDxjb25zdCBmbG9hdCo+KHNvdXJjZURhdGEpLCB1
bnBhY2tPbmVSb3dPZlJHQjMyRlRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVu
dHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxl
bWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChJc0Zsb2F0Rm9ybWF0PERz
dEZvcm1hdD46OlZhbHVlICYmICFJc0Zsb2F0Rm9ybWF0PFNyY0Zvcm1hdD46OlZhbHVlICYmIFNy
Y0Zvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIFNyY0Zvcm1h
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkE4KSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIzMkY6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNv
dXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PGZsb2F0Pih3
aWR0aCwgMSwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQ
YWNraW5nPGZsb2F0LCBmbG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0Kj4oc291
cmNlRGF0YSksIHVucGFja09uZVJvd09mUjMyRlRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291
cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3Rp
bmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmICghSXNGbG9h
dEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSAmJiBJc0Zsb2F0Rm9ybWF0PFNyY0Zvcm1hdD46OlZh
bHVlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBMzJGOiB7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VF
bGVtZW50c1BlclJvdzxmbG9hdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0g
ICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzxmbG9hdCwgZmxvYXQsIGZsb2F0PihzdGF0aWNf
Y2FzdDxjb25zdCBmbG9hdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJBMzJGVG9SR0JB
MzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRh
LCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAg
YnJlYWs7CisKKyAgICAvLyBPbmx5IHRleHR1cmVzIHVwbG9hZGVkIGZyb20gRE9NIGVsZW1lbnRz
IG9yIEltYWdlRGF0YSBjYW4gYWxsb3cgRHN0Rm9ybWF0ICE9IFNyY0Zvcm1hdC4KKyAgICBjb25z
dCBib29sIENhblNyY0Zvcm1hdENvbWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OnNyY0Zvcm1hdENvbWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKFNyY0Zv
cm1hdCk7CisgICAgaWYgKCFDYW5TcmNGb3JtYXRDb21lRnJvbURPTUVsZW1lbnRPckltYWdlRGF0
YSAmJiBTcmNGb3JtYXQgIT0gRHN0Rm9ybWF0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNvdXJjZUZvcm1hdEEzMkY6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PGZsb2F0Pih3aWR0aCwgMSwgc291
cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPGZsb2F0
LCBmbG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0Kj4oc291cmNlRGF0YSksIHVu
cGFja09uZVJvd09mQTMyRlRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQ
ZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVu
dHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOworICAgIC8vIExpa2V3aXNlLCBvbmx5IHRleHR1
cmVzIHVwbG9hZGVkIGZyb20gRE9NIGVsZW1lbnRzIG9yIEltYWdlRGF0YSBjYW4gcG9zc2libHkg
aGF2ZSB0byBiZSB1bnByZW11bHRpcGxpZWQuCisgICAgaWYgKCFDYW5TcmNGb3JtYXRDb21lRnJv
bURPTUVsZW1lbnRPckltYWdlRGF0YSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvVW5tdWx0aXBseSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGlmICgoIUhhc0FscGhhKFNyY0Zv
cm1hdCkgfHwgIUhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwgIUhhc0NvbG9yKERzdEZvcm1hdCkpICYm
IGFscGhhT3AgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nKSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi0KLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgYm9vbCBpc0Zsb2F0aW5nUG9pbnRTb3VyY2UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNvdXJjZURhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTMy
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0IzMkY6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkEzMkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTb3VyY2VGb3JtYXRBMzJGOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JG
b3JtYXQ8U3JjRm9ybWF0Pjo6VHlwZSBTcmNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0
YVR5cGVGb3JGb3JtYXQ8RHN0Rm9ybWF0Pjo6VHlwZSBEc3RUeXBlOworICAgIGNvbnN0IGludCBJ
bnRlcm1lZGlhdGVTcmNGb3JtYXQgPSBJbnRlcm1lZGlhdGVGb3JtYXQ8U3JjRm9ybWF0Pjo6VmFs
dWU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBEYXRhVHlwZUZvckZvcm1hdDxJbnRlcm1lZGlhdGVT
cmNGb3JtYXQ+OjpUeXBlIEludGVybWVkaWF0ZVNyY1R5cGU7CisgICAgY29uc3QgcHRyZGlmZl90
IHNyY1N0cmlkZUluRWxlbWVudHMgPSBtU3JjU3RyaWRlIC8gc2l6ZW9mKFNyY1R5cGUpOworICAg
IGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVsZW1lbnRzID0gbURzdFN0cmlkZSAvIHNpemVv
ZihEc3RUeXBlKTsKKyAgICBjb25zdCBib29sIHRyaXZpYWxVbnBhY2sgPSBTcmNGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCB8fCBTcmNGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGOworICAgIGNvbnN0IGJvb2wgdHJpdmlhbFBh
Y2sgPSAoRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggfHwg
RHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRikgJiYgYWxw
aGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgbURzdFN0cmlkZSA+
IDA7CisgICAgQVNTRVJUKCF0cml2aWFsVW5wYWNrIHx8ICF0cml2aWFsUGFjayk7CisKKyAgICBj
b25zdCBTcmNUeXBlICpzcmNSb3dTdGFydCA9IHN0YXRpY19jYXN0PGNvbnN0IFNyY1R5cGUqPiht
U3JjU3RhcnQpOworICAgIERzdFR5cGUqIGRzdFJvd1N0YXJ0ID0gc3RhdGljX2Nhc3Q8RHN0VHlw
ZSo+KG1Ec3RTdGFydCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtSGVpZ2h0OyArK2kp
IHsKKyAgICAgICAgaWYgKCF0cml2aWFsVW5wYWNrICYmIHRyaXZpYWxQYWNrKSB7CisgICAgICAg
ICAgICB1bnBhY2s8U3JjRm9ybWF0PihzcmNSb3dTdGFydCwgZHN0Um93U3RhcnQsIG1XaWR0aCk7
CisgICAgICAgIH0gZWxzZSBpZiAoIXRyaXZpYWxVbnBhY2sgJiYgIXRyaXZpYWxQYWNrKSB7Cisg
ICAgICAgICAgICB1bnBhY2s8U3JjRm9ybWF0PihzcmNSb3dTdGFydCwgc3RhdGljX2Nhc3Q8SW50
ZXJtZWRpYXRlU3JjVHlwZSo+KHVucGFja2VkSW50ZXJtZWRpYXRlU3JjRGF0YSksIG1XaWR0aCk7
CisgICAgICAgICAgICBwYWNrPERzdEZvcm1hdCwgYWxwaGFPcD4oc3RhdGljX2Nhc3Q8SW50ZXJt
ZWRpYXRlU3JjVHlwZSo+KHVucGFja2VkSW50ZXJtZWRpYXRlU3JjRGF0YSksIGRzdFJvd1N0YXJ0
LCBtV2lkdGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhY2s8RHN0Rm9ybWF0LCBh
bHBoYU9wPihzcmNSb3dTdGFydCwgZHN0Um93U3RhcnQsIG1XaWR0aCk7CisgICAgICAgIHNyY1Jv
d1N0YXJ0ICs9IHNyY1N0cmlkZUluRWxlbWVudHM7CisgICAgICAgIGRzdFJvd1N0YXJ0ICs9IGRz
dFN0cmlkZUluRWxlbWVudHM7CisgICAgfQorICAgIG1TdWNjZXNzID0gdHJ1ZTsKKyAgICByZXR1
cm47Cit9CisKK2Jvb2wgd2ViR0xQYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEs
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNp
Z25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wg
ZmxpcFkpCit7CisgICAgaW50IHZhbGlkU3JjID0gd2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0
KHNvdXJjZUZvcm1hdCk7CisgICAgaW50IHJlbWluZGVyID0gc291cmNlVW5wYWNrQWxpZ25tZW50
ID8gKHZhbGlkU3JjICUgc291cmNlVW5wYWNrQWxpZ25tZW50KSA6IDA7CisgICAgaW50IHNyY1N0
cmlkZSA9IHJlbWluZGVyID8gKHZhbGlkU3JjICsgc291cmNlVW5wYWNrQWxpZ25tZW50IC0gcmVt
aW5kZXIpIDogdmFsaWRTcmM7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBk
c3REYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChkZXN0aW5hdGlvbkZvcm1hdCwgZGVzdGluYXRp
b25UeXBlKTsKKyAgICBpbnQgZHN0U3RyaWRlID0gd2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0
KGRzdERhdGFGb3JtYXQpOworICAgIGlmIChmbGlwWSkgeworICAgICAgICBkZXN0aW5hdGlvbkRh
dGEgPSAodWludDhfdCAqKWRlc3RpbmF0aW9uRGF0YSArIGRzdFN0cmlkZSooaGVpZ2h0IC0gMSk7
CisgICAgICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7CisgICAgfQorICAgIGlmICghSGFzQWxw
aGEoc291cmNlRm9ybWF0KSB8fCAhSGFzQ29sb3Ioc291cmNlRm9ybWF0KSB8fCAhSGFzQ29sb3Io
ZHN0RGF0YUZvcm1hdCkpCisgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb05vdGhpbmc7CisKKyAgICBpZiAoc291cmNlRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYg
YWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcpIHsKKyAgICAgICAg
Y29uc3QgdWludDhfdCogcHRyID0gc291cmNlRGF0YTsKKyAgICAgICAgY29uc3QgdWludDhfdCog
cHRyRW5kID0gc291cmNlRGF0YSArIHNyY1N0cmlkZSAqIGhlaWdodDsKKyAgICAgICAgdW5zaWdu
ZWQgcm93U2l6ZSA9IChkc3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKKyAg
ICAgICAgdWludDhfdCogZHN0ID0gKHVpbnQ4X3QqKWRlc3RpbmF0aW9uRGF0YTsKKyAgICAgICAg
d2hpbGUgKHB0ciA8IHB0ckVuZCkgeworICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCByb3dT
aXplKTsKKyAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7CisgICAgICAgICAgICBkc3QgKz0g
ZHN0U3RyaWRlOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBGb3JtYXRDb252ZXJ0ZXIgY29u
dmVydGVyKHdpZHRoLCBoZWlnaHQsIHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSwgc3JjU3Ry
aWRlLCBkc3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZUZvcm1hdCwgZHN0
RGF0YUZvcm1hdCwgYWxwaGFPcCk7CisgICAgaWYgKCFjb252ZXJ0ZXIuU3VjY2VzcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9Ci0jZW5kaWYKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWNrUGl4ZWxzKGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZVVu
cGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGRlc3RpbmF0aW9uRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBbHBoYU9wIGFscGhhT3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3AsIHZvaWQq
IGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSkKIHsKLSAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
VHlwZSkgewotICAgIGNhc2UgVU5TSUdORURfQllURTogewotICAgICAgICB1aW50OF90KiBkZXN0
aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpOwotICAgICAg
ICBpZiAoc291cmNlRGF0YUZvcm1hdCA9PSBTb3VyY2VGb3JtYXRSR0JBOCAmJiBkZXN0aW5hdGlv
bkZvcm1hdCA9PSBSR0JBICYmIHNvdXJjZVVucGFja0FsaWdubWVudCA8PSA0ICYmIGFscGhhT3Ag
PT0gQWxwaGFEb05vdGhpbmcpIHsKLSAgICAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gbmVjZXNz
YXJ5LgotICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uRGF0YSwgc291cmNlRGF0YSwgd2lk
dGggKiBoZWlnaHQgKiA0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBSR0I6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6
Ci0gICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURh
dGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRp
b24sIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4LCAzKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRv
UGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JB
OFRvUkdCOFByZW11bHRpcGx5LCAzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQWxwaGFEb1VubXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9QYWNraW5nPHVp
bnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4VW5t
dWx0aXBseSwgMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAgc3dpdGNoIChh
bHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAg
ICAgIEFTU0VSVChzb3VyY2VEYXRhRm9ybWF0ICE9IFNvdXJjZUZvcm1hdFJHQkE4IHx8IHNvdXJj
ZVVucGFja0FsaWdubWVudCA+IDQpOyAvLyBIYW5kbGVkIGFib3ZlIHdpdGggZmFzdCBjYXNlLgot
ICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRh
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9u
LCAwLCA0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFE
b1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VE
YXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseSwgNCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRp
cGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3Rp
bmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThVbm11bHRpcGx5LCA0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8vIEZyb20gdGhlIGRlc2t0b3AgT3BlbkdM
IGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAgICAgICAgICAgIC8vIHNwZWNpZmljYXRp
b24sIFRhYmxlIDMuMTUpLCB0aGUgYWxwaGEgY2hhbm5lbCBpcyBjaG9zZW4KLSAgICAgICAgICAg
IC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihz
b3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvQTgsIDEpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFVNSU5BTkNFOgotICAgICAgICAgICAgLy8gRnJv
bSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAoT3BlbkdMIDIuMQotICAgICAg
ICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRoZSByZWQgY2hhbm5lbCBpcyBj
aG9zZW4KLSAgICAgICAgICAgIC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAgICAgIHN3
aXRjaCAoYWxwaGFPcCkgewotICAgICAgICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAg
ICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFj
a09uZVJvd09mUkdCQThUb1I4LCAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1
aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUjhQcmVt
dWx0aXBseSwgMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFs
cGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3Vy
Y2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUjhVbm11bHRpcGx5LCAxKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8vIEZyb20gdGhl
IGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAgICAgICAgICAg
IC8vIHNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgcmVkIGFuZCBhbHBoYSBjaGFubmVs
cwotICAgICAgICAgICAgLy8gYXJlIGNob3NlbiBmcm9tIHRoZSBSR0JBIGRhdGEuCi0gICAgICAg
ICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6
Ci0gICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURh
dGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRp
b24sIHBhY2tPbmVSb3dPZlJHQkE4VG9SQTgsIDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9Q
YWNraW5nPHVpbnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4
VG9SQThQcmVtdWx0aXBseSwgMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50
OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkE4VW5tdWx0
aXBseSwgMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBV
TlNJR05FRF9TSE9SVF80XzRfNF80OiB7Ci0gICAgICAgIHVpbnQxNl90KiBkZXN0aW5hdGlvbiA9
IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgc3dpdGNo
IChhbHBoYU9wKSB7Ci0gICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICBk
b1BhY2tpbmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJH
QkE4VG9VbnNpZ25lZFNob3J0NDQ0NCwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDE2X3Q+
KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFj
a0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0
NDQ0NFByZW11bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFs
cGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3VyY2VE
YXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDRVbm11
bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFVOU0lHTkVEX1NIT1JUXzVfNV81XzE6IHsKLSAgICAgICAgdWlu
dDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDE2X3QqPihkZXN0aW5hdGlvbkRh
dGEpOwotICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgY2FzZSBBbHBoYURvTm90
aGluZzoKLSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNl
RGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5h
dGlvbiwgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxLCAxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAg
IGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09m
UkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxUHJlbXVsdGlwbHksIDEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQWxwaGFEb1VubXVsdGlwbHk6Ci0gICAgICAgICAgICBkb1BhY2tp
bmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9V
bnNpZ25lZFNob3J0NTU1MVVubXVsdGlwbHksIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVU5TSUdORURfU0hPUlRfNV82
XzU6IHsKLSAgICAgICAgdWludDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDE2
X3QqPihkZXN0aW5hdGlvbkRhdGEpOwotICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAg
ICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNr
QWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1
NjUsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRp
cGx5OgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3VyY2VEYXRhLCBzb3VyY2VE
YXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0
aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVByZW11bHRpcGx5LCAxKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAg
ICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNr
T25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVVubXVsdGlwbHksIDEpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkxP
QVQ6IHsKLSAgICAgICAgLy8gT3BlbkdMIEVTLCBhbmQgdGhlcmVmb3JlIFdlYkdMLCByZXF1aXJl
IHRoYXQgdGhlIGZvcm1hdCBhbmQKLSAgICAgICAgLy8gaW50ZXJuYWxmb3JtYXQgYmUgaWRlbnRp
Y2FsLiBUaGlzIG1lYW5zIHRoYXQgd2hlbmV2ZXIgdGhlCi0gICAgICAgIC8vIGRldmVsb3BlciBz
dXBwbGllcyBhbiBBcnJheUJ1ZmZlclZpZXcgb24gdGhpcyBjb2RlIHBhdGgsCi0gICAgICAgIC8v
IHRoZSBzb3VyY2UgZGF0YSB3aWxsIGJlIGluIGEgZmxvYXRpbmctcG9pbnQgZm9ybWF0LgotICAg
ICAgICAvLwotICAgICAgICAvLyBUaGUgb25seSB0aW1lIHRoZSBzb3VyY2UgZGF0YSB3aWxsIG5v
dCBiZSBmbG9hdGluZy1wb2ludCBpcwotICAgICAgICAvLyB3aGVuIHVwbG9hZGluZyBhIERPTSBl
bGVtZW50IG9yIEltYWdlRGF0YSBhcyBhCi0gICAgICAgIC8vIGZsb2F0aW5nLXBvaW50IHRleHR1
cmUuIE9ubHkgUkdCQTggYW5kIEJHUkE4IGFyZSBoYW5kbGVkIGluCi0gICAgICAgIC8vIHRoaXMg
Y2FzZS4KLSAgICAgICAgQVNTRVJUKGlzRmxvYXRpbmdQb2ludFNvdXJjZShzb3VyY2VEYXRhRm9y
bWF0KQotICAgICAgICAgICAgICAgfHwgc291cmNlRGF0YUZvcm1hdCA9PSBTb3VyY2VGb3JtYXRS
R0JBOAotICAgICAgICAgICAgICAgfHwgc291cmNlRGF0YUZvcm1hdCA9PSBTb3VyY2VGb3JtYXRC
R1JBOCk7Ci0gICAgICAgIC8vIFdoZW4gdXBsb2FkaW5nIGEgY2FudmFzIGludG8gYSBmbG9hdGlu
Zy1wb2ludCB0ZXh0dXJlLAotICAgICAgICAvLyB1bm11bHRpcGxpY2F0aW9uIG1heSBiZSBuZWNl
c3NhcnkuCi0gICAgICAgIEFTU0VSVCgoYWxwaGFPcCA9PSBBbHBoYURvTm90aGluZyB8fCBhbHBo
YU9wID09IEFscGhhRG9QcmVtdWx0aXBseSkKLSAgICAgICAgICAgICAgIHx8ICFpc0Zsb2F0aW5n
UG9pbnRTb3VyY2Uoc291cmNlRGF0YUZvcm1hdCkpOwotICAgICAgICAvLyBGb3IgdGhlIHNvdXJj
ZSBmb3JtYXRzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgY2hhbm5lbHMgKFJHQkEzMkYsCi0gICAg
ICAgIC8vIFJBMzJGKSBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIHBpeGVsIGRhdGEgaXMgdGln
aHRseSBwYWNrZWQgYmVjYXVzZQotICAgICAgICAvLyB1bnBhY2sgYWxpZ25tZW50IDw9IHNpemVv
ZihmbG9hdCkgKiBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAgICAgIGZsb2F0KiBkZXN0aW5hdGlv
biA9IHN0YXRpY19jYXN0PGZsb2F0Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgaWYgKGFs
cGhhT3AgPT0gQWxwaGFEb05vdGhpbmcKLSAgICAgICAgICAgICYmICgoc291cmNlRGF0YUZvcm1h
dCA9PSBTb3VyY2VGb3JtYXRSR0JBMzJGICYmIGRlc3RpbmF0aW9uRm9ybWF0ID09IFJHQkEpCi0g
ICAgICAgICAgICAgICAgfHwgKHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0UkEzMkYg
JiYgZGVzdGluYXRpb25Gb3JtYXQgPT0gTFVNSU5BTkNFX0FMUEhBKSkpIHsKLSAgICAgICAgICAg
IC8vIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5LgotICAgICAgICAgICAgaW50IG51bUNoYW5uZWxz
ID0gKHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0UkdCQTMyRiA/IDQgOiAyKTsKLSAg
ICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEsIHdpZHRoICogaGVp
Z2h0ICogbnVtQ2hhbm5lbHMgKiBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAg
Y2FzZSBSR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIGNh
c2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFja2lu
Zyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0IzMkYsIDMp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvUHJlbXVs
dGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRh
LCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQs
IGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0IzMkZQcmVtdWx0aXBseSwgMyk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRp
cGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBk
ZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGVW5tdWx0aXBseSwgMyk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAgLy8gQWxwaGFEb05vdGhpbmcgZm9yIFJH
QkEzMkYgLT4gUkdCQSBpcyBoYW5kbGVkIGFib3ZlIHdpdGggZmFzdCBwYXRoLgotICAgICAgICAg
ICAgQVNTRVJUKGFscGhhT3AgIT0gQWxwaGFEb05vdGhpbmcgfHwgc291cmNlRGF0YUZvcm1hdCAh
PSBTb3VyY2VGb3JtYXRSR0JBMzJGKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgewot
ICAgICAgICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAgICAgICAgICAgICBkb0Zsb2F0
aW5nUG9pbnRQYWNraW5nKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkEz
MkZUb1JHQkEzMkYsIDQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFj
a2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJG
UHJlbXVsdGlwbHksIDQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNr
aW5nKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JHQkEzMkZV
bm11bHRpcGx5LCA0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8gRnJv
bSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAoT3BlbkdMIDIuMQotICAgICAg
ICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRoZSBhbHBoYSBjaGFubmVsIGlz
IGNob3NlbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgUkdCQSBkYXRhLgotICAgICAgICAgICAg
ZG9GbG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93
T2ZSR0JBMzJGVG9BMzJGLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExV
TUlOQU5DRToKLSAgICAgICAgICAgIC8vIEZyb20gdGhlIGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNp
b24gcnVsZXMgKE9wZW5HTCAyLjEKLSAgICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIFRhYmxl
IDMuMTUpLCB0aGUgcmVkIGNoYW5uZWwgaXMgY2hvc2VuCi0gICAgICAgICAgICAvLyBmcm9tIHRo
ZSBSR0JBIGRhdGEuCi0gICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAg
IGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFj
a2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SMzJGLCAx
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11
bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0
YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50
LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRlByZW11bHRpcGx5LCAxKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1VubXVsdGlw
bHk6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBz
b3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRl
c3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SMzJGVW5tdWx0aXBseSwgMSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNr
dG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCi0gICAgICAgICAgICAvLyBz
cGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIHJlZCBhbmQgYWxwaGEgY2hhbm5lbHMKLSAg
ICAgICAgICAgIC8vIGFyZSBjaG9zZW4gZnJvbSB0aGUgUkdCQSBkYXRhLgotICAgICAgICAgICAg
c3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAg
ICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0
YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlv
biwgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkYsIDIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAg
ZG9GbG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93
T2ZSR0JBMzJGVG9SQTMyRlByZW11bHRpcGx5LCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1VubXVsdGlwbHk6Ci0gICAgICAgICAgICAgICAgZG9G
bG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZS
R0JBMzJGVG9SQTMyRlVubXVsdGlwbHksIDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gd2ViR0xQYWNrUGl4
ZWxzKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgZGVzdGluYXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSwgYWxwaGFP
cCwgZGVzdGluYXRpb25EYXRhLCBmbGlwWSk7CiB9CiAKIHVuc2lnbmVkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtIGF0dGFjaG1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAppbmRleCA5MTFmODFjNTJiODk3OTAyZTgzZWE5NDMwYjQ3MDkyNTI5OTIyOTJmLi45MjQ2
MDc5NTU4MjdhNDhlNjc4OTRkMmYyMzVkZmNjNmRiYTUwZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTYwMiw0
NCArNjAyLDY1IEBAIHB1YmxpYzoKICAgICAvLyByZWR1Y2UgdGhlIGFtb3VudCBvZiB0ZW1wb3Jh
cnkgYWxsb2NhdGlvbnMgZHVyaW5nIHRleHR1cmUKICAgICAvLyB1cGxvYWRpbmcuIFRoaXMgZW51
bSBtdXN0IGJlIHB1YmxpYyBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkCiAgICAgLy8gYnkgbm9uLW1l
bWJlciBmdW5jdGlvbnMuCi0gICAgZW51bSBTb3VyY2VEYXRhRm9ybWF0IHsKLSAgICAgICAgU291
cmNlRm9ybWF0UkdCQTggPSAwLAotICAgICAgICBTb3VyY2VGb3JtYXRSR0JBMTZMaXR0bGUsCi0g
ICAgICAgIFNvdXJjZUZvcm1hdFJHQkExNkJpZywKLSAgICAgICAgU291cmNlRm9ybWF0UkdCQTMy
RiwKLSAgICAgICAgU291cmNlRm9ybWF0UkdCOCwKLSAgICAgICAgU291cmNlRm9ybWF0UkdCMTZM
aXR0bGUsCi0gICAgICAgIFNvdXJjZUZvcm1hdFJHQjE2QmlnLAotICAgICAgICBTb3VyY2VGb3Jt
YXRSR0IzMkYsCi0gICAgICAgIFNvdXJjZUZvcm1hdEJHUjgsCi0gICAgICAgIFNvdXJjZUZvcm1h
dEJHUkE4LAotICAgICAgICBTb3VyY2VGb3JtYXRCR1JBMTZMaXR0bGUsCi0gICAgICAgIFNvdXJj
ZUZvcm1hdEJHUkExNkJpZywKLSAgICAgICAgU291cmNlRm9ybWF0QVJHQjgsCi0gICAgICAgIFNv
dXJjZUZvcm1hdEFSR0IxNkxpdHRsZSwKLSAgICAgICAgU291cmNlRm9ybWF0QVJHQjE2QmlnLAot
ICAgICAgICBTb3VyY2VGb3JtYXRBQkdSOCwKLSAgICAgICAgU291cmNlRm9ybWF0UkdCQTU1NTEs
Ci0gICAgICAgIFNvdXJjZUZvcm1hdFJHQkE0NDQ0LAotICAgICAgICBTb3VyY2VGb3JtYXRSR0I1
NjUsCi0gICAgICAgIFNvdXJjZUZvcm1hdFI4LAotICAgICAgICBTb3VyY2VGb3JtYXRSMTZMaXR0
bGUsCi0gICAgICAgIFNvdXJjZUZvcm1hdFIxNkJpZywKLSAgICAgICAgU291cmNlRm9ybWF0UjMy
RiwKLSAgICAgICAgU291cmNlRm9ybWF0UkE4LAotICAgICAgICBTb3VyY2VGb3JtYXRSQTE2TGl0
dGxlLAotICAgICAgICBTb3VyY2VGb3JtYXRSQTE2QmlnLAotICAgICAgICBTb3VyY2VGb3JtYXRS
QTMyRiwKLSAgICAgICAgU291cmNlRm9ybWF0QVI4LAotICAgICAgICBTb3VyY2VGb3JtYXRBUjE2
TGl0dGxlLAotICAgICAgICBTb3VyY2VGb3JtYXRBUjE2QmlnLAotICAgICAgICBTb3VyY2VGb3Jt
YXRBOCwKLSAgICAgICAgU291cmNlRm9ybWF0QTE2TGl0dGxlLAotICAgICAgICBTb3VyY2VGb3Jt
YXRBMTZCaWcsCi0gICAgICAgIFNvdXJjZUZvcm1hdEEzMkYsCi0gICAgICAgIFNvdXJjZUZvcm1h
dE51bUZvcm1hdHMKKyAgICBlbnVtIERhdGFGb3JtYXQgeworICAgICAgICBEYXRhRm9ybWF0UkdC
QTggPSAwLAorICAgICAgICBEYXRhRm9ybWF0UkdCQTE2TGl0dGxlLAorICAgICAgICBEYXRhRm9y
bWF0UkdCQTE2QmlnLAorICAgICAgICBEYXRhRm9ybWF0UkdCQTMyRiwKKyAgICAgICAgRGF0YUZv
cm1hdFJHQjgsCisgICAgICAgIERhdGFGb3JtYXRSR0IxNkxpdHRsZSwKKyAgICAgICAgRGF0YUZv
cm1hdFJHQjE2QmlnLAorICAgICAgICBEYXRhRm9ybWF0UkdCMzJGLAorICAgICAgICBEYXRhRm9y
bWF0QkdSOCwKKyAgICAgICAgRGF0YUZvcm1hdEJHUkE4LAorICAgICAgICBEYXRhRm9ybWF0QkdS
QTE2TGl0dGxlLAorICAgICAgICBEYXRhRm9ybWF0QkdSQTE2QmlnLAorICAgICAgICBEYXRhRm9y
bWF0QVJHQjgsCisgICAgICAgIERhdGFGb3JtYXRBUkdCMTZMaXR0bGUsCisgICAgICAgIERhdGFG
b3JtYXRBUkdCMTZCaWcsCisgICAgICAgIERhdGFGb3JtYXRBQkdSOCwKKyAgICAgICAgRGF0YUZv
cm1hdFJHQkE1NTUxLAorICAgICAgICBEYXRhRm9ybWF0UkdCQTQ0NDQsCisgICAgICAgIERhdGFG
b3JtYXRSR0I1NjUsCisgICAgICAgIERhdGFGb3JtYXRSOCwKKyAgICAgICAgRGF0YUZvcm1hdFIx
NkxpdHRsZSwKKyAgICAgICAgRGF0YUZvcm1hdFIxNkJpZywKKyAgICAgICAgRGF0YUZvcm1hdFIz
MkYsCisgICAgICAgIERhdGFGb3JtYXRSQTgsCisgICAgICAgIERhdGFGb3JtYXRSQTE2TGl0dGxl
LAorICAgICAgICBEYXRhRm9ybWF0UkExNkJpZywKKyAgICAgICAgRGF0YUZvcm1hdFJBMzJGLAor
ICAgICAgICBEYXRhRm9ybWF0QVI4LAorICAgICAgICBEYXRhRm9ybWF0QVIxNkxpdHRsZSwKKyAg
ICAgICAgRGF0YUZvcm1hdEFSMTZCaWcsCisgICAgICAgIERhdGFGb3JtYXRBOCwKKyAgICAgICAg
RGF0YUZvcm1hdEExNkxpdHRsZSwKKyAgICAgICAgRGF0YUZvcm1hdEExNkJpZywKKyAgICAgICAg
RGF0YUZvcm1hdEEzMkYsCisgICAgICAgIERhdGFGb3JtYXROdW1Gb3JtYXRzCiAgICAgfTsKIAor
ICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgb25lIG9mIHRoZSBmb3JtYXRzIGZyb20gdGhl
IEltYWdlRGF0YSBvciBET00gZWxlbWVudHMuCisgICAgLy8gVGhlIGZvcm1hdHMgZnJvbSBJbWFn
ZURhdGEgaXMgYWx3YXlzIFJHQkE4LgorICAgIC8vIFRoZSBmb3JtYXRzIGZyb20gRE9NIGVsZW1l
bnRzIHZhcnkgd2l0aCBHcmFwaGljcyBwb3J0cy4gSXQgY2FuIG9ubHkgYmUgUkdCQTggb3IgQkdS
QTggZm9yIG5vbi1DRyBwb3J0IHdoaWxlIG11Y2ggbW9yZSBmb3IgQ0dpIHBvcnQuCisgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgYm9vbCBzcmNGb3JtYXRDb21lRnJvbURPTUVsZW1lbnRPckltYWdl
RGF0YShEYXRhRm9ybWF0IFNyY0Zvcm1hdCkKKyAgICB7CisjaWYgVVNFKENHKQorI2lmIENQVShC
SUdfRU5ESUFOKQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkE4IHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBE
YXRhRm9ybWF0QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRBUkdCMTZCaWcKKyAgICAg
ICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9y
bWF0UkdCMTZCaWc7CisjZWxzZQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdEJH
UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QVJHQjE2TGl0dGxlCisgICAgICAgIHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0QUJHUjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0JB
MTZMaXR0bGUKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRCR1I4IHx8IFNyY0Zv
cm1hdCA9PSBEYXRhRm9ybWF0UkdCMTZMaXR0bGUKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERh
dGFGb3JtYXRSR0JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQjg7CisjZW5kaWYKKyNl
bHNlCisgICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QkdSQTggfHwgU3JjRm9ybWF0
ID09IERhdGFGb3JtYXRSR0JBODsKKyNlbmRpZgorICAgIH0KKwogICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTg4NSw3ICs5MDYs
NyBAQCBwdWJsaWM6CiAgICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFn
ZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3RvcgogICAg
IC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0
aGUgZmxpcFkgYW5kIEFscGhhT3AgZmxhZ3MuCiAgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3Vj
Y2Vzcy4KLSAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhh
T3AsIFNvdXJjZURhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90
PiYgZGF0YSk7CisgICAgc3RhdGljIGJvb2wgcGFja0ltYWdlRGF0YShJbWFnZSosIGNvbnN0IHZv
aWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZLCBB
bHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpOwogCiAgICAgY2xhc3MgSW1hZ2VFeHRyYWN0b3IgewogICAgIHB1YmxpYzoKQEAgLTg5
OSw3ICs5MjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRh
KCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQogICAgICAgICB1bnNpZ25lZCBpbWFnZVdp
ZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9CiAgICAgICAgIHVuc2lnbmVkIGltYWdlSGVp
Z2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBTb3VyY2VEYXRhRm9ybWF0
IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQorICAg
ICAgICBEYXRhRm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJj
ZUZvcm1hdDsgfQogICAgICAgICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxw
aGFPcDsgfQogICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsg
cmV0dXJuIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KICAgICAgICAgSW1hZ2VIdG1s
RG9tU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291
cmNlOyB9CkBAIC05MjgsNyArOTQ5LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCB2b2lkKiBt
X2ltYWdlUGl4ZWxEYXRhOwogICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7CiAgICAgICAg
IHVuc2lnbmVkIG1faW1hZ2VIZWlnaHQ7Ci0gICAgICAgIFNvdXJjZURhdGFGb3JtYXQgbV9pbWFn
ZVNvdXJjZUZvcm1hdDsKKyAgICAgICAgRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9ybWF0Owog
ICAgICAgICBBbHBoYU9wIG1fYWxwaGFPcDsKICAgICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJj
ZVVucGFja0FsaWdubWVudDsKICAgICB9OwpAQCAtOTM2LDIwICs5NTcsMTIgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzLCBIb3N0V2luZG93Kiwg
UmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwogCi0gICAgLy8gSGVscGVyIGZvciBnZXRJ
bWFnZURhdGEgd2hpY2ggaW1wbGVtZW50cyBwYWNraW5nIG9mIHBpeGVsCisgICAgLy8gSGVscGVy
IGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVEYXRhIHdo
aWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCiAgICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVj
aWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KICAgICAvLyBBIHNvdXJj
ZVVucGFja0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UKICAgICAv
LyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93
IHBhdGguCiAgICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVu
IHJvd3MuCi0gICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VE
YXRhLAotICAgICAgICAgICAgICAgICAgICBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNvdXJjZVVucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGRlc3RpbmF0aW9uRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdGluYXRpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFscGhhT3As
Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CisgICAgc3RhdGlj
IGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNv
dXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVk
IHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQsIHVuc2ln
bmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29s
IGZsaXBZKTsKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIC8vIFRh
a2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0
cmlidXRlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggM2Q1YTFlMjM5
YWVlMzE5M2IxM2RlNDc0NDhkN2FkMzQ4NmNiNmU1Mi4uNmNmN2I4Nzg2ZmQ0NmE2ZThkODM0NGFm
ZGIyODVlMmU3NjcwOGE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAg
LTIxOSw3ICsyMTksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6
ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgIH0KIAogICAgIG1f
aW1hZ2VQaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJm
YWNlLmdldCgpKTsKLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7
CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRCR1JBODsKICAgICBtX2ltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwogICAgIHJldHVybiB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAppbmRleCA5NDJjZGRiZjNkZWQwZjRhOGIwZTQ0
YjVjMDMzOGZjMGMwZGI2MzlhLi44MmZjNzY5MTk4MzQ0OWRhZDhjNDNhN2Y3YjlkNTFkZjUzNjA2
ZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtNjIsNyArNjIsNyBAQCBlbnVtIEFscGhh
Rm9ybWF0IHsKIH07CiAKIC8vIFRoaXMgcmV0dXJucyBTb3VyY2VGb3JtYXROdW1Gb3JtYXRzIGlm
IHRoZSBjb21iaW5hdGlvbiBvZiBpbnB1dCBwYXJhbWV0ZXJzIGlzIHVuc3VwcG9ydGVkLgotc3Rh
dGljIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IGdldFNvdXJjZURhdGFGb3Jt
YXQodW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgQWxwaGFGb3JtYXQgYWxwaGFGb3Jt
YXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwgYm9vbCBiaWdFbmRpYW4pCitzdGF0aWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQgZ2V0U291cmNlRGF0YUZvcm1hdCh1bnNpZ25lZCBjb21wb25l
bnRzUGVyUGl4ZWwsIEFscGhhRm9ybWF0IGFscGhhRm9ybWF0LCBib29sIGlzMTZCaXRGb3JtYXQs
IGJvb2wgYmlnRW5kaWFuKQogewogICAgIGNvbnN0IHN0YXRpYyBTb3VyY2VEYXRhRm9ybWF0QmFz
ZSBmb3JtYXRUYWJsZUJhc2VbNF1bQWxwaGFGb3JtYXROdW1Gb3JtYXRzXSA9IHsgLy8gY29tcG9u
ZW50c1BlclBpeGVsIHggQWxwaGFGb3JtYXQKICAgICAgICAgLy8gQWxwaGFGb3JtYXROb25lICAg
ICAgICAgICAgQWxwaGFGb3JtYXRGaXJzdCAgICAgICAgICAgIEFscGhhRm9ybWF0TGFzdApAQCAt
NzEsMjEgKzcxLDIxIEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1h
dCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGludCBjb21wCiAgICAgICAgIHsgU291cmNl
Rm9ybWF0QmFzZVJHQiwgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VG
b3JtYXRCYXNlTnVtRm9ybWF0cyB9LCAvLyAzIGNvbXBvbmVudHNQZXJQaXhlbAogICAgICAgICB7
IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVJHQiwgICAgICAg
U291cmNlRm9ybWF0QmFzZVJHQkEgICAgICAgIH0gLy8gNCBjb21wb25lbnRzUGVyUGl4ZWwKICAg
ICB9OwotICAgIGNvbnN0IHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1h
dCBmb3JtYXRUYWJsZVtTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7IC8vIFNvdXJj
ZURhdGFGb3JtYXRCYXNlIHggYml0c1BlckNvbXBvbmVudCB4IGVuZGlhbgorICAgIGNvbnN0IHN0
YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXRUYWJsZVtTb3VyY2VGb3Jt
YXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7IC8vIFNvdXJjZURhdGFGb3JtYXRCYXNlIHggYml0c1Bl
ckNvbXBvbmVudCB4IGVuZGlhbgogICAgICAgICAvLyA4Yml0cywgbGl0dGxlIGVuZGlhbiAgICAg
ICAgICAgICAgICAgOGJpdHMsIGJpZyBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAxNmJpdHMs
IGxpdHRsZSBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGJpZyBlbmRpYW4K
LSAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UjgsICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VGb3JtYXRSOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZv
cm1hdFIxNkxpdHRsZSwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIxNkJpZyB9
LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBOCwgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEE4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNl
Rm9ybWF0QTE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QTE2Qmln
IH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSOCwgICBHcmFw
aGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkE4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3Vy
Y2VGb3JtYXRSQTE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTE2
QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBOCwgICBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVI4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpT
b3VyY2VGb3JtYXRBUjE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRB
UjE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEJHUjgs
ICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCOCwgIEdyYXBoaWNzQ29udGV4dDNE
OjpTb3VyY2VGb3JtYXRSR0IxNkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3Jt
YXRSR0IxNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRB
QkdSOCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4LCBHcmFwaGljc0NvbnRl
eHQzRDo6U291cmNlRm9ybWF0UkdCQTE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHQzRDo6U291cmNl
Rm9ybWF0UkdCQTE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZv
cm1hdEJHUkE4LCBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVJHQjgsIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGUsIEdyYXBoaWNzQ29udGV4dDNEOjpT
b3VyY2VGb3JtYXRBUkdCMTZCaWcgfQorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UjgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjgsICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UjE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFIxNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
QTgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTgsICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dEExNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVI4LCAg
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkExNkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZC
aWcgfSwKKyAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwgICBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSOCwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdEFSMTZMaXR0bGUsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjE2QmlnIH0s
CisgICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1I4LCAgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4LCAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
R0IxNkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZCaWcgfSwKKyAg
ICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFCR1I4LCBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJHQkE4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEx
NkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZCaWcgfSwKKyAgICAg
ICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkE4LCBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdEFSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0IxNkxp
dHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZCaWcgfQogICAgIH07CiAK
ICAgICBBU1NFUlQoY29tcG9uZW50c1BlclBpeGVsIDw9IDQgJiYgY29tcG9uZW50c1BlclBpeGVs
ID4gMCk7CiAgICAgU291cmNlRGF0YUZvcm1hdEJhc2UgZm9ybWF0QmFzZSA9IGZvcm1hdFRhYmxl
QmFzZVtjb21wb25lbnRzUGVyUGl4ZWwgLSAxXVthbHBoYUZvcm1hdF07CiAgICAgaWYgKGZvcm1h
dEJhc2UgPT0gU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMpCi0gICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0TnVtRm9ybWF0czsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0TnVtRm9ybWF0czsKICAgICByZXR1cm4gZm9ybWF0
VGFibGVbZm9ybWF0QmFzZV1bKGlzMTZCaXRGb3JtYXQgPyAyIDogMCkgKyAoYmlnRW5kaWFuID8g
MSA6IDApXTsKIH0KIApAQCAtMjMwLDcgKzIzMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
CiAgICAgfQogCiAgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IGdldFNvdXJjZURhdGFGb3JtYXQo
Y29tcG9uZW50c1BlclBpeGVsLCBhbHBoYUZvcm1hdCwgYml0c1BlckNvbXBvbmVudCA9PSAxNiwg
YmlnRW5kaWFuU291cmNlKTsKLSAgICBpZiAobV9pbWFnZVNvdXJjZUZvcm1hdCA9PSBTb3VyY2VG
b3JtYXROdW1Gb3JtYXRzKQorICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IERhdGFGb3Jt
YXROdW1Gb3JtYXRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BpeGVsRGF0YS5h
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihtX2Nn
SW1hZ2UpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBhM2Q3YjE2YmZmNTVlMzU3
OTA0ZjNlMjllYWRlZDNjNThlMjViODhlLi4yZmZiYjc4ZDgyZGNkYmY2NzY4NTM4NjZmYjFiMDA5
MTAxM2QyYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTI5Miw3ICsyOTIsNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgIH0KIAogICAgIG1faW1hZ2VQaXhlbERhdGEg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAg
ICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNv
dXJjZUZvcm1hdCA9IERhdGFGb3JtYXRCR1JBODsKICAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxp
Z25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCmluZGV4IDYzZDMxMjU1MWRmOWQyYTg1MTJkMDY4NWQ4ZTRjMGQwMzUwNzlm
MWMuLjc3YzMwN2JhNTY4MjZlYzNiMDRmNWY5ODNmY2NkMWJhYTMxYmFiYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCkBAIC01MzQsNyArNTM0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wK
ICAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIG1faW1hZ2VQaXhlbERhdGEgPSBtX3F0SW1hZ2UuY29uc3RCaXRzKCk7Ci0g
ICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNvdXJjZUZvcm1hdEJHUkE4OworICAgIG1faW1hZ2VT
b3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QkdSQTg7CiAgICAgbV9pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCA9IDA7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lh
LmNwcAppbmRleCA1YmQ5YTNiNmFjOTFlZWEyYzFjZGYwMjY0NmU0ZGZhYzQ3MjIyZTMxLi4zYjFj
OGYyMGFiZmJjZDBiNDIzOTkyMTFkZDE4YzMzM2M3ZWEzNjViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHQzRFNraWEuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sCiAg
ICAgaWYgKCFtX3NraWFJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9pbWFn
ZVNvdXJjZUZvcm1hdCA9IFNLX0IzMl9TSElGVCA/IFNvdXJjZUZvcm1hdFJHQkE4IDogU291cmNl
Rm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNLX0IzMl9TSElGVCA/IERh
dGFGb3JtYXRSR0JBOCA6IERhdGFGb3JtYXRCR1JBODsKICAgICBtX2ltYWdlV2lkdGggPSBtX3Nr
aWFJbWFnZS0+Yml0bWFwKCkud2lkdGgoKTsKICAgICBtX2ltYWdlSGVpZ2h0ID0gbV9za2lhSW1h
Z2UtPmJpdG1hcCgpLmhlaWdodCgpOwogICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdl
SGVpZ2h0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182953</attachid>
            <date>2013-01-16 03:30:54 -0800</date>
            <delta_ts>2013-01-22 19:04:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105821-20130116192943.patch</filename>
            <type>text/plain</type>
            <size>120113</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5ODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM2NmVmYThkOTM4NDlm
YzJkYzhlZDlhMTlkYzQ4NzliNDA2NjRhMS4uODFhZjIwOWZhODg4ZmVhMDczYTI0MGEyOGUzYTRm
ZWJlNmEwNGFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAxLTE2ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgT3B0aW1pemUgdGhlIHRl
eHR1cmUgcGFja2luZyBmb3IgdGV4SW1hZ2UyRCgpIGFuZCB0ZXhTdWJJbWFnZTJEKCkgaW4gV2Vi
R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTgy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBv
cmlnaW5hbCB0ZXh0dXJlIHBhY2tpbmcgY29kZSB1c2VzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRl
bm90ZSBlYWNoIHVucGFjayBhbmQgcGFjayBvcGVyYXRpb25zIGZvciBkaWZmZXJlbnQgY29tYmlu
YXRpb24gb2YgU291cmNlIGZvcm1hdHMsCisgICAgICAgIERlc3RpbmF0aW9uIGZvcm1hdHMgYW5k
IEFscGhhIE9wZXJhdGlvbnMuIEl0IGNvdWxkIGJlIG1hZGUgY2xlYW5lciBhbmQgc2ltcGxlci4g
SW4gdGhpcyBwYXRjaCwgdGVtcGxhdGUgZnVuY3Rpb25zIGFyZSB1c2VkIGFuZCB0cnkgYmVzdCB0
byBhdm9pZAorICAgICAgICBnZW5lcmF0aW5nIHVzZWxlc3MgY29kZSBmb3IgdW5yZWFjaGFibGUg
cGF0aCB0byBhdm9pZCBjb2RlIGJsb2F0LiBNb3Jlb3ZlciwgdGhlIGZsaXBZIG9wZXJhdGlvbiBp
cyBtb3ZlZCBpbnRvIHRoZSBwYWNrIG9wZXJhdGlvbiBpbnN0ZWFkIG9mCisgICAgICAgIG9wZXJh
dGluZyBpbiBhIHN0YW5kYWxvbmUgbWV0aG9kIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisKKyAg
ICAgICAgQWxyZWFkeSBjb3ZlcmVkIGJ5IGN1cnJlbnQgdGVzdC4KKworICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RUZXh0dXJlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
YWNrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNyY0Zvcm1hdENvbWVG
cm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1h
Z2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoSW1hZ2VFeHRyYWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U291cmNlRGF0YUZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6
ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisKIDIwMTMtMDEtMTYg
IEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElOUFVUX01VTFRJ
UExFX0ZJRUxEU19VSTogVW5hYmxlIHRvIGVkaXQgYSB0aW1lIGZpZWxkIHdpdGggc3RlcD04NjQw
MCwgYW5kIGNvbmZ1c2luZyBhcHBlYXJhbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyMGM2MGI4ZDRlN2EyYzg4
ZDYxNWU3OTBiZmI5N2E4NmYzMjI3ODRmLi5kMGYzNmYxZjA1YzlhYWIxOWY1MjdkNDc4MjI2YjI4
ZTJjMmRhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2NDQsMTIgKzM2NDQsMTIgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZURhdGFGb3JtYXQg
c291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwogICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
IAogICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGlu
ZyAmJiAhZmxpcFkpCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCiAgICAgICAgIG5l
ZWRDb252ZXJzaW9uID0gZmFsc2U7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghbV9jb250ZXh0
LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlw
WSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgp
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewpAQCAtMzg4OCwxMiArMzg4OCwxMiBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQwogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZURhdGFG
b3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9
IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwogICAg
IGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERh
dGEoKTsKIAogICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURv
Tm90aGluZyAmJiAhZmxpcFkpCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCiAgICAg
ICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghbV9j
b250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBl
LCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VX
aWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IDc2Njkw
MTdmNDlkM2UzZWJlODRiMjkyMjI4ZGRjYjJlMjJjOThiZjkuLjI4MjhlYWUxNjBhZTQxNzc0Y2Nm
YmJlN2ZlYTNkM2MyNzg5OGUzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIE1vemlsbGEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDYgKzU3LDY3IEBAIHVp
bnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmFsdWUpCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZGKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgZ2V0RGF0YUZvcm1hdChHQzNEZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwg
R0MzRGVudW0gZGVzdGluYXRpb25UeXBlKQoreworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTg7Cisg
ICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCODsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBODsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTg7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgor
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSODsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFJBODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV81XzVfMToKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0JBNTU1MTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAgc3dpdGNo
IChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQjMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRSR0JBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMzJGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGRzdEZvcm1hdDsKK30K
KwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVu
cGFja0FsaWdubWVudCkKQEAgLTE4Miw3ICsyNDQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWNrSW1hZ2VEYXRhKAogICAgIEdDM0RlbnVtIHR5cGUsCiAgICAgYm9vbCBmbGlwWSwKICAg
ICBBbHBoYU9wIGFscGhhT3AsCi0gICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIAor
ICAgIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LAogICAgIHVuc2lnbmVkIHdpZHRoLAogICAgIHVu
c2lnbmVkIGhlaWdodCwKICAgICB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCkBAIC0x
OTcsMjkgKzI1OSw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tJbWFnZURhdGEoCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKIAotICAg
IGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMp
LAotICAgICAgICBzb3VyY2VGb3JtYXQsCi0gICAgICAgIHdpZHRoLAotICAgICAgICBoZWlnaHQs
Ci0gICAgICAgIHNvdXJjZVVucGFja0FsaWdubWVudCwKLSAgICAgICAgZm9ybWF0LAotICAgICAg
ICB0eXBlLAotICAgICAgICBhbHBoYU9wLAotICAgICAgICBkYXRhLmRhdGEoKSkpCisgICAgaWYg
KCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNv
dXJjZUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBmb3JtYXQs
IHR5cGUsIGFscGhhT3AsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVs
LCBieXRlc1BlckNvbXBvbmVudDsKLSAgICAgICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwK
LSAgICAgICAgICAgICZieXRlc1BlckNvbXBvbmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIC8vIFRoZSBpbWFnZSBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLCBhbmQgd2Ug
dXBsb2FkIGl0IGFzIHN1Y2guCi0gICAgICAgIHVuc2lnbmVkIHVucGFja0FsaWdubWVudCA9IDE7
Ci0gICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRhdGEuZGF0YSgpLCB3aWR0aCwgaGVpZ2h0LAotICAg
ICAgICAgICAgY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQsCi0gICAgICAg
ICAgICB1bnBhY2tBbGlnbm1lbnQpOwotICAgIH0KLQogICAgIGlmIChJbWFnZU9ic2VydmVyICpv
YnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIG9ic2VydmVyLT5kaWRE
cmF3KGltYWdlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0MywyOCArMjg0LDkgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOwogCi0g
ICAgaWYgKCFwYWNrUGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgICAgIFNvdXJjZUZvcm1hdFJHQkE4LAotICAgICAgICAgICAgICAgICAgICB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYURvUHJlbXVsdGlwbHkgOiBB
bHBoYURvTm90aGluZywKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5kYXRhKCkpKQorICAgIGlm
ICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBEYXRhRm9ybWF0UkdCQTgs
IHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhh
RG9QcmVtdWx0aXBseSA6IEFscGhhRG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OwotICAgICAgICBpZiAoIWNv
bXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc1BlckNvbXBvbmVu
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIFRoZSBpbWFnZSBkYXRh
IGlzIHRpZ2h0bHkgcGFja2VkLCBhbmQgd2UgdXBsb2FkIGl0IGFzIHN1Y2guCi0gICAgICAgIHVu
c2lnbmVkIGludCB1bnBhY2tBbGlnbm1lbnQgPSAxOwotICAgICAgICBmbGlwVmVydGljYWxseShk
YXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
IHVucGFja0FsaWdubWVudCk7Ci0gICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3
Niw2MiArMjk4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdFRleHR1cmVEYXRh
KHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWcKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAg
Ly8gQXNzdW1lcyBmb3JtYXQsIHR5cGUsIGV0Yy4gaGF2ZSBhbHJlYWR5IGJlZW4gdmFsaWRhdGVk
LgotICAgIFNvdXJjZURhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdFJH
QkE4OwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVU5TSUdORURfQllURToKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAgc291
cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdFJHQkE4OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUkdCOgotICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZv
cm1hdFJHQjg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAg
ICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3VyY2VGb3JtYXRBODsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRToKLSAgICAgICAgICAgIHNvdXJjZURhdGFGb3Jt
YXQgPSBTb3VyY2VGb3JtYXRSODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3VyY2VGb3Jt
YXRSQTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgICAgIGNhc2UgUkdCQToKLSAgICAgICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3Vy
Y2VGb3JtYXRSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUkdCOgot
ICAgICAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdFJHQjMyRjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgc291cmNlRGF0
YUZvcm1hdCA9IFNvdXJjZUZvcm1hdEEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBMVU1JTkFOQ0U6Ci0gICAgICAgICAgICBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9y
bWF0UjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBI
QToKLSAgICAgICAgICAgIHNvdXJjZURhdGFGb3JtYXQgPSBTb3VyY2VGb3JtYXRSQTMyRjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVTlNJR05F
RF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzb3VyY2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0
UkdCQTU1NTE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgICAgc291cmNlRGF0YUZvcm1hdCA9IFNvdXJjZUZvcm1hdFJHQkE0NDQ0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBzb3Vy
Y2VEYXRhRm9ybWF0ID0gU291cmNlRm9ybWF0UkdCNTY1OwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgRGF0YUZv
cm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQsIHR5cGUpOwogCiAg
ICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgogICAgIHVuc2lnbmVkIGludCBjb21wb25l
bnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OwpAQCAtMzQyLDU1ICszMDksMjkgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIGludCB3aWR0
aCwgdW5zaWduZWQgaW50IGhlaWcKICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJQaXhlbCA9IGNv
bXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50OwogICAgIGRhdGEucmVzaXplKHdp
ZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhlbCk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksCi0gICAgICAgICAgICAgICAgICAgIHNv
dXJjZURhdGFGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHVucGFj
a0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAocHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhRG9QcmVtdWx0aXBseSA6IEFscGhh
RG9Ob3RoaW5nKSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5kYXRhKCkpKQorICAgIGlmICgh
cGFja1BpeGVscyhzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRGF0
YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIChw
cmVtdWx0aXBseUFscGhhID8gQWxwaGFEb1ByZW11bHRpcGx5IDogQWxwaGFEb05vdGhpbmcpLCBk
YXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHBp
eGVsIGRhdGEgaXMgbm93IHRpZ2h0bHkgcGFja2VkLgotICAgIGlmIChmbGlwWSkKLSAgICAgICAg
ZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIHdpZHRoLCBoZWlnaHQsIGJ5dGVzUGVyUGl4ZWws
IDEpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZs
aXBWZXJ0aWNhbGx5KHZvaWQqIGltYWdlRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJQaXhlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bnBhY2tBbGlnbm1l
bnQpCi17Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0gICAg
dW5zaWduZWQgaW50IHZhbGlkUm93Qnl0ZXMgPSB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWw7Ci0gICAg
dW5zaWduZWQgaW50IHRvdGFsUm93Qnl0ZXMgPSB2YWxpZFJvd0J5dGVzOwotICAgIHVuc2lnbmVk
IGludCByZW1haW5kZXIgPSB2YWxpZFJvd0J5dGVzICUgdW5wYWNrQWxpZ25tZW50OwotICAgIGlm
IChyZW1haW5kZXIpCi0gICAgICAgIHRvdGFsUm93Qnl0ZXMgKz0gKHVucGFja0FsaWdubWVudCAt
IHJlbWFpbmRlcik7Ci0gICAgdWludDhfdCogdGVtcFJvdyA9IG5ldyB1aW50OF90W3ZhbGlkUm93
Qnl0ZXNdOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oaW1hZ2VE
YXRhKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgaSsrKSB7Ci0g
ICAgICAgIHVpbnQ4X3QqIGxvd1JvdyA9IGRhdGEgKyAodG90YWxSb3dCeXRlcyAqIGkpOwotICAg
ICAgICB1aW50OF90KiBoaWdoUm93ID0gZGF0YSArICh0b3RhbFJvd0J5dGVzICogKGhlaWdodCAt
IGkgLSAxKSk7Ci0gICAgICAgIG1lbWNweSh0ZW1wUm93LCBsb3dSb3csIHZhbGlkUm93Qnl0ZXMp
OwotICAgICAgICBtZW1jcHkobG93Um93LCBoaWdoUm93LCB2YWxpZFJvd0J5dGVzKTsKLSAgICAg
ICAgbWVtY3B5KGhpZ2hSb3csIHRlbXBSb3csIHZhbGlkUm93Qnl0ZXMpOwotICAgIH0KLSAgICBk
ZWxldGVbXSB0ZW1wUm93OwotfQotCi0vLyBUaGUgZm9sbG93aW5nIHBhY2tpbmcgYW5kIHVucGFj
a2luZyByb3V0aW5lcyBhcmUgZXhwcmVzc2VkIGluIHRlcm1zCi0vLyBvZiBsaW5lLWJ5LWxpbmUg
b3BlcmF0aW9ucywgYW5kIHBhc3NlZCBieSBmdW5jdGlvbiBwb2ludGVyIHJhdGhlcgotLy8gdGhh
biB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIHRvIGFjaGlldmUgdGhlIG1ham9yaXR5IG9mIHRoZSBzcGVl
ZHVwcyBvZgotLy8gaGF2aW5nIHRoZW0gaW5saW5lZCB3aGlsZSByZWR1Y2luZyBjb2RlIHNpemUu
Ci0KIG5hbWVzcGFjZSB7CiAKKy8qIEJFR0lOIENPREUgU0hBUkVEIFdJVEggTU9aSUxMQSBGSVJF
Rk9YICovCisKKy8vIFRoZSBmb2xsb3dpbmcgcGFja2luZyBhbmQgdW5wYWNraW5nIHJvdXRpbmVz
IGFyZSBleHByZXNzZWQgaW4gdGVybXMgb2YgZnVuY3Rpb24gdGVtcGxhdGVzIGFuZCBpbmxpbmUg
ZnVuY3Rpb25zIHRvIGFjaGlldmUgZ2VuZXJhbGl0eSBhbmQgc3BlZWR1cC4KKy8vIEV4cGxpY2l0
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBjb3JyZXNwb25kIHRvIHRoZSBjYXNlcyB0aGF0IHdv
dWxkIG9jY3VyLgorLy8gU29tZSBjb2RlIGFyZSBtZXJnZWQgYmFjayBmcm9tIE1vemlsbGEgY29k
ZSBpbiBodHRwOi8vbXhyLm1vemlsbGEub3JnL21vemlsbGEtY2VudHJhbC9zb3VyY2UvY29udGVu
dC9jYW52YXMvc3JjL1dlYkdMVGV4ZWxDb252ZXJzaW9ucy5oCisKIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gUGl4ZWwgdW5wYWNraW5nIHJvdXRpbmVzLgordGVtcGxhdGU8aW50IGZvcm1hdCwgdHlwZW5h
bWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2soY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdC
QTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBT
SU1EOjp1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlv
biwgcGl4ZWxzUGVyUm93KTsKQEAgLTQwNSw3ICszNDYsNyBAQCB2b2lkIHVucGFja09uZVJvd09m
UkdCQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdAogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkExNkJpZ1RvUkdCQTgoY29u
c3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMF0pOwpAQCAtNDE3LDcgKzM1OCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBMTZC
aWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uCiAg
ICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdCOFRvUkdCQTgoY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFJHQjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNDI5LDcgKzM3MCw3IEBAIHZvaWQgdW5wYWNr
T25lUm93T2ZSR0I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdCMTZMaXR0bGVU
b1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAg
ICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQjE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtNDQ0LDcgKzM4NSw3IEBAIHZvaWQgdW5wYWNrT25lUm93
T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdCMTZCaWdUb1JHQkE4KGNv
bnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMF0pOwpAQCAtNDU2LDcgKzM5Nyw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkJp
Z1RvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sCiAg
ICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQkdSOFRvUkdCQTgoY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdEJHUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzJdOwpAQCAtNDY4LDcgKzQwOSw3IEBAIHZvaWQgdW5wYWNr
T25lUm93T2ZCR1I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQVJHQjhUb1JHQkE4
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGlu
dCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMV07CkBAIC00ODAsNyArNDIx
LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkFSR0I4VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnMKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25l
Um93T2ZBUkdCMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2
TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZBUkdCMTZMaXR0bGVUb1JH
QkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC00OTUsNyArNDM2LDcg
QEAgdm9pZCB1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXQKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93
T2ZBUkdCMTZCaWdUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2QmlnLCB1
aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0g
Y29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKQEAgLTUwNyw3ICs0NDgsNyBAQCB2b2lk
IHVucGFja09uZVJvd09mQVJHQjE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbgogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkFCR1I4
VG9SR0JBOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QUJHUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzNdOwpAQCAtNTE5
LDcgKzQ2MCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZBQkdSOFRvUkdCQTgoY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zCiAgICAgfQogfQogCi12b2lkIHVu
cGFja09uZVJvd09mQkdSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBOCwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IHVpbnQzMl90KiBzb3Vy
Y2UzMiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oc291cmNlKTsKICAg
ICB1aW50MzJfdCogZGVzdGluYXRpb24zMiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVpbnQzMl90
Kj4oZGVzdGluYXRpb24pOwpAQCAtNTM3LDcgKzQ3OCw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZC
R1JBOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChj
b25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+
KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6
OnVucGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbHNQZXJSb3cpOwpAQCAtNTUyLDcgKzQ5Myw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZCR1JB
MTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
CiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQkdSQTE2QmlnVG9SR0JBOChjb25zdCB1
aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVsyXSk7CkBAIC01NjQsNyArNTA1LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkJHUkExNkJpZ1Rv
UkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24KICAgICB9
CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cp
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSR0JBNTU1MSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAj
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdC
QTU1NTFUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC01ODMs
NyArNTI0LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE1NTUxVG9SR0JBOChjb25zdCB1aW50
MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5w
YWNrT25lUm93T2ZSR0JBNDQ0NFRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
NDQ0NCwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KHNv
dXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC02MDMsNyArNTQ0LDcgQEAgdm9p
ZCB1bnBhY2tPbmVSb3dPZlJHQkE0NDQ0VG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSR0I1
NjVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1LCB1aW50MTZfdCwgdWlu
dDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAg
U0lNRDo6dW5wYWNrT25lUm93T2ZSR0I1NjVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsc1BlclJvdyk7CkBAIC02MjIsNyArNTYzLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjU2
NVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHUK
ICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSOFRvUkdCQTgoY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFI4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTYzNCw3ICs1NzUsNyBAQCB2b2lkIHVucGFja09u
ZVJvd09mUjhUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbgogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlIxNkxpdHRsZVRvUkdC
QTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90
Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxp
dHRsZVRvOChzb3VyY2VbMF0pOwpAQCAtNjQ2LDcgKzU4Nyw3IEBAIHZvaWQgdW5wYWNrT25lUm93
T2ZSMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUjE2QmlnVG9SR0JBOChjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBp
eGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVswXSk7CkBAIC02NTgsNyArNTk5LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlIxNkJpZ1RvUkdC
QTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHUKICAgICB9
CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0
aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNjcwLDcgKzYxMSw3IEBAIHZvaWQgdW5wYWNrT25lUm93
T2ZSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkExNkxpdHRsZVRvUkdCQTgo
Y29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGlu
dCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4o
Y29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0
bGVUbzgoc291cmNlWzBdKTsKQEAgLTY4Miw3ICs2MjMsNyBAQCB2b2lkIHVucGFja09uZVJvd09m
UkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpbwogICAgIH0KIH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZlJBMTZCaWdUb1JHQkE4KGNvbnN0
IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVswXSk7CkBAIC02OTQsNyArNjM1LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJBMTZCaWdUb1JH
QkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLAogICAgIH0K
IH0KIAotdm9pZCB1bnBhY2tPbmVSb3dPZkFSOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdEFSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbMV07CkBAIC03MDYsNyArNjQ3LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dP
ZkFSOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWcKICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBUjE2TGl0dGxlVG9SR0JBOChj
b25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihj
b25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbMV0pOwpAQCAtNzE4LDcgKzY1OSw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZB
UjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQVIxNkJpZ1RvUkdCQTgoY29uc3Qg
dWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRBUjE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWlu
dDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNl
WzFdKTsKQEAgLTczMCw3ICs2NzEsNyBAQCB2b2lkIHVucGFja09uZVJvd09mQVIxNkJpZ1RvUkdC
QTgoY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sCiAgICAgfQog
fQogCi12b2lkIHVucGFja09uZVJvd09mQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSAweDA7CkBAIC03NDIsNyArNjgzLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZkE4VG9SR0JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ24KICAg
ICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZBMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQx
Nl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVy
Um93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gMHgwOwpAQCAtNzU0LDcgKzY5NSw3IEBAIHZvaWQg
dW5wYWNrT25lUm93T2ZBMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mQTE2Qmln
VG9SR0JBOChjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEExNkJpZywgdWludDE2X3QsIHVpbnQ4
X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IDB4MDsKQEAgLTc2Niw3
ICs3MDcsNyBAQCB2b2lkIHVucGFja09uZVJvd09mQTE2QmlnVG9SR0JBOChjb25zdCB1aW50MTZf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdQogICAgIH0KIH0KIAotdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQkE4VG9SR0JBMzJGKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTgsIHVp
bnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0g
MS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CkBAIC03NzksNyArNzIwLDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE4
VG9SR0JBMzJGKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnMK
ICAgICB9CiB9CiAKLXZvaWQgdW5wYWNrT25lUm93T2ZCR1JBOFRvUkdCQTMyRihjb25zdCB1aW50
OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJv
dykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdEJHUkE4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBjb25z
dCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewpAQCAtNzkyLDcgKzczMyw3IEBAIHZv
aWQgdW5wYWNrT25lUm93T2ZCR1JBOFRvUkdCQTMyRihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zCiAgICAgfQogfQogCi12b2lkIHVucGFja09uZVJvd09mUkdC
MzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRiwgZmxvYXQsIGZsb2F0Pihj
b25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtODA0LDcgKzc0
NSw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpCiAgICAgfQogfQogCi12b2lkIHVucGFja09u
ZVJvd09mUjMyRlRvUkdCQTMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJGLCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC04MTYs
NyArNzU3LDcgQEAgdm9pZCB1bnBhY2tPbmVSb3dPZlIzMkZUb1JHQkEzMkYoY29uc3QgZmxvYXQq
IHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ24KICAgICB9CiB9CiAKLXZvaWQgdW5w
YWNrT25lUm93T2ZSQTMyRlRvUkdCQTMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRiwgZmxv
YXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpA
QCAtODI4LDcgKzc2OSw3IEBAIHZvaWQgdW5wYWNrT25lUm93T2ZSQTMyRlRvUkdCQTMyRihjb25z
dCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnCiAgICAgfQogfQogCi12
b2lkIHVucGFja09uZVJvd09mQTMyRlRvUkdCQTMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMzJG
LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAwOwpAQCAt
ODQ0LDcgKzc4NSwxMyBAQCB2b2lkIHVucGFja09uZVJvd09mQTMyRlRvUkdCQTMyRihjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbgogLy8gUGl4ZWwgcGFja2lu
ZyByb3V0aW5lcy4KIC8vCiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb0E4KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTxpbnQgZm9ybWF0LCBpbnQgYWxwaGFPcCwgdHlwZW5hbWUgU291cmNlVHlw
ZSwgdHlwZW5hbWUgRHN0VHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBwYWNrKGNvbnN0IFNvdXJj
ZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCB1aW50
OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJj
ZVszXTsKQEAgLTg1Myw3ICs4MDAsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9BOChjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZAogICAgIH0K
IH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUjgoY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
OCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTg2Miw3
ICs4MDksNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOChjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZAogICAgIH0KIH0KIAotdm9pZCBwYWNr
T25lUm93T2ZSR0JBOFRvUjhQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFI4LCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4w
ZjsKQEAgLTg3NCw3ICs4MjEsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SOFByZW11bHRp
cGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpbwogfQogCiAvLyBG
SVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi12b2lkIHBh
Y2tPbmVSb3dPZlJHQkE4VG9SOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSOCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNd
ID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CkBAIC04ODUsNyArODMyLDcgQEAgdm9pZCBw
YWNrT25lUm93T2ZSR0JBOFRvUjhVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1JB
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBp
bnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlv
blswXSA9IHNvdXJjZVswXTsKQEAgLTg5NSw3ICs4NDIsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJH
QkE4VG9SQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZQogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkE4UHJlbXVsdGlwbHko
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJl
bXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNj
YWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtOTA4LDcgKzg1NSw3IEBAIHZvaWQg
cGFja09uZVJvd09mUkdCQThUb1JBOFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kg
YW5kIG11c3QgYmUgcmVtb3ZlZC4KLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1JBOFVubXVsdGlw
bHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURv
VW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEu
MGYpOwpAQCAtOTIwLDcgKzg2Nyw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JBOFVubXVs
dGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvCiAgICAgfQog
fQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTkz
MSw3ICs4NzgsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9SR0I4KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbgogICAgIH0KIH0KIAotdm9pZCBw
YWNrT25lUm93T2ZSR0JBOFRvUkdCOFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWlu
dDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10g
LyAyNTUuMGY7CkBAIC05NDcsNyArODk0LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdC
OFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXQKIH0K
IAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgot
dm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAv
IChzb3VyY2VbM10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKQEAgLTk2Miw3ICs5MDks
MTMgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCOFVubXVsdGlwbHkoY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGkKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJv
d09mUkdCQThUb1JHQkE4UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKKwordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3sKKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgcGl4ZWxzUGVyUm93
ICogNCk7Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9QcmVt
dWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC05NzksNyArOTMyLDcgQEAgdm9pZCBw
YWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmEKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBh
bmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThVbm11bHRp
cGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6
IDEuMGYpOwpAQCAtOTk1LDcgKzk0OCw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQkE4
VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0CiAgICAg
fQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NChjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3Ro
aW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0
NDQ0KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC0xMDEwLDcgKzk2Myw3
IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dP
ZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE0NDQ0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5LCB1aW50
OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdIC8gMjU1LjBmOwpAQCAtMTAyNyw3ICs5ODAsNyBAQCB2b2lkIHBhY2tPbmVSb3dP
ZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludAogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJl
IHJlbW92ZWQuCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFVubXVs
dGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYURvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAg
ICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNlWzNdIC8g
MjU1LjBmIDogMS4wZik7CkBAIC0xMDQzLDcgKzk5Niw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdC
QThUb1Vuc2lnbmVkU2hvcnQ0NDQ0VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQxCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1
MShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhRG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6cGFja09uZVJvd09mUkdCQThUb1Vuc2ln
bmVkU2hvcnQ1NTUxKHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC0xMDU4
LDcgKzEwMTEsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aQogICAgIH0KIH0KIAotdm9pZCBw
YWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFQcmVtdWx0aXBseShjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0
aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTEwNzUsNyArMTAyOCw3IEBAIHZvaWQg
cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxUHJlbXVsdGlwbHkoY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kg
YW5kIG11c3QgYmUgcmVtb3ZlZC4KLXZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hv
cnQ1NTUxVW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNTU1MSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10gPyBz
b3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKQEAgLTEwOTEsNyArMTA0NCw3IEBAIHZvaWQgcGFj
a09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxVW5tdWx0aXBseShjb25zdCB1aW50OF90
KiBzb3VyY2UsIHVpbnQxCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNp
Z25lZFNob3J0NTY1KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjU2NSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6cGFja09uZVJvd09mUkdC
QThUb1Vuc2lnbmVkU2hvcnQ1NjUoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsK
QEAgLTExMDUsNyArMTA1OCw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hv
cnQ1NjUoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluCiAgICAgfQogfQog
Ci12b2lkIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1UHJlbXVsdGlwbHkoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1By
ZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtMTEyMSw3ICsxMDc0LDcgQEAg
dm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVByZW11bHRpcGx5KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDEKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBs
b3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWdu
ZWRTaG9ydDU2NVVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1LCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/
IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOwpAQCAtMTEzNiw3ICsxMDg5LDcgQEAgdm9pZCBw
YWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVVubXVsdGlwbHkoY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50MTYKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRv
UkdCMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
aW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gc291cmNlWzBdOwpAQCAtMTE0Nyw3ICsxMTAwLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JB
MzJGVG9SR0IzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z24KICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGUHJlbXVsdGlw
bHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Q
cmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gc291cmNlWzNdOwpAQCAtMTE1OSw3ICsxMTEyLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZS
R0JBMzJGVG9SR0IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXQKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGVW5tdWx0
aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIGlu
dCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFE
b1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTE3Miw3ICsx
MTI1LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0IzMkZVbm11bHRpcGx5KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGkKIH0KIAogLy8gVXNlZCBvbmx5IGR1cmlu
ZyBSR0JBOCBvciBCR1JBOCAtPiBmbG9hdGluZy1wb2ludCB1cGxvYWRzLgotdm9pZCBwYWNrT25l
Um93T2ZSR0JBMzJGVG9SR0JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGLCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAg
ICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTExODQsNyArMTEzNyw3IEBAIHZvaWQg
cGFja09uZVJvd09mUkdCQTMyRlRvUkdCQTMyRihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVuc2lnCiAgICAgfQogfQogCi12b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZU
b1JHQkEzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtMTE5Nyw3ICsxMTUwLDcgQEAg
dm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGUHJlbXVsdGlwbHkoY29uc3QgZmxvYXQq
IHNvdXJjZSwgZmxvYXQqIGRlc3RpbmEKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdC
QTMyRlRvUkdCQTMyRlVubXVsdGlwbHkoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEzMkYsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9h
dCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6
IDEuMGY7CkBAIC0xMjEwLDcgKzExNjMsNyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JH
QkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdAogICAg
IH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9BMzJGKGNvbnN0IGZsb2F0KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVszXTsKQEAgLTEyMTksNyAr
MTE3Miw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvQTMyRihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkCiAgICAgfQogfQogCi12b2lkIHBhY2tP
bmVSb3dPZlJHQkEzMkZUb1IzMkYoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYURvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtMTIyOCw3ICsxMTgxLDcgQEAgdm9pZCBwYWNr
T25lUm93T2ZSR0JBMzJGVG9SMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUjMy
RlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0xMjM4LDcgKzExOTEsNyBAQCB2b2lkIHBhY2tP
bmVSb3dPZlJHQkEzMkZUb1IzMkZQcmVtdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpbwogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SMzJG
VW5tdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIGludCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTEyNDgs
NyArMTIwMSw3IEBAIHZvaWQgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRlVubXVsdGlwbHkoY29u
c3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uCiAgICAgfQogfQogCi12b2lkIHBh
Y2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0xMjU4LDcgKzEyMTEsNyBAQCB2b2lk
IHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJGKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZQogICAgIH0KIH0KIAotdm9pZCBwYWNrT25lUm93T2ZSR0JBMzJG
VG9SQTMyRlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtMTI2OSw3ICsxMjIyLDcgQEAgdm9p
ZCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SQTMyRlByZW11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGkKICAgICB9CiB9CiAKLXZvaWQgcGFja09uZVJvd09mUkdCQTMy
RlRvUkEzMkZVbm11bHRpcGx5KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgaW50IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsK
QEAgLTEyODAsNTQ1ICsxMjMzLDQwMyBAQCB2b2lkIHBhY2tPbmVSb3dPZlJHQkEzMkZUb1JBMzJG
VW5tdWx0aXBseShjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpbwogICAgIH0K
IH0KIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCitBTFdBWVNfSU5MSU5FIGJvb2wgSGFzQWxw
aGEoaW50IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0QTgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0QTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdEExNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRBMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJBOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRBUjgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkExNkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSQTE2QmlnCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdEFSMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QVIxNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkE4CisgICAgICAgIHx8IGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkxpdHRsZQorICAgICAgICB8
fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBMTZCaWcKKyAgICAg
ICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjgKKyAgICAg
ICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2TGl0dGxl
CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0Ix
NkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRB
QkdSOAorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
R0JBMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkE0NDQ0CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE1NTUxOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSGFzQ29sb3IoaW50IGZvcm1h
dCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJHQkExNkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSR0JBMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJHQjgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCMTZMaXR0bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZCaWcKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMzJGCisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUjgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2TGl0dGxlCisgICAgICAgIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkJpZworICAgICAgICB8fCBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCOAorICAgICAgICB8fCBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGUKKyAgICAgICAgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2QmlnCisgICAgICAg
IHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFCR1I4CisgICAgICAg
IHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxCisgICAg
ICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE0NDQ0Cisg
ICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjU2NQor
ICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSOAorICAg
ICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZMaXR0bGUK
KyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2Qmln
CisgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYK
KyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4Cisg
ICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZMaXR0
bGUKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEx
NkJpZworICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
QTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRB
UjgKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVIx
NkxpdHRsZQorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRBUjE2QmlnOworfQorCit0ZW1wbGF0ZTxpbnQgRm9ybWF0Pgorc3RydWN0IElzRmxvYXRGb3Jt
YXQgeworICAgIHN0YXRpYyBjb25zdCBib29sIFZhbHVlID0KKyAgICAgICAgRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRgorICAgICAgICB8fCBGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRgorICAgICAgICB8fCBGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMzJGOworfTsKKwordGVtcGxhdGU8aW50IEZv
cm1hdD4KK3N0cnVjdCBJczE2YnBwRm9ybWF0IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBWYWx1
ZSA9CisgICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEx
NkxpdHRsZQorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0JBMTZCaWcKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkdCMTZMaXR0bGUKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCMTZCaWcKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0QkdSQTE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGUKKyAgICAgICAgfHwgRm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2QmlnCisgICAgICAgIHx8IEZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxCisgICAgICAgIHx8
IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE0NDQ0CisgICAgICAg
IHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjU2NQorICAgICAg
ICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZMaXR0bGUKKyAg
ICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2QmlnCisg
ICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZMaXR0
bGUKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEx
NkJpZworICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRB
UjE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdEFSMTZCaWcKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0QTE2TGl0dGxlCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdEExNkJpZzsKK307CisKK3RlbXBsYXRlPGludCBGb3JtYXQsIGJvb2wgSXNGbG9h
dCA9IElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wgSXMxNmJwcCA9IElzMTZicHBG
b3JtYXQ8Rm9ybWF0Pjo6VmFsdWU+CitzdHJ1Y3QgRGF0YVR5cGVGb3JGb3JtYXQgeworICAgIHR5
cGVkZWYgdWludDhfdCBUeXBlOworfTsKKwordGVtcGxhdGU8aW50IEZvcm1hdD4KK3N0cnVjdCBE
YXRhVHlwZUZvckZvcm1hdDxGb3JtYXQsIHRydWUsIGZhbHNlPiB7CisgICAgdHlwZWRlZiBmbG9h
dCBUeXBlOworfTsKKwordGVtcGxhdGU8aW50IEZvcm1hdD4KK3N0cnVjdCBEYXRhVHlwZUZvckZv
cm1hdDxGb3JtYXQsIGZhbHNlLCB0cnVlPiB7CisgICAgdHlwZWRlZiB1aW50MTZfdCBUeXBlOwor
fTsKKwordGVtcGxhdGU8aW50IEZvcm1hdD4KK3N0cnVjdCBJbnRlcm1lZGlhdGVGb3JtYXQgewor
ICAgIHN0YXRpYyBjb25zdCBpbnQgVmFsdWUgPSBJc0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVl
ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGIDogR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSR0JBODsKK307CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgVGV4ZWxC
eXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEE4OgorICAgICAg
ICByZXR1cm4gMTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
MTZMaXR0bGU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkJpZzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZCaWc6CisgICAgICAgIHJldHVybiAy
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1I4OgorICAgICAgICByZXR1cm4gMzsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRBQkdSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkExNkxpdHRsZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEx
NkJpZzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdEFSMTZMaXR0bGU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdEFSMTZCaWc6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSR0IxNkxpdHRsZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCMTZCaWc6CisgICAgICAgIHJldHVybiA2OworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCQTE2TGl0dGxlOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0JBMTZCaWc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJH
UkExNkxpdHRsZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTE2
QmlnOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZMaXR0bGU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0IxNkJpZzoKKyAgICAg
ICAgcmV0dXJuIDg7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMy
RjoKKyAgICAgICAgcmV0dXJuIDEyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0JBMzJGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQogCi0vLyBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgdW5wYWNraW5n
IGlzIG5lY2Vzc2FyeTsgaS5lLiwgdGhlIHNvdXJjZSBkYXRhCi0vLyBpcyBub3QgaW4gUkdCQTgv
UkdCQTMyRiBmb3JtYXQsIG9yIHRoZSB1bnBhY2sgYWxpZ25tZW50IHNwZWNpZmllcwotLy8gdGhh
dCByb3dzIGFyZSBub3QgdGlnaHRseSBwYWNrZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VU
eXBlLCB0eXBlbmFtZSBJbnRlcm1lZGlhdGVUeXBlLCB0eXBlbmFtZSBEZXN0VHlwZT4KLXN0YXRp
YyB2b2lkIGRvVW5wYWNraW5nQW5kUGFja2luZyhjb25zdCBTb3VyY2VUeXBlKiBzb3VyY2VEYXRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3dVbnBhY2tpbmdG
dW5jKShjb25zdCBTb3VyY2VUeXBlKiwgSW50ZXJtZWRpYXRlVHlwZSosIHVuc2lnbmVkIGludCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1l
bnRzUGVyUm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RUeXBlKiBk
ZXN0aW5hdGlvbkRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAo
KnJvd1BhY2tpbmdGdW5jKShjb25zdCBJbnRlcm1lZGlhdGVUeXBlKiwgRGVzdFR5cGUqLCB1bnNp
Z25lZCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpCi17Ci0gICAgaWYgKCFyb3dQYWNraW5nRnVu
YykgewotICAgICAgICAvLyBUaGUgcm93IHBhY2tpbmcgaXMgdHJpdmlhbCwgc28gZG9uJ3QgYm90
aGVyIHdpdGggYSB0ZW1wb3JhcnkgYnVmZmVyLgotICAgICAgICBjb25zdCBTb3VyY2VUeXBlKiBl
bmRQb2ludGVyID0gc291cmNlRGF0YSArIGhlaWdodCAqIHNvdXJjZUVsZW1lbnRzUGVyUm93Owot
ICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclJvdyA9IHdpZHRoICog
ZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOwotICAgICAgICB3aGlsZSAoc291cmNlRGF0YSA8
IGVuZFBvaW50ZXIpIHsKLSAgICAgICAgICAgIHJvd1VucGFja2luZ0Z1bmMoc291cmNlRGF0YSwg
cmVpbnRlcnByZXRfY2FzdDxJbnRlcm1lZGlhdGVUeXBlKj4oZGVzdGluYXRpb25EYXRhKSwgd2lk
dGgpOwotICAgICAgICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVtZW50c1BlclJvdzsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUm93Owor
LyogRU5EIENPREUgU0hBUkVEIFdJVEggTU9aSUxMQSBGSVJFRk9YICovCisKK2NsYXNzIEZvcm1h
dENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgRm9ybWF0Q29udmVydGVyKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgIGNvbnN0IHZvaWQqIHNyY1N0YXJ0LCB2b2lkKiBk
c3RTdGFydCwgaW50IHNyY1N0cmlkZSwgaW50IGRzdFN0cmlkZSkKKyAgICAgICAgOiBtX3dpZHRo
KHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSwgbV9zcmNTdGFydChzcmNTdGFydCksIG1fZHN0U3Rh
cnQoZHN0U3RhcnQpLCBtX3NyY1N0cmlkZShzcmNTdHJpZGUpLCBtX2RzdFN0cmlkZShkc3RTdHJp
ZGUpLCBtX3N1Y2Nlc3MoZmFsc2UpCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBNYXhO
dW1iZXJPZkNvbXBvbmVudHMgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBNYXhCeXRlc1Bl
ckNvbXBvbmVudCAgPSA0OworICAgICAgICB1bnBhY2tlZEludGVybWVkaWF0ZVNyY0RhdGEgPSBh
ZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fd2lkdGggKiBNYXhOdW1iZXJPZkNvbXBvbmVudHMg
Kk1heEJ5dGVzUGVyQ29tcG9uZW50XSk7CisgICAgICAgIEFTU0VSVCh1bnBhY2tlZEludGVybWVk
aWF0ZVNyY0RhdGEuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgY29udmVydChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3ApOworICAgIGJvb2wgU3Vj
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2VzczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdD4KKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgY29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKworICAgIHRlbXBsYXRlPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQgRHN0Rm9ybWF0PgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wKTsKKworICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRHN0Rm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wPgorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBjb252ZXJ0KCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBtX3dpZHRoLCBtX2hlaWdo
dDsKKyAgICBjb25zdCB2b2lkKiBjb25zdCBtX3NyY1N0YXJ0OworICAgIHZvaWQqIGNvbnN0IG1f
ZHN0U3RhcnQ7CisgICAgY29uc3QgaW50IG1fc3JjU3RyaWRlLCBtX2RzdFN0cmlkZTsKKyAgICBi
b29sIG1fc3VjY2VzczsKKyAgICBPd25BcnJheVB0cjx1aW50OF90PiB1bnBhY2tlZEludGVybWVk
aWF0ZVNyY0RhdGE7Cit9OworCit2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKK3sK
KyNkZWZpbmUgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKFNyY0Zvcm1hdCkgXAorICAg
IGNhc2UgU3JjRm9ybWF0OiBcCisgICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdD4oZHN0
Rm9ybWF0LCBhbHBoYU9wKTsKKworICAgICAgICBzd2l0Y2ggKHNyY0Zvcm1hdCkgeworICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQo
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYpCisg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4KQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSOCkKKyAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFJHQjU2NSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZP
Uk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRikKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTE2TGl0dGxlKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdC
QTE2QmlnKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0Ix
NkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkExNkxpdHRsZSkKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkEx
NkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2TGl0dGxl
KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0QVJHQjE2QmlnKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QUJHUjgpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRBUjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JN
QVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZMaXR0bGUpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSMTZCaWcpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2TGl0dGxlKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEx
NkJpZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSMTZMaXR0bGUpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjE2Qmln
KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2QmlnKQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0QkdSQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNTU1MSkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE0NDQ0KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRikKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgT3duQXJyYXlQdHI8SW50ZXJtZWRpYXRlVHlwZT4gdGVtcG9yYXJ5UkdCQURh
dGEgPSBhZG9wdEFycmF5UHRyKG5ldyBJbnRlcm1lZGlhdGVUeXBlW3dpZHRoICogNF0pOwotICAg
ICAgICBjb25zdCBTb3VyY2VUeXBlKiBlbmRQb2ludGVyID0gc291cmNlRGF0YSArIGhlaWdodCAq
IHNvdXJjZUVsZW1lbnRzUGVyUm93OwotICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25F
bGVtZW50c1BlclJvdyA9IHdpZHRoICogZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOwotICAg
ICAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50ZXIpIHsKLSAgICAgICAgICAgIHJvd1Vu
cGFja2luZ0Z1bmMoc291cmNlRGF0YSwgdGVtcG9yYXJ5UkdCQURhdGEuZ2V0KCksIHdpZHRoKTsK
LSAgICAgICAgICAgIHJvd1BhY2tpbmdGdW5jKHRlbXBvcmFyeVJHQkFEYXRhLmdldCgpLCBkZXN0
aW5hdGlvbkRhdGEsIHdpZHRoKTsKLSAgICAgICAgICAgIHNvdXJjZURhdGEgKz0gc291cmNlRWxl
bWVudHNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGEgKz0gZGVzdGluYXRpb25F
bGVtZW50c1BlclJvdzsKKyN1bmRlZiBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQKK30K
KwordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0PgorQUxX
QVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhh
T3ApCit7CisjZGVmaW5lIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChEc3RGb3JtYXQp
IFwKKyAgICBjYXNlIERzdEZvcm1hdDogXAorICAgICAgICByZXR1cm4gY29udmVydDxTcmNGb3Jt
YXQsIERzdEZvcm1hdD4oYWxwaGFPcCk7CisKKyAgICAgICAgc3dpdGNoIChkc3RGb3JtYXQpIHsK
KyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFI4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNU
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTgpCisgICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
MzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QTMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdFJBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCOCkKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjU2
NSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4KQorICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCQTU1NTEpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NCkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkEzMkYpCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQotICAgIH0KKworI3VuZGVmIEZPUk1BVENPTlZFUlRFUl9DQVNF
X0RTVEZPUk1BVAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlPgotc3RhdGljIHVu
c2lnbmVkIGludCBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3codW5zaWduZWQgaW50IHdpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGJ5dGVzUGVyUGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50KQotewotICAgIHVuc2ln
bmVkIGludCBlbGVtZW50U2l6ZUluQnl0ZXMgPSBzaXplb2YoU291cmNlVHlwZSk7Ci0gICAgQVNT
RVJUKGVsZW1lbnRTaXplSW5CeXRlcyA8PSBieXRlc1BlclBpeGVsKTsKLSAgICBBU1NFUlQoIShi
eXRlc1BlclBpeGVsICUgZWxlbWVudFNpemVJbkJ5dGVzKSk7Ci0gICAgdW5zaWduZWQgaW50IHZh
bGlkUm93Qnl0ZXMgPSB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWw7Ci0gICAgdW5zaWduZWQgaW50IHRv
dGFsUm93Qnl0ZXMgPSB2YWxpZFJvd0J5dGVzOwotICAgIGlmICh1bnBhY2tBbGlnbm1lbnQpIHsK
LSAgICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmRlciA9IHZhbGlkUm93Qnl0ZXMgJSB1bnBhY2tB
bGlnbm1lbnQ7Ci0gICAgICAgIGlmIChyZW1haW5kZXIpCi0gICAgICAgICAgICB0b3RhbFJvd0J5
dGVzICs9ICh1bnBhY2tBbGlnbm1lbnQgLSByZW1haW5kZXIpOwotICAgIH0KLSAgICByZXR1cm4g
dG90YWxSb3dCeXRlcyAvIGVsZW1lbnRTaXplSW5CeXRlczsKLX0KLQotLy8gVGhpcyBoYW5kbGVz
IGFsbCBjb252ZXJzaW9ucyB3aXRoIGEgZmFzdGVyIHBhdGggZm9yIHRpZ2h0bHkgcGFja2VkIFJH
QkE4IHNvdXJjZSBkYXRhLgotdGVtcGxhdGU8dHlwZW5hbWUgRGVzdFR5cGU+Ci1zdGF0aWMgdm9p
ZCBkb1BhY2tpbmcoY29uc3Qgdm9pZCogc291cmNlRGF0YSwKLSAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgRGVz
dFR5cGUqIGRlc3RpbmF0aW9uRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcm93
UGFja2luZ0Z1bmMpKGNvbnN0IHVpbnQ4X3QqLCBEZXN0VHlwZSosIHVuc2lnbmVkIGludCksCi0g
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQ
aXhlbCkKLXsKLSAgICBzd2l0Y2ggKHNvdXJjZURhdGFGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBODogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhf
dD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZW5kUG9pbnRlciA9IHNvdXJjZSArIGhlaWdodCAqIHNvdXJj
ZUVsZW1lbnRzUGVyUm93OwotICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50
c1BlclJvdyA9IHdpZHRoICogZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOwotICAgICAgICB3
aGlsZSAoc291cmNlIDwgZW5kUG9pbnRlcikgewotICAgICAgICAgICAgaWYgKHJvd1BhY2tpbmdG
dW5jKQotICAgICAgICAgICAgICAgIHJvd1BhY2tpbmdGdW5jKHNvdXJjZSwgZGVzdGluYXRpb25E
YXRhLCB3aWR0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtY3B5KGRl
c3RpbmF0aW9uRGF0YSwgc291cmNlLCB3aWR0aCAqIDQpOwotICAgICAgICAgICAgc291cmNlICs9
IHNvdXJjZUVsZW1lbnRzUGVyUm93OwotICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhICs9IGRl
c3RpbmF0aW9uRWxlbWVudHNQZXJSb3c7Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IERzdEZvcm1h
dD4KK0FMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKK3sKKyNkZWZpbmUgRk9STUFUQ09OVkVSVEVSX0NB
U0VfQUxQSEFPUChhbHBoYU9wKSBcCisgICAgY2FzZSBhbHBoYU9wOiBcCisgICAgICAgIHJldHVy
biBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9ybWF0LCBhbHBoYU9wPigpOworCisgICAgICAgIHN3
aXRjaCAoYWxwaGFPcCkgeworICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFP
UChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlw
bHkpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSkKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBMTZMaXR0bGU6IHsK
LSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJj
ZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgOCwgc291cmNlVW5wYWNrQWxpZ25tZW50
KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0
VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25l
Um93T2ZSR0JBMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1Bl
clJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50
c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkExNkJpZzogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2X3Q+
KHdpZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0Fu
ZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25zdCB1
aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQkExNkJpZ1RvUkdCQTgsIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1Bh
Y2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCODogewot
ICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNl
RWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDMsIHNvdXJjZVVucGFja0FsaWdubWVudCk7
Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlw
ZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dP
ZlJHQjhUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGlu
YXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJj
ZUZvcm1hdFJHQjE2TGl0dGxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50
c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDYs
IHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1
aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4o
c291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVp
Z2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVu
YywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQjE2QmlnOiB7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVt
ZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDYsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0g
ICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09m
UkdCMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVz
dGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVs
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNv
dXJjZUZvcm1hdEJHUjg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVy
Um93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCAzLCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhf
dCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VE
YXRhKSwgdW5wYWNrT25lUm93T2ZCR1I4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxl
bWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9u
RWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCODogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhf
dD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5n
QW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkFSR0I4VG9SR0JBOCwgd2lkdGgs
IGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2lu
Z0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGU6
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNv
dXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgOCwgc291cmNlVW5wYWNrQWxpZ25t
ZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBE
ZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNr
T25lUm93T2ZBUkdCMTZMaXR0bGVUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50
c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVt
ZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSR0IxNkJpZzogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2
X3Q+KHdpZHRoLCA4LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2lu
Z0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkFSR0IxNkJpZ1RvUkdCQTgs
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJv
d1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QUJHUjg6
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNv
dXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgdWludDhfdCwgRGVz
dFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25l
Um93T2ZBQkdSOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0QkdSQTg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCA0LCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWlu
dDhfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3Vy
Y2VEYXRhKSwgdW5wYWNrT25lUm93T2ZCR1JBOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5h
dGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QkdSQTE2TGl0dGxlOiB7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1Bl
clJvdzx1aW50MTZfdD4od2lkdGgsIDgsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAg
IGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mQkdSQTE2
TGl0dGxlVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3Rp
bmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3Vy
Y2VGb3JtYXRCR1JBMTZCaWc6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgOCwg
c291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVp
bnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihz
b3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZCR1JBMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywg
ZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE1NTUxOiB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50
c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAg
ICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdC
QTU1NTFUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGlu
YXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJj
ZUZvcm1hdFJHQkE0NDQ0OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1Bl
clJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgsIDIsIHNv
dXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50
MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc291
cmNlRGF0YSksIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVz
dGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQjU2NTogewotICAgICAgICB1bnNp
Z25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJS
b3c8dWludDE2X3Q+KHdpZHRoLCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBk
b1VucGFja2luZ0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNf
Y2FzdDxjb25zdCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJHQjU2NVRv
UkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRh
dGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0
Ujg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0
ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRoLCAxLCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8dWludDhfdCwgdWludDhfdCwg
RGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNr
T25lUm93T2ZSOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBk
ZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4
ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0UjE2TGl0dGxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVt
ZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50MTZfdD4od2lkdGgs
IDIsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2lu
Zzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90
Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mUjE2TGl0dGxlVG9SR0JBOCwgd2lkdGgsIGhl
aWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1
bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSMTZCaWc6IHsKLSAgICAg
ICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1l
bnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAg
ICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZS
MTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGlu
YXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJj
ZUZvcm1hdFJBODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cg
PSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDIsIHNvdXJjZVVu
cGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1
aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEp
LCB1bnBhY2tPbmVSb3dPZlJBOFRvUkdCQTgsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRz
UGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1l
bnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U291cmNlRm9ybWF0UkExNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2
X3Q+KHdpZHRoLCA0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2lu
Z0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZlJBMTZMaXR0bGVUb1JHQkE4
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCBy
b3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBMTZC
aWc6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0
ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxp
Z25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90
LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5w
YWNrT25lUm93T2ZSQTE2QmlnVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQ
ZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVu
dHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTb3VyY2VGb3JtYXRBUjg6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVs
ZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQ4X3Q+KHdpZHRo
LCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tp
bmc8dWludDhfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZBUjhUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2VFbGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVz
dGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSMTZMaXR0bGU6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRz
UGVyUm93PHVpbnQxNl90Pih3aWR0aCwgNCwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAg
ICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90LCB1aW50OF90LCBEZXN0VHlwZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZBUjE2
TGl0dGxlVG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3Rp
bmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7
Ci0gICAgICAgIGJyZWFrOworI3VuZGVmIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AKK30K
KwordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYU9wIGFscGhhT3A+CitBTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252
ZXJ0KCkKK3sKKyAgICAvLyBNYW55IGluc3RhbnRpYXRpb25zIG9mIHRoaXMgdGVtcGxhdGUgZnVu
Y3Rpb24gd2lsbCBuZXZlciBiZSBlbnRlcmVkLCBzbyB3ZSB0cnkKKyAgICAvLyB0byByZXR1cm4g
aW1tZWRpYXRlbHkgaW4gdGhlc2UgY2FzZXMgdG8gYXZvaWQgdGhlIGNvbXBpbGVyIHRvIGdlbmVy
YXRlIHVzZWxlc3MgY29kZS4KKyAgICBpZiAoU3JjRm9ybWF0ID09IERzdEZvcm1hdCAmJiBhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZykgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUjE2QmlnOiB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzx1aW50
MTZfdD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNr
aW5nQW5kUGFja2luZzx1aW50MTZfdCwgdWludDhfdCwgRGVzdFR5cGU+KHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQxNl90Kj4oc291cmNlRGF0YSksIHVucGFja09uZVJvd09mQVIxNkJpZ1RvUkdCQTgs
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJv
d1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVh
azsKKyAgICBpZiAoSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSAmJiAhSXNGbG9hdEZv
cm1hdDxTcmNGb3JtYXQ+OjpWYWx1ZSAmJiBTcmNGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSR0JBOCAmJiBTcmNGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRCR1JBOCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBODog
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291
cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDEsIHNvdXJjZVVucGFja0FsaWdubWVu
dCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCB1aW50OF90LCBEZXN0
VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVS
b3dPZkE4VG9SR0JBOCwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3Rp
bmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7
Ci0gICAgICAgIGJyZWFrOworICAgIGlmICghSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1
ZSAmJiBJc0Zsb2F0Rm9ybWF0PFNyY0Zvcm1hdD46OlZhbHVlKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNvdXJjZUZvcm1hdEExNkxpdHRsZTogewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDE2
X3Q+KHdpZHRoLCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFja2lu
Z0FuZFBhY2tpbmc8dWludDE2X3QsIHVpbnQ4X3QsIERlc3RUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCB1aW50MTZfdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkExNkxpdHRsZVRvUkdCQTgs
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJv
d1BhY2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVh
azsKKworICAgIC8vIE9ubHkgdGV4dHVyZXMgdXBsb2FkZWQgZnJvbSBET00gZWxlbWVudHMgb3Ig
SW1hZ2VEYXRhIGNhbiBhbGxvdyBEc3RGb3JtYXQgIT0gU3JjRm9ybWF0LgorICAgIGNvbnN0IGJv
b2wgc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhID0gR3JhcGhpY3NDb250
ZXh0M0Q6OnNyY0Zvcm1hdENvbWVGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKFNyY0Zvcm1hdCk7
CisgICAgaWYgKCFzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgJiYgU3Jj
Rm9ybWF0ICE9IERzdEZvcm1hdCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VG
b3JtYXRBMTZCaWc6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUm93
ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PHVpbnQxNl90Pih3aWR0aCwgMiwgc291cmNl
VW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPHVpbnQxNl90
LCB1aW50OF90LCBEZXN0VHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QqPihzb3VyY2VE
YXRhKSwgdW5wYWNrT25lUm93T2ZBMTZCaWdUb1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VF
bGVtZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRp
b25FbGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7CisgICAgLy8gTGlrZXdpc2UsIG9u
bHkgdGV4dHVyZXMgdXBsb2FkZWQgZnJvbSBET00gZWxlbWVudHMgb3IgSW1hZ2VEYXRhIGNhbiBw
b3NzaWJseSBoYXZlIHRvIGJlIHVucHJlbXVsdGlwbGllZC4KKyAgICBpZiAoIXNyY0Zvcm1hdENv
bWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYURvVW5tdWx0aXBseSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGlmICgoIUhhc0FscGhh
KFNyY0Zvcm1hdCkgfHwgIUhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwgIUhhc0NvbG9yKERzdEZvcm1h
dCkpICYmIGFscGhhT3AgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotfQog
Ci0vLyBUaGlzIHNwZWNpYWxpemVkIHJvdXRpbmUgaXMgdXNlZCBvbmx5IGZvciBmbG9hdGluZy1w
b2ludCB0ZXh0dXJlIHVwbG9hZHMuIEl0Ci0vLyBkb2VzIG5vdCBuZWVkIHRvIGJlIGFzIGdlbmVy
YWwgYXMgZG9QYWNraW5nLCBhYm92ZTsgYmVjYXVzZSB0aGVyZSBhcmUKLS8vIGN1cnJlbnRseSBu
byBuYXRpdmUgZmxvYXRpbmctcG9pbnQgaW1hZ2UgZm9ybWF0cyBpbiBXZWJLaXQsIHRoZXJlIGFy
ZSBvbmx5IGEKLS8vIGZldyB1cGxvYWQgcGF0aHMuCi1zdGF0aWMgdm9pZCBkb0Zsb2F0aW5nUG9p
bnRQYWNraW5nKGNvbnN0IHZvaWQqIHNvdXJjZURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNvdXJjZVVucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCByb3dQYWNraW5nRnVuYyhjb25zdCBmbG9hdCosIGZsb2F0KiwgdW5zaWduZWQg
aW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRl
c3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCkKLXsKLSAgICBzd2l0Y2ggKHNvdXJjZURhdGFGb3Jt
YXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBODogewot
ICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNl
RWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7
Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCBmbG9hdCwgZmxvYXQ+KHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSR0JB
OFRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0
aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VG
b3JtYXRCR1JBODogewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cg
PSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8dWludDhfdD4od2lkdGgsIDQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCk7Ci0gICAgICAgIGRvVW5wYWNraW5nQW5kUGFja2luZzx1aW50OF90LCBm
bG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VEYXRhKSwgdW5w
YWNrT25lUm93T2ZCR1JBOFRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291cmNlRWxlbWVudHNQ
ZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3RpbmF0aW9uRWxlbWVu
dHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBMzJGOiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50c1BlclJvdzxmbG9hdD4od2lk
dGgsIDQsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCBmbG9hdCo+KHNvdXJjZURhdGEpOwotICAgICAgICBjb25z
dCBmbG9hdCogZW5kUG9pbnRlciA9IHNvdXJjZSArIGhlaWdodCAqIHNvdXJjZUVsZW1lbnRzUGVy
Um93OwotICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclJvdyA9IHdp
ZHRoICogZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOwotICAgICAgICB3aGlsZSAoc291cmNl
IDwgZW5kUG9pbnRlcikgewotICAgICAgICAgICAgcm93UGFja2luZ0Z1bmMoc291cmNlLCBkZXN0
aW5hdGlvbkRhdGEsIHdpZHRoKTsKLSAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VFbGVtZW50
c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1l
bnRzUGVyUm93OworICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JGb3JtYXQ8U3JjRm9y
bWF0Pjo6VHlwZSBTcmNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JGb3Jt
YXQ8RHN0Rm9ybWF0Pjo6VHlwZSBEc3RUeXBlOworICAgIGNvbnN0IGludCBJbnRlcm1lZGlhdGVT
cmNGb3JtYXQgPSBJbnRlcm1lZGlhdGVGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWU7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBEYXRhVHlwZUZvckZvcm1hdDxJbnRlcm1lZGlhdGVTcmNGb3JtYXQ+OjpU
eXBlIEludGVybWVkaWF0ZVNyY1R5cGU7CisgICAgY29uc3QgcHRyZGlmZl90IHNyY1N0cmlkZUlu
RWxlbWVudHMgPSBtX3NyY1N0cmlkZSAvIHNpemVvZihTcmNUeXBlKTsKKyAgICBjb25zdCBwdHJk
aWZmX3QgZHN0U3RyaWRlSW5FbGVtZW50cyA9IG1fZHN0U3RyaWRlIC8gc2l6ZW9mKERzdFR5cGUp
OworICAgIGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IChTcmNGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiAhSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpW
YWx1ZSkgfHwgU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMy
RjsKKyAgICBjb25zdCBib29sIHRyaXZpYWxQYWNrID0gKERzdEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4IHx8IERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJHQkEzMkYpICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhRG9Ob3RoaW5nICYmIG1fZHN0U3RyaWRlID4gMDsKKyAgICBBU1NFUlQoIXRyaXZpYWxVbnBh
Y2sgfHwgIXRyaXZpYWxQYWNrKTsKKworICAgIGNvbnN0IFNyY1R5cGUgKnNyY1Jvd1N0YXJ0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU3JjVHlwZSo+KG1fc3JjU3RhcnQpOworICAgIERzdFR5cGUqIGRz
dFJvd1N0YXJ0ID0gc3RhdGljX2Nhc3Q8RHN0VHlwZSo+KG1fZHN0U3RhcnQpOworICAgIGlmICgh
dHJpdmlhbFVucGFjayAmJiB0cml2aWFsUGFjaykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faGVpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIHVucGFjazxTcmNGb3JtYXQ+KHNy
Y1Jvd1N0YXJ0LCBkc3RSb3dTdGFydCwgbV93aWR0aCk7CisgICAgICAgICAgICBzcmNSb3dTdGFy
dCArPSBzcmNTdHJpZGVJbkVsZW1lbnRzOworICAgICAgICAgICAgZHN0Um93U3RhcnQgKz0gZHN0
U3RyaWRlSW5FbGVtZW50czsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXRyaXZpYWxVbnBh
Y2sgJiYgIXRyaXZpYWxQYWNrKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9o
ZWlnaHQ7ICsraSkgeworICAgICAgICAgICAgdW5wYWNrPFNyY0Zvcm1hdD4oc3JjUm93U3RhcnQs
IHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJtZWRpYXRlU3JjVHlwZSo+KHVucGFja2VkSW50ZXJtZWRp
YXRlU3JjRGF0YS5nZXQoKSksIG1fd2lkdGgpOworICAgICAgICAgICAgcGFjazxEc3RGb3JtYXQs
IGFscGhhT3A+KHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJtZWRpYXRlU3JjVHlwZSo+KHVucGFja2Vk
SW50ZXJtZWRpYXRlU3JjRGF0YS5nZXQoKSksIGRzdFJvd1N0YXJ0LCBtX3dpZHRoKTsKKyAgICAg
ICAgICAgIHNyY1Jvd1N0YXJ0ICs9IHNyY1N0cmlkZUluRWxlbWVudHM7CisgICAgICAgICAgICBk
c3RSb3dTdGFydCArPSBkc3RTdHJpZGVJbkVsZW1lbnRzOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlaWdodDsgKytpKSB7CisgICAg
ICAgICAgICBwYWNrPERzdEZvcm1hdCwgYWxwaGFPcD4oc3JjUm93U3RhcnQsIGRzdFJvd1N0YXJ0
LCBtX3dpZHRoKTsKKyAgICAgICAgICAgIHNyY1Jvd1N0YXJ0ICs9IHNyY1N0cmlkZUluRWxlbWVu
dHM7CisgICAgICAgICAgICBkc3RSb3dTdGFydCArPSBkc3RTdHJpZGVJbkVsZW1lbnRzOwogICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTb3VyY2VGb3JtYXRSR0IzMkY6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1l
bnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PGZsb2F0Pih3aWR0aCwgMywg
c291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPGZs
b2F0LCBmbG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0Kj4oc291cmNlRGF0YSks
IHVucGFja09uZVJvd09mUkdCMzJGVG9SR0JBMzJGLCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VFbGVt
ZW50c1BlclJvdywgZGVzdGluYXRpb25EYXRhLCByb3dQYWNraW5nRnVuYywgZGVzdGluYXRpb25F
bGVtZW50c1BlclBpeGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIzMkY6IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNv
dXJjZUVsZW1lbnRzUGVyUm93ID0gY29tcHV0ZVNvdXJjZUVsZW1lbnRzUGVyUm93PGZsb2F0Pih3
aWR0aCwgMSwgc291cmNlVW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgZG9VbnBhY2tpbmdBbmRQ
YWNraW5nPGZsb2F0LCBmbG9hdCwgZmxvYXQ+KHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0Kj4oc291
cmNlRGF0YSksIHVucGFja09uZVJvd09mUjMyRlRvUkdCQTMyRiwgd2lkdGgsIGhlaWdodCwgc291
cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1bmMsIGRlc3Rp
bmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSQTMyRjogewotICAgICAgICB1bnNpZ25l
ZCBpbnQgc291cmNlRWxlbWVudHNQZXJSb3cgPSBjb21wdXRlU291cmNlRWxlbWVudHNQZXJSb3c8
ZmxvYXQ+KHdpZHRoLCAyLCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpOwotICAgICAgICBkb1VucGFj
a2luZ0FuZFBhY2tpbmc8ZmxvYXQsIGZsb2F0LCBmbG9hdD4oc3RhdGljX2Nhc3Q8Y29uc3QgZmxv
YXQqPihzb3VyY2VEYXRhKSwgdW5wYWNrT25lUm93T2ZSQTMyRlRvUkdCQTMyRiwgd2lkdGgsIGhl
aWdodCwgc291cmNlRWxlbWVudHNQZXJSb3csIGRlc3RpbmF0aW9uRGF0YSwgcm93UGFja2luZ0Z1
bmMsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBMzJGOiB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclJvdyA9IGNvbXB1dGVTb3VyY2VFbGVtZW50
c1BlclJvdzxmbG9hdD4od2lkdGgsIDEsIHNvdXJjZVVucGFja0FsaWdubWVudCk7Ci0gICAgICAg
IGRvVW5wYWNraW5nQW5kUGFja2luZzxmbG9hdCwgZmxvYXQsIGZsb2F0PihzdGF0aWNfY2FzdDxj
b25zdCBmbG9hdCo+KHNvdXJjZURhdGEpLCB1bnBhY2tPbmVSb3dPZkEzMkZUb1JHQkEzMkYsIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZUVsZW1lbnRzUGVyUm93LCBkZXN0aW5hdGlvbkRhdGEsIHJvd1Bh
Y2tpbmdGdW5jLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQorICAgIG1fc3VjY2VzcyA9IHRydWU7CisgICAgcmV0dXJuOwogfQogCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBib29sIGlzRmxvYXRp
bmdQb2ludFNvdXJjZShHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBmb3JtYXQp
Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0
aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3As
IHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSkKIHsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkEzMkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCMzJGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJBMzJGOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0QTMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSNlbmRpZgorICAgIGludCB2YWxpZFNyYyA9
IHdpZHRoICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3VyY2VEYXRhRm9ybWF0KTsKKyAgICBpbnQg
cmVtYWluZGVyID0gc291cmNlVW5wYWNrQWxpZ25tZW50ID8gKHZhbGlkU3JjICUgc291cmNlVW5w
YWNrQWxpZ25tZW50KSA6IDA7CisgICAgaW50IHNyY1N0cmlkZSA9IHJlbWFpbmRlciA/ICh2YWxp
ZFNyYyArIHNvdXJjZVVucGFja0FsaWdubWVudCAtIHJlbWFpbmRlcikgOiB2YWxpZFNyYzsKIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VE
YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbkZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRl
c3RpbmF0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFP
cCBhbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0
aW5hdGlvbkRhdGEpCi17Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKLSAgICBjYXNl
IFVOU0lHTkVEX0JZVEU6IHsKLSAgICAgICAgdWludDhfdCogZGVzdGluYXRpb24gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgaWYgKHNvdXJjZURhdGFG
b3JtYXQgPT0gU291cmNlRm9ybWF0UkdCQTggJiYgZGVzdGluYXRpb25Gb3JtYXQgPT0gUkdCQSAm
JiBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgPD0gNCAmJiBhbHBoYU9wID09IEFscGhhRG9Ob3RoaW5n
KSB7Ci0gICAgICAgICAgICAvLyBObyBjb252ZXJzaW9uIG5lY2Vzc2FyeS4KLSAgICAgICAgICAg
IG1lbWNweShkZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEsIHdpZHRoICogaGVpZ2h0ICogNCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0
aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgUkdCOgotICAgICAgICAgICAgc3dpdGNoIChhbHBo
YU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAgICAg
IGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZS
R0JBOFRvUkdCOCwgMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNr
QWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1JHQjhQcmVtdWx0aXBs
eSwgMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9V
bm11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRh
LCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQs
IGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCOFVubXVsdGlwbHksIDMpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgICAg
ICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAgICAgICAgICAgICBBU1NFUlQoc291cmNl
RGF0YUZvcm1hdCAhPSBTb3VyY2VGb3JtYXRSR0JBOCB8fCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQg
PiA0KTsgLy8gSGFuZGxlZCBhYm92ZSB3aXRoIGZhc3QgY2FzZS4KLSAgICAgICAgICAgICAgICBk
b1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgMCwgNCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAg
ICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwg
cGFja09uZVJvd09mUkdCQThUb1JHQkE4UHJlbXVsdGlwbHksIDQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAg
ICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJv
d09mUkdCQThUb1JHQkE4VW5tdWx0aXBseSwgNCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxQSEE6
Ci0gICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVz
IChPcGVuR0wgMi4xCi0gICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwg
dGhlIGFscGhhIGNoYW5uZWwgaXMgY2hvc2VuCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSBSR0JB
IGRhdGEuCi0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNl
RGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5h
dGlvbiwgcGFja09uZVJvd09mUkdCQThUb0E4LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIExVTUlOQU5DRToKLSAgICAgICAgICAgIC8vIEZyb20gdGhlIGRlc2t0b3AgT3Bl
bkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAgICAgICAgICAgIC8vIHNwZWNpZmlj
YXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgcmVkIGNoYW5uZWwgaXMgY2hvc2VuCi0gICAgICAgICAg
ICAvLyBmcm9tIHRoZSBSR0JBIGRhdGEuCi0gICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsK
LSAgICAgICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICAgICAgZG9QYWNr
aW5nPHVpbnQ4X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9S
OCwgMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Q
cmVtdWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0
YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50
LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1I4UHJlbXVsdGlwbHksIDEpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToK
LSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwgc291cmNlRGF0
YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlv
biwgcGFja09uZVJvd09mUkdCQThUb1I4VW5tdWx0aXBseSwgMSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBM
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBj
b252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCi0gICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9u
LCBUYWJsZSAzLjE1KSwgdGhlIHJlZCBhbmQgYWxwaGEgY2hhbm5lbHMKLSAgICAgICAgICAgIC8v
IGFyZSBjaG9zZW4gZnJvbSB0aGUgUkdCQSBkYXRhLgotICAgICAgICAgICAgc3dpdGNoIChhbHBo
YU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAgICAg
IGRvUGFja2luZzx1aW50OF90Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZS
R0JBOFRvUkE4LCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
QWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90Pihz
b3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvUkE4UHJlbXVsdGlwbHks
IDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5t
dWx0aXBseToKLSAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdD4oc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBk
ZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1JBOFVubXVsdGlwbHksIDIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVU5TSUdORURfU0hPUlRfNF80
XzRfNDogewotICAgICAgICB1aW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50
MTZfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0gICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAg
ICAgICBjYXNlIEFscGhhRG9Ob3RoaW5nOgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90
Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9y
dDQ0NDQsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWxwaGFEb1ByZW11
bHRpcGx5OgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRlc3Rp
bmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDRQcmVtdWx0aXBseSwg
MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToK
LSAgICAgICAgICAgIGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwg
cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0VW5tdWx0aXBseSwgMSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVTlNJR05FRF9TSE9SVF81XzVfNV8xOiB7Ci0gICAgICAgIHVpbnQxNl90KiBkZXN0aW5hdGlv
biA9IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgc3dp
dGNoIChhbHBoYU9wKSB7Ci0gICAgICAgIGNhc2UgQWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAg
ICBkb1BhY2tpbmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dP
ZlJHQkE4VG9VbnNpZ25lZFNob3J0NTU1MSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBbHBoYURvUHJlbXVsdGlwbHk6Ci0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDE2
X3Q+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNo
b3J0NTU1MVByZW11bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQxNl90Pihzb3Vy
Y2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFV
bm11bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVOU0lHTkVEX1NIT1JUXzVfNl81OiB7Ci0gICAgICAgIHVp
bnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRpb25E
YXRhKTsKLSAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgIGNhc2UgQWxwaGFEb05v
dGhpbmc6Ci0gICAgICAgICAgICBkb1BhY2tpbmc8dWludDE2X3Q+KHNvdXJjZURhdGEsIHNvdXJj
ZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGlu
YXRpb24sIHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1LCAxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAgICAg
IGRvUGFja2luZzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09m
UkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVQcmVtdWx0aXBseSwgMSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAgIGRvUGFja2lu
Zzx1aW50MTZfdD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
c291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQThUb1Vu
c2lnbmVkU2hvcnQ1NjVVbm11bHRpcGx5LCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZMT0FUOiB7Ci0gICAgICAgIC8v
IE9wZW5HTCBFUywgYW5kIHRoZXJlZm9yZSBXZWJHTCwgcmVxdWlyZSB0aGF0IHRoZSBmb3JtYXQg
YW5kCi0gICAgICAgIC8vIGludGVybmFsZm9ybWF0IGJlIGlkZW50aWNhbC4gVGhpcyBtZWFucyB0
aGF0IHdoZW5ldmVyIHRoZQotICAgICAgICAvLyBkZXZlbG9wZXIgc3VwcGxpZXMgYW4gQXJyYXlC
dWZmZXJWaWV3IG9uIHRoaXMgY29kZSBwYXRoLAotICAgICAgICAvLyB0aGUgc291cmNlIGRhdGEg
d2lsbCBiZSBpbiBhIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gVGhlIG9ubHkgdGltZSB0aGUgc291cmNlIGRhdGEgd2lsbCBub3QgYmUgZmxvYXRpbmctcG9p
bnQgaXMKLSAgICAgICAgLy8gd2hlbiB1cGxvYWRpbmcgYSBET00gZWxlbWVudCBvciBJbWFnZURh
dGEgYXMgYQotICAgICAgICAvLyBmbG9hdGluZy1wb2ludCB0ZXh0dXJlLiBPbmx5IFJHQkE4IGFu
ZCBCR1JBOCBhcmUgaGFuZGxlZCBpbgotICAgICAgICAvLyB0aGlzIGNhc2UuCi0gICAgICAgIEFT
U0VSVChpc0Zsb2F0aW5nUG9pbnRTb3VyY2Uoc291cmNlRGF0YUZvcm1hdCkKLSAgICAgICAgICAg
ICAgIHx8IHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0UkdCQTgKLSAgICAgICAgICAg
ICAgIHx8IHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0QkdSQTgpOwotICAgICAgICAv
LyBXaGVuIHVwbG9hZGluZyBhIGNhbnZhcyBpbnRvIGEgZmxvYXRpbmctcG9pbnQgdGV4dHVyZSwK
LSAgICAgICAgLy8gdW5tdWx0aXBsaWNhdGlvbiBtYXkgYmUgbmVjZXNzYXJ5LgotICAgICAgICBB
U1NFUlQoKGFscGhhT3AgPT0gQWxwaGFEb05vdGhpbmcgfHwgYWxwaGFPcCA9PSBBbHBoYURvUHJl
bXVsdGlwbHkpCi0gICAgICAgICAgICAgICB8fCAhaXNGbG9hdGluZ1BvaW50U291cmNlKHNvdXJj
ZURhdGFGb3JtYXQpKTsKLSAgICAgICAgLy8gRm9yIHRoZSBzb3VyY2UgZm9ybWF0cyB3aXRoIGFu
IGV2ZW4gbnVtYmVyIG9mIGNoYW5uZWxzIChSR0JBMzJGLAotICAgICAgICAvLyBSQTMyRikgaXQg
aXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBwaXhlbCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIGJlY2F1
c2UKLSAgICAgICAgLy8gdW5wYWNrIGFsaWdubWVudCA8PSBzaXplb2YoZmxvYXQpICogbnVtYmVy
IG9mIGNoYW5uZWxzLgotICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxm
bG9hdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0gICAgICAgIGlmIChhbHBoYU9wID09IEFscGhhRG9O
b3RoaW5nCi0gICAgICAgICAgICAmJiAoKHNvdXJjZURhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0
UkdCQTMyRiAmJiBkZXN0aW5hdGlvbkZvcm1hdCA9PSBSR0JBKQotICAgICAgICAgICAgICAgIHx8
IChzb3VyY2VEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdFJBMzJGICYmIGRlc3RpbmF0aW9uRm9y
bWF0ID09IExVTUlOQU5DRV9BTFBIQSkpKSB7Ci0gICAgICAgICAgICAvLyBObyBjb252ZXJzaW9u
IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIGludCBudW1DaGFubmVscyA9IChzb3VyY2VEYXRhRm9y
bWF0ID09IFNvdXJjZUZvcm1hdFJHQkEzMkYgPyA0IDogMik7Ci0gICAgICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb25EYXRhLCBzb3VyY2VEYXRhLCB3aWR0aCAqIGhlaWdodCAqIG51bUNoYW5uZWxz
ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgUkdCOgotICAgICAg
ICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3RoaW5n
OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291
cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0
aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCMzJGLCAzKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAg
ICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFj
a09uZVJvd09mUkdCQTMyRlRvUkdCMzJGUHJlbXVsdGlwbHksIDMpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBbHBoYURvVW5tdWx0aXBseToKLSAgICAgICAgICAg
ICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNraW5nKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tP
bmVSb3dPZlJHQkEzMkZUb1JHQjMyRlVubXVsdGlwbHksIDMpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUkdC
QToKLSAgICAgICAgICAgIC8vIEFscGhhRG9Ob3RoaW5nIGZvciBSR0JBMzJGIC0+IFJHQkEgaXMg
aGFuZGxlZCBhYm92ZSB3aXRoIGZhc3QgcGF0aC4KLSAgICAgICAgICAgIEFTU0VSVChhbHBoYU9w
ICE9IEFscGhhRG9Ob3RoaW5nIHx8IHNvdXJjZURhdGFGb3JtYXQgIT0gU291cmNlRm9ybWF0UkdC
QTMyRik7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIGNhc2Ug
QWxwaGFEb05vdGhpbmc6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFja2luZyhz
b3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQsIGRlc3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGLCA0KTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1ByZW11bHRp
cGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBk
ZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkdCQTMyRlByZW11bHRpcGx5LCA0KTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWxwaGFEb1VubXVsdGlw
bHk6Ci0gICAgICAgICAgICAgICAgZG9GbG9hdGluZ1BvaW50UGFja2luZyhzb3VyY2VEYXRhLCBz
b3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGRl
c3RpbmF0aW9uLCBwYWNrT25lUm93T2ZSR0JBMzJGVG9SR0JBMzJGVW5tdWx0aXBseSwgNCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8vIEZyb20gdGhlIGRlc2t0b3AgT3Bl
bkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKLSAgICAgICAgICAgIC8vIHNwZWNpZmlj
YXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgYWxwaGEgY2hhbm5lbCBpcyBjaG9zZW4KLSAgICAgICAg
ICAgIC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBh
Y2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvQTMyRiwg
MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFOQ0U6Ci0gICAgICAg
ICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wg
Mi4xCi0gICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIHJlZCBj
aGFubmVsIGlzIGNob3NlbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgUkdCQSBkYXRhLgotICAg
ICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Ob3Ro
aW5nOgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBk
ZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUjMyRiwgMSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9QcmVtdWx0aXBseToKLSAgICAgICAg
ICAgICAgICBkb0Zsb2F0aW5nUG9pbnRQYWNraW5nKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBh
Y2tPbmVSb3dPZlJHQkEzMkZUb1IzMkZQcmVtdWx0aXBseSwgMSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAg
ICAgIGRvRmxvYXRpbmdQb2ludFBhY2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09u
ZVJvd09mUkdCQTMyRlRvUjMyRlVubXVsdGlwbHksIDEpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFVNSU5B
TkNFX0FMUEhBOgotICAgICAgICAgICAgLy8gRnJvbSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVy
c2lvbiBydWxlcyAoT3BlbkdMIDIuMQotICAgICAgICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFi
bGUgMy4xNSksIHRoZSByZWQgYW5kIGFscGhhIGNoYW5uZWxzCi0gICAgICAgICAgICAvLyBhcmUg
Y2hvc2VuIGZyb20gdGhlIFJHQkEgZGF0YS4KLSAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkg
ewotICAgICAgICAgICAgY2FzZSBBbHBoYURvTm90aGluZzoKLSAgICAgICAgICAgICAgICBkb0Zs
b2F0aW5nUG9pbnRQYWNraW5nKHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZVVucGFja0FsaWdubWVudCwgZGVzdGluYXRpb24sIHBhY2tPbmVSb3dPZlJH
QkEzMkZUb1JBMzJGLCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQWxwaGFEb1ByZW11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBh
Y2tpbmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkZQ
cmVtdWx0aXBseSwgMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEFscGhhRG9Vbm11bHRpcGx5OgotICAgICAgICAgICAgICAgIGRvRmxvYXRpbmdQb2ludFBhY2tp
bmcoc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5w
YWNrQWxpZ25tZW50LCBkZXN0aW5hdGlvbiwgcGFja09uZVJvd09mUkdCQTMyRlRvUkEzMkZVbm11
bHRpcGx5LCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOworICAgIERhdGFGb3JtYXQgZHN0RGF0YUZvcm1hdCA9IGdldERhdGFGb3Jt
YXQoZGVzdGluYXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSk7CisgICAgaW50IGRzdFN0cmlk
ZSA9IHdpZHRoICogVGV4ZWxCeXRlc0ZvckZvcm1hdChkc3REYXRhRm9ybWF0KTsKKyAgICBpZiAo
ZmxpcFkpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGRlc3RpbmF0aW9uRGF0YSkgKyBkc3RTdHJpZGUqKGhlaWdodCAtIDEpOworICAgICAgICBkc3RT
dHJpZGUgPSAtZHN0U3RyaWRlOworICAgIH0KKyAgICBpZiAoIUhhc0FscGhhKHNvdXJjZURhdGFG
b3JtYXQpIHx8ICFIYXNDb2xvcihzb3VyY2VEYXRhRm9ybWF0KSB8fCAhSGFzQ29sb3IoZHN0RGF0
YUZvcm1hdCkpCisgICAgICAgIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKworICAgIGlmIChz
b3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9PSBBbHBoYURvTm90
aGluZykgeworICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBzb3VyY2VEYXRhOworICAgICAg
ICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRlICogaGVpZ2h0
OworICAgICAgICB1bnNpZ25lZCByb3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRl
OiAtZHN0U3RyaWRlOworICAgICAgICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZGVzdGluYXRpb25EYXRhKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgeworICAg
ICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCByb3dTaXplKTsKKyAgICAgICAgICAgIHB0ciArPSBz
cmNTdHJpZGU7CisgICAgICAgICAgICBkc3QgKz0gZHN0U3RyaWRlOwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgRm9y
bWF0Q29udmVydGVyIGNvbnZlcnRlcih3aWR0aCwgaGVpZ2h0LCBzb3VyY2VEYXRhLCBkZXN0aW5h
dGlvbkRhdGEsIHNyY1N0cmlkZSwgZHN0U3RyaWRlKTsKKyAgICBjb252ZXJ0ZXIuY29udmVydChz
b3VyY2VEYXRhRm9ybWF0LCBkc3REYXRhRm9ybWF0LCBhbHBoYU9wKTsKKyAgICBpZiAoIWNvbnZl
cnRlci5TdWNjZXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKaW5kZXggOTExZjgxYzUyYjg5NzkwMmU4M2VhOTQzMGI0NzA5MjUyOTkyMjky
Zi4uMzM2OTk3ZmJkN2Y4MzMxZGUzNTM1Nzc3N2JlMDU3ZTE1ZjdkNDgyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBA
IC02MDIsNDQgKzYwMiw2NSBAQCBwdWJsaWM6CiAgICAgLy8gcmVkdWNlIHRoZSBhbW91bnQgb2Yg
dGVtcG9yYXJ5IGFsbG9jYXRpb25zIGR1cmluZyB0ZXh0dXJlCiAgICAgLy8gdXBsb2FkaW5nLiBU
aGlzIGVudW0gbXVzdCBiZSBwdWJsaWMgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZAogICAgIC8vIGJ5
IG5vbi1tZW1iZXIgZnVuY3Rpb25zLgotICAgIGVudW0gU291cmNlRGF0YUZvcm1hdCB7Ci0gICAg
ICAgIFNvdXJjZUZvcm1hdFJHQkE4ID0gMCwKLSAgICAgICAgU291cmNlRm9ybWF0UkdCQTE2TGl0
dGxlLAotICAgICAgICBTb3VyY2VGb3JtYXRSR0JBMTZCaWcsCi0gICAgICAgIFNvdXJjZUZvcm1h
dFJHQkEzMkYsCi0gICAgICAgIFNvdXJjZUZvcm1hdFJHQjgsCi0gICAgICAgIFNvdXJjZUZvcm1h
dFJHQjE2TGl0dGxlLAotICAgICAgICBTb3VyY2VGb3JtYXRSR0IxNkJpZywKLSAgICAgICAgU291
cmNlRm9ybWF0UkdCMzJGLAotICAgICAgICBTb3VyY2VGb3JtYXRCR1I4LAotICAgICAgICBTb3Vy
Y2VGb3JtYXRCR1JBOCwKLSAgICAgICAgU291cmNlRm9ybWF0QkdSQTE2TGl0dGxlLAotICAgICAg
ICBTb3VyY2VGb3JtYXRCR1JBMTZCaWcsCi0gICAgICAgIFNvdXJjZUZvcm1hdEFSR0I4LAotICAg
ICAgICBTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGUsCi0gICAgICAgIFNvdXJjZUZvcm1hdEFSR0Ix
NkJpZywKLSAgICAgICAgU291cmNlRm9ybWF0QUJHUjgsCi0gICAgICAgIFNvdXJjZUZvcm1hdFJH
QkE1NTUxLAotICAgICAgICBTb3VyY2VGb3JtYXRSR0JBNDQ0NCwKLSAgICAgICAgU291cmNlRm9y
bWF0UkdCNTY1LAotICAgICAgICBTb3VyY2VGb3JtYXRSOCwKLSAgICAgICAgU291cmNlRm9ybWF0
UjE2TGl0dGxlLAotICAgICAgICBTb3VyY2VGb3JtYXRSMTZCaWcsCi0gICAgICAgIFNvdXJjZUZv
cm1hdFIzMkYsCi0gICAgICAgIFNvdXJjZUZvcm1hdFJBOCwKLSAgICAgICAgU291cmNlRm9ybWF0
UkExNkxpdHRsZSwKLSAgICAgICAgU291cmNlRm9ybWF0UkExNkJpZywKLSAgICAgICAgU291cmNl
Rm9ybWF0UkEzMkYsCi0gICAgICAgIFNvdXJjZUZvcm1hdEFSOCwKLSAgICAgICAgU291cmNlRm9y
bWF0QVIxNkxpdHRsZSwKLSAgICAgICAgU291cmNlRm9ybWF0QVIxNkJpZywKLSAgICAgICAgU291
cmNlRm9ybWF0QTgsCi0gICAgICAgIFNvdXJjZUZvcm1hdEExNkxpdHRsZSwKLSAgICAgICAgU291
cmNlRm9ybWF0QTE2QmlnLAotICAgICAgICBTb3VyY2VGb3JtYXRBMzJGLAotICAgICAgICBTb3Vy
Y2VGb3JtYXROdW1Gb3JtYXRzCisgICAgZW51bSBEYXRhRm9ybWF0IHsKKyAgICAgICAgRGF0YUZv
cm1hdFJHQkE4ID0gMCwKKyAgICAgICAgRGF0YUZvcm1hdFJHQkExNkxpdHRsZSwKKyAgICAgICAg
RGF0YUZvcm1hdFJHQkExNkJpZywKKyAgICAgICAgRGF0YUZvcm1hdFJHQkEzMkYsCisgICAgICAg
IERhdGFGb3JtYXRSR0I4LAorICAgICAgICBEYXRhRm9ybWF0UkdCMTZMaXR0bGUsCisgICAgICAg
IERhdGFGb3JtYXRSR0IxNkJpZywKKyAgICAgICAgRGF0YUZvcm1hdFJHQjMyRiwKKyAgICAgICAg
RGF0YUZvcm1hdEJHUjgsCisgICAgICAgIERhdGFGb3JtYXRCR1JBOCwKKyAgICAgICAgRGF0YUZv
cm1hdEJHUkExNkxpdHRsZSwKKyAgICAgICAgRGF0YUZvcm1hdEJHUkExNkJpZywKKyAgICAgICAg
RGF0YUZvcm1hdEFSR0I4LAorICAgICAgICBEYXRhRm9ybWF0QVJHQjE2TGl0dGxlLAorICAgICAg
ICBEYXRhRm9ybWF0QVJHQjE2QmlnLAorICAgICAgICBEYXRhRm9ybWF0QUJHUjgsCisgICAgICAg
IERhdGFGb3JtYXRSR0JBNTU1MSwKKyAgICAgICAgRGF0YUZvcm1hdFJHQkE0NDQ0LAorICAgICAg
ICBEYXRhRm9ybWF0UkdCNTY1LAorICAgICAgICBEYXRhRm9ybWF0UjgsCisgICAgICAgIERhdGFG
b3JtYXRSMTZMaXR0bGUsCisgICAgICAgIERhdGFGb3JtYXRSMTZCaWcsCisgICAgICAgIERhdGFG
b3JtYXRSMzJGLAorICAgICAgICBEYXRhRm9ybWF0UkE4LAorICAgICAgICBEYXRhRm9ybWF0UkEx
NkxpdHRsZSwKKyAgICAgICAgRGF0YUZvcm1hdFJBMTZCaWcsCisgICAgICAgIERhdGFGb3JtYXRS
QTMyRiwKKyAgICAgICAgRGF0YUZvcm1hdEFSOCwKKyAgICAgICAgRGF0YUZvcm1hdEFSMTZMaXR0
bGUsCisgICAgICAgIERhdGFGb3JtYXRBUjE2QmlnLAorICAgICAgICBEYXRhRm9ybWF0QTgsCisg
ICAgICAgIERhdGFGb3JtYXRBMTZMaXR0bGUsCisgICAgICAgIERhdGFGb3JtYXRBMTZCaWcsCisg
ICAgICAgIERhdGFGb3JtYXRBMzJGLAorICAgICAgICBEYXRhRm9ybWF0TnVtRm9ybWF0cwogICAg
IH07CiAKKyAgICAvLyBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIG9uZSBvZiB0aGUgZm9ybWF0cyBm
cm9tIHRoZSBJbWFnZURhdGEgb3IgRE9NIGVsZW1lbnRzLgorICAgIC8vIFRoZSBmb3JtYXRzIGZy
b20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBSR0JBOC4KKyAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIERP
TSBlbGVtZW50cyB2YXJ5IHdpdGggR3JhcGhpY3MgcG9ydHMuIEl0IGNhbiBvbmx5IGJlIFJHQkE4
IG9yIEJHUkE4IGZvciBub24tQ0cgcG9ydCB3aGlsZSBtdWNoIG1vcmUgZm9yIENHIHBvcnQuCisg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBzcmNGb3JtYXRDb21lRnJvbURPTUVsZW1lbnRP
ckltYWdlRGF0YShEYXRhRm9ybWF0IFNyY0Zvcm1hdCkKKyAgICB7CisjaWYgVVNFKENHKQorI2lm
IENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQkE4
IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0UkdCQTE2QmlnCisgICAgICAgIHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRBUkdCMTZCaWcK
KyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRSR0I4IHx8IFNyY0Zvcm1hdCA9PSBE
YXRhRm9ybWF0UkdCMTZCaWc7CisjZWxzZQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdEJHUkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QVJHQjE2TGl0dGxlCisgICAgICAg
IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QUJHUjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXRSR0JBMTZMaXR0bGUKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXRCR1I4IHx8
IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0UkdCMTZMaXR0bGUKKyAgICAgICAgfHwgU3JjRm9ybWF0
ID09IERhdGFGb3JtYXRSR0JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdFJHQjg7CisjZW5k
aWYKKyNlbHNlCisgICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0QkdSQTggfHwgU3Jj
Rm9ybWF0ID09IERhdGFGb3JtYXRSR0JBODsKKyNlbmRpZgorICAgIH0KKwogICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8KQEAgLTg4NSw3
ICs5MDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZl
biBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3Rv
cgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2Jl
eWluZyB0aGUgZmxpcFkgYW5kIEFscGhhT3AgZmxhZ3MuCiAgICAgLy8gUmV0dXJucyB0cnVlIHVw
b24gc3VjY2Vzcy4KLSAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qg
dm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFks
IEFscGhhT3AsIFNvdXJjZURhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CisgICAgc3RhdGljIGJvb2wgcGFja0ltYWdlRGF0YShJbWFnZSosIGNv
bnN0IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZs
aXBZLCBBbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEpOwogCiAgICAgY2xhc3MgSW1hZ2VFeHRyYWN0b3IgewogICAgIHB1YmxpYzoK
QEAgLTg5OSw3ICs5MjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4
ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQogICAgICAgICB1bnNpZ25lZCBp
bWFnZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9CiAgICAgICAgIHVuc2lnbmVkIGlt
YWdlSGVpZ2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBTb3VyY2VEYXRh
Rm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsg
fQorICAgICAgICBEYXRhRm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFn
ZVNvdXJjZUZvcm1hdDsgfQogICAgICAgICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJu
IG1fYWxwaGFPcDsgfQogICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KICAgICAgICAgSW1h
Z2VIdG1sRG9tU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1s
RG9tU291cmNlOyB9CkBAIC05MjgsNyArOTQ5LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCB2
b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOwogICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7CiAg
ICAgICAgIHVuc2lnbmVkIG1faW1hZ2VIZWlnaHQ7Ci0gICAgICAgIFNvdXJjZURhdGFGb3JtYXQg
bV9pbWFnZVNvdXJjZUZvcm1hdDsKKyAgICAgICAgRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9y
bWF0OwogICAgICAgICBBbHBoYU9wIG1fYWxwaGFPcDsKICAgICAgICAgdW5zaWduZWQgbV9pbWFn
ZVNvdXJjZVVucGFja0FsaWdubWVudDsKICAgICB9OwpAQCAtOTM2LDIwICs5NTcsMTIgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzLCBIb3N0V2lu
ZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwogCi0gICAgLy8gSGVscGVyIGZv
ciBnZXRJbWFnZURhdGEgd2hpY2ggaW1wbGVtZW50cyBwYWNraW5nIG9mIHBpeGVsCisgICAgLy8g
SGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVE
YXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCiAgICAgLy8gZGF0YSBpbnRvIHRo
ZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KICAgICAvLyBB
IHNvdXJjZVVucGFja0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UK
ICAgICAvLyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2Ug
YSBzbG93IHBhdGguCiAgICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBi
ZXR3ZWVuIHJvd3MuCi0gICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBz
b3VyY2VEYXRhLAotICAgICAgICAgICAgICAgICAgICBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZVVucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdGluYXRpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFs
cGhhT3AsCi0gICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CisgICAg
c3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9y
bWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRh
LCBib29sIGZsaXBZKTsKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQogICAg
IC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRp
b24gYXR0cmlidXRlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggM2Q1
YTFlMjM5YWVlMzE5M2IxM2RlNDc0NDhkN2FkMzQ4NmNiNmU1Mi4uNmNmN2I4Nzg2ZmQ0NmE2ZThk
ODM0NGFmZGIyODVlMmU3NjcwOGE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHAKQEAgLTIxOSw3ICsyMTksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgIH0KIAog
ICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1h
Z2VTdXJmYWNlLmdldCgpKTsKLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0
QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRCR1JBODsKICAgICBt
X2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAppbmRleCA5NDJjZGRiZjNkZWQwZjRh
OGIwZTQ0YjVjMDMzOGZjMGMwZGI2MzlhLi44MmZjNzY5MTk4MzQ0OWRhZDhjNDNhN2Y3YjlkNTFk
ZjUzNjA2ZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtNjIsNyArNjIsNyBAQCBlbnVt
IEFscGhhRm9ybWF0IHsKIH07CiAKIC8vIFRoaXMgcmV0dXJucyBTb3VyY2VGb3JtYXROdW1Gb3Jt
YXRzIGlmIHRoZSBjb21iaW5hdGlvbiBvZiBpbnB1dCBwYXJhbWV0ZXJzIGlzIHVuc3VwcG9ydGVk
Lgotc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IGdldFNvdXJjZURh
dGFGb3JtYXQodW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgQWxwaGFGb3JtYXQgYWxw
aGFGb3JtYXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwgYm9vbCBiaWdFbmRpYW4pCitzdGF0aWMgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZ2V0U291cmNlRGF0YUZvcm1hdCh1bnNpZ25lZCBj
b21wb25lbnRzUGVyUGl4ZWwsIEFscGhhRm9ybWF0IGFscGhhRm9ybWF0LCBib29sIGlzMTZCaXRG
b3JtYXQsIGJvb2wgYmlnRW5kaWFuKQogewogICAgIGNvbnN0IHN0YXRpYyBTb3VyY2VEYXRhRm9y
bWF0QmFzZSBmb3JtYXRUYWJsZUJhc2VbNF1bQWxwaGFGb3JtYXROdW1Gb3JtYXRzXSA9IHsgLy8g
Y29tcG9uZW50c1BlclBpeGVsIHggQWxwaGFGb3JtYXQKICAgICAgICAgLy8gQWxwaGFGb3JtYXRO
b25lICAgICAgICAgICAgQWxwaGFGb3JtYXRGaXJzdCAgICAgICAgICAgIEFscGhhRm9ybWF0TGFz
dApAQCAtNzEsMjEgKzcxLDIxIEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0
YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGludCBjb21wCiAgICAgICAgIHsg
U291cmNlRm9ybWF0QmFzZVJHQiwgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBT
b3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cyB9LCAvLyAzIGNvbXBvbmVudHNQZXJQaXhlbAogICAg
ICAgICB7IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVJHQiwg
ICAgICAgU291cmNlRm9ybWF0QmFzZVJHQkEgICAgICAgIH0gLy8gNCBjb21wb25lbnRzUGVyUGl4
ZWwKICAgICB9OwotICAgIGNvbnN0IHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0
YUZvcm1hdCBmb3JtYXRUYWJsZVtTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7IC8v
IFNvdXJjZURhdGFGb3JtYXRCYXNlIHggYml0c1BlckNvbXBvbmVudCB4IGVuZGlhbgorICAgIGNv
bnN0IHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXRUYWJsZVtTb3Vy
Y2VGb3JtYXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7IC8vIFNvdXJjZURhdGFGb3JtYXRCYXNlIHgg
Yml0c1BlckNvbXBvbmVudCB4IGVuZGlhbgogICAgICAgICAvLyA4Yml0cywgbGl0dGxlIGVuZGlh
biAgICAgICAgICAgICAgICAgOGJpdHMsIGJpZyBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAx
NmJpdHMsIGxpdHRsZSBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGJpZyBl
bmRpYW4KLSAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UjgsICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNv
dXJjZUZvcm1hdFIxNkxpdHRsZSwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFIx
NkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBOCwgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEE4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0QTE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0
QTE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdEFSOCwg
ICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkE4LCAgIEdyYXBoaWNzQ29udGV4dDNE
OjpTb3VyY2VGb3JtYXRSQTE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3Jt
YXRSQTE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJB
OCwgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVI4LCAgIEdyYXBoaWNzQ29udGV4
dDNEOjpTb3VyY2VGb3JtYXRBUjE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VG
b3JtYXRBUjE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1h
dEJHUjgsICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCOCwgIEdyYXBoaWNzQ29u
dGV4dDNEOjpTb3VyY2VGb3JtYXRSR0IxNkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3Vy
Y2VGb3JtYXRSR0IxNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VG
b3JtYXRBQkdSOCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4LCBHcmFwaGlj
c0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHQzRDo6
U291cmNlRm9ybWF0UkdCQTE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OlNv
dXJjZUZvcm1hdEJHUkE4LCBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0QVJHQjgsIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZMaXR0bGUsIEdyYXBoaWNzQ29udGV4
dDNEOjpTb3VyY2VGb3JtYXRBUkdCMTZCaWcgfQorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UjgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjgsICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFIxNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0QTgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTgsICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QTE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdEExNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
QVI4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4LCAgIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0UkExNkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJBMTZCaWcgfSwKKyAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOCwg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSOCwgICBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdEFSMTZMaXR0bGUsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjE2
QmlnIH0sCisgICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1I4LCAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0I4LCAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSR0IxNkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZCaWcg
fSwKKyAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFCR1I4LCBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkExNkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZCaWcgfSwK
KyAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUkE4LCBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFS
R0IxNkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUkdCMTZCaWcgfQogICAg
IH07CiAKICAgICBBU1NFUlQoY29tcG9uZW50c1BlclBpeGVsIDw9IDQgJiYgY29tcG9uZW50c1Bl
clBpeGVsID4gMCk7CiAgICAgU291cmNlRGF0YUZvcm1hdEJhc2UgZm9ybWF0QmFzZSA9IGZvcm1h
dFRhYmxlQmFzZVtjb21wb25lbnRzUGVyUGl4ZWwgLSAxXVthbHBoYUZvcm1hdF07CiAgICAgaWYg
KGZvcm1hdEJhc2UgPT0gU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMpCi0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0TnVtRm9ybWF0czsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0TnVtRm9ybWF0czsKICAgICByZXR1cm4g
Zm9ybWF0VGFibGVbZm9ybWF0QmFzZV1bKGlzMTZCaXRGb3JtYXQgPyAyIDogMCkgKyAoYmlnRW5k
aWFuID8gMSA6IDApXTsKIH0KIApAQCAtMjMwLDcgKzIzMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sCiAgICAgfQogCiAgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IGdldFNvdXJjZURhdGFG
b3JtYXQoY29tcG9uZW50c1BlclBpeGVsLCBhbHBoYUZvcm1hdCwgYml0c1BlckNvbXBvbmVudCA9
PSAxNiwgYmlnRW5kaWFuU291cmNlKTsKLSAgICBpZiAobV9pbWFnZVNvdXJjZUZvcm1hdCA9PSBT
b3VyY2VGb3JtYXROdW1Gb3JtYXRzKQorICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IERh
dGFGb3JtYXROdW1Gb3JtYXRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BpeGVs
RGF0YS5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRl
cihtX2NnSW1hZ2UpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBhM2Q3YjE2YmZm
NTVlMzU3OTA0ZjNlMjllYWRlZDNjNThlMjViODhlLi4yZmZiYjc4ZDgyZGNkYmY2NzY4NTM4NjZm
YjFiMDA5MTAxM2QyYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTI5Miw3ICsy
OTIsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgIH0KIAogICAgIG1faW1hZ2VQaXhl
bERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJmYWNlLmdldCgp
KTsKLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9p
bWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRCR1JBODsKICAgICBtX2ltYWdlU291cmNlVW5w
YWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwogCiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDIwYjNiN2Q4ZmIzNTczOGMyOTVjM2M4Y2Q5YzM3YjIy
Y2NkMDUxNWEuLjU4NDY0MGE4ZGMyMTI0NTJlZWU3NTVlOTI2OTAxMGFkZTM2YjFjYzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCkBAIC01MzgsNyArNTM4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wKICAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIG1faW1hZ2VQaXhlbERhdGEgPSBtX3F0SW1hZ2UuY29uc3RCaXRz
KCk7Ci0gICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNvdXJjZUZvcm1hdEJHUkE4OworICAgIG1f
aW1hZ2VTb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0QkdSQTg7CiAgICAgbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudCA9IDA7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
M0RTa2lhLmNwcAppbmRleCA1YmQ5YTNiNmFjOTFlZWEyYzFjZGYwMjY0NmU0ZGZhYzQ3MjIyZTMx
Li4zYjFjOGYyMGFiZmJjZDBiNDIzOTkyMTFkZDE4YzMzM2M3ZWEzNjViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tp
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHQzRFNraWEuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sCiAgICAgaWYgKCFtX3NraWFJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNLX0IzMl9TSElGVCA/IFNvdXJjZUZvcm1hdFJHQkE4IDog
U291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNLX0IzMl9TSElG
VCA/IERhdGFGb3JtYXRSR0JBOCA6IERhdGFGb3JtYXRCR1JBODsKICAgICBtX2ltYWdlV2lkdGgg
PSBtX3NraWFJbWFnZS0+Yml0bWFwKCkud2lkdGgoKTsKICAgICBtX2ltYWdlSGVpZ2h0ID0gbV9z
a2lhSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpOwogICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFt
X2ltYWdlSGVpZ2h0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>