<?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>34458</bug_id>
          
          <creation_ts>2010-02-01 17:49:54 -0800</creation_ts>
          <short_desc>Refactor texImage2D and texSubImage2D taking Image to use common code</short_desc>
          <delta_ts>2010-03-11 11:23:47 -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="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>186735</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-01 17:49:54 -0800</bug_when>
    <thetext>The Chromium port of WebGL does not implement texSubImage2D taking an Image as parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190172</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 15:21:17 -0800</bug_when>
    <thetext>It turns out that with a small amount of additional refactoring, both the Safari and Chromium WebGL implementations can use the same code for texImage2D and texSubImage2D taking Images, fixing three problems at once. Changing the synopsis to reflect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190176</commentid>
    <comment_count>2</comment_count>
      <attachid>48670</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 15:23:10 -0800</bug_when>
    <thetext>Created attachment 48670
Patch

Please see ChangeLog for detailed description of patch.

Note to reviewers: I originally added multiple GraphicsContext3DUtil classes (GraphicsContext3DUtilMac, GraphicsContext3DUtilSkia) but this added more complexity than it was worth. I hope the few #ifdefs in GraphicsContext3DUtil are acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190179</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-12 15:24:16 -0800</bug_when>
    <thetext>Attachment 48670 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:31:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:94:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:117:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:138:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/GraphicsContext3DUtil.cpp:227:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/GraphicsContext3DUtil.h:88:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/GraphicsContext3DUtil.h:90:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 8


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190181</commentid>
    <comment_count>4</comment_count>
      <attachid>48670</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 15:24:20 -0800</bug_when>
    <thetext>Comment on attachment 48670
Patch

This patch accidentally contained a file I didn&apos;t mean to modify. Obsoleting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190182</commentid>
    <comment_count>5</comment_count>
      <attachid>48672</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 15:29:50 -0800</bug_when>
    <thetext>Created attachment 48672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190195</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-12 16:00:26 -0800</bug_when>
    <thetext>I like the idea behind this. But it seems like it might be better to refactor GraphicsContext3D as a base class with these functions included in it. Then it can be subclassed for the Mac, and Chromium versions. I haven&apos;t looked closely enough to know if this would have complications. But it would allow us to further add common code down the road.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190200</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 16:17:35 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I like the idea behind this. But it seems like it might be better to refactor
&gt; GraphicsContext3D as a base class with these functions included in it. Then it
&gt; can be subclassed for the Mac, and Chromium versions. I haven&apos;t looked closely
&gt; enough to know if this would have complications. But it would allow us to
&gt; further add common code down the road.

I agree that it would generally be better to express the GraphicsContext3D API as a set of virtual functions. However, this will be a very large change and one which should probably be separate from the addition of any new functionality or other refactorings such as this one. I think we should add the utility class for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190203</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-12 16:20:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I like the idea behind this. But it seems like it might be better to refactor
&gt; &gt; GraphicsContext3D as a base class with these functions included in it. Then it
&gt; &gt; can be subclassed for the Mac, and Chromium versions. I haven&apos;t looked closely
&gt; &gt; enough to know if this would have complications. But it would allow us to
&gt; &gt; further add common code down the road.
&gt; 
&gt; I agree that it would generally be better to express the GraphicsContext3D API
&gt; as a set of virtual functions. However, this will be a very large change and
&gt; one which should probably be separate from the addition of any new
&gt; functionality or other refactorings such as this one. I think we should add the
&gt; utility class for now.

Why would these be virtual functions?  That is not the model that we use for platform specific behaviour in WebKit.  Platform specifics are compile time based, not runtime so there is no reason for them to ever be implemented in terms of polymorphism.

The correct thing to do is to have GraphicsContext3D.cpp that contains the shared implementations, and then GraphicsContext3DPlatformName.cpp for platform specific code.  We already do this for GraphicsContext and numerous other classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190205</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-02-12 16:33:22 -0800</bug_when>
    <thetext>Yeah, this is my bad. I was actually suggesting a virtual API. As Oliver points out that&apos;s the wrong way to do these platform specific classes. So I agree with Oliver, just putting these common functions into a GraphicsContext3D.cpp would work just fine. Then you&apos;d just have 2 different .cpp file providing different functions for the common GraphicsContext3D class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190206</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 16:34:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; I like the idea behind this. But it seems like it might be better to refactor
&gt; &gt; &gt; GraphicsContext3D as a base class with these functions included in it. Then it
&gt; &gt; &gt; can be subclassed for the Mac, and Chromium versions. I haven&apos;t looked closely
&gt; &gt; &gt; enough to know if this would have complications. But it would allow us to
&gt; &gt; &gt; further add common code down the road.
&gt; &gt; 
&gt; &gt; I agree that it would generally be better to express the GraphicsContext3D API
&gt; &gt; as a set of virtual functions. However, this will be a very large change and
&gt; &gt; one which should probably be separate from the addition of any new
&gt; &gt; functionality or other refactorings such as this one. I think we should add the
&gt; &gt; utility class for now.
&gt; 
&gt; Why would these be virtual functions?  That is not the model that we use for
&gt; platform specific behaviour in WebKit.  Platform specifics are compile time
&gt; based, not runtime so there is no reason for them to ever be implemented in
&gt; terms of polymorphism.
&gt; 
&gt; The correct thing to do is to have GraphicsContext3D.cpp that contains the
&gt; shared implementations, and then GraphicsContext3DPlatformName.cpp for platform
&gt; specific code.  We already do this for GraphicsContext and numerous other
&gt; classes.

OK, I understand your point about the virtual functions.

I&apos;ll work on adding a GraphicsContext3D.cpp in platform/graphics/ containing
the common functions, and separating out the CG- and Skia-specific portions
into new .cpp files as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190221</commentid>
    <comment_count>11</comment_count>
      <attachid>48685</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 17:53:47 -0800</bug_when>
    <thetext>Created attachment 48685
Revised patch

Based on review feedback, placed entry points on GraphicsContext3D class. Common code is in platform/graphics/GraphicsContext3D.cpp; platform-specific entry points in platform/graphics/cg/GraphicsContext3DCG.cpp and platform/graphics/skia/GraphicsContext3DSkia.cpp.

Retested Safari on Mac OS X and Chromium on Mac OS X and Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190222</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-12 17:55:27 -0800</bug_when>
    <thetext>Attachment 48685 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190225</commentid>
    <comment_count>13</comment_count>
      <attachid>48685</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-12 18:16:33 -0800</bug_when>
    <thetext>Comment on attachment 48685
Revised patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190227</commentid>
    <comment_count>14</comment_count>
      <attachid>48688</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-12 18:39:54 -0800</bug_when>
    <thetext>Created attachment 48688
Revised patch

Thanks for earlier review.

Revised patch fixing minor style issue in GraphicsContext3DCG.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190262</commentid>
    <comment_count>15</comment_count>
      <attachid>48688</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-13 00:43:59 -0800</bug_when>
    <thetext>Comment on attachment 48688
Revised patch

Whoops, i forgot to comment on the comments originally -- we really don&apos;t comment in this manner, in general if your code needs that degree of commentary the code should probably be reworked.

That said all of this code is simple, and so this commentary is simply unnecessary, and merely makes it difficult to read the code proper.  Basically there shouldn&apos;t be more than about two sentences, tops, for the getImageData or processImageData definitions.

Anyhoo, while reading through the patch 

I also have some concerns about the CG implementation of getImageData, I don&apos;t believe you should be stripping colour space information away (which is essentially what you&apos;re currently doing).  The target context should simply be set to either sRGB or LinearRGB (if this is not specified in the WebGL spec, it should be) so the there&apos;s a consistent colour space.  I think as a byproduct of such logic it becomes sensible to simply use as ImageBuffer to do the image to byte conversion in which case that can also be cross paltform, and it also saves us from having a separate implementation of [un]premultiplying.

Sorry for both the delay of this response, and for the substantial change in review :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190264</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-13 01:12:55 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 48688 [details])
&gt; Whoops, i forgot to comment on the comments originally -- we really don&apos;t
&gt; comment in this manner, in general if your code needs that degree of commentary
&gt; the code should probably be reworked.
&gt; 
&gt; That said all of this code is simple, and so this commentary is simply
&gt; unnecessary, and merely makes it difficult to read the code proper.  Basically
&gt; there shouldn&apos;t be more than about two sentences, tops, for the getImageData or
&gt; processImageData definitions.

I believe the comments are appropriate in length and that all of the description is warranted. Desktop OpenGL, for example, does not require that the image rows are tightly packed.

&gt; Anyhoo, while reading through the patch 
&gt; 
&gt; I also have some concerns about the CG implementation of getImageData, I don&apos;t
&gt; believe you should be stripping colour space information away (which is
&gt; essentially what you&apos;re currently doing).  The target context should simply be
&gt; set to either sRGB or LinearRGB (if this is not specified in the WebGL spec, it
&gt; should be) so the there&apos;s a consistent colour space.  I think as a byproduct of
&gt; such logic it becomes sensible to simply use as ImageBuffer to do the image to
&gt; byte conversion in which case that can also be cross paltform, and it also
&gt; saves us from having a separate implementation of [un]premultiplying.

I spent quite a bit of time making the test case work correctly on Mac OS X. Specifying a destination color space of kCGColorSpaceGenericRGB or kCGColorSpaceGenericRGBLinear caused the input image&apos;s colors (which are (255, 0, 0) and (0, 255, 0)) to be distorted. The only solution I could find which did not change the input colors was to use the image&apos;s color space as the color space for the destination bitmap context, which is what the original code used to do.

I don&apos;t see any Image -&gt; ImageBuffer conversion in the WebKit API.

I plan to continue working on this code, in particular to go back to the SharedBuffer containing the compressed image data and run an ImageDecoder on it to get back untouched RGBA data. However, I strongly believe that the refactoring I have done here is a good step forward as it brings Safari and Chromium to parity in texture uploading, and I believe it should be checked in.

&gt; Sorry for both the delay of this response, and for the substantial change in
&gt; review :-/

Please reconsider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190293</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-13 13:42:26 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 48688 [details] [details])
&gt; &gt; Whoops, i forgot to comment on the comments originally -- we really don&apos;t
&gt; &gt; comment in this manner, in general if your code needs that degree of commentary
&gt; &gt; the code should probably be reworked.
&gt; &gt; 
&gt; &gt; That said all of this code is simple, and so this commentary is simply
&gt; &gt; unnecessary, and merely makes it difficult to read the code proper.  Basically
&gt; &gt; there shouldn&apos;t be more than about two sentences, tops, for the getImageData or
&gt; &gt; processImageData definitions.
&gt; 
&gt; I believe the comments are appropriate in length and that all of the
&gt; description is warranted. Desktop OpenGL, for example, does not require that
&gt; the image rows are tightly packed.

Look through the webcore codebase you will see that there are places where the code is substantially more complex yet does not have this level of commentary.  The comments are currently excessive.

&gt; 
&gt; &gt; Anyhoo, while reading through the patch 
&gt; &gt; 
&gt; &gt; I also have some concerns about the CG implementation of getImageData, I don&apos;t
&gt; &gt; believe you should be stripping colour space information away (which is
&gt; &gt; essentially what you&apos;re currently doing).  The target context should simply be
&gt; &gt; set to either sRGB or LinearRGB (if this is not specified in the WebGL spec, it
&gt; &gt; should be) so the there&apos;s a consistent colour space.  I think as a byproduct of
&gt; &gt; such logic it becomes sensible to simply use as ImageBuffer to do the image to
&gt; &gt; byte conversion in which case that can also be cross paltform, and it also
&gt; &gt; saves us from having a separate implementation of [un]premultiplying.
&gt; 
&gt; I spent quite a bit of time making the test case work correctly on Mac OS X.
&gt; Specifying a destination color space of kCGColorSpaceGenericRGB or
&gt; kCGColorSpaceGenericRGBLinear caused the input image&apos;s colors (which are (255,
&gt; 0, 0) and (0, 255, 0)) to be distorted. The only solution I could find which
&gt; did not change the input colors was to use the image&apos;s color space as the color
&gt; space for the destination bitmap context, which is what the original code used
&gt; to do.
&gt; 
&gt; I don&apos;t see any Image -&gt; ImageBuffer conversion in the WebKit API.

ImageBuffer gives a generic bitmap context to draw the image to, basically what you&apos;re doing in the CG code path, and that could be used as the default code path -- conceivably with a !PLATFOMR(SKIA) guard if it&apos;s sufficiently fast to load the raw image data in skia, although i would still be concerned about colour space conversion -- if the spec does not currently specify image colour space it should, SVG uses LinearRGB but i suspect sRGB would be more efficient as in the general case i think that will save conversion (i believe the assumption is image without colour profile == srgb)

&gt; 
&gt; I plan to continue working on this code, in particular to go back to the
&gt; SharedBuffer containing the compressed image data and run an ImageDecoder on it
&gt; to get back untouched RGBA data. However, I strongly believe that the
&gt; refactoring I have done here is a good step forward as it brings Safari and
&gt; Chromium to parity in texture uploading, and I believe it should be checked in.

I am unsure that getting the untouched data is actually what is wanted, as i said above we will want to ensure a uniform colour space

&gt; 
&gt; &gt; Sorry for both the delay of this response, and for the substantial change in
&gt; &gt; review :-/
&gt; 
&gt; Please reconsider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190767</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-16 14:48:27 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 48688 [details] [details] [details])
&gt; &gt; &gt; Whoops, i forgot to comment on the comments originally -- we really don&apos;t
&gt; &gt; &gt; comment in this manner, in general if your code needs that degree of commentary
&gt; &gt; &gt; the code should probably be reworked.
&gt; &gt; &gt; 
&gt; &gt; &gt; That said all of this code is simple, and so this commentary is simply
&gt; &gt; &gt; unnecessary, and merely makes it difficult to read the code proper.  Basically
&gt; &gt; &gt; there shouldn&apos;t be more than about two sentences, tops, for the getImageData or
&gt; &gt; &gt; processImageData definitions.
&gt; &gt; 
&gt; &gt; I believe the comments are appropriate in length and that all of the
&gt; &gt; description is warranted. Desktop OpenGL, for example, does not require that
&gt; &gt; the image rows are tightly packed.
&gt; 
&gt; Look through the webcore codebase you will see that there are places where the
&gt; code is substantially more complex yet does not have this level of commentary. 
&gt; The comments are currently excessive.

I&apos;ll trim down the comments.

&gt; &gt; 
&gt; &gt; &gt; Anyhoo, while reading through the patch 
&gt; &gt; &gt; 
&gt; &gt; &gt; I also have some concerns about the CG implementation of getImageData, I don&apos;t
&gt; &gt; &gt; believe you should be stripping colour space information away (which is
&gt; &gt; &gt; essentially what you&apos;re currently doing).  The target context should simply be
&gt; &gt; &gt; set to either sRGB or LinearRGB (if this is not specified in the WebGL spec, it
&gt; &gt; &gt; should be) so the there&apos;s a consistent colour space.  I think as a byproduct of
&gt; &gt; &gt; such logic it becomes sensible to simply use as ImageBuffer to do the image to
&gt; &gt; &gt; byte conversion in which case that can also be cross paltform, and it also
&gt; &gt; &gt; saves us from having a separate implementation of [un]premultiplying.
&gt; &gt; 
&gt; &gt; I spent quite a bit of time making the test case work correctly on Mac OS X.
&gt; &gt; Specifying a destination color space of kCGColorSpaceGenericRGB or
&gt; &gt; kCGColorSpaceGenericRGBLinear caused the input image&apos;s colors (which are (255,
&gt; &gt; 0, 0) and (0, 255, 0)) to be distorted. The only solution I could find which
&gt; &gt; did not change the input colors was to use the image&apos;s color space as the color
&gt; &gt; space for the destination bitmap context, which is what the original code used
&gt; &gt; to do.
&gt; &gt; 
&gt; &gt; I don&apos;t see any Image -&gt; ImageBuffer conversion in the WebKit API.
&gt; 
&gt; ImageBuffer gives a generic bitmap context to draw the image to, basically what
&gt; you&apos;re doing in the CG code path, and that could be used as the default code
&gt; path -- conceivably with a !PLATFOMR(SKIA) guard if it&apos;s sufficiently fast to
&gt; load the raw image data in skia, although i would still be concerned about
&gt; colour space conversion -- if the spec does not currently specify image colour
&gt; space it should, SVG uses LinearRGB but i suspect sRGB would be more efficient
&gt; as in the general case i think that will save conversion (i believe the
&gt; assumption is image without colour profile == srgb)
&gt; 
&gt; &gt; 
&gt; &gt; I plan to continue working on this code, in particular to go back to the
&gt; &gt; SharedBuffer containing the compressed image data and run an ImageDecoder on it
&gt; &gt; to get back untouched RGBA data. However, I strongly believe that the
&gt; &gt; refactoring I have done here is a good step forward as it brings Safari and
&gt; &gt; Chromium to parity in texture uploading, and I believe it should be checked in.
&gt; 
&gt; I am unsure that getting the untouched data is actually what is wanted, as i
&gt; said above we will want to ensure a uniform colour space

The WebGL working group has discussed this at length and it is a requirement that the incoming image data be untouched. In 3D algorithms it is common to place non-color data into color and alpha channels of images -- for example, normal maps, or high and low bytes of 16-bit per channel environment maps. Performing color correction, or automatically premultiplying the alpha channel into the color channels, will cause incorrect results.

This code is an intermediate step toward that goal but I would like to put it in place before making further changes.

&gt; &gt; &gt; Sorry for both the delay of this response, and for the substantial change in
&gt; &gt; &gt; review :-/
&gt; &gt; 
&gt; &gt; Please reconsider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190768</commentid>
    <comment_count>19</comment_count>
      <attachid>48836</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-16 14:49:12 -0800</bug_when>
    <thetext>Created attachment 48836
Revised patch

Trimmed comments for new public APIs in GraphicsContext3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191091</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-17 10:55:01 -0800</bug_when>
    <thetext>Could I please get a review of this patch? I am blocked on other bug fixes waiting for this to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191122</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-17 11:47:19 -0800</bug_when>
    <thetext>
&gt; The WebGL working group has discussed this at length and it is a requirement
&gt; that the incoming image data be untouched. In 3D algorithms it is common to
&gt; place non-color data into color and alpha channels of images -- for example,
&gt; normal maps, or high and low bytes of 16-bit per channel environment maps.
&gt; Performing color correction, or automatically premultiplying the alpha channel
&gt; into the color channels, will cause incorrect results.

If the image is intended to be data then it should not have an associated colour space, so colour matching won&apos;t effect it.  The SVG spec uses images as data sources, and specifies that all processing should be done in linear rgb, eg. data is colour matched appropriately.

That said, failing to account for colour profiles in images is a giant leap backwards for graphics processing, i&apos;ll bring this up on the list, and for now you can simply target sRGB as i believe that&apos;s what the absence of profile information is intended to imply.

I will say however that I believe the problem here is the assumption that texture is synonymous with &lt;image&gt;.  It&apos;s not.  Textures are occasionally used to provide data, does not mean that all textures are filled with information from images.  Once we get ES to incorporate the type array stuff, then we can drop the WebGL specific typed-arrays, and Anne has said the moment there&apos;s ES provides them he&apos;ll update XHR to provide arraybuffer or whatever access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191133</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-17 11:58:33 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; The WebGL working group has discussed this at length and it is a requirement
&gt; &gt; that the incoming image data be untouched. In 3D algorithms it is common to
&gt; &gt; place non-color data into color and alpha channels of images -- for example,
&gt; &gt; normal maps, or high and low bytes of 16-bit per channel environment maps.
&gt; &gt; Performing color correction, or automatically premultiplying the alpha channel
&gt; &gt; into the color channels, will cause incorrect results.
&gt; 
&gt; If the image is intended to be data then it should not have an associated
&gt; colour space, so colour matching won&apos;t effect it.  The SVG spec uses images as
&gt; data sources, and specifies that all processing should be done in linear rgb,
&gt; eg. data is colour matched appropriately.
&gt; 
&gt; That said, failing to account for colour profiles in images is a giant leap
&gt; backwards for graphics processing, i&apos;ll bring this up on the list, and for now
&gt; you can simply target sRGB as i believe that&apos;s what the absence of profile
&gt; information is intended to imply.
&gt; 
&gt; I will say however that I believe the problem here is the assumption that
&gt; texture is synonymous with &lt;image&gt;.  It&apos;s not.  Textures are occasionally used
&gt; to provide data, does not mean that all textures are filled with information
&gt; from images.  Once we get ES to incorporate the type array stuff, then we can
&gt; drop the WebGL specific typed-arrays, and Anne has said the moment there&apos;s ES
&gt; provides them he&apos;ll update XHR to provide arraybuffer or whatever access.

Can we *please* decouple this discussion from the review of this patch? The code in this patch (in particular the color space handling on the Mac) is identical to the previous code; it is just a refactoring. I am blocked on further texture-related bug fixing until this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191134</commentid>
    <comment_count>23</comment_count>
      <attachid>48836</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-17 12:02:21 -0800</bug_when>
    <thetext>Comment on attachment 48836
Revised patch

r=me, but file a bug on the colour matching saga</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191169</commentid>
    <comment_count>24</comment_count>
      <attachid>48836</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-17 13:08:02 -0800</bug_when>
    <thetext>Comment on attachment 48836
Revised patch

Clearing flags on attachment: 48836

Committed r54907: &lt;http://trac.webkit.org/changeset/54907&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191170</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-17 13:08:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198691</commentid>
    <comment_count>26</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-11 11:23:47 -0800</bug_when>
    <thetext>*** Bug 32620 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48670</attachid>
            <date>2010-02-12 15:23:10 -0800</date>
            <delta_ts>2010-02-12 15:24:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>textures.patch</filename>
            <type>text/plain</type>
            <size>50474</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBj
b21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3
aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBh
IG5ldyBHcmFwaGljc0NvbnRleHQzRFV0aWwgYW5kIGNoYW5nZWQgdGhlCisgICAgICAgIHRleElt
YWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRvIHVzZSBpdC4gVGhpcworICAg
ICAgICBpbW1lZGlhdGVseSBmaXhlcyB0aGUgZm9sbG93aW5nIHRocmVlIHByb2JsZW1zOgorICAg
ICAgICAgIC0gQ2hyb21pdW0gbm90IGltcGxlbWVudGluZyB0ZXhTdWJJbWFnZTJEIHRha2luZyBJ
bWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0aGUgZmxpcFkgcGFyYW1ldGVy
IHRvIHRleEltYWdlMkQgb3IKKyAgICAgICAgICAgIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdl
LgorICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBwcmVtdWx0aXB5QWxwaGEgcGFy
YW1ldGVyIHRvIHRleEltYWdlMkQKKyAgICAgICAgICAgIG9yIHRleFN1YkltYWdlMkQgdGFraW5n
IEltYWdlLgorICAgICAgICBBZGRlZCBuZXcgdGVzdCB2ZXJpZnlpbmcgdGhlIGJlaGF2aW9yIG9m
IHRleEltYWdlMkQgYW5kCisgICAgICAgIHRleFN1YkltYWdlMkQgYW5kIHRoZSBmbGlwWSBwYXJh
bWV0ZXIuIFRoZSBwcmVtdWx0aXBseUFscGhhCisgICAgICAgIHBhcmFtZXRlciBjYW4gbm90IGJl
IHRlc3RlZCB5ZXQgYXMgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB5ZXQKKyAgICAgICAgc3Bl
YyBjb21wbGlhbnQuIFRoaXMgd2lsbCBiZSBmaXhlZCBpbiBhIGZvbGxvdy1vbiBidWcuCisKKyAg
ICAgICAgUmFuIGFsbCBXZWJHTCBkZW1vcyBpbiBkZW1vIHJlcG9zaXRvcnkgb24gU2FmYXJpIGFu
ZCBDaHJvbWl1bTsKKyAgICAgICAgdGV4dHVyZXMgYXJlIG5vdyB0aGUgcmlnaHQgd2F5IHVwIGlu
IGJvdGggYnJvd3NlcnMsIGFuZAorICAgICAgICB0cmFuc3BhcmVudCB0ZXh0dXJlcyBpbiBQYXJ0
aWNsZXMgZGVtbyBub3cgbG9vayBjb3JyZWN0IGluIFNhZmFyaS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0
bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RVdGlsOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEVXRpbDo6cHJvY2Vzc0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRFV0aWw6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RVdGlsOjp1bm11bHRpcGx5QWxwaGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEVXRpbC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEVXRpbDo6KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEVXRpbDo6R3JhcGhpY3NDb250ZXh0M0RVdGlsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorCiAyMDEwLTAyLTEyICBH
YXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU0NzQwKQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyNzcsNiArMjI3Nyw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEVXRpbC5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFV0aWwuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU0NzQwKQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNDEsNiAr
MTI0MSw4IEBACiAJCTY1REYzMjNDMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMjM2
MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCAqLzsgfTsKIAkJNjVERjMyNjEw
OUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5RDE0RUU2MDAw
RTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJNjVGRUE4Njkw
OTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICov
OyB9OworCQk2RTIxQzVCRTExMjYwRTBCMDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RVdGls
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFD
NUJDMTEyNjBFMEIwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRFV0aWwuY3BwICovOyB9Owor
CQk2RTIxQzVCRjExMjYwRTBCMDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RVdGlsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTIxQzVCRDExMjYw
RTBCMDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RVdGlsLmggKi87IH07CiAJCTZFNDdFNjYw
MTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0N0U2NUUxMEI3OTQ0QjAwQjE4NkM4IC8qIFdl
YkdMR2V0SW5mby5jcHAgKi87IH07CiAJCTZFNDdFNjYxMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJH
TEdldEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uaCAqLzsgfTsKIAkJNkU0
RTkxQUMxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUE3MTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CkBAIC02NjUz
LDYgKzY2NTUsOCBAQAogCQk2NURGMzIzNjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0
ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1BhdHRlcm4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2
IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJsb2NrRXhjZXB0aW9ucy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1RkVBODY4MDk4
MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM1QkMx
MTI2MEUwQjAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEVXRpbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRFV0aWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTIxQzVCRDExMjYwRTBCMDBBN0JFMDIgLyogR3Jh
cGhpY3NDb250ZXh0M0RVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dDNEVXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTQ3
RTY1RTEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMR2V0SW5mby5jcHA7IHBhdGggPSBjYW52YXMvV2Vi
R0xHZXRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0N0U2NUYxMEI3
OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTEdldEluZm8uaDsgcGF0aCA9IGNhbnZhcy9XZWJHTEdldEluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0RTkxQTcxMEY3RkIzMTAwQTI3NzlDIC8qIENh
bnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXND
b250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDQz
Niw2ICsxNDQ0MCw4IEBACiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNz
Q29udGV4dC5jcHAgKi8sCiAJCQkJQjJBMDE1OTMwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNz
Q29udGV4dC5oICovLAogCQkJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHQzRC5oICovLAorCQkJCTZFMjFDNUJDMTEyNjBFMEIwMEE3QkUwMiAvKiBHcmFwaGljc0Nv
bnRleHQzRFV0aWwuY3BwICovLAorCQkJCTZFMjFDNUJEMTEyNjBFMEIwMEE3QkUwMiAvKiBHcmFw
aGljc0NvbnRleHQzRFV0aWwuaCAqLywKIAkJCQlBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyog
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLApAQCAtMTg1MjYsNiArMTg1MzIsNyBAQAogCQkJCUJDRTc4
OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFNzg5ODYxMTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCTlGNkZDMTk3MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkUyMUM1QkYxMTI2MEUwQjAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4
dDNEVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDcwNyw2ICsyMDcxNCw3IEBACiAJCQkJQkNF
Nzg5OEIxMTIwRTgwMjAwNjBFQ0U1IC8qIEJpZGlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OUY2RkMxOTYxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTc2RkYxN0UzMTEyMzU2NzMwMDFENjFCNSAvKiBQbHVnaW5WaWV3Tm9uZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTIxQzVCRTExMjYwRTBCMDBBN0JFMDIgLyogR3JhcGhp
Y3NDb250ZXh0M0RVdGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTQ3NDApCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
IAogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFV0aWwuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTYzMCwxNSAr
MTYzMSwzMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAorc3RhdGljIHZvaWQgZXh0cmFj
dEltYWdlRGF0YShJbWFnZURhdGEqIHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKK3sKKyAgICB1bnNpZ25lZCBpbWFnZVNpemUgPSBwaXhlbHMtPndpZHRoKCkg
KiBwaXhlbHMtPmhlaWdodCgpICogNDsKKyAgICBpbWFnZURhdGEucmVzaXplKGltYWdlU2l6ZSk7
CisgICAgbWVtY3B5KGltYWdlRGF0YS5kYXRhKCksIHBpeGVscy0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKSwgaW1hZ2VTaXplKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFV0aWw6OnByb2Nlc3NJbWFn
ZURhdGEoaW1hZ2VEYXRhLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxzLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbHMtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGlwWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBHcmFwaGljc0NvbnRleHQzRFV0aWw6OmtBbHBo
YURvUHJlbXVsdGlwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogR3JhcGhpY3NDb250ZXh0M0RVdGlsOjprQWxwaGFEb05vdGhpbmcpOworfQorCisK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIEltYWdlRGF0YSogcGl4ZWxzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVy
cm9ycyByZXR1cm5lZAotICAgIC8vIEZJWE1FOiBOZWVkIGEgZm9ybSBvZiB0aGlzIGNhbGwgdGhh
dCBjYW4gdGFrZSBib3RoIGEgcGl4ZWwgYnVmZmVyIGFuZCBmbGlwWSBhbmQgcHJlbXVsdGlwbHlB
bHBoYSBmbGFncwotICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBy
ZW11bHRpcGx5QWxwaGEpOworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgZXh0
cmFjdEltYWdlRGF0YShwaXhlbHMsIGltYWdlRGF0YSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEp
OwogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkpOworICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgcGl4ZWxz
LT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwogICAg
IC8vUkxQOiBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgcGl4ZWxzLCBmbGlw
WSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTE3MjQsMTAgKzE3NDIsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1hZ2VEYXRhKiBwaXhlbHMsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBl
cnJvcnMgcmV0dXJuZWQKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIFVOVVNFRF9QQVJB
TShwcmVtdWx0aXBseUFscGhhKTsKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBpbWFnZURhdGEsIGZsaXBZLCBwcmVtdWx0aXBseUFs
cGhhKTsKICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkpOworICAgIG1fY29udGV4dC0+dGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRo
KCksIHBpeGVscy0+aGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiAgICAgLy9STFA6IG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBw
aXhlbHMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFV0aWwuaCIKKyNpZiBQ
TEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0ltYWdlLmg+CisjZWxpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgorI2VuZGlmCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShDRykKKy8v
IEZldGNoZXMgdGhlIGRhdGEgZm9yIHRoZSBnaXZlbiBDb3JlR3JhcGhpY3MgaW1hZ2UgaW50byB0
aGUgcGFzc2VkCisvLyBWZWN0b3IuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYW4g
YWxwaGEgY2hhbm5lbCBpbiB0aGUKKy8vIG91dGdvaW5nIHZhcmlhYmxlICJoYXNBbHBoYUNoYW5u
ZWwiLgorc3RhdGljIGJvb2wgZ2V0SW1hZ2VEYXRhKENHSW1hZ2VSZWYgaW1hZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsKQoreworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lk
dGgoaW1hZ2UpOworICAgIGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKKyAg
ICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0g
Q0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZSk7CisgICAgKmhhc0FscGhhQ2hhbm5lbCA9IChpbmZv
ICE9IGtDR0ltYWdlQWxwaGFOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGlu
Zm8gIT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIG91dHB1dFZlY3Rvci5yZXNp
emUoaGVpZ2h0ICogcm93Qnl0ZXMpOworICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3Bh
Y2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2VydmUgaXRzIGNvbG9ycy4KKyAgICAvLyBTb21lIGlt
YWdlcyB1c2UgYSBjb2xvciBzcGFjZSAoc3VjaCBhcyBpbmRleGVkKSB1bnN1cHBvcnRlZCBieSB0
aGUgYml0bWFwIGNvbnRleHQuCisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0lt
YWdlR2V0Q29sb3JTcGFjZShpbWFnZSk7CisgICAgYm9vbCByZWxlYXNlQ29sb3JTcGFjZSA9IGZh
bHNlOworICAgIENHQ29sb3JTcGFjZU1vZGVsIGNvbG9yU3BhY2VNb2RlbCA9IENHQ29sb3JTcGFj
ZUdldE1vZGVsKGNvbG9yU3BhY2UpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZU1vZGVsKSB7Cisg
ICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxNb25vY2hyb21lOgorICAgIGNhc2Uga0NHQ29sb3JT
cGFjZU1vZGVsUkdCOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsQ01ZSzoKKyAgICBjYXNl
IGtDR0NvbG9yU3BhY2VNb2RlbExhYjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbERldmlj
ZU46CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbG9yU3BhY2UgPSBD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcik7
CisgICAgICAgIHJlbGVhc2VDb2xvclNwYWNlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIENHQ29udGV4dFJlZiB0bXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG91
dHB1dFZlY3Rvci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgOCwgcm93Qnl0ZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpOworICAgIGlmIChyZWxlYXNlQ29sb3JTcGFjZSkKKyAgICAg
ICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKyAgICBpZiAoIXRtcENvbnRleHQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodG1wQ29u
dGV4dCwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRtcENvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgaW1hZ2UpOworICAgIENHQ29udGV4dFJlbGVhc2UodG1wQ29udGV4dCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgIC8vIFBMQVRGT1JNKENHKQorCisjaWYgUExB
VEZPUk0oU0tJQSkKK2Jvb2wgZ2V0SW1hZ2VEYXRhKE5hdGl2ZUltYWdlU2tpYSogaW1hZ2UsCisg
ICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK3sKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBz
a2lhQ29uZmlnID0gaW1hZ2UtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQg
bW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucy4KKyAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa0JpdG1h
cCYgc2tpYUltYWdlUmVmID0gKmltYWdlOworICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhza2lh
SW1hZ2VSZWYpOworICAgIGludCB3aWR0aCA9IGltYWdlLT53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBpbWFnZS0+aGVpZ2h0KCk7CisgICAgaW50IHJvd0J5dGVzID0gaW1hZ2UtPnJvd0J5dGVz
KCk7CisgICAgQVNTRVJUKHJvd0J5dGVzID09IHdpZHRoICogNCk7CisgICAgdWludDhfdCogcGl4
ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaW1hZ2UtPmdldFBpeGVscygpKTsKKyAg
ICBvdXRwdXRWZWN0b3IucmVzaXplKHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICBtZW1jcHkob3V0
cHV0VmVjdG9yLmRhdGEoKSwgcGl4ZWxzLCByb3dCeXRlcyAqIGhlaWdodCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisjZW5kaWYgIC8vIFBMQVRGT1JNKFNLSUEpCisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0RVdGlsOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4mIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZvcm1hdCkKK3sKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR3JhcGhpY3NDb250ZXh0M0RVdGls
OjpBbHBoYU9wIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRFV0aWw6OmtBbHBoYURvTm90aGlu
ZzsKKyAgICBib29sIGhhc0FscGhhQ2hhbm5lbCA9IHRydWU7CisjaWYgUExBVEZPUk0oU0tJQSkK
KyAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOworICAgIGlmICghZ2V0SW1hZ2VEYXRhKHNraWFJbWFnZSwgaW1hZ2VEYXRh
KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgLy8gRklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVtdWx0
aXBsaWNhdGlvbiBzdGVwCisgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRFV0aWw6
OmtBbHBoYURvVW5tdWx0aXBseTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVwZW5kZW5j
eSBvbiBkZXNrdG9wIE9wZW5HTAorICAgICpmb3JtYXQgPSAweDgwRTE7ICAvLyBHTF9CR1JBCisj
ZWxpZiBQTEFURk9STShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWdldEltYWdlRGF0YShjZ0ltYWdlLCBp
bWFnZURhdGEsICZoYXNBbHBoYUNoYW5uZWwpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYg
KCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1h
Z2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKKyAgICAgICAgYWxwaGFP
cCA9IEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6a0FscGhhRG9Vbm11bHRpcGx5OworICAgICpmb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRv
IHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorICAgIHByb2Nlc3NJbWFnZURhdGEoaW1hZ2VEYXRhLmRh
dGEoKSwKKyAgICAgICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgZmxpcFksCisg
ICAgICAgICAgICAgICAgICAgICBhbHBoYU9wKTsKKyAgICAqaW50ZXJuYWxGb3JtYXQgPSAoaGFz
QWxwaGFDaGFubmVsID8gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgOiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFV0
aWw6OnByb2Nlc3NJbWFnZURhdGEodWludDhfdCogaW1hZ2VEYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNh
bGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFP
cCBhbHBoYU9wKQoreworICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0RVdGlsOjprQWxwaGFEb1ByZW11bHRpcGx5OgorICAgICAgICBwcmVtdWx0aXBseUFs
cGhhKGltYWdlRGF0YSwgd2lkdGggKiBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6a0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICB1bm11
bHRpcGx5QWxwaGEoaW1hZ2VEYXRhLCB3aWR0aCAqIGhlaWdodCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmbGlwVmVydGlj
YWxseSAmJiB3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgaW50IHJvd0J5dGVzID0gd2lkdGgg
KiA0OworICAgICAgICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3Rbcm93Qnl0ZXNdOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgaSsrKSB7CisgICAg
ICAgICAgICB1aW50OF90KiBsb3dSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiBpKTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QqIGhpZ2hSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiAoaGVp
Z2h0IC0gaSAtIDEpKTsKKyAgICAgICAgICAgIG1lbWNweSh0ZW1wUm93LCBsb3dSb3csIHJvd0J5
dGVzKTsKKyAgICAgICAgICAgIG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHJvd0J5dGVzKTsKKyAg
ICAgICAgICAgIG1lbWNweShoaWdoUm93LCB0ZW1wUm93LCByb3dCeXRlcyk7CisgICAgICAgIH0K
KyAgICAgICAgZGVsZXRlW10gdGVtcFJvdzsKKyAgICB9Cit9CisKKy8vIFByZW11bHRpcGx5IGFs
cGhhIGludG8gY29sb3IgY2hhbm5lbHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6cHJl
bXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKK3sK
KyAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsgaisrKSB7CisgICAgICAgIGZsb2F0
IHIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7CisgICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0
YVs0KmorMV0gLyAyNTUuMGY7CisgICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMl0gLyAy
NTUuMGY7CisgICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7CisgICAg
ICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIGEgKiAyNTUuMGYpOwor
ICAgICAgICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcgKiBhICogMjU1LjBm
KTsKKyAgICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIpIChiICogYSAqIDI1
NS4wZik7CisgICAgfQorfQorCisvLyBSZW1vdmUgcHJlbXVsdGlwbGllZCBhbHBoYSBmcm9tIGNv
bG9yIGNoYW5uZWxzLgorLy8gRklYTUU6IHRoaXMgaXMgbG9zc3kuIE11c3QgcmV0cmlldmUgb3Jp
Z2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdlRWxlbWVudC4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RVdGlsOjp1bm11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURhdGEsIGludCBudW1Q
aXhlbHMpCit7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1QaXhlbHM7IGorKykgeworICAg
ICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzBdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBn
ID0gcmdiYURhdGFbNCpqKzFdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBiID0gcmdiYURhdGFb
NCpqKzJdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBhID0gcmdiYURhdGFbNCpqKzNdIC8gMjU1
LjBmOworICAgICAgICBpZiAoYSA+IDAuMGYpIHsKKyAgICAgICAgICAgIHIgLz0gYTsKKyAgICAg
ICAgICAgIGcgLz0gYTsKKyAgICAgICAgICAgIGIgLz0gYTsKKyAgICAgICAgICAgIHIgPSAociA+
IDEuMGYpID8gMS4wZiA6IHI7CisgICAgICAgICAgICBnID0gKGcgPiAxLjBmKSA/IDEuMGYgOiBn
OworICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAxLjBmIDogYjsKKyAgICAgICAgICAgIHJn
YmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIDI1NS4wZik7CisgICAgICAgICAg
ICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcgKiAyNTUuMGYpOworICAgICAg
ICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIpIChiICogMjU1LjBmKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNEVXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEVXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEVXRpbF9oCisjZGVm
aW5lIEdyYXBoaWNzQ29udGV4dDNEVXRpbF9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2U7CisKKy8vIEEgY2xhc3MgcHJvdmlk
aW5nIGhlbHBlciBmdW5jdGlvbnMgY29tbW9uIGFtb25nIFdlYkdMIGltcGxlbWVudGF0aW9ucy4K
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEVXRpbCB7CitwdWJsaWM6CisgICAgLy8gRXh0cmFjdHMg
dGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBpbnRvIHRoZSBwYXNzZWQKKyAgICAvLyBW
ZWN0b3IsIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1
cm5zCisgICAgLy8gdGhlIGFwcGxpY2FibGUgT3BlbkdMIGZvcm1hdCBhbmQgaW50ZXJuYWxGb3Jt
YXQgZm9yIHRoZQorICAgIC8vIHN1YnNlcXVlbnQgZ2xUZXhJbWFnZTJEIG9yIGdsVGV4U3ViSW1h
Z2UyRCBjYWxsLiBSZXR1cm5zIHRydWUKKyAgICAvLyB1cG9uIHN1Y2Nlc3MuCisgICAgc3RhdGlj
IGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCogaW50ZXJuYWxGb3JtYXQpOworCisgICAgLy8gUHJvY2Vzc2Vz
IHRoZSBnaXZlbiBpbWFnZSBkYXRhIGluIHByZXBhcmF0aW9uIGZvciB1cGxvYWRpbmcgdmlhCisg
ICAgLy8gdGV4SW1hZ2UyRCBvciB0ZXhTdWJJbWFnZTJELiBUaGUgb3BlcmF0aW9ucyB0aGF0IGFy
ZSBpbXBsZW1lbnRlZAorICAgIC8vIGFyZToKKyAgICAvLyAgIC0gRmxpcCB2ZXJ0aWNhbGx5IChm
bGlwWSBhcmd1bWVudCB0byB0aGVzZSBtZXRob2RzKQorICAgIC8vICAgLSBQYXNzIHRocm91Z2gg
dGhlIGFscGhhIGNoYW5uZWwgdW5tb2RpZmllZCAoa0FscGhhRG9Ob3RoaW5nKQorICAgIC8vICAg
LSBNdWx0aXBseSBhbHBoYSBjaGFubmVsIGludG8gY29sb3IgY2hhbm5lbHMgKGtBbHBoYURvUHJl
bXVsdGlwbHkpCisgICAgLy8gICAtIERpdmlkZSB0aGUgY29sb3IgY2hhbm5lbHMgYnkgdGhlIGFs
cGhhIGNoYW5uZWwgKGtBbHBoYURvVW5tdWx0aXBseSkKKyAgICAvLyAgICAgLSBOT1RFOiB0aGlz
IG9wZXJhdGlvbiBpcyBsb3NzeSBhbmQsIGFjY29yZGluZyB0byB0aGUgV2ViR0wKKyAgICAvLyAg
ICAgICBzcGVjaWZpY2F0aW9uLCBub3QgdmFsaWQuIFRoZSBsb2dpYyBpcyBiZWluZyBpbmNvcnBv
cmF0ZWQKKyAgICAvLyAgICAgICBvbmx5IGFzIGEgc3RvcGdhcCBtZWFzdXJlIHVudGlsIGFsbCBw
bGF0Zm9ybXMgaGFuZGxlCisgICAgLy8gICAgICAgY29ycmVjdGx5IHRoZSBsb2FkaW5nIG9mIGlt
YWdlcyB3aXRob3V0IHByZW11bHRpcGx5aW5nIHRoZQorICAgIC8vICAgICAgIGFscGhhIGNoYW5u
ZWwgaW50byB0aGUgY29sb3IgY2hhbm5lbHMuCisgICAgLy8KKyAgICAvLyBUaGUgaW5wdXQgZGF0
YSBtdXN0IGJlIGluIDQtY29tcG9uZW50IGZvcm1hdCB3aXRoIHRoZSBhbHBoYQorICAgIC8vIGNo
YW5uZWwgbGFzdCAoaS5lLiwgUkdCQSBvciBCR1JBKSwgdGlnaHRseSBwYWNrZWQsIHdpdGggbm8K
KyAgICAvLyBzcGFjZSBiZXR3ZWVuIHJvd3MuCisKKyAgICBlbnVtIEFscGhhT3AgeworICAgICAg
ICBrQWxwaGFEb05vdGhpbmcgPSAwLAorICAgICAgICBrQWxwaGFEb1ByZW11bHRpcGx5ID0gMSwK
KyAgICAgICAga0FscGhhRG9Vbm11bHRpcGx5ID0gMgorICAgIH07CisKKyAgICBzdGF0aWMgdm9p
ZCBwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4X3QqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwVmVydGljYWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFscGhhT3AgYWxwaGFPcCk7Citwcm90ZWN0ZWQ6CisgICAgLy8gTm8gbmVlZCB0byBpbnN0YW50
aWF0ZSB0aGlzIGNsYXNzLgorICAgIEdyYXBoaWNzQ29udGV4dDNEVXRpbCgpIHt9CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2Jh
RGF0YSwgaW50IG51bVBpeGVscyk7CisgICAgc3RhdGljIHZvaWQgdW5tdWx0aXBseUFscGhhKHVp
bnQ4X3QqIGltYWdlRGF0YSwgaW50IG51bVBpeGVscyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgIC8vIEdyYXBoaWNzQ29udGV4dDNEVXRpbF9oCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMuY3BwCShyZXZpc2lvbiA1NDc0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogCiAjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEVXRpbC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8u
aCIKQEAgLTExMjYsMzEgKzExMjcsNiBAQCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0
ZXhBdHRyaWJPCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4ocG9pbnRlcik7CiB9
CiAKLS8vIFJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBmcmVlZCBieSBmYXN0RnJlZSgpCi1zdGF0
aWMgYm9vbCBpbWFnZVRvVGV4dHVyZShJbWFnZSogaW1hZ2UsIEdMdWJ5dGUqJiBidWZmZXIsIHNp
emVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBDR0ltYWdlUmVmIHRleHR1cmVJbWFnZSA9IGltYWdl
LT5nZXRDR0ltYWdlUmVmKCk7Ci0gICAgaWYgKCF0ZXh0dXJlSW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aCh0ZXh0dXJlSW1hZ2Up
OwotICAgIGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQodGV4dHVyZUltYWdlKTsKLSAgICAKLSAg
ICBidWZmZXIgPSAoR0x1Ynl0ZSopIGZhc3RNYWxsb2Mod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAg
ICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBDR0Nv
bnRleHRSZWYgdGV4dHVyZUNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoYnVmZmVyLCB3
aWR0aCwgaGVpZ2h0LCA4LCB3aWR0aCAqIDQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0ltYWdlR2V0Q29sb3JTcGFjZSh0ZXh0dXJl
SW1hZ2UpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpOwotICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZSh0ZXh0dXJlQ29udGV4dCwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250
ZXh0RHJhd0ltYWdlKHRleHR1cmVDb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIChDR0Zsb2F0KXdp
ZHRoLCAoQ0dGbG9hdCloZWlnaHQpLCB0ZXh0dXJlSW1hZ2UpOwotICAgIENHQ29udGV4dFJlbGVh
c2UodGV4dHVyZUNvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhl
bHMpCiB7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZG8gYm91bmRzIGNoZWNraW5nIG9uIHRoZSBi
dWZmZXIgaGVyZS4KQEAgLTExNjAsMjAgKzExMzYsMTIgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKHVuc2lnbgogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9y
dCBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYQotICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0g
ICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIEdMdWJ5dGUqIGJ1ZmZl
cjsKLSAgICBzaXplX3Qgd2lkdGg7Ci0gICAgc2l6ZV90IGhlaWdodDsKLSAgICBpZiAoIWltYWdl
VG9UZXh0dXJlKGltYWdlLCBidWZmZXIsIHdpZHRoLCBoZWlnaHQpKQorICAgIFZlY3Rvcjx1aW50
OF90PiBpbWFnZURhdGE7CisgICAgdW5zaWduZWQgaW50IGZvcm1hdCwgaW50ZXJuYWxGb3JtYXQ7
CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRFV0aWw6OmV4dHJhY3RJbWFnZURhdGEoaW1hZ2Us
IGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZv
cm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBidWZmZXIpOwotICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+
aGVpZ2h0KCksIDAsIGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7
CiAgICAgcmV0dXJuIDA7CiB9CiAgICAgCkBAIC0xMTg4LDIwICsxMTU2LDEyIEBAIGludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKIGludCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4
b2ZmLCB1bnNpZ25lZCB5b2ZmLCBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKIHsKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQ
aXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlm
ZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0
IGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCi0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAg
ICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAg
ICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgR0x1Ynl0ZSogYnVmZmVy
OwotICAgIHNpemVfdCB3aWR0aDsKLSAgICBzaXplX3QgaGVpZ2h0OwotICAgIGlmICghaW1hZ2VU
b1RleHR1cmUoaW1hZ2UsIGJ1ZmZlciwgd2lkdGgsIGhlaWdodCkpCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsK
KyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEVXRpbDo6ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9y
bWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIGJ1ZmZlcik7Ci0gICAgZmFzdEZyZWUoYnVmZmVyKTsKKyAgICA6OmdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwog
ICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzQwKQorKysg
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEwLTAyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0ZXhJbWFn
ZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4CisKKyAg
ICAgICAgTWVyZ2VkIHRoZSBTYWZhcmkgYW5kIENocm9taXVtIGNvZGUgd2hpY2ggZXh0cmFjdHMg
dGhlIGRhdGEgZnJvbQorICAgICAgICBJbWFnZSBvYmplY3RzIGludG8gYSBuZXcgR3JhcGhpY3ND
b250ZXh0M0RVdGlsIGFuZCBjaGFuZ2VkIHRoZQorICAgICAgICB0ZXhJbWFnZTJEIGFuZCB0ZXhT
dWJJbWFnZTJEIGVudHJ5IHBvaW50cyB0byB1c2UgaXQuIFRoaXMKKyAgICAgICAgaW1tZWRpYXRl
bHkgZml4ZXMgdGhlIGZvbGxvd2luZyB0aHJlZSBwcm9ibGVtczoKKyAgICAgICAgICAtIENocm9t
aXVtIG5vdCBpbXBsZW1lbnRpbmcgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAg
ICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIGZsaXBZIHBhcmFtZXRlciB0byB0ZXhJbWFnZTJE
IG9yCisgICAgICAgICAgICB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgICAt
IFNhZmFyaSBub3Qgb2JleWluZyB0aGUgcHJlbXVsdGlweUFscGhhIHBhcmFtZXRlciB0byB0ZXhJ
bWFnZTJECisgICAgICAgICAgICBvciB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAg
ICAgQWRkZWQgbmV3IHRlc3QgdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0ZXhJbWFnZTJEIGFu
ZAorICAgICAgICB0ZXhTdWJJbWFnZTJEIGFuZCB0aGUgZmxpcFkgcGFyYW1ldGVyLiBUaGUgcHJl
bXVsdGlwbHlBbHBoYQorICAgICAgICBwYXJhbWV0ZXIgY2FuIG5vdCBiZSB0ZXN0ZWQgeWV0IGFz
IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgeWV0CisgICAgICAgIHNwZWMgY29tcGxpYW50LiBU
aGlzIHdpbGwgYmUgZml4ZWQgaW4gYSBmb2xsb3ctb24gYnVnLgorCisgICAgICAgIFJhbiBhbGwg
V2ViR0wgZGVtb3MgaW4gZGVtbyByZXBvc2l0b3J5IG9uIFNhZmFyaSBhbmQgQ2hyb21pdW07Cisg
ICAgICAgIHRleHR1cmVzIGFyZSBub3cgdGhlIHJpZ2h0IHdheSB1cCBpbiBib3RoIGJyb3dzZXJz
LCBhbmQKKyAgICAgICAgdHJhbnNwYXJlbnQgdGV4dHVyZXMgaW4gUGFydGljbGVzIGRlbW8gbm93
IGxvb2sgY29ycmVjdCBpbiBTYWZhcmkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCisKKyAgICAgICAg
KiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleFN1YkltYWdlMkQpOgorCiAyMDEwLTAyLTEyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDU0
NzQwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFV0
aWwuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgpA
QCAtNjUsMTcgKzY2LDEyIEBACiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dJbWFnZS5oPgogI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KICNlbHNlCiAjZGVmaW5lIEZM
SVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShTS0lBKQot
I2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KICNpZiBPUyhEQVJXSU4pCiAj
ZGVmaW5lIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKICNlbmRpZgpAQCAt
MTg3OCwxNzggKzE4NzQsMTcgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVu
c2lnbgogICAgIHJldHVybiAwOwogfQogCi0vLyBSZW1vdmUgcHJlbXVsdGlwbGllZCBhbHBoYSBm
cm9tIGNvbG9yIGNoYW5uZWxzLgotLy8gRklYTUU6IHRoaXMgaXMgbG9zc3kuIE11c3QgcmV0cmll
dmUgb3JpZ2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdlRWxlbWVudC4KLXN0YXRpYyB2b2lkIHVu
bXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKLXsK
LSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsgaisrKSB7Ci0gICAgICAgIGZsb2F0
IGIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0
YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMl0gLyAy
NTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7Ci0gICAg
ICAgIGlmIChhID4gMC4wZikgewotICAgICAgICAgICAgYiAvPSBhOwotICAgICAgICAgICAgZyAv
PSBhOwotICAgICAgICAgICAgciAvPSBhOwotICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAx
LjBmIDogYjsKLSAgICAgICAgICAgIGcgPSAoZyA+IDEuMGYpID8gMS4wZiA6IGc7Ci0gICAgICAg
ICAgICByID0gKHIgPiAxLjBmKSA/IDEuMGYgOiByOwotICAgICAgICAgICAgcmdiYURhdGFbNCpq
KzBdID0gKHVuc2lnbmVkIGNoYXIpIChiICogMjU1LjBmKTsKLSAgICAgICAgICAgIHJnYmFEYXRh
WzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAqIDI1NS4wZik7Ci0gICAgICAgICAgICByZ2Jh
RGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikgKHIgKiAyNTUuMGYpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0vLyBGSVhNRTogdGhpcyBtdXN0IGJlIGNoYW5nZWQgdG8gcmVmZXIgdG8gdGhl
IG9yaWdpbmFsIGltYWdlIGRhdGEKLS8vIHJhdGhlciB0aGFuIHVubXVsdGlwbHlpbmcgdGhlIGFs
cGhhIGNoYW5uZWwuCi1zdGF0aWMgaW50IHRleEltYWdlMkRIZWxwZXIodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgs
IGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
a2lwQWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4
ZWxzKQotewotICAgIEFTU0VSVChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdS
QSk7Ci0gICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBODsKLSAgICBpZiAoc2tpcEFs
cGhhKSB7Ci0gICAgICAgIGludGVybmFsRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgLy8gSWdu
b3JlIHRoZSBhbHBoYSBjaGFubmVsCi0gICAgICAgIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlOwot
ICAgIH0KLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgLy8gTmVlZCB0byBmbGlwIGltYWdlcyB2
ZXJ0aWNhbGx5LiBUbyBhdm9pZCBtYWtpbmcgYSBjb3B5IG9mCi0gICAgICAgIC8vIHRoZSBlbnRp
cmUgaW1hZ2UsIHdlIHBlcmZvcm0gYSB0b24gb2YgZ2xUZXhTdWJJbWFnZTJECi0gICAgICAgIC8v
IGNhbGxzLiBGSVhNRTogc2hvdWxkIHJldGhpbmsgdGhpcyBzdHJhdGVneSBmb3IgZWZmaWNpZW5j
eS4KLSAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAg
ICAgIDApOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSAwOwotICAgICAgICBib29sIGFs
bG9jYXRlZFJvdyA9IGZhbHNlOwotICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpIHsKLSAg
ICAgICAgICAgIHJvdyA9IG5ldyB1bnNpZ25lZCBjaGFyW3Jvd0J5dGVzXTsKLSAgICAgICAgICAg
IGFsbG9jYXRlZFJvdyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0g
ICAgICAgICAgICAgICAgcm93ID0gcGl4ZWxzICsgKHJvd0J5dGVzICogaSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkocm93LCBwaXhlbHMgKyAocm93Qnl0ZXMg
KiBpKSwgcm93Qnl0ZXMpOwotICAgICAgICAgICAgICAgIHVubXVsdGlwbHlBbHBoYShyb3csIHdp
ZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCAwLCBoZWlnaHQgLSBpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb3cpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxvY2F0ZWRSb3cpCi0gICAg
ICAgICAgICBkZWxldGVbXSByb3c7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHBpeGVs
cyBvZiBjdWJlIG1hcHMnIGZhY2VzIGFyZSBkZWZpbmVkIHdpdGggYSB0b3AtZG93bgotICAgICAg
ICAvLyBzY2FubGluZSBvcmRlcmluZywgdW5saWtlIEdMX1RFWFRVUkVfMkQsIHNvIHdoZW4gdXBs
b2FkaW5nCi0gICAgICAgIC8vIHRoZXNlLCB0aGUgYWJvdmUgdmVydGljYWwgZmxpcCBpcyB0aGUg
d3JvbmcgdGhpbmcgdG8gZG8uCi0gICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotICAgICAg
ICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0g
bmV3IHVuc2lnbmVkIGNoYXJbcm93Qnl0ZXNdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgICAgIG1lbWNweShyb3csIHBpeGVscyAr
IChyb3dCeXRlcyAqIGkpLCByb3dCeXRlcyk7Ci0gICAgICAgICAgICAgICAgdW5tdWx0aXBseUFs
cGhhKHJvdywgd2lkdGgpOwotICAgICAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCAwLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlW10gcm93
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2Uq
IGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCi0gICAgaW50IHJl
cyA9IC0xOwotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXNraWFJ
bWFnZSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIH0KLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhSW1hZ2UtPmNv
bmZpZygpOwotICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0
aW9ucy4KLSAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGlt
YWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBp
ZiAoIUdyYXBoaWNzQ29udGV4dDNEVXRpbDo6ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkK
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBTa0JpdG1hcCYgc2tpYUltYWdlUmVmID0g
KnNraWFJbWFnZTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soc2tpYUltYWdlUmVmKTsKLSAg
ICBpbnQgd2lkdGggPSBza2lhSW1hZ2UtPndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNraWFJ
bWFnZS0+aGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0KLSAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc2tpYUltYWdlLT5nZXRQaXhlbHMoKSk7Ci0g
ICAgaW50IHJvd0J5dGVzID0gc2tpYUltYWdlLT5yb3dCeXRlcygpOwotICAgIHJlcyA9IHRleElt
YWdlMkRIZWxwZXIodGFyZ2V0LCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfQkdSQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzKTsKLSNlbGlmIFBMQVRGT1JN
KENHKQotICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIGlmICghY2dJbWFnZSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpbnQgd2lkdGggPSBDR0ltYWdl
R2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJ
bWFnZSk7Ci0gICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIENHSW1hZ2VBbHBoYUlu
Zm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8oY2dJbWFnZSk7Ci0gICAgYm9vbCBza2lwQWxw
aGEgPSAoaW5mbyA9PSBrQ0dJbWFnZUFscGhhTm9uZQotICAgICAgICAgICAgICAgICAgIHx8IGlu
Zm8gPT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdAotICAgICAgICAgICAgICAgICAgIHx8IGlu
Zm8gPT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpOwotICAgIHVuc2lnbmVkIGNoYXIqIGlt
YWdlRGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2hlaWdodCAqIHJvd0J5dGVzXTsKLSAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VHZW5lcmljUkdCKTsKLSAgICBDR0NvbnRleHRSZWYgdG1wQ29udGV4dCA9IENHQml0
bWFwQ29udGV4dENyZWF0ZShpbWFnZURhdGEsIHdpZHRoLCBoZWlnaHQsIDgsIHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
U3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KTsKLSAgICBDR0NvbG9yU3BhY2VSZWxl
YXNlKGNvbG9yU3BhY2UpOwotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0bXBDb250ZXh0LCBr
Q0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UodG1wQ29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0
Pih3aWR0aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICBjZ0ltYWdlKTsKLSAgICBDR0NvbnRleHRSZWxlYXNlKHRtcENvbnRleHQpOwotICAg
IHJlcyA9IHRleEltYWdlMkRIZWxwZXIodGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgcm93
Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBo
YSwgR0xfUkdCQSwgc2tpcEFscGhhLCBpbWFnZURhdGEpOwotICAgIGRlbGV0ZVtdIGltYWdlRGF0
YTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgotICAg
IHJldHVybiByZXM7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LAorICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAw
LAorICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5k
YXRhKCkpOworICAgIHJldHVybiAwOwogfQogCiBHTF9TQU1FX01FVEhPRF8zKFRleFBhcmFtZXRl
cmYsIHRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOwpAQCAtMjA3OCw5
ICsxOTEzLDE0IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IC0xOworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgdW5zaWduZWQgaW50IGZv
cm1hdCwgaW50ZXJuYWxGb3JtYXQ7CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRFV0aWw6OmV4
dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEs
ICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBnbFRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gMDsKIH0KIAogR0xfU0FNRV9NRVRIT0RfMihVbmlmb3JtMWYsIHVuaWZvcm0xZiwgbG9u
ZywgZmxvYXQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDc0MCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEwLTAyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJE
IHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4CisKKyAgICAgICAgTWVyZ2VkIHRoZSBTYWZh
cmkgYW5kIENocm9taXVtIGNvZGUgd2hpY2ggZXh0cmFjdHMgdGhlIGRhdGEgZnJvbQorICAgICAg
ICBJbWFnZSBvYmplY3RzIGludG8gYSBuZXcgR3JhcGhpY3NDb250ZXh0M0RVdGlsIGFuZCBjaGFu
Z2VkIHRoZQorICAgICAgICB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGVudHJ5IHBvaW50
cyB0byB1c2UgaXQuIFRoaXMKKyAgICAgICAgaW1tZWRpYXRlbHkgZml4ZXMgdGhlIGZvbGxvd2lu
ZyB0aHJlZSBwcm9ibGVtczoKKyAgICAgICAgICAtIENocm9taXVtIG5vdCBpbXBsZW1lbnRpbmcg
dGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgICAgLSBTYWZhcmkgbm90IG9iZXlp
bmcgdGhlIGZsaXBZIHBhcmFtZXRlciB0byB0ZXhJbWFnZTJEIG9yCisgICAgICAgICAgICB0ZXhT
dWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0
aGUgcHJlbXVsdGlweUFscGhhIHBhcmFtZXRlciB0byB0ZXhJbWFnZTJECisgICAgICAgICAgICBv
ciB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgdmVy
aWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0ZXhJbWFnZTJEIGFuZAorICAgICAgICB0ZXhTdWJJbWFn
ZTJEIGFuZCB0aGUgZmxpcFkgcGFyYW1ldGVyLiBUaGUgcHJlbXVsdGlwbHlBbHBoYQorICAgICAg
ICBwYXJhbWV0ZXIgY2FuIG5vdCBiZSB0ZXN0ZWQgeWV0IGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBp
cyBub3QgeWV0CisgICAgICAgIHNwZWMgY29tcGxpYW50LiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4g
YSBmb2xsb3ctb24gYnVnLgorCisgICAgICAgIFJhbiBhbGwgV2ViR0wgZGVtb3MgaW4gZGVtbyBy
ZXBvc2l0b3J5IG9uIFNhZmFyaSBhbmQgQ2hyb21pdW07CisgICAgICAgIHRleHR1cmVzIGFyZSBu
b3cgdGhlIHJpZ2h0IHdheSB1cCBpbiBib3RoIGJyb3dzZXJzLCBhbmQKKyAgICAgICAgdHJhbnNw
YXJlbnQgdGV4dHVyZXMgaW4gUGFydGljbGVzIGRlbW8gbm93IGxvb2sgY29ycmVjdCBpbiBTYWZh
cmkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9y
ZXNvdXJjZXMvcmVkLWdyZWVuLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdl
LTJkLXdpdGgtaW1hZ2UuaHRtbDogQWRkZWQuCisKIDIwMTAtMDItMTIgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBT
Y2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFu
ZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0
aC1pbWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorVmVyaWZ5IHRleEltYWdlMkQgYW5k
IHRleFN1YkltYWdlMkQgY29kZSBwYXRocyB0YWtpbmcgSW1hZ2VzLCBpbiBwYXJ0aWN1bGFyIGZs
aXBZIGFyZ3VtZW50CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0
ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTggOiBS
ZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZSB0byB1c2Ug
Y29tbW9uIGNvZGUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIGZsaXBZPXRydWUKK0NoZWNraW5n
IGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhl
bCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVs
IGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBp
cyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHRleElt
YWdlMkQgd2l0aCBmbGlwWT1mYWxzZQorQ2hlY2tpbmcgbG93ZXIgbGVmdCBjb3JuZXIKK1BBU1Mg
cGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBw
aXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitDaGVja2lu
ZyB1cHBlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhl
bCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPXRydWUK
K0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgor
UEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQ
QVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BB
U1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFT
UyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0
aW5nIHRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT1mYWxzZQorQ2hlY2tpbmcgbG93ZXIgbGVmdCBj
b3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RD
b2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENv
bG9yCitDaGVja2luZyB1cHBlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29s
b3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xv
cgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1h
Z2UtMmQtd2l0aC1pbWFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZz
aGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWMzIGdfUG9zaXRp
b247CithdHRyaWJ1dGUgdmVjMiBnX1RleENvb3JkMDsKKwordmFyeWluZyB2ZWMyIHRleENvb3Jk
OworCit2b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gdmVjNChnX1Bvc2l0aW9uLngs
IGdfUG9zaXRpb24ueSwgZ19Qb3NpdGlvbi56LCAxLjApOworICAgIHRleENvb3JkID0gZ19UZXhD
b29yZDA7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFk
ZXIveC1mcmFnbWVudCI+Cit1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7Cit2YXJ5aW5nIHZlYzIgdGV4
Q29vcmQ7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRl
eCwgdGV4Q29vcmQpOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+Cit2YXIgZ2wgPSBudWxsOwor
dmFyIHRleHR1cmVMb2MgPSBudWxsOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwor
CitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorCisgICAgZGVzY3JpcHRpb24oJ1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJ
bWFnZTJEIGNvZGUgcGF0aHMgdGFraW5nIEltYWdlcywgaW4gcGFydGljdWxhciBmbGlwWSBhcmd1
bWVudCcpOworCisgICAgZGVidWcoJ1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4Ij5odHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTg8L2E+IDogPGNvZGU+UmVmYWN0b3IgdGV4SW1h
Z2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UgdG8gdXNlIGNvbW1vbiBjb2RlPC9j
b2RlPicpOworCisgICAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hh
ZGVyIiwgWyAiZ19Qb3NpdGlvbiIsICJnX1RleENvb3JkMCIgXSwgWyAwLCAwLCAwLCAxIF0sIDEp
OworICAgIGdsLnZpZXdwb3J0KDAsIDAsIDMyLCAzMik7CisKKyAgICB0ZXh0dXJlTG9jID0gZ2wu
Z2V0VW5pZm9ybUxvY2F0aW9uKGdsLnByb2dyYW0sICJ0ZXgiKTsKKworICAgIHZhciB2ZXJ0aWNl
cyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAg
ICAgIC0xLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAg
MS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwg
LTEuMCwgMC4wXSk7CisgICAgdmFyIHRleENvb3JkcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWwor
ICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAor
ICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAwLjAsCisgICAgICAgIDEuMCwgMC4wXSk7
CisgICAgdmFyIHRleENvb3JkT2Zmc2V0ID0gdmVydGljZXMuYnl0ZUxlbmd0aDsKKworICAgIHZh
ciB2Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JV
RkZFUiwgdmJvKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAg
ICAgICAgICAgIHRleENvb3JkT2Zmc2V0ICsgdGV4Q29vcmRzLmJ5dGVMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJB
WV9CVUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JV
RkZFUiwgdGV4Q29vcmRPZmZzZXQsIHRleENvb3Jkcyk7CisKKyAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FU
LCBmYWxzZSwgMCwgMCk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZ2wuRkFMU0UsIDAsIHRleENv
b3JkT2Zmc2V0KTsKKworICAgIGxvYWRUZXh0dXJlKCJyZXNvdXJjZXMvcmVkLWdyZWVuLnBuZyIp
OworfQorCitmdW5jdGlvbiBsb2FkVGV4dHVyZShzcmMpIHsKKyAgICB2YXIgdGV4dHVyZSA9IGds
LmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0
dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlO
X0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJE
LCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIHZhciBpbWFnZSA9IG5l
dyBJbWFnZSgpOworICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAgICAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBpbWFnZSwgdHJ1ZSk7CisgICAgICAgIHJ1blRlc3QoaW1hZ2Up
OworICAgIH07CisgICAgaW1hZ2Uuc3JjID0gc3JjOworICAgIHJldHVybiB0ZXh0dXJlOworfQor
CisvLyBUaGVzZSB0d28gZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxk
QmUiIHRvIHNlZSB0aGVtCit2YXIgYnVmID0gbnVsbDsKK3ZhciBpZHggPSAwOwordmFyIHBpeGVs
ID0gWzAsIDAsIDBdOwordmFyIGNvcnJlY3RDb2xvciA9IG51bGw7CisKK2Z1bmN0aW9uIHJ1bk9u
ZUl0ZXJhdGlvbihpbWFnZSwgdXNlVGV4U3ViSW1hZ2UyRCwgZmxpcFksIHRvcENvbG9yLCBib3R0
b21Db2xvcikKK3sKKyAgICBkZWJ1ZygnVGVzdGluZyAnICsgKHVzZVRleFN1YkltYWdlMkQgPyAn
dGV4U3ViSW1hZ2UyRCcgOiAndGV4SW1hZ2UyRCcpICsKKyAgICAgICAgICAnIHdpdGggZmxpcFk9
JyArIGZsaXBZKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhf
QlVGRkVSX0JJVCk7CisgICAgLy8gRGlzYWJsZSBhbnkgd3JpdGVzIHRvIHRoZSBhbHBoYSBjaGFu
bmVsCisgICAgZ2wuY29sb3JNYXNrKDEsIDEsIDEsIDApOworICAgIHZhciB0ZXh0dXJlID0gZ2wu
Y3JlYXRlVGV4dHVyZSgpOworICAgIC8vIEJpbmQgdGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0
IDAKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBT
ZXQgdXAgdGV4dHVyZSBwYXJhbWV0ZXJzCisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJF
XzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFt
ZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsK
KyAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUKKyAgICBpZiAodXNlVGV4
U3ViSW1hZ2UyRCkgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0dXJlIHRvIGJsYWNr
IGZpcnN0CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBp
bWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLAorICAgICAgICAgICAgICAgICAgICAgIGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIDAsIDAsIGltYWdlLCBmbGlwWSwgZmFsc2UpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgaW1hZ2UsIGZsaXBZLCBm
YWxzZSk7CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhlIHVuaWZvcm0gc2FtcGxlciB0byB0ZXh0
dXJlIHVuaXQgMAorICAgIGdsLnVuaWZvcm0xaSh0ZXh0dXJlTG9jLCAwKTsKKyAgICAvLyBEcmF3
IHRoZSB0cmlhbmdsZXMKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisK
KyAgICAvLyBSZWFkIGJhY2sgdGhlIHJlbmRlcmluZyByZXN1bHRzCisgICAgdmFyIHdpZHRoID0g
MzI7CisgICAgdmFyIGhlaWdodCA9IDMyOworICAgIGJ1ZiA9IGdsLnJlYWRQaXhlbHMoMCwgMCwg
d2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7CisgICAgLy8gQ2hlY2sg
YSBmZXcgcGl4ZWxzIG5lYXIgdGhlIHRvcCBhbmQgYm90dG9tIGFuZCBtYWtlIHN1cmUgdGhleSBo
YXZlCisgICAgLy8gdGhlIHJpZ2h0IGNvbG9yLgorICAgIHZhciBxdWVyeVdpZHRoID0gMjsKKyAg
ICB2YXIgcXVlcnlIZWlnaHQgPSAyOworICAgIGRlYnVnKCJDaGVja2luZyBsb3dlciBsZWZ0IGNv
cm5lciIpOworICAgIHZhciB4b2ZmID0gNDsKKyAgICB2YXIgeW9mZiA9IDQ7CisgICAgY29ycmVj
dENvbG9yID0gYm90dG9tQ29sb3I7CisgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBxdWVyeUhlaWdo
dDsgeSsrKSB7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgcXVlcnlXaWR0aDsgeCsrKSB7
CisgICAgICAgICAgICBpZHggPSAoKHlvZmYgKyB5KSAqIHdpZHRoICogNCArCisgICAgICAgICAg
ICAgICAgICAgKHhvZmYgKyB4KSAqIDQpOworICAgICAgICAgICAgcGl4ZWxbMF0gPSBidWZbaWR4
XTsKKyAgICAgICAgICAgIHBpeGVsWzFdID0gYnVmW2lkeCArIDFdOworICAgICAgICAgICAgcGl4
ZWxbMl0gPSBidWZbaWR4ICsgMl07CisgICAgICAgICAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29y
cmVjdENvbG9yIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoIkNoZWNraW5nIHVwcGVy
IGxlZnQgY29ybmVyIik7CisgICAgeW9mZiA9IGhlaWdodCAtIDg7CisgICAgY29ycmVjdENvbG9y
ID0gdG9wQ29sb3I7CisgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBxdWVyeUhlaWdodDsgeSsrKSB7
CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgcXVlcnlXaWR0aDsgeCsrKSB7CisgICAgICAg
ICAgICBpZHggPSAoKHlvZmYgKyB5KSAqIHdpZHRoICogNCArCisgICAgICAgICAgICAgICAgICAg
KHhvZmYgKyB4KSAqIDQpOworICAgICAgICAgICAgcGl4ZWxbMF0gPSBidWZbaWR4XTsKKyAgICAg
ICAgICAgIHBpeGVsWzFdID0gYnVmW2lkeCArIDFdOworICAgICAgICAgICAgcGl4ZWxbMl0gPSBi
dWZbaWR4ICsgMl07CisgICAgICAgICAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9y
Iik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoaW1hZ2UpCit7Cisg
ICAgdmFyIHJlZCA9IFsyNTUsIDAsIDBdOworICAgIHZhciBncmVlbiA9IFswLCAyNTUsIDBdOwor
ICAgIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgZmFsc2UsIHRydWUsIHJlZCwgZ3JlZW4pOworICAg
IHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgZmFsc2UsIGZhbHNlLCBncmVlbiwgcmVkKTsKKyAgICBy
dW5PbmVJdGVyYXRpb24oaW1hZ2UsIHRydWUsIHRydWUsIHJlZCwgZ3JlZW4pOworICAgIHJ1bk9u
ZUl0ZXJhdGlvbihpbWFnZSwgdHJ1ZSwgZmFsc2UsIGdyZWVuLCByZWQpOworCisgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzY3JpcHQiKTsKKyAgICBlcGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBp
bG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCitmdW5jdGlvbiBmaW5pc2go
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0i
MzJweCIgaGVpZ2h0PSIzMnB4Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3JlZC1ncmVlbi5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1p
bWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3JlZC1ncmVlbi5wbmcKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FJQUFBQVc0eUZ3QUFBQUFYTlNS
MElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZB
QUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBQTVKUkVGVQpHRmRqK004QUJQOFpB
QWovQWY4MjBxZ1lBQUFBQUVsRlRrU3VRbUNDCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48672</attachid>
            <date>2010-02-12 15:29:50 -0800</date>
            <delta_ts>2010-02-12 17:53:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>textures.patch</filename>
            <type>text/plain</type>
            <size>46856</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBj
b21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3
aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBh
IG5ldyBHcmFwaGljc0NvbnRleHQzRFV0aWwgYW5kIGNoYW5nZWQgdGhlCisgICAgICAgIHRleElt
YWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRvIHVzZSBpdC4gVGhpcworICAg
ICAgICBpbW1lZGlhdGVseSBmaXhlcyB0aGUgZm9sbG93aW5nIHRocmVlIHByb2JsZW1zOgorICAg
ICAgICAgIC0gQ2hyb21pdW0gbm90IGltcGxlbWVudGluZyB0ZXhTdWJJbWFnZTJEIHRha2luZyBJ
bWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0aGUgZmxpcFkgcGFyYW1ldGVy
IHRvIHRleEltYWdlMkQgb3IKKyAgICAgICAgICAgIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdl
LgorICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBwcmVtdWx0aXB5QWxwaGEgcGFy
YW1ldGVyIHRvIHRleEltYWdlMkQKKyAgICAgICAgICAgIG9yIHRleFN1YkltYWdlMkQgdGFraW5n
IEltYWdlLgorICAgICAgICBBZGRlZCBuZXcgdGVzdCB2ZXJpZnlpbmcgdGhlIGJlaGF2aW9yIG9m
IHRleEltYWdlMkQgYW5kCisgICAgICAgIHRleFN1YkltYWdlMkQgYW5kIHRoZSBmbGlwWSBwYXJh
bWV0ZXIuIFRoZSBwcmVtdWx0aXBseUFscGhhCisgICAgICAgIHBhcmFtZXRlciBjYW4gbm90IGJl
IHRlc3RlZCB5ZXQgYXMgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB5ZXQKKyAgICAgICAgc3Bl
YyBjb21wbGlhbnQuIFRoaXMgd2lsbCBiZSBmaXhlZCBpbiBhIGZvbGxvdy1vbiBidWcuCisKKyAg
ICAgICAgUmFuIGFsbCBXZWJHTCBkZW1vcyBpbiBkZW1vIHJlcG9zaXRvcnkgb24gU2FmYXJpIGFu
ZCBDaHJvbWl1bTsKKyAgICAgICAgdGV4dHVyZXMgYXJlIG5vdyB0aGUgcmlnaHQgd2F5IHVwIGlu
IGJvdGggYnJvd3NlcnMsIGFuZAorICAgICAgICB0cmFuc3BhcmVudCB0ZXh0dXJlcyBpbiBQYXJ0
aWNsZXMgZGVtbyBub3cgbG9vayBjb3JyZWN0IGluIFNhZmFyaS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0
bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RVdGlsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RVdGlsOjpleHRyYWN0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEVXRpbDo6cHJvY2Vzc0lt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFV0aWw6OnByZW11
bHRpcGx5QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RVdGlsOjp1
bm11bHRpcGx5QWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNEVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
VXRpbDo6KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEVXRpbDo6R3JhcGhp
Y3NDb250ZXh0M0RVdGlsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1
YkltYWdlMkQpOgorCiAyMDEwLTAyLTEyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1NDY5NC4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA1NDc0MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc3
LDYgKzIyNzcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFV0aWwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RVdGls
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oJywKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1
NDc0MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQxLDYgKzEyNDEsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAwQkUz
MjUgLyogSlNDYW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NURGMzIzNjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJu
LmggKi87IH07CiAJCTY1REYzMjYxMDlEMUUxOTkwMDBCRTMyNSAvKiBVc2VyQWdlbnRTdHlsZVNo
ZWV0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5j
cHAgKi87IH07CiAJCTY1RkVBODY5MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkVBODY4MDk4MzNBREUw
MEJFRDRBQiAvKiBQYWdlLmNwcCAqLzsgfTsKKwkJNkUyMUM1QkUxMTI2MEUwQjAwQTdCRTAyIC8q
IEdyYXBoaWNzQ29udGV4dDNEVXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTIxQzVCQzExMjYwRTBCMDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0RVdGlsLmNwcCAqLzsgfTsKKwkJNkUyMUM1QkYxMTI2MEUwQjAwQTdCRTAyIC8qIEdyYXBo
aWNzQ29udGV4dDNEVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkUyMUM1QkQxMTI2MEUwQjAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEVXRp
bC5oICovOyB9OwogCQk2RTQ3RTY2MDEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNDdFNjVF
MTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwICovOyB9OwogCQk2RTQ3RTY2MTEw
Qjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTQ3RTY1RjEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xH
ZXRJbmZvLmggKi87IH07CiAJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250
ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTRFOTFBNzEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuY3BwICovOyB9OwpAQCAtNjY1Myw2ICs2NjU1LDggQEAKIAkJNjVERjMyMzYwOUQxREU2NTAw
MEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNDYW52YXNQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1
RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBCbG9ja0V4Y2Vw
dGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZFMjFDNUJDMTEyNjBFMEIwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQz
RFV0aWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0M0RVdGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM1QkQx
MTI2MEUwQjAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEVXRpbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRFV0aWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkU0N0U2NUUxMEI3OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5m
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEdldEluZm8u
Y3BwOyBwYXRoID0gY2FudmFzL1dlYkdMR2V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xHZXRJbmZvLmg7IHBhdGggPSBjYW52
YXMvV2ViR0xHZXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNEU5MUE3
MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHA7
IHBhdGggPSBjYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQ0MzYsNiArMTQ0NDAsOCBAQAogCQkJCUIyQTAxNTkyMEFGNkNE
NTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNE
NTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk0OUM3QjlGQjEwNDJEMzY1
MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLywKKwkJCQk2RTIxQzVCQzExMjYwRTBC
MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RVdGlsLmNwcCAqLywKKwkJCQk2RTIxQzVCRDEx
MjYwRTBCMDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RVdGlsLmggKi8sCiAJCQkJQTg4RkUz
MzMwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKIAkJCQkw
RjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1
ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKQEAgLTE4NTI2LDYg
KzE4NTMyLDcgQEAKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRp
UnVuLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjZGQzE5NzExMjJFODJBMDBFODAxOTYgLyogU2Ny
aXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFMjFDNUJGMTEyNjBFMEIwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRFV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA3MDcs
NiArMjA3MTQsNyBAQAogCQkJCUJDRTc4OThCMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRpUnVuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTlGNkZDMTk2MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkZGMTdFMzExMjM1NjczMDAxRDYx
QjUgLyogUGx1Z2luVmlld05vbmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkUyMUM1QkUxMTI2
MEUwQjAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEVXRpbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNEVXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNEVXRpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RVdGlsLmgiCisKKyNpZiBQTEFURk9STShDRykKKyNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Cisj
ZWxpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2VuZGlm
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShDRykKKy8vIEZldGNoZXMgdGhlIGRh
dGEgZm9yIHRoZSBnaXZlbiBDb3JlR3JhcGhpY3MgaW1hZ2UgaW50byB0aGUgcGFzc2VkCisvLyBW
ZWN0b3IuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYW4gYWxwaGEgY2hhbm5lbCBp
biB0aGUKKy8vIG91dGdvaW5nIHZhcmlhYmxlICJoYXNBbHBoYUNoYW5uZWwiLgorc3RhdGljIGJv
b2wgZ2V0SW1hZ2VEYXRhKENHSW1hZ2VSZWYgaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogaGFzQWxwaGFDaGFubmVsKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAg
IGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKKyAgICBpbnQgcm93Qnl0ZXMg
PSB3aWR0aCAqIDQ7CisgICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhh
SW5mbyhpbWFnZSk7CisgICAgKmhhc0FscGhhQ2hhbm5lbCA9IChpbmZvICE9IGtDR0ltYWdlQWxw
aGFOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFO
b25lU2tpcExhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8gIT0ga0NHSW1hZ2VB
bHBoYU5vbmVTa2lwRmlyc3QpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUoaGVpZ2h0ICogcm93
Qnl0ZXMpOworICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3BhY2UgZnJvbSB0aGUgaW1h
Z2UgdG8gcHJlc2VydmUgaXRzIGNvbG9ycy4KKyAgICAvLyBTb21lIGltYWdlcyB1c2UgYSBjb2xv
ciBzcGFjZSAoc3VjaCBhcyBpbmRleGVkKSB1bnN1cHBvcnRlZCBieSB0aGUgYml0bWFwIGNvbnRl
eHQuCisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFj
ZShpbWFnZSk7CisgICAgYm9vbCByZWxlYXNlQ29sb3JTcGFjZSA9IGZhbHNlOworICAgIENHQ29s
b3JTcGFjZU1vZGVsIGNvbG9yU3BhY2VNb2RlbCA9IENHQ29sb3JTcGFjZUdldE1vZGVsKGNvbG9y
U3BhY2UpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZU1vZGVsKSB7CisgICAgY2FzZSBrQ0dDb2xv
clNwYWNlTW9kZWxNb25vY2hyb21lOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsUkdCOgor
ICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsQ01ZSzoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VN
b2RlbExhYjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbERldmljZU46CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVh
dGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcik7CisgICAgICAgIHJlbGVh
c2VDb2xvclNwYWNlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIENHQ29udGV4
dFJlZiB0bXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG91dHB1dFZlY3Rvci5kYXRh
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsIGhlaWdodCwgOCwgcm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpOworICAgIGlmIChyZWxlYXNlQ29sb3JTcGFjZSkKKyAgICAgICAgQ0dDb2xvclNwYWNl
UmVsZWFzZShjb2xvclNwYWNlKTsKKyAgICBpZiAoIXRtcENvbnRleHQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodG1wQ29udGV4dCwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRtcENvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4od2lkdGgp
LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
aW1hZ2UpOworICAgIENHQ29udGV4dFJlbGVhc2UodG1wQ29udGV4dCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oQ0cpCisKKyNpZiBQTEFURk9STShTS0lBKQorYm9v
bCBnZXRJbWFnZURhdGEoTmF0aXZlSW1hZ2VTa2lhKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQoreworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBpbWFn
ZS0+Y29uZmlnKCk7CisgICAgLy8gRklYTUU6IG11c3Qgc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZp
Z3VyYXRpb25zLgorICAgIGlmIChza2lhQ29uZmlnICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNrQml0bWFwJiBza2lhSW1hZ2VSZWYg
PSAqaW1hZ2U7CisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7CisgICAg
aW50IHdpZHRoID0gaW1hZ2UtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGltYWdlLT5oZWln
aHQoKTsKKyAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZS0+cm93Qnl0ZXMoKTsKKyAgICBBU1NFUlQo
cm93Qnl0ZXMgPT0gd2lkdGggKiA0KTsKKyAgICB1aW50OF90KiBwaXhlbHMgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihpbWFnZS0+Z2V0UGl4ZWxzKCkpOworICAgIG91dHB1dFZlY3Rvci5y
ZXNpemUocm93Qnl0ZXMgKiBoZWlnaHQpOworICAgIG1lbWNweShvdXRwdXRWZWN0b3IuZGF0YSgp
LCBwaXhlbHMsIHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRp
ZiAvLyBQTEFURk9STShTS0lBKQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6ZXh0cmFj
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQq
IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCogaW50ZXJuYWxGb3JtYXQpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6QWxwaGFPcCBhbHBoYU9w
ID0gR3JhcGhpY3NDb250ZXh0M0RVdGlsOjprQWxwaGFEb05vdGhpbmc7CisgICAgYm9vbCBoYXNB
bHBoYUNoYW5uZWwgPSB0cnVlOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgTmF0aXZlSW1hZ2VT
a2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBpZiAoIWdldEltYWdlRGF0YShza2lhSW1hZ2UsIGltYWdlRGF0YSkpCisgICAgICAgIHJldHVy
biAtMTsKKyAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIC8vIEZJWE1FOiBtdXN0
IGZldGNoIHRoZSBpbWFnZSBkYXRhIGJlZm9yZSB0aGUgcHJlbXVsdGlwbGljYXRpb24gc3RlcAor
ICAgICAgICBhbHBoYU9wID0gR3JhcGhpY3NDb250ZXh0M0RVdGlsOjprQWxwaGFEb1VubXVsdGlw
bHk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gZGVza3RvcCBPcGVu
R0wKKyAgICAqZm9ybWF0ID0gMHg4MEUxOyAvLyBHTF9CR1JBCisjZWxpZiBQTEFURk9STShDRykK
KyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBpZiAoIWdldEltYWdlRGF0YShjZ0ltYWdlLCBpbWFnZURhdGEsICZoYXNBbHBo
YUNoYW5uZWwpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFwcmVtdWx0aXBseUFscGhh
KQorICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUgdGhl
IHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKKyAgICAgICAgYWxwaGFPcCA9IEdyYXBoaWNzQ29udGV4
dDNEVXRpbDo6a0FscGhhRG9Vbm11bHRpcGx5OworICAgICpmb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNl
bmRpZgorICAgIHByb2Nlc3NJbWFnZURhdGEoaW1hZ2VEYXRhLmRhdGEoKSwKKyAgICAgICAgICAg
ICAgICAgICAgIGltYWdlLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPmhl
aWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgZmxpcFksCisgICAgICAgICAgICAgICAgICAg
ICBhbHBoYU9wKTsKKyAgICAqaW50ZXJuYWxGb3JtYXQgPSAoaGFzQWxwaGFDaGFubmVsID8gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgOiBHcmFwaGljc0NvbnRleHQzRDo6UkdCKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFV0aWw6OnByb2Nlc3NJbWFnZURh
dGEodWludDhfdCogaW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNhbGx5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKQoreworICAg
IHN3aXRjaCAoYWxwaGFPcCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RVdGlsOjprQWxw
aGFEb1ByZW11bHRpcGx5OgorICAgICAgICBwcmVtdWx0aXBseUFscGhhKGltYWdlRGF0YSwgd2lk
dGggKiBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
VXRpbDo6a0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICB1bm11bHRpcGx5QWxwaGEoaW1hZ2VE
YXRhLCB3aWR0aCAqIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmbGlwVmVydGljYWxseSAmJiB3aWR0aCAmJiBo
ZWlnaHQpIHsKKyAgICAgICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgICAgICB1aW50
OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3Rbcm93Qnl0ZXNdOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgaSsrKSB7CisgICAgICAgICAgICB1aW50OF90KiBs
b3dSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiBpKTsKKyAgICAgICAgICAgIHVpbnQ4X3Qq
IGhpZ2hSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiAoaGVpZ2h0IC0gaSAtIDEpKTsKKyAg
ICAgICAgICAgIG1lbWNweSh0ZW1wUm93LCBsb3dSb3csIHJvd0J5dGVzKTsKKyAgICAgICAgICAg
IG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHJvd0J5dGVzKTsKKyAgICAgICAgICAgIG1lbWNweSho
aWdoUm93LCB0ZW1wUm93LCByb3dCeXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10g
dGVtcFJvdzsKKyAgICB9Cit9CisKKy8vIFByZW11bHRpcGx5IGFscGhhIGludG8gY29sb3IgY2hh
bm5lbHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEVXRpbDo6cHJlbXVsdGlwbHlBbHBoYSh1bnNp
Z25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKK3sKKyAgICBmb3IgKGludCBqID0g
MDsgaiA8IG51bVBpeGVsczsgaisrKSB7CisgICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0Kmor
MF0gLyAyNTUuMGY7CisgICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7
CisgICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7CisgICAgICAgIGZs
b2F0IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7CisgICAgICAgIHJnYmFEYXRhWzQqaisw
XSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIGEgKiAyNTUuMGYpOworICAgICAgICByZ2JhRGF0YVs0
KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcgKiBhICogMjU1LjBmKTsKKyAgICAgICAgcmdiYURh
dGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIpIChiICogYSAqIDI1NS4wZik7CisgICAgfQorfQor
CisvLyBSZW1vdmUgcHJlbXVsdGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgorLy8g
RklYTUU6IHRoaXMgaXMgbG9zc3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZyb20g
SFRNTEltYWdlRWxlbWVudC4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RVdGlsOjp1bm11bHRpcGx5
QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURhdGEsIGludCBudW1QaXhlbHMpCit7CisgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBudW1QaXhlbHM7IGorKykgeworICAgICAgICBmbG9hdCByID0gcmdi
YURhdGFbNCpqKzBdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpqKzFd
IC8gMjU1LjBmOworICAgICAgICBmbG9hdCBiID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBmOwor
ICAgICAgICBmbG9hdCBhID0gcmdiYURhdGFbNCpqKzNdIC8gMjU1LjBmOworICAgICAgICBpZiAo
YSA+IDAuMGYpIHsKKyAgICAgICAgICAgIHIgLz0gYTsKKyAgICAgICAgICAgIGcgLz0gYTsKKyAg
ICAgICAgICAgIGIgLz0gYTsKKyAgICAgICAgICAgIHIgPSAociA+IDEuMGYpID8gMS4wZiA6IHI7
CisgICAgICAgICAgICBnID0gKGcgPiAxLjBmKSA/IDEuMGYgOiBnOworICAgICAgICAgICAgYiA9
IChiID4gMS4wZikgPyAxLjBmIDogYjsKKyAgICAgICAgICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1
bnNpZ25lZCBjaGFyKSAociAqIDI1NS4wZik7CisgICAgICAgICAgICByZ2JhRGF0YVs0KmorMV0g
PSAodW5zaWduZWQgY2hhcikgKGcgKiAyNTUuMGYpOworICAgICAgICAgICAgcmdiYURhdGFbNCpq
KzJdID0gKHVuc2lnbmVkIGNoYXIpIChiICogMjU1LjBmKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RVdGlsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RFV0aWwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0RVdGlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RVdGlsX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0
M0RVdGlsX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZTsKKworLy8gQSBjbGFzcyBwcm92aWRpbmcgaGVscGVyIGZ1bmN0aW9u
cyBjb21tb24gYW1vbmcgV2ViR0wgaW1wbGVtZW50YXRpb25zLgorY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0RVdGlsIHsKK3B1YmxpYzoKKyAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhl
IGdpdmVuIEltYWdlIGludG8gdGhlIHBhc3NlZAorICAgIC8vIFZlY3Rvciwgb2JleWluZyB0aGUg
ZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMKKyAgICAvLyB0aGUgYXBw
bGljYWJsZSBPcGVuR0wgZm9ybWF0IGFuZCBpbnRlcm5hbEZvcm1hdCBmb3IgdGhlCisgICAgLy8g
c3Vic2VxdWVudCBnbFRleEltYWdlMkQgb3IgZ2xUZXhTdWJJbWFnZTJEIGNhbGwuIFJldHVybnMg
dHJ1ZQorICAgIC8vIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
ZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5
QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4m
IGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
KiBpbnRlcm5hbEZvcm1hdCk7CisKKyAgICAvLyBQcm9jZXNzZXMgdGhlIGdpdmVuIGltYWdlIGRh
dGEgaW4gcHJlcGFyYXRpb24gZm9yIHVwbG9hZGluZyB2aWEKKyAgICAvLyB0ZXhJbWFnZTJEIG9y
IHRleFN1YkltYWdlMkQuIFRoZSBvcGVyYXRpb25zIHRoYXQgYXJlIGltcGxlbWVudGVkCisgICAg
Ly8gYXJlOgorICAgIC8vICAgLSBGbGlwIHZlcnRpY2FsbHkgKGZsaXBZIGFyZ3VtZW50IHRvIHRo
ZXNlIG1ldGhvZHMpCisgICAgLy8gICAtIFBhc3MgdGhyb3VnaCB0aGUgYWxwaGEgY2hhbm5lbCB1
bm1vZGlmaWVkIChrQWxwaGFEb05vdGhpbmcpCisgICAgLy8gICAtIE11bHRpcGx5IGFscGhhIGNo
YW5uZWwgaW50byBjb2xvciBjaGFubmVscyAoa0FscGhhRG9QcmVtdWx0aXBseSkKKyAgICAvLyAg
IC0gRGl2aWRlIHRoZSBjb2xvciBjaGFubmVscyBieSB0aGUgYWxwaGEgY2hhbm5lbCAoa0FscGhh
RG9Vbm11bHRpcGx5KQorICAgIC8vICAgICAtIE5PVEU6IHRoaXMgb3BlcmF0aW9uIGlzIGxvc3N5
IGFuZCwgYWNjb3JkaW5nIHRvIHRoZSBXZWJHTAorICAgIC8vICAgICAgIHNwZWNpZmljYXRpb24s
IG5vdCB2YWxpZC4gVGhlIGxvZ2ljIGlzIGJlaW5nIGluY29ycG9yYXRlZAorICAgIC8vICAgICAg
IG9ubHkgYXMgYSBzdG9wZ2FwIG1lYXN1cmUgdW50aWwgYWxsIHBsYXRmb3JtcyBoYW5kbGUKKyAg
ICAvLyAgICAgICBjb3JyZWN0bHkgdGhlIGxvYWRpbmcgb2YgaW1hZ2VzIHdpdGhvdXQgcHJlbXVs
dGlwbHlpbmcgdGhlCisgICAgLy8gICAgICAgYWxwaGEgY2hhbm5lbCBpbnRvIHRoZSBjb2xvciBj
aGFubmVscy4KKyAgICAvLworICAgIC8vIFRoZSBpbnB1dCBkYXRhIG11c3QgYmUgaW4gNC1jb21w
b25lbnQgZm9ybWF0IHdpdGggdGhlIGFscGhhCisgICAgLy8gY2hhbm5lbCBsYXN0IChpLmUuLCBS
R0JBIG9yIEJHUkEpLCB0aWdodGx5IHBhY2tlZCwgd2l0aCBubworICAgIC8vIHNwYWNlIGJldHdl
ZW4gcm93cy4KKworICAgIGVudW0gQWxwaGFPcCB7CisgICAgICAgIGtBbHBoYURvTm90aGluZyA9
IDAsCisgICAgICAgIGtBbHBoYURvUHJlbXVsdGlwbHkgPSAxLAorICAgICAgICBrQWxwaGFEb1Vu
bXVsdGlwbHkgPSAyCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NJbWFnZURhdGEo
dWludDhfdCogaW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNh
bGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKTsK
K3Byb3RlY3RlZDoKKyAgICAvLyBObyBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MuCisg
ICAgR3JhcGhpY3NDb250ZXh0M0RVdGlsKCkge30KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9p
ZCBwcmVtdWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJnYmFEYXRhLCBpbnQgbnVtUGl4ZWxz
KTsKKyAgICBzdGF0aWMgdm9pZCB1bm11bHRpcGx5QWxwaGEodWludDhfdCogaW1hZ2VEYXRhLCBp
bnQgbnVtUGl4ZWxzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEdyYXBoaWNzQ29udGV4dDNEVXRpbF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NDc0
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ2FudmFz
T2JqZWN0LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEVXRpbC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKQEAgLTExMjYsMzEgKzExMjcs
NiBAQCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPCiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4ocG9pbnRlcik7CiB9CiAKLS8vIFJldHVybmVkIHBvaW50
ZXIgbXVzdCBiZSBmcmVlZCBieSBmYXN0RnJlZSgpCi1zdGF0aWMgYm9vbCBpbWFnZVRvVGV4dHVy
ZShJbWFnZSogaW1hZ2UsIEdMdWJ5dGUqJiBidWZmZXIsIHNpemVfdCYgd2lkdGgsIHNpemVfdCYg
aGVpZ2h0KQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBDR0ltYWdlUmVmIHRleHR1cmVJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7Ci0g
ICAgaWYgKCF0ZXh0dXJlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB3
aWR0aCA9IENHSW1hZ2VHZXRXaWR0aCh0ZXh0dXJlSW1hZ2UpOwotICAgIGhlaWdodCA9IENHSW1h
Z2VHZXRIZWlnaHQodGV4dHVyZUltYWdlKTsKLSAgICAKLSAgICBidWZmZXIgPSAoR0x1Ynl0ZSop
IGZhc3RNYWxsb2Mod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBDR0NvbnRleHRSZWYgdGV4dHVyZUNvbnRl
eHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCA4LCB3aWR0
aCAqIDQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0ltYWdlR2V0Q29sb3JTcGFjZSh0ZXh0dXJlSW1hZ2UpLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpOwotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0ZXh0dXJlQ29u
dGV4dCwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRleHR1cmVD
b250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIChDR0Zsb2F0KXdpZHRoLCAoQ0dGbG9hdCloZWlnaHQp
LCB0ZXh0dXJlSW1hZ2UpOwotICAgIENHQ29udGV4dFJlbGVhc2UodGV4dHVyZUNvbnRleHQpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6
IE5lZWQgdG8gZG8gYm91bmRzIGNoZWNraW5nIG9uIHRoZSBidWZmZXIgaGVyZS4KQEAgLTExNjAs
MjAgKzExMzYsMTIgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgog
CiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEpCiB7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9ydCBmbGlwWSBhbmQgcHJlbXVsdGlw
bHlBbHBoYQotICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11
bHRpcGx5QWxwaGEpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCiAgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOwotICAgIEdMdWJ5dGUqIGJ1ZmZlcjsKLSAgICBzaXplX3Qgd2lkdGg7
Ci0gICAgc2l6ZV90IGhlaWdodDsKLSAgICBpZiAoIWltYWdlVG9UZXh0dXJlKGltYWdlLCBidWZm
ZXIsIHdpZHRoLCBoZWlnaHQpKQorICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAg
dW5zaWduZWQgaW50IGZvcm1hdCwgaW50ZXJuYWxGb3JtYXQ7CisgICAgaWYgKCFHcmFwaGljc0Nv
bnRleHQzRFV0aWw6OmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFs
cGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVy
biAtMTsKLSAgICAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBHTF9SR0JBLCB3
aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBidWZmZXIpOwotICAg
IGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAg
ICAgCkBAIC0xMTg4LDIwICsxMTU2LDEyIEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3Vi
SW1hZ2UyRCh1bnMKIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCBJ
bWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICAv
LyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVu
IGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdl
IHNpemUKLSAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0IGZsaXBZIGFuZCBwcmVtdWx0aXBs
eUFscGhhCi0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVs
dGlwbHlBbHBoYSk7Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKICAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7Ci0gICAgR0x1Ynl0ZSogYnVmZmVyOwotICAgIHNpemVfdCB3aWR0aDsK
LSAgICBzaXplX3QgaGVpZ2h0OwotICAgIGlmICghaW1hZ2VUb1RleHR1cmUoaW1hZ2UsIGJ1ZmZl
ciwgd2lkdGgsIGhlaWdodCkpCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1
bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBpZiAoIUdyYXBoaWNzQ29u
dGV4dDNEVXRpbDo6ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxw
aGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJu
IC0xOwotICAgIAotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlv
ZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGJ1ZmZlcik7Ci0g
ICAgZmFzdEZyZWUoYnVmZmVyKTsKKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2ZmLCB5b2ZmLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwogICAgIHJldHVybiAwOwogfQogCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzQxKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEwLTAyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJE
IHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4CisKKyAgICAgICAgTWVyZ2VkIHRoZSBTYWZh
cmkgYW5kIENocm9taXVtIGNvZGUgd2hpY2ggZXh0cmFjdHMgdGhlIGRhdGEgZnJvbQorICAgICAg
ICBJbWFnZSBvYmplY3RzIGludG8gYSBuZXcgR3JhcGhpY3NDb250ZXh0M0RVdGlsIGFuZCBjaGFu
Z2VkIHRoZQorICAgICAgICB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGVudHJ5IHBvaW50
cyB0byB1c2UgaXQuIFRoaXMKKyAgICAgICAgaW1tZWRpYXRlbHkgZml4ZXMgdGhlIGZvbGxvd2lu
ZyB0aHJlZSBwcm9ibGVtczoKKyAgICAgICAgICAtIENocm9taXVtIG5vdCBpbXBsZW1lbnRpbmcg
dGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgICAgLSBTYWZhcmkgbm90IG9iZXlp
bmcgdGhlIGZsaXBZIHBhcmFtZXRlciB0byB0ZXhJbWFnZTJEIG9yCisgICAgICAgICAgICB0ZXhT
dWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0
aGUgcHJlbXVsdGlweUFscGhhIHBhcmFtZXRlciB0byB0ZXhJbWFnZTJECisgICAgICAgICAgICBv
ciB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgdmVy
aWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0ZXhJbWFnZTJEIGFuZAorICAgICAgICB0ZXhTdWJJbWFn
ZTJEIGFuZCB0aGUgZmxpcFkgcGFyYW1ldGVyLiBUaGUgcHJlbXVsdGlwbHlBbHBoYQorICAgICAg
ICBwYXJhbWV0ZXIgY2FuIG5vdCBiZSB0ZXN0ZWQgeWV0IGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBp
cyBub3QgeWV0CisgICAgICAgIHNwZWMgY29tcGxpYW50LiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4g
YSBmb2xsb3ctb24gYnVnLgorCisgICAgICAgIFJhbiBhbGwgV2ViR0wgZGVtb3MgaW4gZGVtbyBy
ZXBvc2l0b3J5IG9uIFNhZmFyaSBhbmQgQ2hyb21pdW07CisgICAgICAgIHRleHR1cmVzIGFyZSBu
b3cgdGhlIHJpZ2h0IHdheSB1cCBpbiBib3RoIGJyb3dzZXJzLCBhbmQKKyAgICAgICAgdHJhbnNw
YXJlbnQgdGV4dHVyZXMgaW4gUGFydGljbGVzIGRlbW8gbm93IGxvb2sgY29ycmVjdCBpbiBTYWZh
cmkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0
M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgor
CiAyMDEwLTAyLTEyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDU0NzQwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFV0aWwuaCIKIAogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgpAQCAtNjUsMTcgKzY2LDEyIEBACiAj
aWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1h
cENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2luY2x1ZGUg
PE9wZW5HTC9PcGVuR0wuaD4KICNlbHNlCiAjZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElD
QUxMWQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgotI2VuZGlmCi0KICNpZiBPUyhEQVJXSU4pCiAjZGVmaW5lIFVTRV9URVhUVVJFX1JF
Q1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKICNlbmRpZgpAQCAtMTg3OCwxNzggKzE4NzQsMTcgQEAg
aW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHJldHVybiAwOwog
fQogCi0vLyBSZW1vdmUgcHJlbXVsdGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgot
Ly8gRklYTUU6IHRoaXMgaXMgbG9zc3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZy
b20gSFRNTEltYWdlRWxlbWVudC4KLXN0YXRpYyB2b2lkIHVubXVsdGlwbHlBbHBoYSh1bnNpZ25l
ZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVBpeGVsczsgaisrKSB7Ci0gICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMF0g
LyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0g
ICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0
IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewot
ICAgICAgICAgICAgYiAvPSBhOwotICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgciAv
PSBhOwotICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAxLjBmIDogYjsKLSAgICAgICAgICAg
IGcgPSAoZyA+IDEuMGYpID8gMS4wZiA6IGc7Ci0gICAgICAgICAgICByID0gKHIgPiAxLjBmKSA/
IDEuMGYgOiByOwotICAgICAgICAgICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIp
IChiICogMjU1LjBmKTsKLSAgICAgICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBj
aGFyKSAoZyAqIDI1NS4wZik7Ci0gICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWdu
ZWQgY2hhcikgKHIgKiAyNTUuMGYpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBGSVhNRTog
dGhpcyBtdXN0IGJlIGNoYW5nZWQgdG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGltYWdlIGRhdGEK
LS8vIHJhdGhlciB0aGFuIHVubXVsdGlwbHlpbmcgdGhlIGFscGhhIGNoYW5uZWwuCi1zdGF0aWMg
aW50IHRleEltYWdlMkRIZWxwZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lwQWxwaGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIEFTU0VSVChm
b3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQSk7Ci0gICAgR0xpbnQgaW50ZXJu
YWxGb3JtYXQgPSBHTF9SR0JBODsKLSAgICBpZiAoc2tpcEFscGhhKSB7Ci0gICAgICAgIGludGVy
bmFsRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVs
Ci0gICAgICAgIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZmxpcFkp
IHsKLSAgICAgICAgLy8gTmVlZCB0byBmbGlwIGltYWdlcyB2ZXJ0aWNhbGx5LiBUbyBhdm9pZCBt
YWtpbmcgYSBjb3B5IG9mCi0gICAgICAgIC8vIHRoZSBlbnRpcmUgaW1hZ2UsIHdlIHBlcmZvcm0g
YSB0b24gb2YgZ2xUZXhTdWJJbWFnZTJECi0gICAgICAgIC8vIGNhbGxzLiBGSVhNRTogc2hvdWxk
IHJldGhpbmsgdGhpcyBzdHJhdGVneSBmb3IgZWZmaWNpZW5jeS4KLSAgICAgICAgZ2xUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICB1bnNp
Z25lZCBjaGFyKiByb3cgPSAwOwotICAgICAgICBib29sIGFsbG9jYXRlZFJvdyA9IGZhbHNlOwot
ICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgIHJvdyA9IG5ldyB1
bnNpZ25lZCBjaGFyW3Jvd0J5dGVzXTsKLSAgICAgICAgICAgIGFsbG9jYXRlZFJvdyA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewot
ICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICAgICAgcm93ID0g
cGl4ZWxzICsgKHJvd0J5dGVzICogaSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBtZW1jcHkocm93LCBwaXhlbHMgKyAocm93Qnl0ZXMgKiBpKSwgcm93Qnl0ZXMpOwotICAg
ICAgICAgICAgICAgIHVubXVsdGlwbHlBbHBoYShyb3csIHdpZHRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBoZWlnaHQgLSBp
IC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhbGxvY2F0ZWRSb3cpCi0gICAgICAgICAgICBkZWxldGVbXSByb3c7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHBpeGVscyBvZiBjdWJlIG1hcHMnIGZhY2Vz
IGFyZSBkZWZpbmVkIHdpdGggYSB0b3AtZG93bgotICAgICAgICAvLyBzY2FubGluZSBvcmRlcmlu
ZywgdW5saWtlIEdMX1RFWFRVUkVfMkQsIHNvIHdoZW4gdXBsb2FkaW5nCi0gICAgICAgIC8vIHRo
ZXNlLCB0aGUgYWJvdmUgdmVydGljYWwgZmxpcCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gZG8uCi0g
ICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIDAp
OwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbcm93
Qnl0ZXNdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewot
ICAgICAgICAgICAgICAgIG1lbWNweShyb3csIHBpeGVscyArIChyb3dCeXRlcyAqIGkpLCByb3dC
eXRlcyk7Ci0gICAgICAgICAgICAgICAgdW5tdWx0aXBseUFscGhhKHJvdywgd2lkdGgpOwotICAg
ICAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlW10gcm93OwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiAwOwotfQotCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
IHsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCi0gICAgaW50IHJlcyA9IC0xOwotI2lmIFBMQVRGT1JN
KFNLSUEpCi0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXNraWFJbWFnZSkgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhSW1hZ2UtPmNvbmZpZygpOwotICAgIC8vIEZJWE1F
OiBtdXN0IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucy4KLSAgICBpZiAoc2tpYUNv
bmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25l
ZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNE
VXRpbDo6ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGlt
YWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwot
ICAgIH0KLSAgICBTa0JpdG1hcCYgc2tpYUltYWdlUmVmID0gKnNraWFJbWFnZTsKLSAgICBTa0F1
dG9Mb2NrUGl4ZWxzIGxvY2soc2tpYUltYWdlUmVmKTsKLSAgICBpbnQgd2lkdGggPSBza2lhSW1h
Z2UtPndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNraWFJbWFnZS0+aGVpZ2h0KCk7Ci0gICAg
dW5zaWduZWQgY2hhciogcGl4ZWxzID0KLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oc2tpYUltYWdlLT5nZXRQaXhlbHMoKSk7Ci0gICAgaW50IHJvd0J5dGVzID0gc2tp
YUltYWdlLT5yb3dCeXRlcygpOwotICAgIHJlcyA9IHRleEltYWdlMkRIZWxwZXIodGFyZ2V0LCBs
ZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
QkdSQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxzKTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIENHSW1hZ2VSZWYg
Y2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICgh
Y2dJbWFnZSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IC0xOwotICAgIH0KLSAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0g
ICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Ci0gICAgaW50IHJvd0J5
dGVzID0gd2lkdGggKiA0OwotICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRB
bHBoYUluZm8oY2dJbWFnZSk7Ci0gICAgYm9vbCBza2lwQWxwaGEgPSAoaW5mbyA9PSBrQ0dJbWFn
ZUFscGhhTm9uZQotICAgICAgICAgICAgICAgICAgIHx8IGluZm8gPT0ga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwTGFzdAotICAgICAgICAgICAgICAgICAgIHx8IGluZm8gPT0ga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwRmlyc3QpOwotICAgIHVuc2lnbmVkIGNoYXIqIGltYWdlRGF0YSA9IG5ldyB1bnNpZ25l
ZCBjaGFyW2hlaWdodCAqIHJvd0J5dGVzXTsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCKTsK
LSAgICBDR0NvbnRleHRSZWYgdG1wQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShpbWFn
ZURhdGEsIHdpZHRoLCBoZWlnaHQsIDgsIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZSh0bXBDb250ZXh0LCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAg
ICBDR0NvbnRleHREcmF3SW1hZ2UodG1wQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
Q0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRpY19jYXN0
PENHRmxvYXQ+KGhlaWdodCkpLAotICAgICAgICAgICAgICAgICAgICAgICBjZ0ltYWdlKTsKLSAg
ICBDR0NvbnRleHRSZWxlYXNlKHRtcENvbnRleHQpOwotICAgIHJlcyA9IHRleEltYWdlMkRIZWxw
ZXIodGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgR0xfUkdCQSwgc2tpcEFscGhh
LCBpbWFnZURhdGEpOwotICAgIGRlbGV0ZVtdIGltYWdlRGF0YTsKLSNlbHNlCi0jZXJyb3IgTXVz
dCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgotICAgIHJldHVybiByZXM7CisgICAgZ2xU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAorICAgICAgICAgICAgICAg
ICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAorICAgICAgICAgICAgICAgICBm
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworICAgIHJldHVybiAw
OwogfQogCiBHTF9TQU1FX01FVEhPRF8zKFRleFBhcmFtZXRlcmYsIHRleFBhcmFtZXRlcmYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOwpAQCAtMjA3OCw5ICsxOTEzLDE0IEBAIGludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIC0xOworICAgIFZlY3Rvcjx1aW50
OF90PiBpbWFnZURhdGE7CisgICAgdW5zaWduZWQgaW50IGZvcm1hdCwgaW50ZXJuYWxGb3JtYXQ7
CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRFV0aWw6OmV4dHJhY3RJbWFnZURhdGEoaW1hZ2Us
IGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZv
cm1hdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRo
KCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKyAgICByZXR1cm4gMDsKIH0KIAogR0xfU0FN
RV9NRVRIT0RfMihVbmlmb3JtMWYsIHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1NDc0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM0IEBACisyMDEwLTAyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFnZSB0byB1c2Ug
Y29tbW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0NDU4CisKKyAgICAgICAgTWVyZ2VkIHRoZSBTYWZhcmkgYW5kIENocm9taXVtIGNvZGUg
d2hpY2ggZXh0cmFjdHMgdGhlIGRhdGEgZnJvbQorICAgICAgICBJbWFnZSBvYmplY3RzIGludG8g
YSBuZXcgR3JhcGhpY3NDb250ZXh0M0RVdGlsIGFuZCBjaGFuZ2VkIHRoZQorICAgICAgICB0ZXhJ
bWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGVudHJ5IHBvaW50cyB0byB1c2UgaXQuIFRoaXMKKyAg
ICAgICAgaW1tZWRpYXRlbHkgZml4ZXMgdGhlIGZvbGxvd2luZyB0aHJlZSBwcm9ibGVtczoKKyAg
ICAgICAgICAtIENocm9taXVtIG5vdCBpbXBsZW1lbnRpbmcgdGV4U3ViSW1hZ2UyRCB0YWtpbmcg
SW1hZ2UuCisgICAgICAgICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIGZsaXBZIHBhcmFtZXRl
ciB0byB0ZXhJbWFnZTJEIG9yCisgICAgICAgICAgICB0ZXhTdWJJbWFnZTJEIHRha2luZyBJbWFn
ZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0aGUgcHJlbXVsdGlweUFscGhhIHBh
cmFtZXRlciB0byB0ZXhJbWFnZTJECisgICAgICAgICAgICBvciB0ZXhTdWJJbWFnZTJEIHRha2lu
ZyBJbWFnZS4KKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBv
ZiB0ZXhJbWFnZTJEIGFuZAorICAgICAgICB0ZXhTdWJJbWFnZTJEIGFuZCB0aGUgZmxpcFkgcGFy
YW1ldGVyLiBUaGUgcHJlbXVsdGlwbHlBbHBoYQorICAgICAgICBwYXJhbWV0ZXIgY2FuIG5vdCBi
ZSB0ZXN0ZWQgeWV0IGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgeWV0CisgICAgICAgIHNw
ZWMgY29tcGxpYW50LiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4gYSBmb2xsb3ctb24gYnVnLgorCisg
ICAgICAgIFJhbiBhbGwgV2ViR0wgZGVtb3MgaW4gZGVtbyByZXBvc2l0b3J5IG9uIFNhZmFyaSBh
bmQgQ2hyb21pdW07CisgICAgICAgIHRleHR1cmVzIGFyZSBub3cgdGhlIHJpZ2h0IHdheSB1cCBp
biBib3RoIGJyb3dzZXJzLCBhbmQKKyAgICAgICAgdHJhbnNwYXJlbnQgdGV4dHVyZXMgaW4gUGFy
dGljbGVzIGRlbW8gbm93IGxvb2sgY29ycmVjdCBpbiBTYWZhcmkuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5o
dG1sCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcmVkLWdyZWVuLnBu
ZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbDog
QWRkZWQuCisKIDIwMTAtMDItMTIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIE5vIHJldmlldywgcm9sbGluZyBvdXQgcjU0Njk0LgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1
Yi1pbWFnZS0yZC13aXRoLWltYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MyBAQAorVmVyaWZ5IHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgY29kZSBwYXRocyB0
YWtpbmcgSW1hZ2VzLCBpbiBwYXJ0aWN1bGFyIGZsaXBZIGFyZ3VtZW50CisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTggOiBSZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhT
dWJJbWFnZTJEIHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKK1Rlc3RpbmcgdGV4SW1h
Z2UyRCB3aXRoIGZsaXBZPXRydWUKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBp
eGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcg
dXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVs
IGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT1mYWxzZQorQ2hl
Y2tpbmcgbG93ZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNT
IHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1Mg
cGl4ZWwgaXMgY29ycmVjdENvbG9yCitDaGVja2luZyB1cHBlciBsZWZ0IGNvcm5lcgorUEFTUyBw
aXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBp
eGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rpbmcg
dGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPXRydWUKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVy
CitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IK
K1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgor
Q2hlY2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQ
QVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BB
U1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBmbGlw
WT1mYWxzZQorQ2hlY2tpbmcgbG93ZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVj
dENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0
Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitDaGVja2luZyB1cHBlciBsZWZ0IGNv
cm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENv
bG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29s
b3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFn
ZS0yZC13aXRoLWltYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1z
dWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OCBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
d2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2Qu
anMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVy
dGV4Ij4KK2F0dHJpYnV0ZSB2ZWMzIGdfUG9zaXRpb247CithdHRyaWJ1dGUgdmVjMiBnX1RleENv
b3JkMDsKKwordmFyeWluZyB2ZWMyIHRleENvb3JkOworCit2b2lkIG1haW4oKQoreworICAgIGds
X1Bvc2l0aW9uID0gdmVjNChnX1Bvc2l0aW9uLngsIGdfUG9zaXRpb24ueSwgZ19Qb3NpdGlvbi56
LCAxLjApOworICAgIHRleENvb3JkID0gZ19UZXhDb29yZDA7Cit9Cis8L3NjcmlwdD4KKworPHNj
cmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Cit1bmlmb3JtIHNh
bXBsZXIyRCB0ZXg7Cit2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CisKK3ZvaWQgbWFpbigpCit7Cisg
ICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpOworfQorPC9zY3JpcHQ+
CisKKzxzY3JpcHQ+Cit2YXIgZ2wgPSBudWxsOwordmFyIHRleHR1cmVMb2MgPSBudWxsOwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworCitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZGVzY3JpcHRpb24o
J1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGNvZGUgcGF0aHMgdGFraW5nIElt
YWdlcywgaW4gcGFydGljdWxhciBmbGlwWSBhcmd1bWVudCcpOworCisgICAgZGVidWcoJ1JlZ3Jl
c3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0NDU4Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0
NTg8L2E+IDogPGNvZGU+UmVmYWN0b3IgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0YWtp
bmcgSW1hZ2UgdG8gdXNlIGNvbW1vbiBjb2RlPC9jb2RlPicpOworCisgICAgZ2wgPSBpbml0V2Vi
R0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwgWyAiZ19Qb3NpdGlvbiIsICJnX1Rl
eENvb3JkMCIgXSwgWyAwLCAwLCAwLCAxIF0sIDEpOworICAgIGdsLnZpZXdwb3J0KDAsIDAsIDMy
LCAzMik7CisKKyAgICB0ZXh0dXJlTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKGdsLnByb2dy
YW0sICJ0ZXgiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWwor
ICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsICAxLjAsIDAuMCwKKyAgICAg
ICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0x
LjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIHRleENv
b3JkcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAg
MC4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAg
MC4wLCAwLjAsCisgICAgICAgIDEuMCwgMC4wXSk7CisgICAgdmFyIHRleENvb3JkT2Zmc2V0ID0g
dmVydGljZXMuYnl0ZUxlbmd0aDsKKworICAgIHZhciB2Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsK
KyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBnbC5idWZmZXJE
YXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgICAgICAgICAgIHRleENvb3JkT2Zmc2V0ICsg
dGV4Q29vcmRzLmJ5dGVMZW5ndGgsCisgICAgICAgICAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7
CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAg
ICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGV4Q29vcmRPZmZzZXQsIHRleENv
b3Jkcyk7CisKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2wuZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAy
LCBnbC5GTE9BVCwgZ2wuRkFMU0UsIDAsIHRleENvb3JkT2Zmc2V0KTsKKworICAgIGxvYWRUZXh0
dXJlKCJyZXNvdXJjZXMvcmVkLWdyZWVuLnBuZyIpOworfQorCitmdW5jdGlvbiBsb2FkVGV4dHVy
ZShzcmMpIHsKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJp
KGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGds
Lk5FQVJFU1QpOworICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOworICAgIGltYWdlLm9ubG9h
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0
ZXh0dXJlKTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBpbWFnZSwg
dHJ1ZSk7CisgICAgICAgIHJ1blRlc3QoaW1hZ2UpOworICAgIH07CisgICAgaW1hZ2Uuc3JjID0g
c3JjOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCisvLyBUaGVzZSB0d28gZGVjbGFyYXRpb25z
IG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgYnVmID0g
bnVsbDsKK3ZhciBpZHggPSAwOwordmFyIHBpeGVsID0gWzAsIDAsIDBdOwordmFyIGNvcnJlY3RD
b2xvciA9IG51bGw7CisKK2Z1bmN0aW9uIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgdXNlVGV4U3Vi
SW1hZ2UyRCwgZmxpcFksIHRvcENvbG9yLCBib3R0b21Db2xvcikKK3sKKyAgICBkZWJ1ZygnVGVz
dGluZyAnICsgKHVzZVRleFN1YkltYWdlMkQgPyAndGV4U3ViSW1hZ2UyRCcgOiAndGV4SW1hZ2Uy
RCcpICsKKyAgICAgICAgICAnIHdpdGggZmxpcFk9JyArIGZsaXBZKTsKKyAgICBnbC5jbGVhcihn
bC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgICAgLy8gRGlzYWJs
ZSBhbnkgd3JpdGVzIHRvIHRoZSBhbHBoYSBjaGFubmVsCisgICAgZ2wuY29sb3JNYXNrKDEsIDEs
IDEsIDApOworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIC8vIEJp
bmQgdGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0IDAKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBTZXQgdXAgdGV4dHVyZSBwYXJhbWV0ZXJzCisg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIs
IGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVY
VFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGlu
dG8gdGhlIHRleHR1cmUKKyAgICBpZiAodXNlVGV4U3ViSW1hZ2UyRCkgeworICAgICAgICAvLyBJ
bml0aWFsaXplIHRoZSB0ZXh0dXJlIHRvIGJsYWNrIGZpcnN0CisgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAw
LAorICAgICAgICAgICAgICAgICAgICAgIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwp
OworICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIGltYWdl
LCBmbGlwWSwgZmFsc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wu
VEVYVFVSRV8yRCwgMCwgaW1hZ2UsIGZsaXBZLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gUG9p
bnQgdGhlIHVuaWZvcm0gc2FtcGxlciB0byB0ZXh0dXJlIHVuaXQgMAorICAgIGdsLnVuaWZvcm0x
aSh0ZXh0dXJlTG9jLCAwKTsKKyAgICAvLyBEcmF3IHRoZSB0cmlhbmdsZXMKKyAgICBnbC5kcmF3
QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisKKyAgICAvLyBSZWFkIGJhY2sgdGhlIHJlbmRl
cmluZyByZXN1bHRzCisgICAgdmFyIHdpZHRoID0gMzI7CisgICAgdmFyIGhlaWdodCA9IDMyOwor
ICAgIGJ1ZiA9IGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSk7CisgICAgLy8gQ2hlY2sgYSBmZXcgcGl4ZWxzIG5lYXIgdGhlIHRvcCBh
bmQgYm90dG9tIGFuZCBtYWtlIHN1cmUgdGhleSBoYXZlCisgICAgLy8gdGhlIHJpZ2h0IGNvbG9y
LgorICAgIHZhciBxdWVyeVdpZHRoID0gMjsKKyAgICB2YXIgcXVlcnlIZWlnaHQgPSAyOworICAg
IGRlYnVnKCJDaGVja2luZyBsb3dlciBsZWZ0IGNvcm5lciIpOworICAgIHZhciB4b2ZmID0gNDsK
KyAgICB2YXIgeW9mZiA9IDQ7CisgICAgY29ycmVjdENvbG9yID0gYm90dG9tQ29sb3I7CisgICAg
Zm9yICh2YXIgeSA9IDA7IHkgPCBxdWVyeUhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAodmFy
IHggPSAwOyB4IDwgcXVlcnlXaWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpZHggPSAoKHlvZmYg
KyB5KSAqIHdpZHRoICogNCArCisgICAgICAgICAgICAgICAgICAgKHhvZmYgKyB4KSAqIDQpOwor
ICAgICAgICAgICAgcGl4ZWxbMF0gPSBidWZbaWR4XTsKKyAgICAgICAgICAgIHBpeGVsWzFdID0g
YnVmW2lkeCArIDFdOworICAgICAgICAgICAgcGl4ZWxbMl0gPSBidWZbaWR4ICsgMl07CisgICAg
ICAgICAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZGVidWcoIkNoZWNraW5nIHVwcGVyIGxlZnQgY29ybmVyIik7CisgICAgeW9mZiA9
IGhlaWdodCAtIDg7CisgICAgY29ycmVjdENvbG9yID0gdG9wQ29sb3I7CisgICAgZm9yICh2YXIg
eSA9IDA7IHkgPCBxdWVyeUhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4
IDwgcXVlcnlXaWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpZHggPSAoKHlvZmYgKyB5KSAqIHdp
ZHRoICogNCArCisgICAgICAgICAgICAgICAgICAgKHhvZmYgKyB4KSAqIDQpOworICAgICAgICAg
ICAgcGl4ZWxbMF0gPSBidWZbaWR4XTsKKyAgICAgICAgICAgIHBpeGVsWzFdID0gYnVmW2lkeCAr
IDFdOworICAgICAgICAgICAgcGl4ZWxbMl0gPSBidWZbaWR4ICsgMl07CisgICAgICAgICAgICBz
aG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QoaW1hZ2UpCit7CisgICAgdmFyIHJlZCA9IFsyNTUsIDAsIDBdOwor
ICAgIHZhciBncmVlbiA9IFswLCAyNTUsIDBdOworICAgIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwg
ZmFsc2UsIHRydWUsIHJlZCwgZ3JlZW4pOworICAgIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgZmFs
c2UsIGZhbHNlLCBncmVlbiwgcmVkKTsKKyAgICBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIHRydWUs
IHRydWUsIHJlZCwgZ3JlZW4pOworICAgIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgdHJ1ZSwgZmFs
c2UsIGdyZWVuLCByZWQpOworCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICB2
YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICBlcGls
b2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBpbG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBp
bG9ndWUpOworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+
Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4Ij48L2NhbnZh
cz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
cmVzb3VyY2VzL3JlZC1ncmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzL3JlZC1ncmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlw
ZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFBRUFBQUFDQ0FJQUFBQVc0eUZ3QUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2
OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3
bkxwUlBBQUFBQTVKUkVGVQpHRmRqK004QUJQOFpBQWovQWY4MjBxZ1lBQUFBQUVsRlRrU3VRbUND
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48685</attachid>
            <date>2010-02-12 17:53:47 -0800</date>
            <delta_ts>2010-02-12 18:39:54 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>textures.patch</filename>
            <type>text/plain</type>
            <size>51777</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBj
b21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3
aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBj
b21tb24gZW50cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGlt
bWVkaWF0ZWx5IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAg
LSBDaHJvbWl1bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgor
ICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4
SW1hZ2UyRCBvcgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAg
ICAgICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIg
dG8gdGV4SW1hZ2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2Uu
CisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1h
Z2UyRCBhbmQKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4g
VGhlIHByZW11bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVk
IHlldCBhcyB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBs
aWFudC4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBS
YW4gYWxsIFdlYkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9t
aXVtOworICAgICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBi
cm93c2VycywgYW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBk
ZW1vIG5vdyBsb29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByb2Nlc3NJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVubXVsdGlwbHlBbHBoYSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorCiAyMDEwLTAyLTExICBEYXJpbiBGaXNoZXIg
IDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDU0NzQ1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzYsNiArMTk3Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GbG9hdFNpemVDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCcsCkBAIC0yMTM5LDYgKzIxNDAsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwJywKQEAgLTIyNzYsNiArMjI3OCw3IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDU0NzQ1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtOTU5LDYgKzk1OSw3IEBACiAgICAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcCcsCisgICAgICAgICAgICAnLi4vcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwJywKICAgICAgICAgICAg
ICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwJywKICAg
ICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAn
LAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcs
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNTQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI0MSw2ICsxMjQxLDggQEAKIAkJNjVERjMyM0MwOUQxREU2NTAw
MEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVERjMyMzYwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0
dGVybi5oICovOyB9OwogCQk2NURGMzI2MTA5RDFFMTk5MDAwQkUzMjUgLyogVXNlckFnZW50U3R5
bGVTaGVldHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0Rh
dGEuY3BwICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CisJCTZFMjFDNkMwMTEyNjMzODUwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0QuY3BwICovOyB9OworCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAg
Ki87IH07CiAJCTZFNDdFNjYwMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0N0U2NUUxMEI3
OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5mby5jcHAgKi87IH07CiAJCTZFNDdFNjYxMTBCNzk0
NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldElu
Zm8uaCAqLzsgfTsKIAkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRB
dHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNEU5MUE3MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5j
cHAgKi87IH07CkBAIC02NjUzLDYgKzY2NTUsOCBAQAogCQk2NURGMzIzNjA5RDFERTY1MDAwQkUz
MjUgLyogSlNDYW52YXNQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NhbnZhc1BhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVGODA2
OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJsb2NrRXhjZXB0aW9u
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM2QzExMTI2MzM5OTAwQTdC
RTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFNDdFNjVFMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xHZXRJbmZvLmNwcDsgcGF0
aCA9IGNhbnZhcy9XZWJHTEdldEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RTQ3RTY1RjEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMR2V0SW5mby5oOyBwYXRoID0gY2FudmFzL1dlYkdM
R2V0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBNzEwRjdGQjMx
MDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0MzIwLDYgKzE0MzI0LDcgQEAKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdy
YWRpZW50Q0cuY3BwICovLAorCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGlj
c0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4
RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKQEAgLTE0NDM1LDYgKzE0NDQwLDcg
QEAKIAkJCQlCQzUzQzVGNDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCAqLywKIAkJCQlC
MkEwMTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlC
MkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCisJCQkJNkUy
MUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLywKIAkJCQk0
OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLywKIAkJCQlB
ODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oICovLAog
CQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKQEAg
LTIwNzA3LDYgKzIwNzEzLDggQEAKIAkJCQlCQ0U3ODk4QjExMjBFODAyMDA2MEVDRTUgLyogQmlk
aVJ1bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RjZGQzE5NjExMjJFODJBMDBFODAxOTYgLyog
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZGRjE3RTMxMTIzNTY3
MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFMjFD
NkMwMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkltYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFj
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGludGVybmFs
Rm9ybWF0KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
bHBoYU9wIGFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAgYm9vbCBoYXNBbHBoYUNoYW5u
ZWwgPSB0cnVlOworICAgIGlmICghZ2V0SW1hZ2VEYXRhKGltYWdlLCBpbWFnZURhdGEsIHByZW11
bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgJmhhc0FscGhhQ2hhbm5lbCwgJmFs
cGhhT3AsIGZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwcm9jZXNzSW1hZ2VE
YXRhKGltYWdlRGF0YS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgYWxwaGFPcCk7CisgICAgKmludGVy
bmFsRm9ybWF0ID0gKGhhc0FscGhhQ2hhbm5lbCA/IFJHQkEgOiBSR0IpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4
X3QqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwVmVydGljYWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKQoreworICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAg
IGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAgcHJlbXVsdGlwbHlBbHBoYShpbWFn
ZURhdGEsIHdpZHRoICogaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQWxwaGFE
b1VubXVsdGlwbHk6CisgICAgICAgIHVubXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICog
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKGZsaXBWZXJ0aWNhbGx5ICYmIHdpZHRoICYmIGhlaWdodCkgeworICAg
ICAgICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgICAgIHVpbnQ4X3QqIHRlbXBSb3cg
PSBuZXcgdWludDhfdFtyb3dCeXRlc107CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBoZWlnaHQgLyAyOyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGxvd1JvdyA9IGltYWdl
RGF0YSArIChyb3dCeXRlcyAqIGkpOworICAgICAgICAgICAgdWludDhfdCogaGlnaFJvdyA9IGlt
YWdlRGF0YSArIChyb3dCeXRlcyAqIChoZWlnaHQgLSBpIC0gMSkpOworICAgICAgICAgICAgbWVt
Y3B5KHRlbXBSb3csIGxvd1Jvdywgcm93Qnl0ZXMpOworICAgICAgICAgICAgbWVtY3B5KGxvd1Jv
dywgaGlnaFJvdywgcm93Qnl0ZXMpOworICAgICAgICAgICAgbWVtY3B5KGhpZ2hSb3csIHRlbXBS
b3csIHJvd0J5dGVzKTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSB0ZW1wUm93OworICAg
IH0KK30KKworLy8gUHJlbXVsdGlwbHkgYWxwaGEgaW50byBjb2xvciBjaGFubmVscy4KK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZW11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURh
dGEsIGludCBudW1QaXhlbHMpCit7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1QaXhlbHM7
IGorKykgeworICAgICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzBdIC8gMjU1LjBmOworICAg
ICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpqKzFdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBi
ID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBhID0gcmdiYURhdGFb
NCpqKzNdIC8gMjU1LjBmOworICAgICAgICByZ2JhRGF0YVs0KmorMF0gPSAodW5zaWduZWQgY2hh
cikgKHIgKiBhICogMjU1LjBmKTsKKyAgICAgICAgcmdiYURhdGFbNCpqKzFdID0gKHVuc2lnbmVk
IGNoYXIpIChnICogYSAqIDI1NS4wZik7CisgICAgICAgIHJnYmFEYXRhWzQqaisyXSA9ICh1bnNp
Z25lZCBjaGFyKSAoYiAqIGEgKiAyNTUuMGYpOworICAgIH0KK30KKworLy8gUmVtb3ZlIHByZW11
bHRpcGxpZWQgYWxwaGEgZnJvbSBjb2xvciBjaGFubmVscy4KKy8vIEZJWE1FOiB0aGlzIGlzIGxv
c3N5LiBNdXN0IHJldHJpZXZlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIEhUTUxJbWFnZUVsZW1lbnQu
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bm11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciog
cmdiYURhdGEsIGludCBudW1QaXhlbHMpCit7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Q
aXhlbHM7IGorKykgeworICAgICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzBdIC8gMjU1LjBm
OworICAgICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpqKzFdIC8gMjU1LjBmOworICAgICAgICBm
bG9hdCBiID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBhID0gcmdi
YURhdGFbNCpqKzNdIC8gMjU1LjBmOworICAgICAgICBpZiAoYSA+IDAuMGYpIHsKKyAgICAgICAg
ICAgIHIgLz0gYTsKKyAgICAgICAgICAgIGcgLz0gYTsKKyAgICAgICAgICAgIGIgLz0gYTsKKyAg
ICAgICAgICAgIHIgPSAociA+IDEuMGYpID8gMS4wZiA6IHI7CisgICAgICAgICAgICBnID0gKGcg
PiAxLjBmKSA/IDEuMGYgOiBnOworICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAxLjBmIDog
YjsKKyAgICAgICAgICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIDI1
NS4wZik7CisgICAgICAgICAgICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcg
KiAyNTUuMGYpOworICAgICAgICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIp
IChiICogMjU1LjBmKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDU0NzQ1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MTksNiArNDE5LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
bGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAgICAgICAgIGludCBzaXplSW5CeXRlcyhpbnQg
dHlwZSk7CiAKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIEhlbHBlcnMgZm9y
IHRleHR1cmUgdXBsb2FkaW5nLgorICAgICAgICAvLworCisgICAgICAgIC8vIEV4dHJhY3RzIHRo
ZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2UgaW50byB0aGUgcGFzc2VkCisgICAgICAgIC8v
IFZlY3Rvciwgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGxpY2FibGUgT3BlbkdMIGZvcm1hdCBhbmQgaW50ZXJu
YWxGb3JtYXQgZm9yCisgICAgICAgIC8vIHRoZSBzdWJzZXF1ZW50IGdsVGV4SW1hZ2UyRCBvciBn
bFRleFN1YkltYWdlMkQgY2FsbC4KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vz
cy4KKyAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4mIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZvcm1hdCk7CisKKyAgICAgICAgLy8gUHJvY2Vzc2Vz
IHRoZSBnaXZlbiBpbWFnZSBkYXRhIGluIHByZXBhcmF0aW9uIGZvciB1cGxvYWRpbmcKKyAgICAg
ICAgLy8gdmlhIHRleEltYWdlMkQgb3IgdGV4U3ViSW1hZ2UyRC4gVGhlIG9wZXJhdGlvbnMgdGhh
dCBhcmUKKyAgICAgICAgLy8gaW1wbGVtZW50ZWQgYXJlOgorICAgICAgICAvLyAgIC0gRmxpcCB2
ZXJ0aWNhbGx5IChmbGlwWSBhcmd1bWVudCB0byB0aGVzZSBtZXRob2RzKQorICAgICAgICAvLyAg
IC0gUGFzcyB0aHJvdWdoIHRoZSBhbHBoYSBjaGFubmVsIHVubW9kaWZpZWQKKyAgICAgICAgLy8g
ICAgIChrQWxwaGFEb05vdGhpbmcpCisgICAgICAgIC8vICAgLSBNdWx0aXBseSBhbHBoYSBjaGFu
bmVsIGludG8gY29sb3IgY2hhbm5lbHMKKyAgICAgICAgLy8gICAgIChrQWxwaGFEb1ByZW11bHRp
cGx5KQorICAgICAgICAvLyAgIC0gRGl2aWRlIHRoZSBjb2xvciBjaGFubmVscyBieSB0aGUgYWxw
aGEgY2hhbm5lbAorICAgICAgICAvLyAgICAgKGtBbHBoYURvVW5tdWx0aXBseSkKKyAgICAgICAg
Ly8gICAgIC0gTk9URTogdGhpcyBvcGVyYXRpb24gaXMgbG9zc3kgYW5kLCBhY2NvcmRpbmcgdG8g
dGhlCisgICAgICAgIC8vICAgICAgIFdlYkdMIHNwZWNpZmljYXRpb24sIG5vdCB2YWxpZC4gVGhl
IGxvZ2ljIGlzIGJlaW5nCisgICAgICAgIC8vICAgICAgIGluY29ycG9yYXRlZCBvbmx5IGFzIGEg
c3RvcGdhcCBtZWFzdXJlIHVudGlsIGFsbAorICAgICAgICAvLyAgICAgICBwbGF0Zm9ybXMgaGFu
ZGxlIGNvcnJlY3RseSB0aGUgbG9hZGluZyBvZiBpbWFnZXMKKyAgICAgICAgLy8gICAgICAgd2l0
aG91dCBwcmVtdWx0aXBseWluZyB0aGUgYWxwaGEgY2hhbm5lbCBpbnRvIHRoZQorICAgICAgICAv
LyAgICAgICBjb2xvciBjaGFubmVscy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIGlucHV0
IGRhdGEgbXVzdCBiZSBpbiA0LWNvbXBvbmVudCBmb3JtYXQgd2l0aCB0aGUgYWxwaGEKKyAgICAg
ICAgLy8gY2hhbm5lbCBsYXN0IChpLmUuLCBSR0JBIG9yIEJHUkEpLCB0aWdodGx5IHBhY2tlZCwg
d2l0aCBubworICAgICAgICAvLyBzcGFjZSBiZXR3ZWVuIHJvd3MuCisKKyAgICAgICAgZW51bSBB
bHBoYU9wIHsKKyAgICAgICAgICAgIGtBbHBoYURvTm90aGluZyA9IDAsCisgICAgICAgICAgICBr
QWxwaGFEb1ByZW11bHRpcGx5ID0gMSwKKyAgICAgICAgICAgIGtBbHBoYURvVW5tdWx0aXBseSA9
IDIKKyAgICAgICAgfTsKKworICAgICAgICB2b2lkIHByb2Nlc3NJbWFnZURhdGEodWludDhfdCog
aW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNhbGx5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKTsKKworICAgICAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KKyAgICAgICAgLy8KKwog
ICAgICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKICAgICAg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciog
c2hhZGVyKTsKICAgICAgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwg
dW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTYyNCw2ICs2Nzcs
MzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6ICAgICAgICAKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycyk7CiAKKyAgICAgICAgLy8gSGVscGVy
cyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcuCisgICAgICAgIHZvaWQgcHJlbXVsdGlwbHlBbHBoYSh1
bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscyk7CisgICAgICAgIHZvaWQgdW5t
dWx0aXBseUFscGhhKHVpbnQ4X3QqIGltYWdlRGF0YSwgaW50IG51bVBpeGVscyk7CisKKyAgICAg
ICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhp
cyBtZXRob2QuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdldHMgdGhlIGRhdGEgZm9yIHRoZSBn
aXZlbiBJbWFnZSBpbnRvIG91dHB1dFZlY3RvciwKKyAgICAgICAgLy8gd2l0aG91dCBkb2luZyBh
bnkgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSAodmVydGljYWwgZmxpcCBvcgorICAgICAgICAvLyBv
dGhlcndpc2UpLgorICAgICAgICAvLworICAgICAgICAvLyBwcmVtdWx0aXBseUFscGhhIGluZGlj
YXRlcyB3aGV0aGVyIHRoZSB1c2VyIHdpbGwgZXZlbnR1YWxseQorICAgICAgICAvLyB3YW50IHRo
ZSBhbHBoYSBjaGFubmVsIG11bHRpcGxpZWQgaW50byB0aGUgY29sb3IgY2hhbm5lbHMuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIGhhc0FscGhhQ2hhbm5lbCBpbmRp
Y2F0ZXMgd2hldGhlciB0aGUKKyAgICAgICAgLy8gaW1hZ2UgYWN0dWFsbHkgaGFkIGFuIGFscGhh
IGNoYW5uZWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIG5lZWRl
ZEFscGhhT3Agc2hvdWxkIGJlIHBhc3NlZCB0byBhCisgICAgICAgIC8vIHN1YnNlcXVlbnQgY2Fs
bCBvZiBwcm9jZXNzSW1hZ2VEYXRhIHRvIHByb2Nlc3MgdGhlIGFscGhhCisgICAgICAgIC8vIGFu
ZCBjb2xvciBjaGFubmVscyBhcyBuZWVkZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBv
dXQgcGFyYW1ldGVyIGZvcm1hdCBzaG91bGQgYmUgcGFzc2VkIHRvIHN1YnNlcXVlbnQKKyAgICAg
ICAgLy8gaW52b2NhdGlvbnMgb2YgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRC4KKyAgICAg
ICAgYm9vbCBnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sKiBoYXNBbHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3Aq
IG5lZWRlZEFscGhhT3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCog
Zm9ybWF0KTsKKwogICAgICAgICBpbnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsK
ICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJ
bWFnZS5oPgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVj
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBoYXNB
bHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFP
cCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQqIGZvcm1hdCkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOworICAgIGludCBoZWlnaHQg
PSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOworICAgIGludCByb3dCeXRlcyA9IHdpZHRoICog
NDsKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1h
Z2UpOworICAgICpoYXNBbHBoYUNoYW5uZWwgPSAoaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZQor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25l
U2tpcEZpcnN0KTsKKyAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgKmhhc0FscGhhQ2hhbm5l
bCkKKyAgICAgICAgLy8gRklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRo
ZSBwcmVtdWx0aXBsaWNhdGlvbiBzdGVwCisgICAgICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhh
RG9Vbm11bHRpcGx5OworICAgICpmb3JtYXQgPSBSR0JBOworICAgIG91dHB1dFZlY3Rvci5yZXNp
emUoaGVpZ2h0ICogcm93Qnl0ZXMpOworICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3Bh
Y2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2VydmUgaXRzIGNvbG9ycy4KKyAgICAvLyBTb21lIGlt
YWdlcyB1c2UgYSBjb2xvciBzcGFjZSAoc3VjaCBhcyBpbmRleGVkKSB1bnN1cHBvcnRlZCBieSB0
aGUgYml0bWFwIGNvbnRleHQuCisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0lt
YWdlR2V0Q29sb3JTcGFjZShjZ0ltYWdlKTsKKyAgICBib29sIHJlbGVhc2VDb2xvclNwYWNlID0g
ZmFsc2U7CisgICAgQ0dDb2xvclNwYWNlTW9kZWwgY29sb3JTcGFjZU1vZGVsID0gQ0dDb2xvclNw
YWNlR2V0TW9kZWwoY29sb3JTcGFjZSk7CisgICAgc3dpdGNoIChjb2xvclNwYWNlTW9kZWwpIHsK
KyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbE1vbm9jaHJvbWU6CisgICAgY2FzZSBrQ0dDb2xv
clNwYWNlTW9kZWxSR0I6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxDTVlLOgorICAgIGNh
c2Uga0NHQ29sb3JTcGFjZU1vZGVsTGFiOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsRGV2
aWNlTjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29sb3JTcGFjZSA9
IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFy
KTsKKyAgICAgICAgcmVsZWFzZUNvbG9yU3BhY2UgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgQ0dDb250ZXh0UmVmIHRtcENvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUo
b3V0cHV0VmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgaWYgKHJlbGVhc2VDb2xvclNwYWNlKQorICAg
ICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworICAgIGlmICghdG1wQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0bXBD
b250ZXh0LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UodG1wQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2Fz
dDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICBjZ0ltYWdlKTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKHRtcENvbnRl
eHQpOworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1
NDc0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyNiwzMSArMTEyNiw2IEBAIGxvbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk8KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxsb25nPihwb2ludGVyKTsKIH0KIAotLy8gUmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVk
IGJ5IGZhc3RGcmVlKCkKLXN0YXRpYyBib29sIGltYWdlVG9UZXh0dXJlKEltYWdlKiBpbWFnZSwg
R0x1Ynl0ZSomIGJ1ZmZlciwgc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCi17Ci0gICAg
aWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIENHSW1hZ2VSZWYg
dGV4dHVyZUltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBpZiAoIXRleHR1cmVJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKHRleHR1cmVJbWFnZSk7Ci0gICAgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodCh0ZXh0
dXJlSW1hZ2UpOwotICAgIAotICAgIGJ1ZmZlciA9IChHTHVieXRlKikgZmFzdE1hbGxvYyh3aWR0
aCAqIGhlaWdodCAqIDQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgIENHQ29udGV4dFJlZiB0ZXh0dXJlQ29udGV4dCA9IENHQml0bWFwQ29u
dGV4dENyZWF0ZShidWZmZXIsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSW1hZ2VH
ZXRDb2xvclNwYWNlKHRleHR1cmVJbWFnZSksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHRleHR1cmVDb250ZXh0LCBrQ0dCbGVuZE1v
ZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UodGV4dHVyZUNvbnRleHQsIENHUmVjdE1h
a2UoMCwgMCwgKENHRmxvYXQpd2lkdGgsIChDR0Zsb2F0KWhlaWdodCksIHRleHR1cmVJbWFnZSk7
Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0ZXh0dXJlQ29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIHZvaWQqIHBpeGVscykKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBkbyBib3Vu
ZHMgY2hlY2tpbmcgb24gdGhlIGJ1ZmZlciBoZXJlLgpAQCAtMTE2MCwyMCArMTEzNSwxMiBAQCBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduCiAKIGludCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFn
ZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICAvLyBG
SVhNRTogbmVlZCB0byBzdXBwb3J0IGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCi0gICAgVU5V
U0VEX1BBUkFNKGZsaXBZKTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0g
ICAgQVNTRVJUKGltYWdlKTsKLSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci0gICAgR0x1Ynl0ZSogYnVmZmVyOwotICAgIHNpemVfdCB3aWR0aDsKLSAgICBzaXplX3QgaGVp
Z2h0OwotICAgIGlmICghaW1hZ2VUb1RleHR1cmUoaW1hZ2UsIGJ1ZmZlciwgd2lkdGgsIGhlaWdo
dCkpCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9y
bWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZs
aXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1h
dCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBidWZmZXIpOwotICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIDAsIGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAgICAgCkBAIC0xMTg4LDIwICsxMTU1LDEyIEBAIGludCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zm
LCB1bnNpZ25lZCB5b2ZmLCBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSkKIHsKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhl
bFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVy
IGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0IGZs
aXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCi0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICBV
TlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgR0x1Ynl0ZSogYnVmZmVyOwot
ICAgIHNpemVfdCB3aWR0aDsKLSAgICBzaXplX3QgaGVpZ2h0OwotICAgIGlmICghaW1hZ2VUb1Rl
eHR1cmUoaW1hZ2UsIGJ1ZmZlciwgd2lkdGgsIGhlaWdodCkpCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAg
ICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBp
bWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsK
LSAgICAKLSAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3
aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBidWZmZXIpOwotICAgIGZh
c3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dDNEU2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZB
UykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRW
ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0
aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGhh
c0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBo
YU9wKiBuZWVkZWRBbHBoYU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCogZm9ybWF0KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghc2tpYUltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUltYWdlLT5j
b25maWcoKTsKKyAgICAvLyBGSVhNRTogbXVzdCBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJh
dGlvbnMuCisgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFnZVJlZiA9ICpz
a2lhSW1hZ2U7CisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7CisgICAg
aW50IHdpZHRoID0gc2tpYUltYWdlLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBza2lhSW1h
Z2UtPmhlaWdodCgpOworICAgIGludCByb3dCeXRlcyA9IHNraWFJbWFnZS0+cm93Qnl0ZXMoKTsK
KyAgICBBU1NFUlQocm93Qnl0ZXMgPT0gd2lkdGggKiA0KTsKKyAgICB1aW50OF90KiBwaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKKyAg
ICBvdXRwdXRWZWN0b3IucmVzaXplKHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICBtZW1jcHkob3V0
cHV0VmVjdG9yLmRhdGEoKSwgcGl4ZWxzLCByb3dCeXRlcyAqIGhlaWdodCk7CisgICAgKmhhc0Fs
cGhhQ2hhbm5lbCA9IHRydWU7CisgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAv
LyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxp
Y2F0aW9uIHN0ZXAKKyAgICAgICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7
CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gZGVza3RvcCBPcGVuR0wK
KyAgICAqZm9ybWF0ID0gMHg4MEUxOyAvLyBHTF9CR1JBCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzQ1KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEwLTAyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJE
IHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4CisKKyAgICAgICAgTWVyZ2VkIHRoZSBTYWZh
cmkgYW5kIENocm9taXVtIGNvZGUgd2hpY2ggZXh0cmFjdHMgdGhlIGRhdGEgZnJvbQorICAgICAg
ICBJbWFnZSBvYmplY3RzIGludG8gY29tbW9uIGVudHJ5IHBvaW50cyBvbiBHcmFwaGljc0NvbnRl
eHQzRC4gVGhpcworICAgICAgICBpbW1lZGlhdGVseSBmaXhlcyB0aGUgZm9sbG93aW5nIHRocmVl
IHByb2JsZW1zOgorICAgICAgICAgIC0gQ2hyb21pdW0gbm90IGltcGxlbWVudGluZyB0ZXhTdWJJ
bWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0aGUg
ZmxpcFkgcGFyYW1ldGVyIHRvIHRleEltYWdlMkQgb3IKKyAgICAgICAgICAgIHRleFN1YkltYWdl
MkQgdGFraW5nIEltYWdlLgorICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBwcmVt
dWx0aXB5QWxwaGEgcGFyYW1ldGVyIHRvIHRleEltYWdlMkQKKyAgICAgICAgICAgIG9yIHRleFN1
YkltYWdlMkQgdGFraW5nIEltYWdlLgorICAgICAgICBBZGRlZCBuZXcgdGVzdCB2ZXJpZnlpbmcg
dGhlIGJlaGF2aW9yIG9mIHRleEltYWdlMkQgYW5kCisgICAgICAgIHRleFN1YkltYWdlMkQgYW5k
IHRoZSBmbGlwWSBwYXJhbWV0ZXIuIFRoZSBwcmVtdWx0aXBseUFscGhhCisgICAgICAgIHBhcmFt
ZXRlciBjYW4gbm90IGJlIHRlc3RlZCB5ZXQgYXMgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB5
ZXQKKyAgICAgICAgc3BlYyBjb21wbGlhbnQuIFRoaXMgd2lsbCBiZSBmaXhlZCBpbiBhIGZvbGxv
dy1vbiBidWcuCisKKyAgICAgICAgUmFuIGFsbCBXZWJHTCBkZW1vcyBpbiBkZW1vIHJlcG9zaXRv
cnkgb24gU2FmYXJpIGFuZCBDaHJvbWl1bTsKKyAgICAgICAgdGV4dHVyZXMgYXJlIG5vdyB0aGUg
cmlnaHQgd2F5IHVwIGluIGJvdGggYnJvd3NlcnMsIGFuZAorICAgICAgICB0cmFuc3BhcmVudCB0
ZXh0dXJlcyBpbiBQYXJ0aWNsZXMgZGVtbyBub3cgbG9vayBjb3JyZWN0IGluIFNhZmFyaS4KKwor
ICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisKIDIwMTAtMDItMTEgIERhcmluIEZpc2hlciAg
PGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNp
b24gNTQ3NDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMTcgKzY1LDEyIEBACiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KICNl
bHNlCiAjZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KICNp
ZiBPUyhEQVJXSU4pCiAjZGVmaW5lIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZG
RVIKICNlbmRpZgpAQCAtMTg3OCwxNzggKzE4NzMsMTcgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHJldHVybiAwOwogfQogCi0vLyBSZW1vdmUgcHJlbXVs
dGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgotLy8gRklYTUU6IHRoaXMgaXMgbG9z
c3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdlRWxlbWVudC4K
LXN0YXRpYyB2b2lkIHVubXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50
IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsgaisrKSB7
Ci0gICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0gICAgICAgIGZs
b2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2Jh
RGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0KmorM10g
LyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewotICAgICAgICAgICAgYiAvPSBhOwot
ICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgciAvPSBhOwotICAgICAgICAgICAgYiA9
IChiID4gMS4wZikgPyAxLjBmIDogYjsKLSAgICAgICAgICAgIGcgPSAoZyA+IDEuMGYpID8gMS4w
ZiA6IGc7Ci0gICAgICAgICAgICByID0gKHIgPiAxLjBmKSA/IDEuMGYgOiByOwotICAgICAgICAg
ICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIpIChiICogMjU1LjBmKTsKLSAgICAg
ICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAqIDI1NS4wZik7Ci0g
ICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikgKHIgKiAyNTUuMGYp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBGSVhNRTogdGhpcyBtdXN0IGJlIGNoYW5nZWQg
dG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGltYWdlIGRhdGEKLS8vIHJhdGhlciB0aGFuIHVubXVs
dGlwbHlpbmcgdGhlIGFscGhhIGNoYW5uZWwuCi1zdGF0aWMgaW50IHRleEltYWdlMkRIZWxwZXIo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBza2lwQWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIEFTU0VSVChmb3JtYXQgPT0gR0xfUkdCQSB8fCBm
b3JtYXQgPT0gR0xfQkdSQSk7Ci0gICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBODsK
LSAgICBpZiAoc2tpcEFscGhhKSB7Ci0gICAgICAgIGludGVybmFsRm9ybWF0ID0gR0xfUkdCODsK
LSAgICAgICAgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsCi0gICAgICAgIHByZW11bHRpcGx5
QWxwaGEgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgLy8gTmVlZCB0
byBmbGlwIGltYWdlcyB2ZXJ0aWNhbGx5LiBUbyBhdm9pZCBtYWtpbmcgYSBjb3B5IG9mCi0gICAg
ICAgIC8vIHRoZSBlbnRpcmUgaW1hZ2UsIHdlIHBlcmZvcm0gYSB0b24gb2YgZ2xUZXhTdWJJbWFn
ZTJECi0gICAgICAgIC8vIGNhbGxzLiBGSVhNRTogc2hvdWxkIHJldGhpbmsgdGhpcyBzdHJhdGVn
eSBmb3IgZWZmaWNpZW5jeS4KLSAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAg
ICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSAwOwot
ICAgICAgICBib29sIGFsbG9jYXRlZFJvdyA9IGZhbHNlOwotICAgICAgICBpZiAoIXByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgIHJvdyA9IG5ldyB1bnNpZ25lZCBjaGFyW3Jvd0J5dGVz
XTsKLSAgICAgICAgICAgIGFsbG9jYXRlZFJvdyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICAgICAgcm93ID0gcGl4ZWxzICsgKHJvd0J5dGVzICog
aSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkocm93LCBwaXhl
bHMgKyAocm93Qnl0ZXMgKiBpKSwgcm93Qnl0ZXMpOwotICAgICAgICAgICAgICAgIHVubXVsdGlw
bHlBbHBoYShyb3csIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBoZWlnaHQgLSBpIC0gMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxv
Y2F0ZWRSb3cpCi0gICAgICAgICAgICBkZWxldGVbXSByb3c7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gVGhlIHBpeGVscyBvZiBjdWJlIG1hcHMnIGZhY2VzIGFyZSBkZWZpbmVkIHdpdGggYSB0
b3AtZG93bgotICAgICAgICAvLyBzY2FubGluZSBvcmRlcmluZywgdW5saWtlIEdMX1RFWFRVUkVf
MkQsIHNvIHdoZW4gdXBsb2FkaW5nCi0gICAgICAgIC8vIHRoZXNlLCB0aGUgYWJvdmUgdmVydGlj
YWwgZmxpcCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gZG8uCi0gICAgICAgIGlmIChwcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbcm93Qnl0ZXNdOwotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgICAgIG1lbWNw
eShyb3csIHBpeGVscyArIChyb3dCeXRlcyAqIGkpLCByb3dCeXRlcyk7Ci0gICAgICAgICAgICAg
ICAgdW5tdWx0aXBseUFscGhhKHJvdywgd2lkdGgpOwotICAgICAgICAgICAgICAgIGdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVsZXRlW10gcm93OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBBU1NFUlQoaW1hZ2Up
OwotCi0gICAgaW50IHJlcyA9IC0xOwotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgTmF0aXZlSW1h
Z2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIXNraWFJbWFnZSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcg
PSBza2lhSW1hZ2UtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQgbW9yZSBp
bWFnZSBjb25maWd1cmF0aW9ucy4KLSAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5h
bEZvcm1hdDsKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0
aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAg
IHJldHVybiAtMTsKLSAgICB9Ci0gICAgU2tCaXRtYXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1h
Z2U7Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7Ci0gICAgaW50IHdp
ZHRoID0gc2tpYUltYWdlLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBza2lhSW1hZ2UtPmhl
aWdodCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9Ci0gICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNraWFJbWFnZS0+Z2V0UGl4ZWxzKCkpOwotICAgIGludCBy
b3dCeXRlcyA9IHNraWFJbWFnZS0+cm93Qnl0ZXMoKTsKLSAgICByZXMgPSB0ZXhJbWFnZTJESGVs
cGVyKHRhcmdldCwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Qnl0ZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0JHUkEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAg
ICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKLSAgICBpZiAoIWNnSW1hZ2UpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRo
KGNnSW1hZ2UpOwotICAgIGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwot
ICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8g
PSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpOwotICAgIGJvb2wgc2tpcEFscGhhID0gKGlu
Zm8gPT0ga0NHSW1hZ2VBbHBoYU5vbmUKLSAgICAgICAgICAgICAgICAgICB8fCBpbmZvID09IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3QKLSAgICAgICAgICAgICAgICAgICB8fCBpbmZvID09IGtD
R0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KTsKLSAgICB1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEg
PSBuZXcgdW5zaWduZWQgY2hhcltoZWlnaHQgKiByb3dCeXRlc107Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
R2VuZXJpY1JHQik7Ci0gICAgQ0dDb250ZXh0UmVmIHRtcENvbnRleHQgPSBDR0JpdG1hcENvbnRl
eHRDcmVhdGUoaW1hZ2VEYXRhLCB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xv
clNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodG1wQ29udGV4dCwga0NHQmxlbmRN
b2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRtcENvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4od2lkdGgp
LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
Y2dJbWFnZSk7Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0bXBDb250ZXh0KTsKLSAgICByZXMgPSB0
ZXhJbWFnZTJESGVscGVyKHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIEdMX1JH
QkEsIHNraXBBbHBoYSwgaW1hZ2VEYXRhKTsKLSAgICBkZWxldGVbXSBpbWFnZURhdGE7Ci0jZWxz
ZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLSAgICByZXR1cm4g
cmVzOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKKyAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsK
KyAgICByZXR1cm4gMDsKIH0KIAogR0xfU0FNRV9NRVRIT0RfMyhUZXhQYXJhbWV0ZXJmLCB0ZXhQ
YXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KTsKQEAgLTIwNzgsOSArMTkxMiwx
NCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAtMTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGlu
dGVybmFsRm9ybWF0OworICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGltYWdlRGF0YS5kYXRhKCkpOworICAgIHJldHVybiAwOwogfQogCiBHTF9TQU1FX01FVEhPRF8y
KFVuaWZvcm0xZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0
NzQ1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzEgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRl
eEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBjb21tb24gY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTgK
KworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3aGljaCBleHRy
YWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBjb21tb24gZW50
cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGltbWVkaWF0ZWx5
IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAgLSBDaHJvbWl1
bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgorICAgICAgICAg
IC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4SW1hZ2UyRCBv
cgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgICAgLSBT
YWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIgdG8gdGV4SW1h
Z2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAg
IEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1hZ2UyRCBhbmQK
KyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4gVGhlIHByZW11
bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVkIHlldCBhcyB0
aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBsaWFudC4gVGhp
cyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9taXVtOworICAg
ICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBicm93c2Vycywg
YW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBkZW1vIG5vdyBs
b29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVz
b3VyY2VzL3JlZC1ncmVlbi5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0y
ZC13aXRoLWltYWdlLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAyLTEyICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1NDY5NC4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWlt
YWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKK1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJ
bWFnZTJEIGNvZGUgcGF0aHMgdGFraW5nIEltYWdlcywgaW4gcGFydGljdWxhciBmbGlwWSBhcmd1
bWVudAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1JlZ3Jlc3Npb24gdGVzdCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4IDogUmVmYWN0b3Ig
dGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UgdG8gdXNlIGNvbW1vbiBj
b2RlCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT10cnVlCitDaGVja2luZyBsb3dlciBs
ZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3Jy
ZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJl
Y3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVj
dENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyB0ZXhJbWFnZTJEIHdp
dGggZmxpcFk9ZmFsc2UKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlz
IGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMg
Y29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIg
bGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNv
cnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT10cnVlCitDaGVja2lu
ZyBsb3dlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhl
bCBpcyBjb3JyZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVs
IGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyB0ZXhT
dWJJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQ
QVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BB
U1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hl
Y2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNT
IHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1Mg
cGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtaW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTggQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0
eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBnX1Bvc2l0aW9uOworYXR0
cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwordm9p
ZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoZ19Qb3NpdGlvbi54LCBnX1Bvc2l0
aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0ZXhDb29yZCA9IGdfVGV4Q29vcmQwOwor
fQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJh
Z21lbnQiPgordW5pZm9ybSBzYW1wbGVyMkQgdGV4OwordmFyeWluZyB2ZWMyIHRleENvb3JkOwor
Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHRleENv
b3JkKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXh0
dXJlTG9jID0gbnVsbDsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKworZnVuY3Rp
b24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdM
RW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBj
b2RlIHBhdGhzIHRha2luZyBJbWFnZXMsIGluIHBhcnRpY3VsYXIgZmxpcFkgYXJndW1lbnQnKTsK
KworICAgIGRlYnVnKCdSZWdyZXNzaW9uIHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ1OCI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NDU4PC9hPiA6IDxjb2RlPlJlZmFjdG9yIHRleEltYWdlMkQgYW5k
IHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBjb21tb24gY29kZTwvY29kZT4nKTsK
KworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIsIFsg
ImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKyAgICBn
bC52aWV3cG9ydCgwLCAwLCAzMiwgMzIpOworCisgICAgdGV4dHVyZUxvYyA9IGdsLmdldFVuaWZv
cm1Mb2NhdGlvbihnbC5wcm9ncmFtLCAidGV4Iik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcg
V2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4w
LCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgIDEu
MCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAu
MF0pOworICAgIHZhciB0ZXhDb29yZHMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAg
MS4wLCAxLjAsCisgICAgICAgIDAuMCwgMS4wLAorICAgICAgICAwLjAsIDAuMCwKKyAgICAgICAg
MS4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAxLjAsIDAuMF0pOworICAgIHZh
ciB0ZXhDb29yZE9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0g
Z2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZi
byk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgICAgICAgICAg
ICB0ZXhDb29yZE9mZnNldCArIHRleENvb3Jkcy5ieXRlTGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVS
LCAwLCB2ZXJ0aWNlcyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRl
eENvb3JkT2Zmc2V0LCB0ZXhDb29yZHMpOworCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2Us
IDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworICAgIGdsLnZlcnRl
eEF0dHJpYlBvaW50ZXIoMSwgMiwgZ2wuRkxPQVQsIGdsLkZBTFNFLCAwLCB0ZXhDb29yZE9mZnNl
dCk7CisKKyAgICBsb2FkVGV4dHVyZSgicmVzb3VyY2VzL3JlZC1ncmVlbi5wbmciKTsKK30KKwor
ZnVuY3Rpb24gbG9hZFRleHR1cmUoc3JjKSB7CisgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVU
ZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7Cisg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIs
IGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVY
VFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2Uo
KTsKKyAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZ2wuYmluZFRleHR1
cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVY
VFVSRV8yRCwgMCwgaW1hZ2UsIHRydWUpOworICAgICAgICBydW5UZXN0KGltYWdlKTsKKyAgICB9
OworICAgIGltYWdlLnNyYyA9IHNyYzsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKworLy8gVGhl
c2UgdHdvIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGdsb2JhbCBmb3IgInNob3VsZEJlIiB0byBz
ZWUgdGhlbQordmFyIGJ1ZiA9IG51bGw7Cit2YXIgaWR4ID0gMDsKK3ZhciBwaXhlbCA9IFswLCAw
LCAwXTsKK3ZhciBjb3JyZWN0Q29sb3IgPSBudWxsOworCitmdW5jdGlvbiBydW5PbmVJdGVyYXRp
b24oaW1hZ2UsIHVzZVRleFN1YkltYWdlMkQsIGZsaXBZLCB0b3BDb2xvciwgYm90dG9tQ29sb3Ip
Cit7CisgICAgZGVidWcoJ1Rlc3RpbmcgJyArICh1c2VUZXhTdWJJbWFnZTJEID8gJ3RleFN1Yklt
YWdlMkQnIDogJ3RleEltYWdlMkQnKSArCisgICAgICAgICAgJyB3aXRoIGZsaXBZPScgKyBmbGlw
WSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9C
SVQpOworICAgIC8vIERpc2FibGUgYW55IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbAorICAg
IGdsLmNvbG9yTWFzaygxLCAxLCAxLCAwKTsKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRl
eHR1cmUoKTsKKyAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlIHRvIHRleHR1cmUgdW5pdCAwCisgICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgLy8gU2V0IHVwIHRl
eHR1cmUgcGFyYW1ldGVycworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wu
VEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgLy8g
VXBsb2FkIHRoZSBpbWFnZSBpbnRvIHRoZSB0ZXh0dXJlCisgICAgaWYgKHVzZVRleFN1YkltYWdl
MkQpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dHVyZSB0byBibGFjayBmaXJzdAor
ICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgaW1hZ2Uud2lk
dGgsIGltYWdlLmhlaWdodCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCAwLCAwLCBpbWFnZSwgZmxpcFksIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGltYWdlLCBmbGlwWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIC8vIFBvaW50IHRoZSB1bmlmb3JtIHNhbXBsZXIgdG8gdGV4dHVyZSB1bml0
IDAKKyAgICBnbC51bmlmb3JtMWkodGV4dHVyZUxvYywgMCk7CisgICAgLy8gRHJhdyB0aGUgdHJp
YW5nbGVzCisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworCisgICAgLy8g
UmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cworICAgIHZhciB3aWR0aCA9IDMyOworICAg
IHZhciBoZWlnaHQgPSAzMjsKKyAgICBidWYgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOworICAgIC8vIENoZWNrIGEgZmV3IHBp
eGVscyBuZWFyIHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQgbWFrZSBzdXJlIHRoZXkgaGF2ZQorICAg
IC8vIHRoZSByaWdodCBjb2xvci4KKyAgICB2YXIgcXVlcnlXaWR0aCA9IDI7CisgICAgdmFyIHF1
ZXJ5SGVpZ2h0ID0gMjsKKyAgICBkZWJ1ZygiQ2hlY2tpbmcgbG93ZXIgbGVmdCBjb3JuZXIiKTsK
KyAgICB2YXIgeG9mZiA9IDQ7CisgICAgdmFyIHlvZmYgPSA0OworICAgIGNvcnJlY3RDb2xvciA9
IGJvdHRvbUNvbG9yOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcXVlcnlIZWlnaHQ7IHkrKykg
eworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1ZXJ5V2lkdGg7IHgrKykgeworICAgICAg
ICAgICAgaWR4ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAqIDQgKworICAgICAgICAgICAgICAgICAg
ICh4b2ZmICsgeCkgKiA0KTsKKyAgICAgICAgICAgIHBpeGVsWzBdID0gYnVmW2lkeF07CisgICAg
ICAgICAgICBwaXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsKKyAgICAgICAgICAgIHBpeGVsWzJdID0g
YnVmW2lkeCArIDJdOworICAgICAgICAgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xv
ciIpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKCJDaGVja2luZyB1cHBlciBsZWZ0IGNv
cm5lciIpOworICAgIHlvZmYgPSBoZWlnaHQgLSA4OworICAgIGNvcnJlY3RDb2xvciA9IHRvcENv
bG9yOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcXVlcnlIZWlnaHQ7IHkrKykgeworICAgICAg
ICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1ZXJ5V2lkdGg7IHgrKykgeworICAgICAgICAgICAgaWR4
ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAqIDQgKworICAgICAgICAgICAgICAgICAgICh4b2ZmICsg
eCkgKiA0KTsKKyAgICAgICAgICAgIHBpeGVsWzBdID0gYnVmW2lkeF07CisgICAgICAgICAgICBw
aXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsKKyAgICAgICAgICAgIHBpeGVsWzJdID0gYnVmW2lkeCAr
IDJdOworICAgICAgICAgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworICAg
ICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UZXN0KGltYWdlKQoreworICAgIHZhciBy
ZWQgPSBbMjU1LCAwLCAwXTsKKyAgICB2YXIgZ3JlZW4gPSBbMCwgMjU1LCAwXTsKKyAgICBydW5P
bmVJdGVyYXRpb24oaW1hZ2UsIGZhbHNlLCB0cnVlLCByZWQsIGdyZWVuKTsKKyAgICBydW5PbmVJ
dGVyYXRpb24oaW1hZ2UsIGZhbHNlLCBmYWxzZSwgZ3JlZW4sIHJlZCk7CisgICAgcnVuT25lSXRl
cmF0aW9uKGltYWdlLCB0cnVlLCB0cnVlLCByZWQsIGdyZWVuKTsKKyAgICBydW5PbmVJdGVyYXRp
b24oaW1hZ2UsIHRydWUsIGZhbHNlLCBncmVlbiwgcmVkKTsKKworICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNy
YyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjMycHgiIGhl
aWdodD0iMzJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9yZWQtZ3JlZW4ucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9yZWQtZ3JlZW4ucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBSUFBQUFXNHlGd0FBQUFBWE5TUjBJQXJzNGM2
UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBZ1kwaFNUUUFBZWlZQUFJQ0VBQUQ2QUFBQWdPZ0FB
SFV3QUFEcVlBQUFPcGdBQUJkd25McFJQQUFBQUE1SlJFRlUKR0ZkaitNOEFCUDhaQUFqL0FmODIw
cWdZQUFBQUFFbEZUa1N1UW1DQwoK
</data>
<flag name="review"
          id="31405"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48688</attachid>
            <date>2010-02-12 18:39:54 -0800</date>
            <delta_ts>2010-02-16 14:49:12 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>textures.patch</filename>
            <type>text/plain</type>
            <size>51777</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBj
b21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3
aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBj
b21tb24gZW50cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGlt
bWVkaWF0ZWx5IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAg
LSBDaHJvbWl1bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgor
ICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4
SW1hZ2UyRCBvcgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAg
ICAgICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIg
dG8gdGV4SW1hZ2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2Uu
CisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1h
Z2UyRCBhbmQKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4g
VGhlIHByZW11bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVk
IHlldCBhcyB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBs
aWFudC4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBS
YW4gYWxsIFdlYkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9t
aXVtOworICAgICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBi
cm93c2VycywgYW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBk
ZW1vIG5vdyBsb29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByb2Nlc3NJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVubXVsdGlwbHlBbHBoYSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorCiAyMDEwLTAyLTExICBEYXJpbiBGaXNoZXIg
IDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDU0NzQ1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzYsNiArMTk3Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GbG9hdFNpemVDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCcsCkBAIC0yMTM5LDYgKzIxNDAsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwJywKQEAgLTIyNzYsNiArMjI3OCw3IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDU0NzQ1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtOTU5LDYgKzk1OSw3IEBACiAgICAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcCcsCisgICAgICAgICAgICAnLi4vcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwJywKICAgICAgICAgICAg
ICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwJywKICAg
ICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAn
LAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcs
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNTQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI0MSw2ICsxMjQxLDggQEAKIAkJNjVERjMyM0MwOUQxREU2NTAw
MEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVERjMyMzYwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0
dGVybi5oICovOyB9OwogCQk2NURGMzI2MTA5RDFFMTk5MDAwQkUzMjUgLyogVXNlckFnZW50U3R5
bGVTaGVldHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0Rh
dGEuY3BwICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CisJCTZFMjFDNkMwMTEyNjMzODUwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0QuY3BwICovOyB9OworCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAg
Ki87IH07CiAJCTZFNDdFNjYwMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0N0U2NUUxMEI3
OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5mby5jcHAgKi87IH07CiAJCTZFNDdFNjYxMTBCNzk0
NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldElu
Zm8uaCAqLzsgfTsKIAkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRB
dHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNEU5MUE3MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5j
cHAgKi87IH07CkBAIC02NjUzLDYgKzY2NTUsOCBAQAogCQk2NURGMzIzNjA5RDFERTY1MDAwQkUz
MjUgLyogSlNDYW52YXNQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NhbnZhc1BhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVGODA2
OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJsb2NrRXhjZXB0aW9u
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM2QzExMTI2MzM5OTAwQTdC
RTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFNDdFNjVFMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdldEluZm8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xHZXRJbmZvLmNwcDsgcGF0
aCA9IGNhbnZhcy9XZWJHTEdldEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RTQ3RTY1RjEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMR2V0SW5mby5oOyBwYXRoID0gY2FudmFzL1dlYkdM
R2V0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBNzEwRjdGQjMx
MDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0MzIwLDYgKzE0MzI0LDcgQEAKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdy
YWRpZW50Q0cuY3BwICovLAorCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGlj
c0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4
RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKQEAgLTE0NDM1LDYgKzE0NDQwLDcg
QEAKIAkJCQlCQzUzQzVGNDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCAqLywKIAkJCQlC
MkEwMTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlC
MkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCisJCQkJNkUy
MUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLywKIAkJCQk0
OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLywKIAkJCQlB
ODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oICovLAog
CQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKQEAg
LTIwNzA3LDYgKzIwNzEzLDggQEAKIAkJCQlCQ0U3ODk4QjExMjBFODAyMDA2MEVDRTUgLyogQmlk
aVJ1bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RjZGQzE5NjExMjJFODJBMDBFODAxOTYgLyog
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZGRjE3RTMxMTIzNTY3
MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFMjFD
NkMwMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkltYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFj
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGludGVybmFs
Rm9ybWF0KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
bHBoYU9wIGFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAgYm9vbCBoYXNBbHBoYUNoYW5u
ZWwgPSB0cnVlOworICAgIGlmICghZ2V0SW1hZ2VEYXRhKGltYWdlLCBpbWFnZURhdGEsIHByZW11
bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgJmhhc0FscGhhQ2hhbm5lbCwgJmFs
cGhhT3AsIGZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwcm9jZXNzSW1hZ2VE
YXRhKGltYWdlRGF0YS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgYWxwaGFPcCk7CisgICAgKmludGVy
bmFsRm9ybWF0ID0gKGhhc0FscGhhQ2hhbm5lbCA/IFJHQkEgOiBSR0IpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4
X3QqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwVmVydGljYWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKQoreworICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAg
IGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAgcHJlbXVsdGlwbHlBbHBoYShpbWFn
ZURhdGEsIHdpZHRoICogaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQWxwaGFE
b1VubXVsdGlwbHk6CisgICAgICAgIHVubXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICog
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKGZsaXBWZXJ0aWNhbGx5ICYmIHdpZHRoICYmIGhlaWdodCkgeworICAg
ICAgICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgICAgIHVpbnQ4X3QqIHRlbXBSb3cg
PSBuZXcgdWludDhfdFtyb3dCeXRlc107CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBoZWlnaHQgLyAyOyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGxvd1JvdyA9IGltYWdl
RGF0YSArIChyb3dCeXRlcyAqIGkpOworICAgICAgICAgICAgdWludDhfdCogaGlnaFJvdyA9IGlt
YWdlRGF0YSArIChyb3dCeXRlcyAqIChoZWlnaHQgLSBpIC0gMSkpOworICAgICAgICAgICAgbWVt
Y3B5KHRlbXBSb3csIGxvd1Jvdywgcm93Qnl0ZXMpOworICAgICAgICAgICAgbWVtY3B5KGxvd1Jv
dywgaGlnaFJvdywgcm93Qnl0ZXMpOworICAgICAgICAgICAgbWVtY3B5KGhpZ2hSb3csIHRlbXBS
b3csIHJvd0J5dGVzKTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSB0ZW1wUm93OworICAg
IH0KK30KKworLy8gUHJlbXVsdGlwbHkgYWxwaGEgaW50byBjb2xvciBjaGFubmVscy4KK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZW11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURh
dGEsIGludCBudW1QaXhlbHMpCit7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1QaXhlbHM7
IGorKykgeworICAgICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzBdIC8gMjU1LjBmOworICAg
ICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpqKzFdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBi
ID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBhID0gcmdiYURhdGFb
NCpqKzNdIC8gMjU1LjBmOworICAgICAgICByZ2JhRGF0YVs0KmorMF0gPSAodW5zaWduZWQgY2hh
cikgKHIgKiBhICogMjU1LjBmKTsKKyAgICAgICAgcmdiYURhdGFbNCpqKzFdID0gKHVuc2lnbmVk
IGNoYXIpIChnICogYSAqIDI1NS4wZik7CisgICAgICAgIHJnYmFEYXRhWzQqaisyXSA9ICh1bnNp
Z25lZCBjaGFyKSAoYiAqIGEgKiAyNTUuMGYpOworICAgIH0KK30KKworLy8gUmVtb3ZlIHByZW11
bHRpcGxpZWQgYWxwaGEgZnJvbSBjb2xvciBjaGFubmVscy4KKy8vIEZJWE1FOiB0aGlzIGlzIGxv
c3N5LiBNdXN0IHJldHJpZXZlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIEhUTUxJbWFnZUVsZW1lbnQu
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bm11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciog
cmdiYURhdGEsIGludCBudW1QaXhlbHMpCit7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Q
aXhlbHM7IGorKykgeworICAgICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzBdIC8gMjU1LjBm
OworICAgICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpqKzFdIC8gMjU1LjBmOworICAgICAgICBm
bG9hdCBiID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBhID0gcmdi
YURhdGFbNCpqKzNdIC8gMjU1LjBmOworICAgICAgICBpZiAoYSA+IDAuMGYpIHsKKyAgICAgICAg
ICAgIHIgLz0gYTsKKyAgICAgICAgICAgIGcgLz0gYTsKKyAgICAgICAgICAgIGIgLz0gYTsKKyAg
ICAgICAgICAgIHIgPSAociA+IDEuMGYpID8gMS4wZiA6IHI7CisgICAgICAgICAgICBnID0gKGcg
PiAxLjBmKSA/IDEuMGYgOiBnOworICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAxLjBmIDog
YjsKKyAgICAgICAgICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIDI1
NS4wZik7CisgICAgICAgICAgICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcg
KiAyNTUuMGYpOworICAgICAgICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIp
IChiICogMjU1LjBmKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDU0NzQ1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MTksNiArNDE5LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
bGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAgICAgICAgIGludCBzaXplSW5CeXRlcyhpbnQg
dHlwZSk7CiAKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIEhlbHBlcnMgZm9y
IHRleHR1cmUgdXBsb2FkaW5nLgorICAgICAgICAvLworCisgICAgICAgIC8vIEV4dHJhY3RzIHRo
ZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2UgaW50byB0aGUgcGFzc2VkCisgICAgICAgIC8v
IFZlY3Rvciwgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGxpY2FibGUgT3BlbkdMIGZvcm1hdCBhbmQgaW50ZXJu
YWxGb3JtYXQgZm9yCisgICAgICAgIC8vIHRoZSBzdWJzZXF1ZW50IGdsVGV4SW1hZ2UyRCBvciBn
bFRleFN1YkltYWdlMkQgY2FsbC4KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vz
cy4KKyAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4mIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZvcm1hdCk7CisKKyAgICAgICAgLy8gUHJvY2Vzc2Vz
IHRoZSBnaXZlbiBpbWFnZSBkYXRhIGluIHByZXBhcmF0aW9uIGZvciB1cGxvYWRpbmcKKyAgICAg
ICAgLy8gdmlhIHRleEltYWdlMkQgb3IgdGV4U3ViSW1hZ2UyRC4gVGhlIG9wZXJhdGlvbnMgdGhh
dCBhcmUKKyAgICAgICAgLy8gaW1wbGVtZW50ZWQgYXJlOgorICAgICAgICAvLyAgIC0gRmxpcCB2
ZXJ0aWNhbGx5IChmbGlwWSBhcmd1bWVudCB0byB0aGVzZSBtZXRob2RzKQorICAgICAgICAvLyAg
IC0gUGFzcyB0aHJvdWdoIHRoZSBhbHBoYSBjaGFubmVsIHVubW9kaWZpZWQKKyAgICAgICAgLy8g
ICAgIChrQWxwaGFEb05vdGhpbmcpCisgICAgICAgIC8vICAgLSBNdWx0aXBseSBhbHBoYSBjaGFu
bmVsIGludG8gY29sb3IgY2hhbm5lbHMKKyAgICAgICAgLy8gICAgIChrQWxwaGFEb1ByZW11bHRp
cGx5KQorICAgICAgICAvLyAgIC0gRGl2aWRlIHRoZSBjb2xvciBjaGFubmVscyBieSB0aGUgYWxw
aGEgY2hhbm5lbAorICAgICAgICAvLyAgICAgKGtBbHBoYURvVW5tdWx0aXBseSkKKyAgICAgICAg
Ly8gICAgIC0gTk9URTogdGhpcyBvcGVyYXRpb24gaXMgbG9zc3kgYW5kLCBhY2NvcmRpbmcgdG8g
dGhlCisgICAgICAgIC8vICAgICAgIFdlYkdMIHNwZWNpZmljYXRpb24sIG5vdCB2YWxpZC4gVGhl
IGxvZ2ljIGlzIGJlaW5nCisgICAgICAgIC8vICAgICAgIGluY29ycG9yYXRlZCBvbmx5IGFzIGEg
c3RvcGdhcCBtZWFzdXJlIHVudGlsIGFsbAorICAgICAgICAvLyAgICAgICBwbGF0Zm9ybXMgaGFu
ZGxlIGNvcnJlY3RseSB0aGUgbG9hZGluZyBvZiBpbWFnZXMKKyAgICAgICAgLy8gICAgICAgd2l0
aG91dCBwcmVtdWx0aXBseWluZyB0aGUgYWxwaGEgY2hhbm5lbCBpbnRvIHRoZQorICAgICAgICAv
LyAgICAgICBjb2xvciBjaGFubmVscy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIGlucHV0
IGRhdGEgbXVzdCBiZSBpbiA0LWNvbXBvbmVudCBmb3JtYXQgd2l0aCB0aGUgYWxwaGEKKyAgICAg
ICAgLy8gY2hhbm5lbCBsYXN0IChpLmUuLCBSR0JBIG9yIEJHUkEpLCB0aWdodGx5IHBhY2tlZCwg
d2l0aCBubworICAgICAgICAvLyBzcGFjZSBiZXR3ZWVuIHJvd3MuCisKKyAgICAgICAgZW51bSBB
bHBoYU9wIHsKKyAgICAgICAgICAgIGtBbHBoYURvTm90aGluZyA9IDAsCisgICAgICAgICAgICBr
QWxwaGFEb1ByZW11bHRpcGx5ID0gMSwKKyAgICAgICAgICAgIGtBbHBoYURvVW5tdWx0aXBseSA9
IDIKKyAgICAgICAgfTsKKworICAgICAgICB2b2lkIHByb2Nlc3NJbWFnZURhdGEodWludDhfdCog
aW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNhbGx5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKTsKKworICAgICAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KKyAgICAgICAgLy8KKwog
ICAgICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKICAgICAg
ICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciog
c2hhZGVyKTsKICAgICAgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwg
dW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTYyNCw2ICs2Nzcs
MzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6ICAgICAgICAKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycyk7CiAKKyAgICAgICAgLy8gSGVscGVy
cyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcuCisgICAgICAgIHZvaWQgcHJlbXVsdGlwbHlBbHBoYSh1
bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscyk7CisgICAgICAgIHZvaWQgdW5t
dWx0aXBseUFscGhhKHVpbnQ4X3QqIGltYWdlRGF0YSwgaW50IG51bVBpeGVscyk7CisKKyAgICAg
ICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhp
cyBtZXRob2QuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdldHMgdGhlIGRhdGEgZm9yIHRoZSBn
aXZlbiBJbWFnZSBpbnRvIG91dHB1dFZlY3RvciwKKyAgICAgICAgLy8gd2l0aG91dCBkb2luZyBh
bnkgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSAodmVydGljYWwgZmxpcCBvcgorICAgICAgICAvLyBv
dGhlcndpc2UpLgorICAgICAgICAvLworICAgICAgICAvLyBwcmVtdWx0aXBseUFscGhhIGluZGlj
YXRlcyB3aGV0aGVyIHRoZSB1c2VyIHdpbGwgZXZlbnR1YWxseQorICAgICAgICAvLyB3YW50IHRo
ZSBhbHBoYSBjaGFubmVsIG11bHRpcGxpZWQgaW50byB0aGUgY29sb3IgY2hhbm5lbHMuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIGhhc0FscGhhQ2hhbm5lbCBpbmRp
Y2F0ZXMgd2hldGhlciB0aGUKKyAgICAgICAgLy8gaW1hZ2UgYWN0dWFsbHkgaGFkIGFuIGFscGhh
IGNoYW5uZWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIG5lZWRl
ZEFscGhhT3Agc2hvdWxkIGJlIHBhc3NlZCB0byBhCisgICAgICAgIC8vIHN1YnNlcXVlbnQgY2Fs
bCBvZiBwcm9jZXNzSW1hZ2VEYXRhIHRvIHByb2Nlc3MgdGhlIGFscGhhCisgICAgICAgIC8vIGFu
ZCBjb2xvciBjaGFubmVscyBhcyBuZWVkZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBv
dXQgcGFyYW1ldGVyIGZvcm1hdCBzaG91bGQgYmUgcGFzc2VkIHRvIHN1YnNlcXVlbnQKKyAgICAg
ICAgLy8gaW52b2NhdGlvbnMgb2YgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRC4KKyAgICAg
ICAgYm9vbCBnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sKiBoYXNBbHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3Aq
IG5lZWRlZEFscGhhT3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCog
Zm9ybWF0KTsKKwogICAgICAgICBpbnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsK
ICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Jp
dG1hcENvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVj
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBoYXNB
bHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFP
cCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQqIGZvcm1hdCkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOworICAgIGludCBoZWlnaHQg
PSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOworICAgIGludCByb3dCeXRlcyA9IHdpZHRoICog
NDsKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1h
Z2UpOworICAgICpoYXNBbHBoYUNoYW5uZWwgPSAoaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZQor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25l
U2tpcEZpcnN0KTsKKyAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgKmhhc0FscGhhQ2hhbm5l
bCkKKyAgICAgICAgLy8gRklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRo
ZSBwcmVtdWx0aXBsaWNhdGlvbiBzdGVwCisgICAgICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhh
RG9Vbm11bHRpcGx5OworICAgICpmb3JtYXQgPSBSR0JBOworICAgIG91dHB1dFZlY3Rvci5yZXNp
emUoaGVpZ2h0ICogcm93Qnl0ZXMpOworICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3Bh
Y2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2VydmUgaXRzIGNvbG9ycy4KKyAgICAvLyBTb21lIGlt
YWdlcyB1c2UgYSBjb2xvciBzcGFjZSAoc3VjaCBhcyBpbmRleGVkKSB1bnN1cHBvcnRlZCBieSB0
aGUgYml0bWFwIGNvbnRleHQuCisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0lt
YWdlR2V0Q29sb3JTcGFjZShjZ0ltYWdlKTsKKyAgICBib29sIHJlbGVhc2VDb2xvclNwYWNlID0g
ZmFsc2U7CisgICAgQ0dDb2xvclNwYWNlTW9kZWwgY29sb3JTcGFjZU1vZGVsID0gQ0dDb2xvclNw
YWNlR2V0TW9kZWwoY29sb3JTcGFjZSk7CisgICAgc3dpdGNoIChjb2xvclNwYWNlTW9kZWwpIHsK
KyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbE1vbm9jaHJvbWU6CisgICAgY2FzZSBrQ0dDb2xv
clNwYWNlTW9kZWxSR0I6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxDTVlLOgorICAgIGNh
c2Uga0NHQ29sb3JTcGFjZU1vZGVsTGFiOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsRGV2
aWNlTjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY29sb3JTcGFjZSA9
IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFy
KTsKKyAgICAgICAgcmVsZWFzZUNvbG9yU3BhY2UgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgQ0dDb250ZXh0UmVmIHRtcENvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUo
b3V0cHV0VmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgaWYgKHJlbGVhc2VDb2xvclNwYWNlKQorICAg
ICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworICAgIGlmICghdG1wQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0bXBD
b250ZXh0LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UodG1wQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2Fz
dDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICBjZ0ltYWdlKTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKHRtcENvbnRl
eHQpOworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1
NDc0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyNiwzMSArMTEyNiw2IEBAIGxvbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk8KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxsb25nPihwb2ludGVyKTsKIH0KIAotLy8gUmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVk
IGJ5IGZhc3RGcmVlKCkKLXN0YXRpYyBib29sIGltYWdlVG9UZXh0dXJlKEltYWdlKiBpbWFnZSwg
R0x1Ynl0ZSomIGJ1ZmZlciwgc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCi17Ci0gICAg
aWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIENHSW1hZ2VSZWYg
dGV4dHVyZUltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBpZiAoIXRleHR1cmVJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKHRleHR1cmVJbWFnZSk7Ci0gICAgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodCh0ZXh0
dXJlSW1hZ2UpOwotICAgIAotICAgIGJ1ZmZlciA9IChHTHVieXRlKikgZmFzdE1hbGxvYyh3aWR0
aCAqIGhlaWdodCAqIDQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgIENHQ29udGV4dFJlZiB0ZXh0dXJlQ29udGV4dCA9IENHQml0bWFwQ29u
dGV4dENyZWF0ZShidWZmZXIsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSW1hZ2VH
ZXRDb2xvclNwYWNlKHRleHR1cmVJbWFnZSksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHRleHR1cmVDb250ZXh0LCBrQ0dCbGVuZE1v
ZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UodGV4dHVyZUNvbnRleHQsIENHUmVjdE1h
a2UoMCwgMCwgKENHRmxvYXQpd2lkdGgsIChDR0Zsb2F0KWhlaWdodCksIHRleHR1cmVJbWFnZSk7
Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0ZXh0dXJlQ29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIHZvaWQqIHBpeGVscykKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBkbyBib3Vu
ZHMgY2hlY2tpbmcgb24gdGhlIGJ1ZmZlciBoZXJlLgpAQCAtMTE2MCwyMCArMTEzNSwxMiBAQCBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduCiAKIGludCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFn
ZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICAvLyBG
SVhNRTogbmVlZCB0byBzdXBwb3J0IGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCi0gICAgVU5V
U0VEX1BBUkFNKGZsaXBZKTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0g
ICAgQVNTRVJUKGltYWdlKTsKLSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci0gICAgR0x1Ynl0ZSogYnVmZmVyOwotICAgIHNpemVfdCB3aWR0aDsKLSAgICBzaXplX3QgaGVp
Z2h0OwotICAgIGlmICghaW1hZ2VUb1RleHR1cmUoaW1hZ2UsIGJ1ZmZlciwgd2lkdGgsIGhlaWdo
dCkpCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9y
bWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZs
aXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1h
dCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBidWZmZXIpOwotICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIDAsIGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAgICAgCkBAIC0xMTg4LDIwICsxMTU1LDEyIEBAIGludCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zm
LCB1bnNpZ25lZCB5b2ZmLCBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSkKIHsKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhl
bFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVy
IGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICAvLyBGSVhNRTogbmVlZCB0byBzdXBwb3J0IGZs
aXBZIGFuZCBwcmVtdWx0aXBseUFscGhhCi0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICBV
TlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgR0x1Ynl0ZSogYnVmZmVyOwot
ICAgIHNpemVfdCB3aWR0aDsKLSAgICBzaXplX3QgaGVpZ2h0OwotICAgIGlmICghaW1hZ2VUb1Rl
eHR1cmUoaW1hZ2UsIGJ1ZmZlciwgd2lkdGgsIGhlaWdodCkpCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAg
ICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBp
bWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsK
LSAgICAKLSAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3
aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBidWZmZXIpOwotICAgIGZh
c3RGcmVlKGJ1ZmZlcik7CisgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dDNEU2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZB
UykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRW
ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0
aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGhh
c0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBo
YU9wKiBuZWVkZWRBbHBoYU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCogZm9ybWF0KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghc2tpYUltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUltYWdlLT5j
b25maWcoKTsKKyAgICAvLyBGSVhNRTogbXVzdCBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJh
dGlvbnMuCisgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFnZVJlZiA9ICpz
a2lhSW1hZ2U7CisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7CisgICAg
aW50IHdpZHRoID0gc2tpYUltYWdlLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBza2lhSW1h
Z2UtPmhlaWdodCgpOworICAgIGludCByb3dCeXRlcyA9IHNraWFJbWFnZS0+cm93Qnl0ZXMoKTsK
KyAgICBBU1NFUlQocm93Qnl0ZXMgPT0gd2lkdGggKiA0KTsKKyAgICB1aW50OF90KiBwaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKKyAg
ICBvdXRwdXRWZWN0b3IucmVzaXplKHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICBtZW1jcHkob3V0
cHV0VmVjdG9yLmRhdGEoKSwgcGl4ZWxzLCByb3dCeXRlcyAqIGhlaWdodCk7CisgICAgKmhhc0Fs
cGhhQ2hhbm5lbCA9IHRydWU7CisgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAv
LyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxp
Y2F0aW9uIHN0ZXAKKyAgICAgICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7
CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gZGVza3RvcCBPcGVuR0wK
KyAgICAqZm9ybWF0ID0gMHg4MEUxOyAvLyBHTF9CR1JBCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzQ1KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEwLTAyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJE
IHRha2luZyBJbWFnZSB0byB1c2UgY29tbW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4CisKKyAgICAgICAgTWVyZ2VkIHRoZSBTYWZh
cmkgYW5kIENocm9taXVtIGNvZGUgd2hpY2ggZXh0cmFjdHMgdGhlIGRhdGEgZnJvbQorICAgICAg
ICBJbWFnZSBvYmplY3RzIGludG8gY29tbW9uIGVudHJ5IHBvaW50cyBvbiBHcmFwaGljc0NvbnRl
eHQzRC4gVGhpcworICAgICAgICBpbW1lZGlhdGVseSBmaXhlcyB0aGUgZm9sbG93aW5nIHRocmVl
IHByb2JsZW1zOgorICAgICAgICAgIC0gQ2hyb21pdW0gbm90IGltcGxlbWVudGluZyB0ZXhTdWJJ
bWFnZTJEIHRha2luZyBJbWFnZS4KKyAgICAgICAgICAtIFNhZmFyaSBub3Qgb2JleWluZyB0aGUg
ZmxpcFkgcGFyYW1ldGVyIHRvIHRleEltYWdlMkQgb3IKKyAgICAgICAgICAgIHRleFN1YkltYWdl
MkQgdGFraW5nIEltYWdlLgorICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBwcmVt
dWx0aXB5QWxwaGEgcGFyYW1ldGVyIHRvIHRleEltYWdlMkQKKyAgICAgICAgICAgIG9yIHRleFN1
YkltYWdlMkQgdGFraW5nIEltYWdlLgorICAgICAgICBBZGRlZCBuZXcgdGVzdCB2ZXJpZnlpbmcg
dGhlIGJlaGF2aW9yIG9mIHRleEltYWdlMkQgYW5kCisgICAgICAgIHRleFN1YkltYWdlMkQgYW5k
IHRoZSBmbGlwWSBwYXJhbWV0ZXIuIFRoZSBwcmVtdWx0aXBseUFscGhhCisgICAgICAgIHBhcmFt
ZXRlciBjYW4gbm90IGJlIHRlc3RlZCB5ZXQgYXMgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB5
ZXQKKyAgICAgICAgc3BlYyBjb21wbGlhbnQuIFRoaXMgd2lsbCBiZSBmaXhlZCBpbiBhIGZvbGxv
dy1vbiBidWcuCisKKyAgICAgICAgUmFuIGFsbCBXZWJHTCBkZW1vcyBpbiBkZW1vIHJlcG9zaXRv
cnkgb24gU2FmYXJpIGFuZCBDaHJvbWl1bTsKKyAgICAgICAgdGV4dHVyZXMgYXJlIG5vdyB0aGUg
cmlnaHQgd2F5IHVwIGluIGJvdGggYnJvd3NlcnMsIGFuZAorICAgICAgICB0cmFuc3BhcmVudCB0
ZXh0dXJlcyBpbiBQYXJ0aWNsZXMgZGVtbyBub3cgbG9vayBjb3JyZWN0IGluIFNhZmFyaS4KKwor
ICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisKIDIwMTAtMDItMTEgIERhcmluIEZpc2hlciAg
PGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNp
b24gNTQ3NDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMTcgKzY1LDEyIEBACiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KICNl
bHNlCiAjZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KICNp
ZiBPUyhEQVJXSU4pCiAjZGVmaW5lIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZG
RVIKICNlbmRpZgpAQCAtMTg3OCwxNzggKzE4NzMsMTcgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHJldHVybiAwOwogfQogCi0vLyBSZW1vdmUgcHJlbXVs
dGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgotLy8gRklYTUU6IHRoaXMgaXMgbG9z
c3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdlRWxlbWVudC4K
LXN0YXRpYyB2b2lkIHVubXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50
IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsgaisrKSB7
Ci0gICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0gICAgICAgIGZs
b2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2Jh
RGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0KmorM10g
LyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewotICAgICAgICAgICAgYiAvPSBhOwot
ICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgciAvPSBhOwotICAgICAgICAgICAgYiA9
IChiID4gMS4wZikgPyAxLjBmIDogYjsKLSAgICAgICAgICAgIGcgPSAoZyA+IDEuMGYpID8gMS4w
ZiA6IGc7Ci0gICAgICAgICAgICByID0gKHIgPiAxLjBmKSA/IDEuMGYgOiByOwotICAgICAgICAg
ICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIpIChiICogMjU1LjBmKTsKLSAgICAg
ICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAqIDI1NS4wZik7Ci0g
ICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikgKHIgKiAyNTUuMGYp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBGSVhNRTogdGhpcyBtdXN0IGJlIGNoYW5nZWQg
dG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGltYWdlIGRhdGEKLS8vIHJhdGhlciB0aGFuIHVubXVs
dGlwbHlpbmcgdGhlIGFscGhhIGNoYW5uZWwuCi1zdGF0aWMgaW50IHRleEltYWdlMkRIZWxwZXIo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBza2lwQWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIEFTU0VSVChmb3JtYXQgPT0gR0xfUkdCQSB8fCBm
b3JtYXQgPT0gR0xfQkdSQSk7Ci0gICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBODsK
LSAgICBpZiAoc2tpcEFscGhhKSB7Ci0gICAgICAgIGludGVybmFsRm9ybWF0ID0gR0xfUkdCODsK
LSAgICAgICAgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsCi0gICAgICAgIHByZW11bHRpcGx5
QWxwaGEgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgLy8gTmVlZCB0
byBmbGlwIGltYWdlcyB2ZXJ0aWNhbGx5LiBUbyBhdm9pZCBtYWtpbmcgYSBjb3B5IG9mCi0gICAg
ICAgIC8vIHRoZSBlbnRpcmUgaW1hZ2UsIHdlIHBlcmZvcm0gYSB0b24gb2YgZ2xUZXhTdWJJbWFn
ZTJECi0gICAgICAgIC8vIGNhbGxzLiBGSVhNRTogc2hvdWxkIHJldGhpbmsgdGhpcyBzdHJhdGVn
eSBmb3IgZWZmaWNpZW5jeS4KLSAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAg
ICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSAwOwot
ICAgICAgICBib29sIGFsbG9jYXRlZFJvdyA9IGZhbHNlOwotICAgICAgICBpZiAoIXByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgIHJvdyA9IG5ldyB1bnNpZ25lZCBjaGFyW3Jvd0J5dGVz
XTsKLSAgICAgICAgICAgIGFsbG9jYXRlZFJvdyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICAgICAgcm93ID0gcGl4ZWxzICsgKHJvd0J5dGVzICog
aSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkocm93LCBwaXhl
bHMgKyAocm93Qnl0ZXMgKiBpKSwgcm93Qnl0ZXMpOwotICAgICAgICAgICAgICAgIHVubXVsdGlw
bHlBbHBoYShyb3csIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBoZWlnaHQgLSBpIC0gMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxv
Y2F0ZWRSb3cpCi0gICAgICAgICAgICBkZWxldGVbXSByb3c7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gVGhlIHBpeGVscyBvZiBjdWJlIG1hcHMnIGZhY2VzIGFyZSBkZWZpbmVkIHdpdGggYSB0
b3AtZG93bgotICAgICAgICAvLyBzY2FubGluZSBvcmRlcmluZywgdW5saWtlIEdMX1RFWFRVUkVf
MkQsIHNvIHdoZW4gdXBsb2FkaW5nCi0gICAgICAgIC8vIHRoZXNlLCB0aGUgYWJvdmUgdmVydGlj
YWwgZmxpcCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gZG8uCi0gICAgICAgIGlmIChwcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbcm93Qnl0ZXNdOwotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgICAgIG1lbWNw
eShyb3csIHBpeGVscyArIChyb3dCeXRlcyAqIGkpLCByb3dCeXRlcyk7Ci0gICAgICAgICAgICAg
ICAgdW5tdWx0aXBseUFscGhhKHJvdywgd2lkdGgpOwotICAgICAgICAgICAgICAgIGdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVsZXRlW10gcm93OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBBU1NFUlQoaW1hZ2Up
OwotCi0gICAgaW50IHJlcyA9IC0xOwotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgTmF0aXZlSW1h
Z2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIXNraWFJbWFnZSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcg
PSBza2lhSW1hZ2UtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQgbW9yZSBp
bWFnZSBjb25maWd1cmF0aW9ucy4KLSAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5h
bEZvcm1hdDsKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0
aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAg
IHJldHVybiAtMTsKLSAgICB9Ci0gICAgU2tCaXRtYXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1h
Z2U7Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7Ci0gICAgaW50IHdp
ZHRoID0gc2tpYUltYWdlLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBza2lhSW1hZ2UtPmhl
aWdodCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9Ci0gICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNraWFJbWFnZS0+Z2V0UGl4ZWxzKCkpOwotICAgIGludCBy
b3dCeXRlcyA9IHNraWFJbWFnZS0+cm93Qnl0ZXMoKTsKLSAgICByZXMgPSB0ZXhJbWFnZTJESGVs
cGVyKHRhcmdldCwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Qnl0ZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0JHUkEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAg
ICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKLSAgICBpZiAoIWNnSW1hZ2UpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRo
KGNnSW1hZ2UpOwotICAgIGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwot
ICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8g
PSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpOwotICAgIGJvb2wgc2tpcEFscGhhID0gKGlu
Zm8gPT0ga0NHSW1hZ2VBbHBoYU5vbmUKLSAgICAgICAgICAgICAgICAgICB8fCBpbmZvID09IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3QKLSAgICAgICAgICAgICAgICAgICB8fCBpbmZvID09IGtD
R0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KTsKLSAgICB1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEg
PSBuZXcgdW5zaWduZWQgY2hhcltoZWlnaHQgKiByb3dCeXRlc107Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
R2VuZXJpY1JHQik7Ci0gICAgQ0dDb250ZXh0UmVmIHRtcENvbnRleHQgPSBDR0JpdG1hcENvbnRl
eHRDcmVhdGUoaW1hZ2VEYXRhLCB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xv
clNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodG1wQ29udGV4dCwga0NHQmxlbmRN
b2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRtcENvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4od2lkdGgp
LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
Y2dJbWFnZSk7Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0bXBDb250ZXh0KTsKLSAgICByZXMgPSB0
ZXhJbWFnZTJESGVscGVyKHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIEdMX1JH
QkEsIHNraXBBbHBoYSwgaW1hZ2VEYXRhKTsKLSAgICBkZWxldGVbXSBpbWFnZURhdGE7Ci0jZWxz
ZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLSAgICByZXR1cm4g
cmVzOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKKyAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsK
KyAgICByZXR1cm4gMDsKIH0KIAogR0xfU0FNRV9NRVRIT0RfMyhUZXhQYXJhbWV0ZXJmLCB0ZXhQ
YXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KTsKQEAgLTIwNzgsOSArMTkxMiwx
NCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAtMTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGlu
dGVybmFsRm9ybWF0OworICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGltYWdlRGF0YS5kYXRhKCkpOworICAgIHJldHVybiAwOwogfQogCiBHTF9TQU1FX01FVEhPRF8y
KFVuaWZvcm0xZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0
NzQ1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzEgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRl
eEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBjb21tb24gY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTgK
KworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3aGljaCBleHRy
YWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBjb21tb24gZW50
cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGltbWVkaWF0ZWx5
IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAgLSBDaHJvbWl1
bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgorICAgICAgICAg
IC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4SW1hZ2UyRCBv
cgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgICAgLSBT
YWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIgdG8gdGV4SW1h
Z2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAg
IEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1hZ2UyRCBhbmQK
KyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4gVGhlIHByZW11
bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVkIHlldCBhcyB0
aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBsaWFudC4gVGhp
cyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9taXVtOworICAg
ICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBicm93c2Vycywg
YW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBkZW1vIG5vdyBs
b29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVz
b3VyY2VzL3JlZC1ncmVlbi5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0y
ZC13aXRoLWltYWdlLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAyLTEyICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1NDY5NC4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWlt
YWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKK1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJ
bWFnZTJEIGNvZGUgcGF0aHMgdGFraW5nIEltYWdlcywgaW4gcGFydGljdWxhciBmbGlwWSBhcmd1
bWVudAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1JlZ3Jlc3Npb24gdGVzdCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4IDogUmVmYWN0b3Ig
dGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UgdG8gdXNlIGNvbW1vbiBj
b2RlCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT10cnVlCitDaGVja2luZyBsb3dlciBs
ZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3Jy
ZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJl
Y3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVj
dENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyB0ZXhJbWFnZTJEIHdp
dGggZmxpcFk9ZmFsc2UKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlz
IGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMg
Y29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIg
bGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNv
cnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT10cnVlCitDaGVja2lu
ZyBsb3dlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhl
bCBpcyBjb3JyZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVs
IGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyB0ZXhT
dWJJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK0NoZWNraW5nIGxvd2VyIGxlZnQgY29ybmVyCitQ
QVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BB
U1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hl
Y2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNT
IHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1Mg
cGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtaW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTggQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0
eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBnX1Bvc2l0aW9uOworYXR0
cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwordm9p
ZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoZ19Qb3NpdGlvbi54LCBnX1Bvc2l0
aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0ZXhDb29yZCA9IGdfVGV4Q29vcmQwOwor
fQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJh
Z21lbnQiPgordW5pZm9ybSBzYW1wbGVyMkQgdGV4OwordmFyeWluZyB2ZWMyIHRleENvb3JkOwor
Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHRleENv
b3JkKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXh0
dXJlTG9jID0gbnVsbDsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKworZnVuY3Rp
b24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdM
RW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBj
b2RlIHBhdGhzIHRha2luZyBJbWFnZXMsIGluIHBhcnRpY3VsYXIgZmxpcFkgYXJndW1lbnQnKTsK
KworICAgIGRlYnVnKCdSZWdyZXNzaW9uIHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ1OCI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NDU4PC9hPiA6IDxjb2RlPlJlZmFjdG9yIHRleEltYWdlMkQgYW5k
IHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBjb21tb24gY29kZTwvY29kZT4nKTsK
KworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIsIFsg
ImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKyAgICBn
bC52aWV3cG9ydCgwLCAwLCAzMiwgMzIpOworCisgICAgdGV4dHVyZUxvYyA9IGdsLmdldFVuaWZv
cm1Mb2NhdGlvbihnbC5wcm9ncmFtLCAidGV4Iik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcg
V2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4w
LCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgIDEu
MCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAu
MF0pOworICAgIHZhciB0ZXhDb29yZHMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAg
MS4wLCAxLjAsCisgICAgICAgIDAuMCwgMS4wLAorICAgICAgICAwLjAsIDAuMCwKKyAgICAgICAg
MS4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAxLjAsIDAuMF0pOworICAgIHZh
ciB0ZXhDb29yZE9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0g
Z2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZi
byk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgICAgICAgICAg
ICB0ZXhDb29yZE9mZnNldCArIHRleENvb3Jkcy5ieXRlTGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVS
LCAwLCB2ZXJ0aWNlcyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRl
eENvb3JkT2Zmc2V0LCB0ZXhDb29yZHMpOworCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2Us
IDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworICAgIGdsLnZlcnRl
eEF0dHJpYlBvaW50ZXIoMSwgMiwgZ2wuRkxPQVQsIGdsLkZBTFNFLCAwLCB0ZXhDb29yZE9mZnNl
dCk7CisKKyAgICBsb2FkVGV4dHVyZSgicmVzb3VyY2VzL3JlZC1ncmVlbi5wbmciKTsKK30KKwor
ZnVuY3Rpb24gbG9hZFRleHR1cmUoc3JjKSB7CisgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVU
ZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7Cisg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIs
IGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVY
VFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2Uo
KTsKKyAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZ2wuYmluZFRleHR1
cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVY
VFVSRV8yRCwgMCwgaW1hZ2UsIHRydWUpOworICAgICAgICBydW5UZXN0KGltYWdlKTsKKyAgICB9
OworICAgIGltYWdlLnNyYyA9IHNyYzsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKworLy8gVGhl
c2UgdHdvIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGdsb2JhbCBmb3IgInNob3VsZEJlIiB0byBz
ZWUgdGhlbQordmFyIGJ1ZiA9IG51bGw7Cit2YXIgaWR4ID0gMDsKK3ZhciBwaXhlbCA9IFswLCAw
LCAwXTsKK3ZhciBjb3JyZWN0Q29sb3IgPSBudWxsOworCitmdW5jdGlvbiBydW5PbmVJdGVyYXRp
b24oaW1hZ2UsIHVzZVRleFN1YkltYWdlMkQsIGZsaXBZLCB0b3BDb2xvciwgYm90dG9tQ29sb3Ip
Cit7CisgICAgZGVidWcoJ1Rlc3RpbmcgJyArICh1c2VUZXhTdWJJbWFnZTJEID8gJ3RleFN1Yklt
YWdlMkQnIDogJ3RleEltYWdlMkQnKSArCisgICAgICAgICAgJyB3aXRoIGZsaXBZPScgKyBmbGlw
WSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9C
SVQpOworICAgIC8vIERpc2FibGUgYW55IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbAorICAg
IGdsLmNvbG9yTWFzaygxLCAxLCAxLCAwKTsKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRl
eHR1cmUoKTsKKyAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlIHRvIHRleHR1cmUgdW5pdCAwCisgICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgLy8gU2V0IHVwIHRl
eHR1cmUgcGFyYW1ldGVycworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wu
VEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgLy8g
VXBsb2FkIHRoZSBpbWFnZSBpbnRvIHRoZSB0ZXh0dXJlCisgICAgaWYgKHVzZVRleFN1YkltYWdl
MkQpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dHVyZSB0byBibGFjayBmaXJzdAor
ICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgaW1hZ2Uud2lk
dGgsIGltYWdlLmhlaWdodCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCAwLCAwLCBpbWFnZSwgZmxpcFksIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGltYWdlLCBmbGlwWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIC8vIFBvaW50IHRoZSB1bmlmb3JtIHNhbXBsZXIgdG8gdGV4dHVyZSB1bml0
IDAKKyAgICBnbC51bmlmb3JtMWkodGV4dHVyZUxvYywgMCk7CisgICAgLy8gRHJhdyB0aGUgdHJp
YW5nbGVzCisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworCisgICAgLy8g
UmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cworICAgIHZhciB3aWR0aCA9IDMyOworICAg
IHZhciBoZWlnaHQgPSAzMjsKKyAgICBidWYgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOworICAgIC8vIENoZWNrIGEgZmV3IHBp
eGVscyBuZWFyIHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQgbWFrZSBzdXJlIHRoZXkgaGF2ZQorICAg
IC8vIHRoZSByaWdodCBjb2xvci4KKyAgICB2YXIgcXVlcnlXaWR0aCA9IDI7CisgICAgdmFyIHF1
ZXJ5SGVpZ2h0ID0gMjsKKyAgICBkZWJ1ZygiQ2hlY2tpbmcgbG93ZXIgbGVmdCBjb3JuZXIiKTsK
KyAgICB2YXIgeG9mZiA9IDQ7CisgICAgdmFyIHlvZmYgPSA0OworICAgIGNvcnJlY3RDb2xvciA9
IGJvdHRvbUNvbG9yOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcXVlcnlIZWlnaHQ7IHkrKykg
eworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1ZXJ5V2lkdGg7IHgrKykgeworICAgICAg
ICAgICAgaWR4ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAqIDQgKworICAgICAgICAgICAgICAgICAg
ICh4b2ZmICsgeCkgKiA0KTsKKyAgICAgICAgICAgIHBpeGVsWzBdID0gYnVmW2lkeF07CisgICAg
ICAgICAgICBwaXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsKKyAgICAgICAgICAgIHBpeGVsWzJdID0g
YnVmW2lkeCArIDJdOworICAgICAgICAgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xv
ciIpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKCJDaGVja2luZyB1cHBlciBsZWZ0IGNv
cm5lciIpOworICAgIHlvZmYgPSBoZWlnaHQgLSA4OworICAgIGNvcnJlY3RDb2xvciA9IHRvcENv
bG9yOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcXVlcnlIZWlnaHQ7IHkrKykgeworICAgICAg
ICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1ZXJ5V2lkdGg7IHgrKykgeworICAgICAgICAgICAgaWR4
ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAqIDQgKworICAgICAgICAgICAgICAgICAgICh4b2ZmICsg
eCkgKiA0KTsKKyAgICAgICAgICAgIHBpeGVsWzBdID0gYnVmW2lkeF07CisgICAgICAgICAgICBw
aXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsKKyAgICAgICAgICAgIHBpeGVsWzJdID0gYnVmW2lkeCAr
IDJdOworICAgICAgICAgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworICAg
ICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UZXN0KGltYWdlKQoreworICAgIHZhciBy
ZWQgPSBbMjU1LCAwLCAwXTsKKyAgICB2YXIgZ3JlZW4gPSBbMCwgMjU1LCAwXTsKKyAgICBydW5P
bmVJdGVyYXRpb24oaW1hZ2UsIGZhbHNlLCB0cnVlLCByZWQsIGdyZWVuKTsKKyAgICBydW5PbmVJ
dGVyYXRpb24oaW1hZ2UsIGZhbHNlLCBmYWxzZSwgZ3JlZW4sIHJlZCk7CisgICAgcnVuT25lSXRl
cmF0aW9uKGltYWdlLCB0cnVlLCB0cnVlLCByZWQsIGdyZWVuKTsKKyAgICBydW5PbmVJdGVyYXRp
b24oaW1hZ2UsIHRydWUsIGZhbHNlLCBncmVlbiwgcmVkKTsKKworICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNy
YyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjMycHgiIGhl
aWdodD0iMzJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9yZWQtZ3JlZW4ucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9yZWQtZ3JlZW4ucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBSUFBQUFXNHlGd0FBQUFBWE5TUjBJQXJzNGM2
UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBZ1kwaFNUUUFBZWlZQUFJQ0VBQUQ2QUFBQWdPZ0FB
SFV3QUFEcVlBQUFPcGdBQUJkd25McFJQQUFBQUE1SlJFRlUKR0ZkaitNOEFCUDhaQUFqL0FmODIw
cWdZQUFBQUFFbEZUa1N1UW1DQwoK
</data>
<flag name="review"
          id="31406"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48836</attachid>
            <date>2010-02-16 14:49:12 -0800</date>
            <delta_ts>2010-02-17 13:08:01 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>textures.patch</filename>
            <type>text/plain</type>
            <size>50946</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDgzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBj
b21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3
aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBj
b21tb24gZW50cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGlt
bWVkaWF0ZWx5IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAg
LSBDaHJvbWl1bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgor
ICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4
SW1hZ2UyRCBvcgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAg
ICAgICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIg
dG8gdGV4SW1hZ2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2Uu
CisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1h
Z2UyRCBhbmQKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4g
VGhlIHByZW11bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVk
IHlldCBhcyB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBs
aWFudC4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBS
YW4gYWxsIFdlYkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9t
aXVtOworICAgICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBi
cm93c2VycywgYW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBk
ZW1vIG5vdyBsb29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByb2Nlc3NJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVubXVsdGlwbHlBbHBoYSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorCiAyMDEwLTAyLTE2ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuIGFuZCBLZXZpbiBEZWNrZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTQ4MzApCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTk3Niw2ICsxOTc2LDcgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwJywK
QEAgLTIxMzksNiArMjE0MCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFkaWVudFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFBvaW50U2tpYS5jcHAnLApAQCAtMjI3Niw2
ICsyMjc4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNTQ4MzApCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC05NTksNiArOTU5LDcgQEAKICAgICAgICAgICAg
ICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UG9pbnRTa2lhLmNwcCcsCiAgICAgICAg
ICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcCcsCiAgICAg
ICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwJywKKyAg
ICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tp
YS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAnLAogICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcCcsCiAgICAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA1NDgzMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM3LDYgKzEyMzcsOCBAQAog
CQk2NURGMzIzQzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzIzNjA5RDFERTY1MDAw
QkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmggKi87IH07CiAJCTY1REYzMjYxMDlEMUUxOTkwMDBC
RTMyNSAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVz
ZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi87IH07CiAJCTY1RkVBODY5MDk4MzNBREUwMEJF
RDRBQiAvKiBQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLzsgfTsKKwkJNkUy
MUM2QzAxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFDNkJGMTEyNjMzODUwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi87IH07CisJCTZFMjFDNkMyMTEyNjMzOTkw
MEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFw
aGljc0NvbnRleHQzRENHLmNwcCAqLzsgfTsKIAkJNkU0N0U2NjAxMEI3OTQ0QjAwQjE4NkM4IC8q
IFdlYkdMR2V0SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTQ3RTY1RTEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmNwcCAqLzsg
fTsKIAkJNkU0N0U2NjExMEI3OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0N0U2NUYxMEI3OTQ0QjAw
QjE4NkM4IC8qIFdlYkdMR2V0SW5mby5oICovOyB9OwogCQk2RTRFOTFBQzEwRjdGQjMxMDBBMjc3
OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0RTkxQTcxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLzsgfTsKQEAgLTY2NDksNiArNjY1MSw4IEBACiAJCTY1
REYzMjM2MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25z
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQmxvY2tFeGNlcHRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBh
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyog
R3JhcGhpY3NDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRENHLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0N0U2NUUxMEI3OTQ0QjAwQjE4NkM4IC8q
IFdlYkdMR2V0SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJHTEdldEluZm8uY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMR2V0SW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEdl
dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xHZXRJbmZvLmg7
IHBhdGggPSBjYW52YXMvV2ViR0xHZXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFNEU5MUE3MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNDb250ZXh0QXR0
cmlidXRlcy5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQzMTYsNiArMTQzMjAsNyBAQAogCQkJCUIy
NzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1
MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLywKIAkJCQlCQzUzQzYwQTBE
QTU2Q0YxMDAyMUVCNUQgLyogR3JhZGllbnRDRy5jcHAgKi8sCisJCQkJNkUyMUM2QzExMTI2MzM5
OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIx
RjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcw
RTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8s
CiAJCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLApA
QCAtMTQ0MzEsNiArMTQ0MzYsNyBAQAogCQkJCUJDNTNDNUY0MERBNTZCOTIwMDIxRUI1RCAvKiBH
cmFkaWVudC5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0Nv
bnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0Nv
bnRleHQuaCAqLywKKwkJCQk2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0QuY3BwICovLAogCQkJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHQzRC5oICovLAogCQkJCUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0Nv
bnRleHRQcml2YXRlLmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXIuY3BwICovLApAQCAtMjA3MDcsNiArMjA3MTMsOCBAQAogCQkJCTc2RkYxN0UzMTEy
MzU2NzMwMDFENjFCNSAvKiBQbHVnaW5WaWV3Tm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
RjJBMzIyQjExMjVBMEEyMDAzQzMwNTYgLyogSmF2YVNjcmlwdFByb2ZpbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOUYyQTMyMkQxMTI1QTBBMjAwM0MzMDU2IC8qIEphdmFTY3JpcHRQcm9maWxl
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTIxQzZDMDExMjYzMzg1MDBBN0JFMDIgLyog
R3JhcGhpY3NDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkUyMUM2QzIxMTI2MzM5
OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqIGltYWdl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5
QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiYgaW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZvcm1hdCkKK3sKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQWxwaGFPcCBhbHBoYU9wID0ga0FscGhh
RG9Ob3RoaW5nOworICAgIGJvb2wgaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICBpZiAoIWdl
dEltYWdlRGF0YShpbWFnZSwgaW1hZ2VEYXRhLCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAg
ICAgICAgICAgICAgICZoYXNBbHBoYUNoYW5uZWwsICZhbHBoYU9wLCBmb3JtYXQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcHJvY2Vzc0ltYWdlRGF0YShpbWFnZURhdGEuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICBpbWFnZS0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICBmbGlwWSwKKyAgICAgICAg
ICAgICAgICAgICAgIGFscGhhT3ApOworICAgICppbnRlcm5hbEZvcm1hdCA9IChoYXNBbHBoYUNo
YW5uZWwgPyBSR0JBIDogUkdCKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cHJvY2Vzc0ltYWdlRGF0YSh1aW50OF90KiBpbWFnZURhdGEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFZlcnRpY2FsbHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxwaGFP
cCkKK3sKKyAgICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICBjYXNlIGtBbHBoYURvUHJlbXVsdGlw
bHk6CisgICAgICAgIHByZW11bHRpcGx5QWxwaGEoaW1hZ2VEYXRhLCB3aWR0aCAqIGhlaWdodCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICB1
bm11bHRpcGx5QWxwaGEoaW1hZ2VEYXRhLCB3aWR0aCAqIGhlaWdodCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmbGlwVmVy
dGljYWxseSAmJiB3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgaW50IHJvd0J5dGVzID0gd2lk
dGggKiA0OworICAgICAgICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3Rbcm93Qnl0ZXNd
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgaSsrKSB7Cisg
ICAgICAgICAgICB1aW50OF90KiBsb3dSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiBpKTsK
KyAgICAgICAgICAgIHVpbnQ4X3QqIGhpZ2hSb3cgPSBpbWFnZURhdGEgKyAocm93Qnl0ZXMgKiAo
aGVpZ2h0IC0gaSAtIDEpKTsKKyAgICAgICAgICAgIG1lbWNweSh0ZW1wUm93LCBsb3dSb3csIHJv
d0J5dGVzKTsKKyAgICAgICAgICAgIG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHJvd0J5dGVzKTsK
KyAgICAgICAgICAgIG1lbWNweShoaWdoUm93LCB0ZW1wUm93LCByb3dCeXRlcyk7CisgICAgICAg
IH0KKyAgICAgICAgZGVsZXRlW10gdGVtcFJvdzsKKyAgICB9Cit9CisKKy8vIFByZW11bHRpcGx5
IGFscGhhIGludG8gY29sb3IgY2hhbm5lbHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVt
dWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJnYmFEYXRhLCBpbnQgbnVtUGl4ZWxzKQorewor
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGl4ZWxzOyBqKyspIHsKKyAgICAgICAgZmxvYXQg
ciA9IHJnYmFEYXRhWzQqaiswXSAvIDI1NS4wZjsKKyAgICAgICAgZmxvYXQgZyA9IHJnYmFEYXRh
WzQqaisxXSAvIDI1NS4wZjsKKyAgICAgICAgZmxvYXQgYiA9IHJnYmFEYXRhWzQqaisyXSAvIDI1
NS4wZjsKKyAgICAgICAgZmxvYXQgYSA9IHJnYmFEYXRhWzQqaiszXSAvIDI1NS4wZjsKKyAgICAg
ICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIpIChyICogYSAqIDI1NS4wZik7Cisg
ICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAqIGEgKiAyNTUuMGYp
OworICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikgKGIgKiBhICogMjU1
LjBmKTsKKyAgICB9Cit9CisKKy8vIFJlbW92ZSBwcmVtdWx0aXBsaWVkIGFscGhhIGZyb20gY29s
b3IgY2hhbm5lbHMuCisvLyBGSVhNRTogdGhpcyBpcyBsb3NzeS4gTXVzdCByZXRyaWV2ZSBvcmln
aW5hbCB2YWx1ZXMgZnJvbSBIVE1MSW1hZ2VFbGVtZW50Lgordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5tdWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJnYmFEYXRhLCBpbnQgbnVtUGl4ZWxz
KQoreworICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGl4ZWxzOyBqKyspIHsKKyAgICAgICAg
ZmxvYXQgciA9IHJnYmFEYXRhWzQqaiswXSAvIDI1NS4wZjsKKyAgICAgICAgZmxvYXQgZyA9IHJn
YmFEYXRhWzQqaisxXSAvIDI1NS4wZjsKKyAgICAgICAgZmxvYXQgYiA9IHJnYmFEYXRhWzQqaisy
XSAvIDI1NS4wZjsKKyAgICAgICAgZmxvYXQgYSA9IHJnYmFEYXRhWzQqaiszXSAvIDI1NS4wZjsK
KyAgICAgICAgaWYgKGEgPiAwLjBmKSB7CisgICAgICAgICAgICByIC89IGE7CisgICAgICAgICAg
ICBnIC89IGE7CisgICAgICAgICAgICBiIC89IGE7CisgICAgICAgICAgICByID0gKHIgPiAxLjBm
KSA/IDEuMGYgOiByOworICAgICAgICAgICAgZyA9IChnID4gMS4wZikgPyAxLjBmIDogZzsKKyAg
ICAgICAgICAgIGIgPSAoYiA+IDEuMGYpID8gMS4wZiA6IGI7CisgICAgICAgICAgICByZ2JhRGF0
YVs0KmorMF0gPSAodW5zaWduZWQgY2hhcikgKHIgKiAyNTUuMGYpOworICAgICAgICAgICAgcmdi
YURhdGFbNCpqKzFdID0gKHVuc2lnbmVkIGNoYXIpIChnICogMjU1LjBmKTsKKyAgICAgICAgICAg
IHJnYmFEYXRhWzQqaisyXSA9ICh1bnNpZ25lZCBjaGFyKSAoYiAqIDI1NS4wZik7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCShyZXZpc2lvbiA1NDgzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDYgKzQxOSw0MyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwg
ZXRjLgogICAgICAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwogCisgICAgICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgICAgICAvLyBIZWxwZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZy4KKyAg
ICAgICAgLy8KKworICAgICAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVu
IEltYWdlIGludG8gdGhlIHBhc3NlZAorICAgICAgICAvLyBWZWN0b3IsIG9iZXlpbmcgdGhlIGZs
aXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLgorICAgICAgICAvLyBSZXR1cm5zIHRoZSBh
cHBsaWNhYmxlIE9wZW5HTCBmb3JtYXQgYW5kIGludGVybmFsRm9ybWF0IGZvcgorICAgICAgICAv
LyB0aGUgc3Vic2VxdWVudCBnbFRleEltYWdlMkQgb3IgZ2xUZXhTdWJJbWFnZTJEIGNhbGwuCisg
ICAgICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCisgICAgICAgIGJvb2wgZXh0cmFj
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBp
bWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogaW50ZXJu
YWxGb3JtYXQpOworCisgICAgICAgIC8vIFByb2Nlc3NlcyB0aGUgZ2l2ZW4gaW1hZ2UgZGF0YSBp
biBwcmVwYXJhdGlvbiBmb3IgdXBsb2FkaW5nCisgICAgICAgIC8vIHZpYSB0ZXhJbWFnZTJEIG9y
IHRleFN1YkltYWdlMkQuIFRoZSBpbnB1dCBkYXRhIG11c3QgYmUgaW4KKyAgICAgICAgLy8gNC1j
b21wb25lbnQgZm9ybWF0IHdpdGggdGhlIGFscGhhIGNoYW5uZWwgbGFzdCAoaS5lLiwgUkdCQQor
ICAgICAgICAvLyBvciBCR1JBKSwgdGlnaHRseSBwYWNrZWQsIHdpdGggbm8gc3BhY2UgYmV0d2Vl
biByb3dzLgorCisgICAgICAgIGVudW0gQWxwaGFPcCB7CisgICAgICAgICAgICBrQWxwaGFEb05v
dGhpbmcgPSAwLAorICAgICAgICAgICAga0FscGhhRG9QcmVtdWx0aXBseSA9IDEsCisgICAgICAg
ICAgICBrQWxwaGFEb1VubXVsdGlwbHkgPSAyCisgICAgICAgIH07CisKKyAgICAgICAgdm9pZCBw
cm9jZXNzSW1hZ2VEYXRhKHVpbnQ4X3QqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlw
VmVydGljYWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxwaGFP
cCk7CisKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIEVudHJ5IHBvaW50cyBm
b3IgV2ViR0wuCisgICAgICAgIC8vCisKICAgICAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2ln
bmVkIGxvbmcgdGV4dHVyZSk7CiAgICAgICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcik7CiAgICAgICAgIHZvaWQgYmluZEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CkBAIC02MjQsNiArNjYxLDM0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
cml2YXRlOiAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0
cnMpOwogCisgICAgICAgIC8vIEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nLgorICAgICAg
ICB2b2lkIHByZW11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURhdGEsIGludCBudW1Q
aXhlbHMpOworICAgICAgICB2b2lkIHVubXVsdGlwbHlBbHBoYSh1aW50OF90KiBpbWFnZURhdGEs
IGludCBudW1QaXhlbHMpOworCisgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRl
IGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICAgICAgICAvLworICAgICAgICAv
LyBHZXRzIHRoZSBkYXRhIGZvciB0aGUgZ2l2ZW4gSW1hZ2UgaW50byBvdXRwdXRWZWN0b3IsCisg
ICAgICAgIC8vIHdpdGhvdXQgZG9pbmcgYW55IHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgKHZlcnRp
Y2FsIGZsaXAgb3IKKyAgICAgICAgLy8gb3RoZXJ3aXNlKS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gcHJlbXVsdGlwbHlBbHBoYSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciB3aWxsIGV2ZW50
dWFsbHkKKyAgICAgICAgLy8gd2FudCB0aGUgYWxwaGEgY2hhbm5lbCBtdWx0aXBsaWVkIGludG8g
dGhlIGNvbG9yIGNoYW5uZWxzLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgb3V0IHBhcmFt
ZXRlciBoYXNBbHBoYUNoYW5uZWwgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCisgICAgICAgIC8vIGlt
YWdlIGFjdHVhbGx5IGhhZCBhbiBhbHBoYSBjaGFubmVsLgorICAgICAgICAvLworICAgICAgICAv
LyBUaGUgb3V0IHBhcmFtZXRlciBuZWVkZWRBbHBoYU9wIHNob3VsZCBiZSBwYXNzZWQgdG8gYQor
ICAgICAgICAvLyBzdWJzZXF1ZW50IGNhbGwgb2YgcHJvY2Vzc0ltYWdlRGF0YS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIG91dCBwYXJhbWV0ZXIgZm9ybWF0IHNob3VsZCBiZSBwYXNzZWQg
dG8gc3Vic2VxdWVudAorICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0ZXhJbWFnZTJEIGFuZCB0
ZXhTdWJJbWFnZTJELgorICAgICAgICBib29sIGdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpOworCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0OwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJ
bWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBoYU9wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQoreworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWNnSW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFn
ZSk7CisgICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7CisgICAgaW50
IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1h
Z2VHZXRBbHBoYUluZm8oY2dJbWFnZSk7CisgICAgKmhhc0FscGhhQ2hhbm5lbCA9IChpbmZvICE9
IGtDR0ltYWdlQWxwaGFOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8g
IT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghcHJlbXVsdGlwbHlBbHBo
YSAmJiAqaGFzQWxwaGFDaGFubmVsKQorICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUg
aW1hZ2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKKyAgICAgICAgKm5l
ZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7CisgICAgKmZvcm1hdCA9IFJHQkE7Cisg
ICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShoZWlnaHQgKiByb3dCeXRlcyk7CisgICAgLy8gVHJ5IHRv
IHJldXNlIHRoZSBjb2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29s
b3JzLgorICAgIC8vIFNvbWUgaW1hZ2VzIHVzZSBhIGNvbG9yIHNwYWNlIChzdWNoIGFzIGluZGV4
ZWQpIHVuc3VwcG9ydGVkIGJ5IHRoZSBiaXRtYXAgY29udGV4dC4KKyAgICBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKGNnSW1hZ2UpOworICAgIGJvb2wg
cmVsZWFzZUNvbG9yU3BhY2UgPSBmYWxzZTsKKyAgICBDR0NvbG9yU3BhY2VNb2RlbCBjb2xvclNw
YWNlTW9kZWwgPSBDR0NvbG9yU3BhY2VHZXRNb2RlbChjb2xvclNwYWNlKTsKKyAgICBzd2l0Y2gg
KGNvbG9yU3BhY2VNb2RlbCkgeworICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsTW9ub2Nocm9t
ZToKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbFJHQjoKKyAgICBjYXNlIGtDR0NvbG9yU3Bh
Y2VNb2RlbENNWUs6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxMYWI6CisgICAgY2FzZSBr
Q0dDb2xvclNwYWNlTW9kZWxEZXZpY2VOOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JT
cGFjZUdlbmVyaWNSR0JMaW5lYXIpOworICAgICAgICByZWxlYXNlQ29sb3JTcGFjZSA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDR0NvbnRleHRSZWYgdG1wQ29udGV4dCA9IENH
Qml0bWFwQ29udGV4dENyZWF0ZShvdXRwdXRWZWN0b3IuZGF0YSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDgsIHJv
d0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KTsKKyAgICBpZiAocmVs
ZWFzZUNvbG9yU3BhY2UpCisgICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7
CisgICAgaWYgKCF0bXBDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKHRtcENvbnRleHQsIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29u
dGV4dERyYXdJbWFnZSh0bXBDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RN
YWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9h
dD4oaGVpZ2h0KSksCisgICAgICAgICAgICAgICAgICAgICAgIGNnSW1hZ2UpOworICAgIENHQ29u
dGV4dFJlbGVhc2UodG1wQ29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5jcHAJKHJldmlzaW9uIDU0ODMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI2LDMxICsx
MTI2LDYgQEAgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliTwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGxvbmc+KHBvaW50ZXIpOwogfQogCi0vLyBSZXR1cm5lZCBw
b2ludGVyIG11c3QgYmUgZnJlZWQgYnkgZmFzdEZyZWUoKQotc3RhdGljIGJvb2wgaW1hZ2VUb1Rl
eHR1cmUoSW1hZ2UqIGltYWdlLCBHTHVieXRlKiYgYnVmZmVyLCBzaXplX3QmIHdpZHRoLCBzaXpl
X3QmIGhlaWdodCkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgQ0dJbWFnZVJlZiB0ZXh0dXJlSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigp
OwotICAgIGlmICghdGV4dHVyZUltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgodGV4dHVyZUltYWdlKTsKLSAgICBoZWlnaHQgPSBD
R0ltYWdlR2V0SGVpZ2h0KHRleHR1cmVJbWFnZSk7Ci0gICAgCi0gICAgYnVmZmVyID0gKEdMdWJ5
dGUqKSBmYXN0TWFsbG9jKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgaWYgKCFidWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgQ0dDb250ZXh0UmVmIHRleHR1cmVD
b250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgOCwg
d2lkdGggKiA0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dJbWFnZUdldENvbG9yU3BhY2UodGV4dHVyZUltYWdlKSwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodGV4dHVy
ZUNvbnRleHQsIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZXh0
dXJlQ29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCAoQ0dGbG9hdCl3aWR0aCwgKENHRmxvYXQpaGVp
Z2h0KSwgdGV4dHVyZUltYWdlKTsKLSAgICBDR0NvbnRleHRSZWxlYXNlKHRleHR1cmVDb250ZXh0
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9y
bWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQogewogICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIGRvIGJvdW5kcyBjaGVja2luZyBvbiB0aGUgYnVmZmVyIGhlcmUuCkBAIC0x
MTYwLDIwICsxMTM1LDEyIEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNp
Z24KIAogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhKQogewotICAgIC8vIEZJWE1FOiBuZWVkIHRvIHN1cHBvcnQgZmxpcFkgYW5kIHByZW11
bHRpcGx5QWxwaGEKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIFVOVVNFRF9QQVJBTShw
cmVtdWx0aXBseUFscGhhKTsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBHTHVieXRlKiBidWZmZXI7Ci0gICAgc2l6ZV90IHdp
ZHRoOwotICAgIHNpemVfdCBoZWlnaHQ7Ci0gICAgaWYgKCFpbWFnZVRvVGV4dHVyZShpbWFnZSwg
YnVmZmVyLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwor
ICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OworICAgIGlmICghZXh0cmFj
dEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZv
cm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIDo6
Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIEdMX1JHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGJ1ZmZlcik7Ci0gICAgZmFzdEZyZWUoYnVmZmVyKTsK
KyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBp
bWFnZURhdGEuZGF0YSgpKTsKICAgICByZXR1cm4gMDsKIH0KICAgICAKQEAgLTExODgsMjAgKzEx
NTUsMTIgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVucwogaW50IEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQogewogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5l
ZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdl
IGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIC8vIEZJWE1F
OiBuZWVkIHRvIHN1cHBvcnQgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEKLSAgICBVTlVTRURf
UEFSQU0oZmxpcFkpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBB
U1NFUlQoaW1hZ2UpOwotICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAg
ICBHTHVieXRlKiBidWZmZXI7Ci0gICAgc2l6ZV90IHdpZHRoOwotICAgIHNpemVfdCBoZWlnaHQ7
Ci0gICAgaWYgKCFpbWFnZVRvVGV4dHVyZShpbWFnZSwgYnVmZmVyLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIHVuc2lnbmVkIGludCBmb3JtYXQs
IGludGVybmFsRm9ybWF0OworICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkK
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIGJ1ZmZlcik7Ci0gICAgZmFzdEZyZWUoYnVmZmVyKTsKKyAgICA6OmdsVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdo
dCgpLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwogICAgIHJl
dHVybiAwOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0M0RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRh
KEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpCit7CisgICAgaWYgKCFp
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUlt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFza2lh
SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFD
b25maWcgPSBza2lhSW1hZ2UtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQg
bW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucy4KKyAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa0JpdG1h
cCYgc2tpYUltYWdlUmVmID0gKnNraWFJbWFnZTsKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2so
c2tpYUltYWdlUmVmKTsKKyAgICBpbnQgd2lkdGggPSBza2lhSW1hZ2UtPndpZHRoKCk7CisgICAg
aW50IGhlaWdodCA9IHNraWFJbWFnZS0+aGVpZ2h0KCk7CisgICAgaW50IHJvd0J5dGVzID0gc2tp
YUltYWdlLT5yb3dCeXRlcygpOworICAgIEFTU0VSVChyb3dCeXRlcyA9PSB3aWR0aCAqIDQpOwor
ICAgIHVpbnQ4X3QqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNraWFJbWFn
ZS0+Z2V0UGl4ZWxzKCkpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUocm93Qnl0ZXMgKiBoZWln
aHQpOworICAgIG1lbWNweShvdXRwdXRWZWN0b3IuZGF0YSgpLCBwaXhlbHMsIHJvd0J5dGVzICog
aGVpZ2h0KTsKKyAgICAqaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICBpZiAoIXByZW11bHRp
cGx5QWxwaGEpCisgICAgICAgIC8vIEZJWE1FOiBtdXN0IGZldGNoIHRoZSBpbWFnZSBkYXRhIGJl
Zm9yZSB0aGUgcHJlbXVsdGlwbGljYXRpb24gc3RlcAorICAgICAgICAqbmVlZGVkQWxwaGFPcCA9
IGtBbHBoYURvVW5tdWx0aXBseTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVwZW5kZW5j
eSBvbiBkZXNrdG9wIE9wZW5HTAorICAgICpmb3JtYXQgPSAweDgwRTE7IC8vIEdMX0JHUkEKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTQ4MzApCisrKyBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRleEltYWdl
MkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVzZSBjb21tb24gY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTgKKworICAg
ICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hyb21pdW0gY29kZSB3aGljaCBleHRyYWN0cyB0
aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9iamVjdHMgaW50byBjb21tb24gZW50cnkgcG9p
bnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlzCisgICAgICAgIGltbWVkaWF0ZWx5IGZpeGVz
IHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6CisgICAgICAgICAgLSBDaHJvbWl1bSBub3Qg
aW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlLgorICAgICAgICAgIC0gU2Fm
YXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJhbWV0ZXIgdG8gdGV4SW1hZ2UyRCBvcgorICAg
ICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgICAgLSBTYWZhcmkg
bm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBoYSBwYXJhbWV0ZXIgdG8gdGV4SW1hZ2UyRAor
ICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0YWtpbmcgSW1hZ2UuCisgICAgICAgIEFkZGVk
IG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGV4SW1hZ2UyRCBhbmQKKyAgICAg
ICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZIHBhcmFtZXRlci4gVGhlIHByZW11bHRpcGx5
QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBub3QgYmUgdGVzdGVkIHlldCBhcyB0aGUgaW1w
bGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAgICBzcGVjIGNvbXBsaWFudC4gVGhpcyB3aWxs
IGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4KKworICAgICAgICBSYW4gYWxsIFdlYkdMIGRl
bW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZhcmkgYW5kIENocm9taXVtOworICAgICAgICB0
ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkgdXAgaW4gYm90aCBicm93c2VycywgYW5kCisg
ICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGluIFBhcnRpY2xlcyBkZW1vIG5vdyBsb29rIGNv
cnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKwogMjAxMC0w
Mi0xNSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNELmNwcAkocmV2aXNpb24gNTQ4MzApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTcgKzY1LDEyIEBACiAj
aWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1h
cENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2luY2x1ZGUg
PE9wZW5HTC9PcGVuR0wuaD4KICNlbHNlCiAjZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElD
QUxMWQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgotI2VuZGlmCi0KICNpZiBPUyhEQVJXSU4pCiAjZGVmaW5lIFVTRV9URVhUVVJFX1JF
Q1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKICNlbmRpZgpAQCAtMTg3OCwxNzggKzE4NzMsMTcgQEAg
aW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHJldHVybiAwOwog
fQogCi0vLyBSZW1vdmUgcHJlbXVsdGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgot
Ly8gRklYTUU6IHRoaXMgaXMgbG9zc3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZy
b20gSFRNTEltYWdlRWxlbWVudC4KLXN0YXRpYyB2b2lkIHVubXVsdGlwbHlBbHBoYSh1bnNpZ25l
ZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVBpeGVsczsgaisrKSB7Ci0gICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMF0g
LyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0g
ICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0
IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewot
ICAgICAgICAgICAgYiAvPSBhOwotICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgciAv
PSBhOwotICAgICAgICAgICAgYiA9IChiID4gMS4wZikgPyAxLjBmIDogYjsKLSAgICAgICAgICAg
IGcgPSAoZyA+IDEuMGYpID8gMS4wZiA6IGc7Ci0gICAgICAgICAgICByID0gKHIgPiAxLjBmKSA/
IDEuMGYgOiByOwotICAgICAgICAgICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIp
IChiICogMjU1LjBmKTsKLSAgICAgICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBj
aGFyKSAoZyAqIDI1NS4wZik7Ci0gICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWdu
ZWQgY2hhcikgKHIgKiAyNTUuMGYpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBGSVhNRTog
dGhpcyBtdXN0IGJlIGNoYW5nZWQgdG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGltYWdlIGRhdGEK
LS8vIHJhdGhlciB0aGFuIHVubXVsdGlwbHlpbmcgdGhlIGFscGhhIGNoYW5uZWwuCi1zdGF0aWMg
aW50IHRleEltYWdlMkRIZWxwZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lwQWxwaGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIEFTU0VSVChm
b3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQSk7Ci0gICAgR0xpbnQgaW50ZXJu
YWxGb3JtYXQgPSBHTF9SR0JBODsKLSAgICBpZiAoc2tpcEFscGhhKSB7Ci0gICAgICAgIGludGVy
bmFsRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVs
Ci0gICAgICAgIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZmxpcFkp
IHsKLSAgICAgICAgLy8gTmVlZCB0byBmbGlwIGltYWdlcyB2ZXJ0aWNhbGx5LiBUbyBhdm9pZCBt
YWtpbmcgYSBjb3B5IG9mCi0gICAgICAgIC8vIHRoZSBlbnRpcmUgaW1hZ2UsIHdlIHBlcmZvcm0g
YSB0b24gb2YgZ2xUZXhTdWJJbWFnZTJECi0gICAgICAgIC8vIGNhbGxzLiBGSVhNRTogc2hvdWxk
IHJldGhpbmsgdGhpcyBzdHJhdGVneSBmb3IgZWZmaWNpZW5jeS4KLSAgICAgICAgZ2xUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICB1bnNp
Z25lZCBjaGFyKiByb3cgPSAwOwotICAgICAgICBib29sIGFsbG9jYXRlZFJvdyA9IGZhbHNlOwot
ICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgIHJvdyA9IG5ldyB1
bnNpZ25lZCBjaGFyW3Jvd0J5dGVzXTsKLSAgICAgICAgICAgIGFsbG9jYXRlZFJvdyA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewot
ICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICAgICAgcm93ID0g
cGl4ZWxzICsgKHJvd0J5dGVzICogaSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBtZW1jcHkocm93LCBwaXhlbHMgKyAocm93Qnl0ZXMgKiBpKSwgcm93Qnl0ZXMpOwotICAg
ICAgICAgICAgICAgIHVubXVsdGlwbHlBbHBoYShyb3csIHdpZHRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBoZWlnaHQgLSBp
IC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhbGxvY2F0ZWRSb3cpCi0gICAgICAgICAgICBkZWxldGVbXSByb3c7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHBpeGVscyBvZiBjdWJlIG1hcHMnIGZhY2Vz
IGFyZSBkZWZpbmVkIHdpdGggYSB0b3AtZG93bgotICAgICAgICAvLyBzY2FubGluZSBvcmRlcmlu
ZywgdW5saWtlIEdMX1RFWFRVUkVfMkQsIHNvIHdoZW4gdXBsb2FkaW5nCi0gICAgICAgIC8vIHRo
ZXNlLCB0aGUgYWJvdmUgdmVydGljYWwgZmxpcCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gZG8uCi0g
ICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVscyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIDAp
OwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbcm93
Qnl0ZXNdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewot
ICAgICAgICAgICAgICAgIG1lbWNweShyb3csIHBpeGVscyArIChyb3dCeXRlcyAqIGkpLCByb3dC
eXRlcyk7Ci0gICAgICAgICAgICAgICAgdW5tdWx0aXBseUFscGhhKHJvdywgd2lkdGgpOwotICAg
ICAgICAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCAwLCBpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlW10gcm93OwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiAwOwotfQotCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
IHsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCi0gICAgaW50IHJlcyA9IC0xOwotI2lmIFBMQVRGT1JN
KFNLSUEpCi0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXNraWFJbWFnZSkgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhSW1hZ2UtPmNvbmZpZygpOwotICAgIC8vIEZJWE1F
OiBtdXN0IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucy4KLSAgICBpZiAoc2tpYUNv
bmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICB1bnNpZ25l
ZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRl
cm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgU2tCaXRtYXAmIHNr
aWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJ
bWFnZVJlZik7Ci0gICAgaW50IHdpZHRoID0gc2tpYUltYWdlLT53aWR0aCgpOwotICAgIGludCBo
ZWlnaHQgPSBza2lhSW1hZ2UtPmhlaWdodCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNraWFJbWFnZS0+Z2V0
UGl4ZWxzKCkpOwotICAgIGludCByb3dCeXRlcyA9IHNraWFJbWFnZS0+cm93Qnl0ZXMoKTsKLSAg
ICByZXMgPSB0ZXhJbWFnZTJESGVscGVyKHRhcmdldCwgbGV2ZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93
Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBo
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0JHUkEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0j
ZWxpZiBQTEFURk9STShDRykKLSAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWNnSW1hZ2UpIHsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaW50IHdp
ZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwotICAgIGludCBoZWlnaHQgPSBDR0ltYWdl
R2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBD
R0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpOwotICAg
IGJvb2wgc2tpcEFscGhhID0gKGluZm8gPT0ga0NHSW1hZ2VBbHBoYU5vbmUKLSAgICAgICAgICAg
ICAgICAgICB8fCBpbmZvID09IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QKLSAgICAgICAgICAg
ICAgICAgICB8fCBpbmZvID09IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBpbWFnZURhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltoZWlnaHQgKiByb3dCeXRl
c107Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVX
aXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQik7Ci0gICAgQ0dDb250ZXh0UmVmIHRtcENv
bnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoaW1hZ2VEYXRhLCB3aWR0aCwgaGVpZ2h0LCA4
LCByb3dCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvclNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7Ci0gICAgQ0dD
b2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUo
dG1wQ29udGV4dCwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRt
cENvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY2dJbWFnZSk7Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0bXBD
b250ZXh0KTsKLSAgICByZXMgPSB0ZXhJbWFnZTJESGVscGVyKHRhcmdldCwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIEdMX1JHQkEsIHNraXBBbHBoYSwgaW1hZ2VEYXRhKTsKLSAgICBkZWxl
dGVbXSBpbWFnZURhdGE7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3Jt
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdl
LT5oZWlnaHQoKSwgMCwKKyAgICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCBpbWFnZURhdGEuZGF0YSgpKTsKKyAgICByZXR1cm4gMDsKIH0KIAogR0xfU0FNRV9NRVRIT0Rf
MyhUZXhQYXJhbWV0ZXJmLCB0ZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0
KTsKQEAgLTIwNzgsOSArMTkxMiwxNCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQodW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlw
WSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5
QWxwaGEpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAtMTsKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIHVu
c2lnbmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OworICAgIGlmICghZXh0cmFjdEltYWdl
RGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwg
JmludGVybmFsRm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGdsVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBp
bWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworICAgIHJldHVybiAwOwog
fQogCiBHTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0xZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0ODMwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDItMTIgIEtlbm5ldGggUnVzc2VsbCAg
PGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIElt
YWdlIHRvIHVzZSBjb21tb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ0NTgKKworICAgICAgICBNZXJnZWQgdGhlIFNhZmFyaSBhbmQgQ2hy
b21pdW0gY29kZSB3aGljaCBleHRyYWN0cyB0aGUgZGF0YSBmcm9tCisgICAgICAgIEltYWdlIG9i
amVjdHMgaW50byBjb21tb24gZW50cnkgcG9pbnRzIG9uIEdyYXBoaWNzQ29udGV4dDNELiBUaGlz
CisgICAgICAgIGltbWVkaWF0ZWx5IGZpeGVzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvYmxlbXM6
CisgICAgICAgICAgLSBDaHJvbWl1bSBub3QgaW1wbGVtZW50aW5nIHRleFN1YkltYWdlMkQgdGFr
aW5nIEltYWdlLgorICAgICAgICAgIC0gU2FmYXJpIG5vdCBvYmV5aW5nIHRoZSBmbGlwWSBwYXJh
bWV0ZXIgdG8gdGV4SW1hZ2UyRCBvcgorICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCB0YWtpbmcg
SW1hZ2UuCisgICAgICAgICAgLSBTYWZhcmkgbm90IG9iZXlpbmcgdGhlIHByZW11bHRpcHlBbHBo
YSBwYXJhbWV0ZXIgdG8gdGV4SW1hZ2UyRAorICAgICAgICAgICAgb3IgdGV4U3ViSW1hZ2UyRCB0
YWtpbmcgSW1hZ2UuCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IHZlcmlmeWluZyB0aGUgYmVoYXZp
b3Igb2YgdGV4SW1hZ2UyRCBhbmQKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCBhbmQgdGhlIGZsaXBZ
IHBhcmFtZXRlci4gVGhlIHByZW11bHRpcGx5QWxwaGEKKyAgICAgICAgcGFyYW1ldGVyIGNhbiBu
b3QgYmUgdGVzdGVkIHlldCBhcyB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldAorICAgICAg
ICBzcGVjIGNvbXBsaWFudC4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIGEgZm9sbG93LW9uIGJ1Zy4K
KworICAgICAgICBSYW4gYWxsIFdlYkdMIGRlbW9zIGluIGRlbW8gcmVwb3NpdG9yeSBvbiBTYWZh
cmkgYW5kIENocm9taXVtOworICAgICAgICB0ZXh0dXJlcyBhcmUgbm93IHRoZSByaWdodCB3YXkg
dXAgaW4gYm90aCBicm93c2VycywgYW5kCisgICAgICAgIHRyYW5zcGFyZW50IHRleHR1cmVzIGlu
IFBhcnRpY2xlcyBkZW1vIG5vdyBsb29rIGNvcnJlY3QgaW4gU2FmYXJpLgorCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3JlZC1ncmVlbi5wbmc6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1h
Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgt
aW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAy
LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQt
c3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0
aC1pbWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKK1Zlcmlm
eSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGNvZGUgcGF0aHMgdGFraW5nIEltYWdlcywg
aW4gcGFydGljdWxhciBmbGlwWSBhcmd1bWVudAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1JlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0NDU4IDogUmVmYWN0b3IgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0YWtp
bmcgSW1hZ2UgdG8gdXNlIGNvbW1vbiBjb2RlCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlw
WT10cnVlCitDaGVja2luZyBsb3dlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0
Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RD
b2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVyIGxlZnQgY29y
bmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29s
b3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xv
cgorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK0NoZWNraW5nIGxvd2VyIGxl
ZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3Jy
ZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJl
Y3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4ZWwgaXMgY29ycmVj
dENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0
Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHRleFN1YkltYWdlMkQg
d2l0aCBmbGlwWT10cnVlCitDaGVja2luZyBsb3dlciBsZWZ0IGNvcm5lcgorUEFTUyBwaXhlbCBp
cyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlz
IGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK0NoZWNraW5nIHVwcGVy
IGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhlbCBpcyBj
b3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNv
cnJlY3RDb2xvcgorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK0NoZWNr
aW5nIGxvd2VyIGxlZnQgY29ybmVyCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBw
aXhlbCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBp
eGVsIGlzIGNvcnJlY3RDb2xvcgorQ2hlY2tpbmcgdXBwZXIgbGVmdCBjb3JuZXIKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorUEFTUyBwaXhl
bCBpcyBjb3JyZWN0Q29sb3IKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFn
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1p
bWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtaW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTggQEAKKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+
Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1
dGUgdmVjMyBnX1Bvc2l0aW9uOworYXR0cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3Zhcnlp
bmcgdmVjMiB0ZXhDb29yZDsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZl
YzQoZ19Qb3NpdGlvbi54LCBnX1Bvc2l0aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0
ZXhDb29yZCA9IGdfVGV4Q29vcmQwOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFk
ZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgordW5pZm9ybSBzYW1wbGVyMkQgdGV4Owor
dmFyeWluZyB2ZWMyIHRleENvb3JkOworCit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xv
ciA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0Pgor
dmFyIGdsID0gbnVsbDsKK3ZhciB0ZXh0dXJlTG9jID0gbnVsbDsKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSBmYWxzZTsKKworZnVuY3Rpb24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlk
ZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgdGV4SW1h
Z2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBjb2RlIHBhdGhzIHRha2luZyBJbWFnZXMsIGluIHBhcnRp
Y3VsYXIgZmxpcFkgYXJndW1lbnQnKTsKKworICAgIGRlYnVnKCdSZWdyZXNzaW9uIHRlc3QgZm9y
IDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ1OCI+
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDU4PC9hPiA6IDxjb2Rl
PlJlZmFjdG9yIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEltYWdlIHRvIHVz
ZSBjb21tb24gY29kZTwvY29kZT4nKTsKKworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwg
InZzaGFkZXIiLCAiZnNoYWRlciIsIFsgImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsg
MCwgMCwgMCwgMSBdLCAxKTsKKyAgICBnbC52aWV3cG9ydCgwLCAwLCAzMiwgMzIpOworCisgICAg
dGV4dHVyZUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihnbC5wcm9ncmFtLCAidGV4Iik7CisK
KyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEuMCwg
IDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAs
IDAuMCwKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAs
CisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciB0ZXhDb29yZHMgPSBuZXcgV2Vi
R0xGbG9hdEFycmF5KFsKKyAgICAgICAgMS4wLCAxLjAsCisgICAgICAgIDAuMCwgMS4wLAorICAg
ICAgICAwLjAsIDAuMCwKKyAgICAgICAgMS4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAorICAg
ICAgICAxLjAsIDAuMF0pOworICAgIHZhciB0ZXhDb29yZE9mZnNldCA9IHZlcnRpY2VzLmJ5dGVM
ZW5ndGg7CisKKyAgICB2YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9C
VUZGRVIsCisgICAgICAgICAgICAgICAgICB0ZXhDb29yZE9mZnNldCArIHRleENvb3Jkcy5ieXRl
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmJ1ZmZl
clN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB2ZXJ0aWNlcyk7CisgICAgZ2wuYnVmZmVyU3Vi
RGF0YShnbC5BUlJBWV9CVUZGRVIsIHRleENvb3JkT2Zmc2V0LCB0ZXhDb29yZHMpOworCisgICAg
Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRl
cigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KDEpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgMiwgZ2wuRkxPQVQsIGds
LkZBTFNFLCAwLCB0ZXhDb29yZE9mZnNldCk7CisKKyAgICBsb2FkVGV4dHVyZSgicmVzb3VyY2Vz
L3JlZC1ncmVlbi5wbmciKTsKK30KKworZnVuY3Rpb24gbG9hZFRleHR1cmUoc3JjKSB7CisgICAg
dmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wu
VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJE
LCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRl
cmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAg
ICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAg
ICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgaW1hZ2UsIHRydWUpOworICAgICAg
ICBydW5UZXN0KGltYWdlKTsKKyAgICB9OworICAgIGltYWdlLnNyYyA9IHNyYzsKKyAgICByZXR1
cm4gdGV4dHVyZTsKK30KKworLy8gVGhlc2UgdHdvIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGds
b2JhbCBmb3IgInNob3VsZEJlIiB0byBzZWUgdGhlbQordmFyIGJ1ZiA9IG51bGw7Cit2YXIgaWR4
ID0gMDsKK3ZhciBwaXhlbCA9IFswLCAwLCAwXTsKK3ZhciBjb3JyZWN0Q29sb3IgPSBudWxsOwor
CitmdW5jdGlvbiBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIHVzZVRleFN1YkltYWdlMkQsIGZsaXBZ
LCB0b3BDb2xvciwgYm90dG9tQ29sb3IpCit7CisgICAgZGVidWcoJ1Rlc3RpbmcgJyArICh1c2VU
ZXhTdWJJbWFnZTJEID8gJ3RleFN1YkltYWdlMkQnIDogJ3RleEltYWdlMkQnKSArCisgICAgICAg
ICAgJyB3aXRoIGZsaXBZPScgKyBmbGlwWSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVS
X0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgIC8vIERpc2FibGUgYW55IHdyaXRlcyB0
byB0aGUgYWxwaGEgY2hhbm5lbAorICAgIGdsLmNvbG9yTWFzaygxLCAxLCAxLCAwKTsKKyAgICB2
YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICAvLyBCaW5kIHRoZSB0ZXh0dXJl
IHRvIHRleHR1cmUgdW5pdCAwCisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4
dHVyZSk7CisgICAgLy8gU2V0IHVwIHRleHR1cmUgcGFyYW1ldGVycworICAgIGdsLnRleFBhcmFt
ZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsK
KyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRF
UiwgZ2wuTkVBUkVTVCk7CisgICAgLy8gVXBsb2FkIHRoZSBpbWFnZSBpbnRvIHRoZSB0ZXh0dXJl
CisgICAgaWYgKHVzZVRleFN1YkltYWdlMkQpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
dGV4dHVyZSB0byBibGFjayBmaXJzdAorICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVf
MkQsIDAsIGdsLlJHQiwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICAgICAgZ2wu
dGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBpbWFnZSwgZmxpcFksIGZhbHNl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IGltYWdlLCBmbGlwWSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIFBvaW50IHRoZSB1bmlmb3Jt
IHNhbXBsZXIgdG8gdGV4dHVyZSB1bml0IDAKKyAgICBnbC51bmlmb3JtMWkodGV4dHVyZUxvYywg
MCk7CisgICAgLy8gRHJhdyB0aGUgdHJpYW5nbGVzCisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklB
TkdMRVMsIDAsIDYpOworCisgICAgLy8gUmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cwor
ICAgIHZhciB3aWR0aCA9IDMyOworICAgIHZhciBoZWlnaHQgPSAzMjsKKyAgICBidWYgPSBnbC5y
ZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUp
OworICAgIC8vIENoZWNrIGEgZmV3IHBpeGVscyBuZWFyIHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQg
bWFrZSBzdXJlIHRoZXkgaGF2ZQorICAgIC8vIHRoZSByaWdodCBjb2xvci4KKyAgICB2YXIgcXVl
cnlXaWR0aCA9IDI7CisgICAgdmFyIHF1ZXJ5SGVpZ2h0ID0gMjsKKyAgICBkZWJ1ZygiQ2hlY2tp
bmcgbG93ZXIgbGVmdCBjb3JuZXIiKTsKKyAgICB2YXIgeG9mZiA9IDQ7CisgICAgdmFyIHlvZmYg
PSA0OworICAgIGNvcnJlY3RDb2xvciA9IGJvdHRvbUNvbG9yOworICAgIGZvciAodmFyIHkgPSAw
OyB5IDwgcXVlcnlIZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1
ZXJ5V2lkdGg7IHgrKykgeworICAgICAgICAgICAgaWR4ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAq
IDQgKworICAgICAgICAgICAgICAgICAgICh4b2ZmICsgeCkgKiA0KTsKKyAgICAgICAgICAgIHBp
eGVsWzBdID0gYnVmW2lkeF07CisgICAgICAgICAgICBwaXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsK
KyAgICAgICAgICAgIHBpeGVsWzJdID0gYnVmW2lkeCArIDJdOworICAgICAgICAgICAgc2hvdWxk
QmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVn
KCJDaGVja2luZyB1cHBlciBsZWZ0IGNvcm5lciIpOworICAgIHlvZmYgPSBoZWlnaHQgLSA4Owor
ICAgIGNvcnJlY3RDb2xvciA9IHRvcENvbG9yOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcXVl
cnlIZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHF1ZXJ5V2lkdGg7
IHgrKykgeworICAgICAgICAgICAgaWR4ID0gKCh5b2ZmICsgeSkgKiB3aWR0aCAqIDQgKworICAg
ICAgICAgICAgICAgICAgICh4b2ZmICsgeCkgKiA0KTsKKyAgICAgICAgICAgIHBpeGVsWzBdID0g
YnVmW2lkeF07CisgICAgICAgICAgICBwaXhlbFsxXSA9IGJ1ZltpZHggKyAxXTsKKyAgICAgICAg
ICAgIHBpeGVsWzJdID0gYnVmW2lkeCArIDJdOworICAgICAgICAgICAgc2hvdWxkQmUoInBpeGVs
IiwgImNvcnJlY3RDb2xvciIpOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBydW5U
ZXN0KGltYWdlKQoreworICAgIHZhciByZWQgPSBbMjU1LCAwLCAwXTsKKyAgICB2YXIgZ3JlZW4g
PSBbMCwgMjU1LCAwXTsKKyAgICBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIGZhbHNlLCB0cnVlLCBy
ZWQsIGdyZWVuKTsKKyAgICBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIGZhbHNlLCBmYWxzZSwgZ3Jl
ZW4sIHJlZCk7CisgICAgcnVuT25lSXRlcmF0aW9uKGltYWdlLCB0cnVlLCB0cnVlLCByZWQsIGdy
ZWVuKTsKKyAgICBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIHRydWUsIGZhbHNlLCBncmVlbiwgcmVk
KTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0g
ZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKwor
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0i
ZXhhbXBsZSIgd2lkdGg9IjMycHgiIGhlaWdodD0iMzJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9yZWQt
Z3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9y
ZWQtZ3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBSUFB
QUFXNHlGd0FBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBZ1kwaFNU
UUFBZWlZQUFJQ0VBQUQ2QUFBQWdPZ0FBSFV3QUFEcVlBQUFPcGdBQUJkd25McFJQQUFBQUE1SlJF
RlUKR0ZkaitNOEFCUDhaQUFqL0FmODIwcWdZQUFBQUFFbEZUa1N1UW1DQwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>