<?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>225942</bug_id>
          
          <creation_ts>2021-05-18 16:45:32 -0700</creation_ts>
          <short_desc>Sampled Page Top Color: support sampling non-RGB values like P3</short_desc>
          <delta_ts>2021-06-07 08:36:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225167</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226730</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>224987</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1761375</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-18 16:45:32 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761376</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-18 16:46:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78179713&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763676</commentid>
    <comment_count>2</comment_count>
      <attachid>429691</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-25 14:01:26 -0700</bug_when>
    <thetext>Created attachment 429691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763693</commentid>
    <comment_count>3</comment_count>
      <attachid>429691</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 14:53:10 -0700</bug_when>
    <thetext>Comment on attachment 429691
Patch

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

&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt; +#if ENABLE(DESTINATION_COLOR_SPACE_DISPLAY_P3)
&gt; +    auto colorSpace = DestinationColorSpace::DisplayP3();
&gt; +    using PixelBufferColorType = DisplayP3&lt;uint8_t&gt;;
&gt; +    using SampleColorType = DisplayP3&lt;float&gt;;
&gt; +#else
&gt; +    auto colorSpace = DestinationColorSpace::SRGB();
&gt; +    using PixelBufferColorType = SRGBA&lt;uint8_t&gt;;
&gt; +    using SampleColorType = SRGBA&lt;float&gt;;
&gt; +#endif

This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763697</commentid>
    <comment_count>4</comment_count>
      <attachid>429691</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-25 15:02:28 -0700</bug_when>
    <thetext>Comment on attachment 429691
Patch

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

&gt;&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt;&gt; +#endif
&gt; 
&gt; This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?

Are you suggesting like some sort of `colorTypeFromColorSpace`?  AFAIK that isn&apos;t a thing we have right now.  Can you elaborate more a bit on what you mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763698</commentid>
    <comment_count>5</comment_count>
      <attachid>429691</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 15:10:50 -0700</bug_when>
    <thetext>Comment on attachment 429691
Patch

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

&gt;&gt;&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?
&gt; 
&gt; Are you suggesting like some sort of `colorTypeFromColorSpace`?  AFAIK that isn&apos;t a thing we have right now.  Can you elaborate more a bit on what you mean?

No, I meant picking a color space compile-time is weird, when you should really be using the one that the owning view will render with! What if it&apos;s wider than P3? Let&apos;s see what Sam says.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763699</commentid>
    <comment_count>6</comment_count>
      <attachid>429691</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-25 15:13:19 -0700</bug_when>
    <thetext>Comment on attachment 429691
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt; 
&gt;&gt;&gt; This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?
&gt;&gt; 
&gt;&gt; Are you suggesting like some sort of `colorTypeFromColorSpace`?  AFAIK that isn&apos;t a thing we have right now.  Can you elaborate more a bit on what you mean?
&gt; 
&gt; No, I meant picking a color space compile-time is weird, when you should really be using the one that the owning view will render with! What if it&apos;s wider than P3? Let&apos;s see what Sam says.

FYI right now `DestinationColorSpace` only supports sRGB, Linear sRGB, and P3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763700</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 15:17:27 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #6)
&gt; Comment on attachment 429691 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429691&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt; &gt;&gt;&gt;&gt; +#endif
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?
&gt; &gt;&gt; 
&gt; &gt;&gt; Are you suggesting like some sort of `colorTypeFromColorSpace`?  AFAIK that isn&apos;t a thing we have right now.  Can you elaborate more a bit on what you mean?
&gt; &gt; 
&gt; &gt; No, I meant picking a color space compile-time is weird, when you should really be using the one that the owning view will render with! What if it&apos;s wider than P3? Let&apos;s see what Sam says.
&gt; 
&gt; FYI right now `DestinationColorSpace` only supports sRGB, Linear sRGB, and
&gt; P3.

1) Is it chosen at compile time?
2) Do you think if someone adds one, they&apos;ll fix your code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763737</commentid>
    <comment_count>8</comment_count>
      <attachid>429691</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-25 16:16:16 -0700</bug_when>
    <thetext>Comment on attachment 429691
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/page/PageColorSampler.cpp:111
&gt;&gt;&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This seems a bit surprising to be hardcoded (and by a compile time flag no less!), shouldn&apos;t it follow the actual destination colorspace?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Are you suggesting like some sort of `colorTypeFromColorSpace`?  AFAIK that isn&apos;t a thing we have right now.  Can you elaborate more a bit on what you mean?
&gt;&gt;&gt; 
&gt;&gt;&gt; No, I meant picking a color space compile-time is weird, when you should really be using the one that the owning view will render with! What if it&apos;s wider than P3? Let&apos;s see what Sam says.
&gt;&gt; 
&gt;&gt; FYI right now `DestinationColorSpace` only supports sRGB, Linear sRGB, and P3.
&gt; 
&gt; 1) Is it chosen at compile time?
&gt; 2) Do you think if someone adds one, they&apos;ll fix your code?

DestinationColorSpace can support all color spaces. Like Tim said, this should use the color space the hosting view is using.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429691</attachid>
            <date>2021-05-25 14:01:26 -0700</date>
            <delta_ts>2021-05-25 15:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225942-20210525150125.patch</filename>
            <type>text/plain</type>
            <size>33975</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ODlmZmUwZjBiMDllM2RjYTI4YzM2ZDFlNzBiMGJiZDA4NzIwMzAzLi5m
MGI3NzE1Y2Y3NmViNTg4YjhiMTMxYzlkOGFkYTk1Y2YwYzgwZDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDkgQEAKKzIwMjEtMDUtMjUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IHN1cHBvcnQgc2FtcGxpbmcgbm9u
LVJHQiB2YWx1ZXMgbGlrZSBQMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1OTQyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83ODE3OTcxMz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBTYW1w
bGVkUGFnZVRvcENvbG9yLkRpc3BsYXlQMworCisgICAgICAgICogcGFnZS9GcmFtZVNuYXBzaG90
dGluZy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RG
cmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpzbmFwc2hvdFNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpzbmFwc2hvdE5vZGUpOgorICAgICAgICBSZW5hbWUgdGhlIGB1
bnNpZ25lZCBTbmFwc2hvdE9wdGlvbnNgIGludG8gYGVudW0gY2xhc3MgU25hcHNob3RGbGFnc2Ag
d2l0aCBhbiBgT3B0aW9uU2V0YC4KKyAgICAgICAgQWRkIGEgbmV3IGBzdHJ1Y3QgU25hcHNob3RP
cHRpb25zYCB0aGF0IGFsc28gYWxsb3dzIGZvciBhIGBEZXN0aW5hdGlvbkNvbG9yU3BhY2VgIGFu
ZCBhCisgICAgICAgIGBQaXhlbEZvcm1hdGAuIERlZmF1bHQgdG8gc1JHQiBhbmQgQkdSQTggaWYg
bmVpdGhlciBhcmUgcHJvdmlkZWQuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VDb2xvclNhbXBsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKToKKyAgICAgICAgVXNlIERpc3BsYXlQMyBhcyB0
aGUgY29sb3Igc3BhY2UgaWYgaXQncyBzdXBwb3J0ZWQuCisgICAgICAgIERyaXZlLWJ5OiBEb24n
dCBjb252ZXJ0IHRoZSBmaW5hbCByZXN1bHQgdG8gTCphKmIgc2luY2UgYEhBVkUoQ09SRV9HUkFQ
SElDU19MQUJfQ09MT1JfU1BBQ0UpYAorICAgICAgICBpcyBjdXJyZW50bHkgZGlzYWJsZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheVAzPHVpbnQ4X3Q+Pjo6Y29udmVydCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheVAzPGZsb2F0Pj46OmNvbnZlcnQpOiBBZGRlZC4KKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIGBEaXNwbGF5UDM8dWludDhfdD5gIGFuZCBjb252ZXJ0aW5nIHRvL2Zyb20gaXQuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdCk6CisgICAgICAg
ICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29u
c29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNuYXBzaG90T3B0aW9uc0ZvclRleHRJbmRpY2F0b3JPcHRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OnRha2VTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0YWtlU25hcHNob3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAgVXBkYXRlIGNhbGxzaXRl
cyBmb3IgYEZyYW1lU25hcHNob3R0aW5nLmhgIGZ1bmN0aW9ucyB3aXRoIG5ldyBgU25hcHNob3RP
cHRpb25zYCBzdHJ1Y3R1cmUuCisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4g
ZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3Bh
Y2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0NWJiOWEwMjUyNDE5MzVlZmM3
MDkyMzUzNGM2NzkyMzliNDVlNmVmLi5mYjc1YmYwZTE0MWNlZWJhZTg5MDU5ZGIyM2I2YTJmMGVl
Y2NkZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTI1ICBEZXZpbiBSb3Vz
c28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBTYW1wbGVkIFBhZ2UgVG9wIENvbG9y
OiBzdXBwb3J0IHNhbXBsaW5nIG5vbi1SR0IgdmFsdWVzIGxpa2UgUDMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTk0MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzgxNzk3MTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorICAgICAg
ICBVcGRhdGUgY2FsbHNpdGVzIGZvciBgV2ViQ29yZS9GcmFtZVNuYXBzaG90dGluZy5oYCBmdW5j
dGlvbnMgd2l0aCBuZXcgYFNuYXBzaG90T3B0aW9uc2Agc3RydWN0dXJlLgorCiAyMDIxLTA1LTI0
ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIERuRF0g
W1dLMl0gZG9uJ3QgY2FuY2VsIHRoZSBsb25nLXByZXNzIGdlc3R1cmUgdW50aWwgd2Uga25vdyB3
ZSBoYXZlIGBVSURyYWdJdGVtYApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDYzOTMyZGFmOTE2OGJmYmM2YWVl
M2JlMmVmN2NjMzEyYzRjMjE0MWQuLmI4MjI0OGNhMDMwYmZmNjVlMjdmN2QwMjViNDkxMmMxNTNm
ODE4OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTEwODEsMTIgKzEwODEsMTIgQEAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90Tm9kZShQcm90
b2NvbDo6RE9NOjoKIAogUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKIHsK
LSAgICBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc05vbmU7CisgICAg
U25hcHNob3RPcHRpb25zIG9wdGlvbnM7CiAgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gUHJv
dG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0KQotICAgICAgICBvcHRpb25z
IHw9IFNuYXBzaG90T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOworICAgICAgICBvcHRpb25zLmZs
YWdzLmFkZChTbmFwc2hvdEZsYWdzOjpJblZpZXdDb29yZGluYXRlcyk7CiAKICAgICBJbnRSZWN0
IHJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBhdXRvIHNuYXBzaG90ID0gc25h
cHNob3RGcmFtZVJlY3QobV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCByZWN0YW5nbGUsIG9w
dGlvbnMpOworICAgIGF1dG8gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChtX2luc3BlY3Rl
ZFBhZ2UubWFpbkZyYW1lKCksIHJlY3RhbmdsZSwgV1RGTW92ZShvcHRpb25zKSk7CiAKICAgICBp
ZiAoIXNuYXBzaG90KQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBj
YXB0dXJlIHNuYXBzaG90Il9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVTbmFwc2hvdHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAKaW5kZXggMjgzMTQyMTExNDEzN2VjMWViNzAzMmM1YmI4OTk5MTc1MDgyNGJiMC4uOTRj
NDYzMzkxMDM1NDJkMWI5ZmFlZDA4ZGViMTQ1NTRhMmFhNjM0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGcmFtZVNuYXBzaG90dGluZy5oIgogCisjaW5jbHVkZSAiRGVz
dGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMzksOCArNDAsMTEgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQaXhlbEZvcm1hdC5oIgogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTY3LDEzICs3MSwxMyBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVQYWludGluZ1N0YXRlIHsKICAgICBj
b25zdCBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiB9OwogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IHNu
YXBzaG90RnJhbWVSZWN0KEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBT
bmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFt
ZVJlY3QoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIFNuYXBzaG90T3B0
aW9ucyYmIG9wdGlvbnMpCiB7CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gY2xpcFJlY3RzOwotICAg
IHJldHVybiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKGZyYW1lLCBpbWFnZVJlY3QsIGNsaXBS
ZWN0cywgb3B0aW9ucyk7CisgICAgcmV0dXJuIHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoZnJh
bWUsIGltYWdlUmVjdCwgY2xpcFJlY3RzLCBXVEZNb3ZlKG9wdGlvbnMpKTsKIH0KIAotUmVmUHRy
PEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29u
c3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgY2xpcFJlY3Rz
LCBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RG
cmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwg
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGNsaXBSZWN0cywgU25hcHNob3RPcHRpb25zJiYgb3B0
aW9ucykKIHsKICAgICBpZiAoIWZyYW1lLnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC04MSwyMyArODUsMjMgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVj
dFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmVjdCYgaW1hZ2UKICAgICBmcmFtZS5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgIEZyYW1lVmlldzo6U2VsZWN0aW9uSW5T
bmFwc2hvdCBzaG91bGRJbmNsdWRlU2VsZWN0aW9uID0gRnJhbWVWaWV3OjpJbmNsdWRlU2VsZWN0
aW9uOwotICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zRXhjbHVkZVNlbGVjdGlvbkhp
Z2hsaWdodGluZykKKyAgICBpZiAob3B0aW9ucy5mbGFncy5jb250YWlucyhTbmFwc2hvdEZsYWdz
OjpFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nKSkKICAgICAgICAgc2hvdWxkSW5jbHVkZVNl
bGVjdGlvbiA9IEZyYW1lVmlldzo6RXhjbHVkZVNlbGVjdGlvbjsKIAogICAgIEZyYW1lVmlldzo6
Q29vcmRpbmF0ZVNwYWNlRm9yU25hcHNob3QgY29vcmRpbmF0ZVNwYWNlID0gRnJhbWVWaWV3OjpE
b2N1bWVudENvb3JkaW5hdGVzOwotICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zSW5W
aWV3Q29vcmRpbmF0ZXMpCisgICAgaWYgKG9wdGlvbnMuZmxhZ3MuY29udGFpbnMoU25hcHNob3RG
bGFnczo6SW5WaWV3Q29vcmRpbmF0ZXMpKQogICAgICAgICBjb29yZGluYXRlU3BhY2UgPSBGcmFt
ZVZpZXc6OlZpZXdDb29yZGluYXRlczsKIAogICAgIFNjb3BlZEZyYW1lUGFpbnRpbmdTdGF0ZSBz
dGF0ZShmcmFtZSwgbnVsbHB0cik7CiAKICAgICBhdXRvIHBhaW50QmVoYXZpb3IgPSBzdGF0ZS5w
YWludEJlaGF2aW9yOwotICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zRm9yY2VCbGFj
a1RleHQpCisgICAgaWYgKG9wdGlvbnMuZmxhZ3MuY29udGFpbnMoU25hcHNob3RGbGFnczo6Rm9y
Y2VCbGFja1RleHQpKQogICAgICAgICBwYWludEJlaGF2aW9yLmFkZChQYWludEJlaGF2aW9yOjpG
b3JjZUJsYWNrVGV4dCk7Ci0gICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFNl
bGVjdGlvbk9ubHkpCisgICAgaWYgKG9wdGlvbnMuZmxhZ3MuY29udGFpbnMoU25hcHNob3RGbGFn
czo6UGFpbnRTZWxlY3Rpb25Pbmx5KSkKICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRC
ZWhhdmlvcjo6U2VsZWN0aW9uT25seSk7Ci0gICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlv
bnNQYWludFNlbGVjdGlvbkFuZEJhY2tncm91bmRzT25seSkKKyAgICBpZiAob3B0aW9ucy5mbGFn
cy5jb250YWlucyhTbmFwc2hvdEZsYWdzOjpQYWludFNlbGVjdGlvbkFuZEJhY2tncm91bmRzT25s
eSkpCiAgICAgICAgIHBhaW50QmVoYXZpb3IuYWRkKFBhaW50QmVoYXZpb3I6OlNlbGVjdGlvbkFu
ZEJhY2tncm91bmRzT25seSk7Ci0gICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWlu
dEV2ZXJ5dGhpbmdFeGNsdWRpbmdTZWxlY3Rpb24pCisgICAgaWYgKG9wdGlvbnMuZmxhZ3MuY29u
dGFpbnMoU25hcHNob3RGbGFnczo6UGFpbnRFdmVyeXRoaW5nRXhjbHVkaW5nU2VsZWN0aW9uKSkK
ICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlv
bik7CiAKICAgICAvLyBPdGhlciBwYWludCBiZWhhdmlvcnMgYXJlIHNldCBieSBwYWludENvbnRl
bnRzRm9yU25hcHNob3QuCkBAIC0xMDgsMTAgKzExMiwxMCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBp
bWFnZQogICAgIGlmIChmcmFtZS5wYWdlKCktPmRlbGVnYXRlc1NjYWxpbmcoKSkKICAgICAgICAg
c2NhbGVGYWN0b3IgKj0gZnJhbWUucGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKIAotICAgIGlm
IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdyYWxTY2FsZUZhY3RvcikK
KyAgICBpZiAob3B0aW9ucy5mbGFncy5jb250YWlucyhTbmFwc2hvdEZsYWdzOjpQYWludFdpdGhJ
bnRlZ3JhbFNjYWxlRmFjdG9yKSkKICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZh
Y3Rvcik7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0
LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8g
YnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvciwgb3B0aW9ucy5jb2xvclNwYWNlLnZhbHVl
T3IoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpLCBvcHRpb25zLnBpeGVsRm9ybWF0LnZh
bHVlT3IoUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0
LngoKSwgLWltYWdlUmVjdC55KCkpOwpAQCAtMTI3LDcgKzEzMSw3IEBAIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJl
Y3QmIGltYWdlCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBz
bmFwc2hvdFNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zKQor
UmVmUHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdFNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFNuYXBz
aG90T3B0aW9ucyYmIG9wdGlvbnMpCiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCk7CiAKQEAgLTE0MCwxMSArMTQ0LDExIEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc25h
cHNob3RTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKICAg
ICBpZiAoc2VsZWN0aW9uQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBvcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc1BhaW50U2VsZWN0aW9uT25seTsKLSAg
ICByZXR1cm4gc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0
aW9uQm91bmRzKSwgb3B0aW9ucyk7CisgICAgb3B0aW9ucy5mbGFncy5hZGQoU25hcHNob3RGbGFn
czo6UGFpbnRTZWxlY3Rpb25Pbmx5KTsKKyAgICByZXR1cm4gc25hcHNob3RGcmFtZVJlY3QoZnJh
bWUsIGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzKSwgV1RGTW92ZShvcHRpb25zKSk7
CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3ROb2RlKEZyYW1lJiBmcmFtZSwgTm9k
ZSYgbm9kZSkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3ROb2RlKEZyYW1lJiBmcmFtZSwg
Tm9kZSYgbm9kZSwgU25hcHNob3RPcHRpb25zJiYgb3B0aW9ucykKIHsKICAgICBpZiAoIW5vZGUu
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTUsNyArMTU5LDcgQEAg
UmVmUHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdE5vZGUoRnJhbWUmIGZyYW1lLCBOb2RlJiBub2Rl
KQogICAgIGZyYW1lLnZpZXcoKS0+c2V0Tm9kZVRvRHJhdygmbm9kZSk7CiAKICAgICBMYXlvdXRS
ZWN0IHRvcExldmVsUmVjdDsKLSAgICByZXR1cm4gc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHNu
YXBwZWRJbnRSZWN0KG5vZGUucmVuZGVyZXIoKS0+cGFpbnRpbmdSb290UmVjdCh0b3BMZXZlbFJl
Y3QpKSk7CisgICAgcmV0dXJuIHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCBzbmFwcGVkSW50UmVj
dChub2RlLnJlbmRlcmVyKCktPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KSksIFdURk1v
dmUob3B0aW9ucykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lU25hcHNob3R0aW5nLmgKaW5kZXggMTAyMzczOGFmODdmNzNkNDMxM2FiMTdmNzkz
ZTY3ZTk2NjNhMzZmOS4uOGE0M2JmOGMwMTQ2Njc4YTE1NzI5YTk1ZGU3ZmQ4M2ZkMzA0YjA2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuaApAQCAtMzQsMjcgKzM0LDMz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGVzdGluYXRpb25Db2xvclNwYWNl
OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3Mg
SW1hZ2VCdWZmZXI7CiBjbGFzcyBOb2RlOworZW51bSBjbGFzcyBQaXhlbEZvcm1hdCA6IHVpbnQ4
X3Q7CiAKLWVudW0gewotICAgIFNuYXBzaG90T3B0aW9uc05vbmUgPSAwLAotICAgIFNuYXBzaG90
T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcgPSAxIDw8IDAsCi0gICAgU25hcHNo
b3RPcHRpb25zUGFpbnRTZWxlY3Rpb25Pbmx5ID0gMSA8PCAxLAotICAgIFNuYXBzaG90T3B0aW9u
c0luVmlld0Nvb3JkaW5hdGVzID0gMSA8PCAyLAotICAgIFNuYXBzaG90T3B0aW9uc0ZvcmNlQmxh
Y2tUZXh0ID0gMSA8PCAzLAotICAgIFNuYXBzaG90T3B0aW9uc1BhaW50U2VsZWN0aW9uQW5kQmFj
a2dyb3VuZHNPbmx5ID0gMSA8PCA0LAotICAgIFNuYXBzaG90T3B0aW9uc1BhaW50RXZlcnl0aGlu
Z0V4Y2x1ZGluZ1NlbGVjdGlvbiA9IDEgPDwgNSwKLSAgICBTbmFwc2hvdE9wdGlvbnNQYWludFdp
dGhJbnRlZ3JhbFNjYWxlRmFjdG9yID0gMSA8PCA2LAorZW51bSBjbGFzcyBTbmFwc2hvdEZsYWdz
IDogdWludDhfdCB7CisgICAgRXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZyA9IDEgPDwgMCwK
KyAgICBQYWludFNlbGVjdGlvbk9ubHkgPSAxIDw8IDEsCisgICAgSW5WaWV3Q29vcmRpbmF0ZXMg
PSAxIDw8IDIsCisgICAgRm9yY2VCbGFja1RleHQgPSAxIDw8IDMsCisgICAgUGFpbnRTZWxlY3Rp
b25BbmRCYWNrZ3JvdW5kc09ubHkgPSAxIDw8IDQsCisgICAgUGFpbnRFdmVyeXRoaW5nRXhjbHVk
aW5nU2VsZWN0aW9uID0gMSA8PCA1LAorICAgIFBhaW50V2l0aEludGVncmFsU2NhbGVGYWN0b3Ig
PSAxIDw8IDYsCiB9OwotdHlwZWRlZiB1bnNpZ25lZCBTbmFwc2hvdE9wdGlvbnM7CiAKLVdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3QoRnJhbWUmLCBj
b25zdCBJbnRSZWN0JiwgU25hcHNob3RPcHRpb25zID0gU25hcHNob3RPcHRpb25zTm9uZSk7Ci1S
ZWZQdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGNsaXBSZWN0cywgU25hcHNob3RP
cHRpb25zID0gU25hcHNob3RPcHRpb25zTm9uZSk7Ci1SZWZQdHI8SW1hZ2VCdWZmZXI+IHNuYXBz
aG90Tm9kZShGcmFtZSYsIE5vZGUmKTsKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3RTZWxlY3Rpb24oRnJhbWUmLCBTbmFwc2hvdE9wdGlvbnMgPSBTbmFwc2hvdE9w
dGlvbnNOb25lKTsKK3N0cnVjdCBTbmFwc2hvdE9wdGlvbnMgeworICAgIE9wdGlvblNldDxTbmFw
c2hvdEZsYWdzPiBmbGFncyA9IHsgfTsKKyAgICBPcHRpb25hbDxQaXhlbEZvcm1hdD4gcGl4ZWxG
b3JtYXQgPSBXVEY6Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlID0gV1RGOjpudWxsb3B0OworfTsKKworV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdChGcmFtZSYsIGNvbnN0IEludFJlY3QmLCBT
bmFwc2hvdE9wdGlvbnMmJiA9IHsgfSk7CitSZWZQdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90RnJh
bWVSZWN0V2l0aENsaXAoRnJhbWUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIGNsaXBSZWN0cywgU25hcHNob3RPcHRpb25zJiYgPSB7IH0pOworUmVmUHRyPEltYWdl
QnVmZmVyPiBzbmFwc2hvdE5vZGUoRnJhbWUmLCBOb2RlJiwgU25hcHNob3RPcHRpb25zJiYgPSB7
IH0pOworV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdFNlbGVjdGlv
bihGcmFtZSYsIFNuYXBzaG90T3B0aW9ucyYmID0geyB9KTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAKaW5kZXggMWIyMjhj
NjY2MDQxOTAxNmE3MDQ1MjRhYjQ3OWM0OTdiMDZmNmRhZS4uZGViNjExMjRjZmZiMTI5ODdkNzhk
ODk5YzYzMDI3NWJlYzJmZDllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29sb3JTYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBs
ZXIuY3BwCkBAIC05OSwxOSArOTksMzAgQEAgc3RhdGljIE9wdGlvbmFsPExhYjxmbG9hdD4+IHNh
bXBsZUNvbG9yKERvY3VtZW50JiBkb2N1bWVudCwgSW50UG9pbnQmJiBsb2NhdGlvbikKICAgICBp
ZiAoIWlzVmFsaWRTYW1wbGVMb2NhdGlvbihkb2N1bWVudCwgbG9jYXRpb24pKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAgYXV0byBwaXhlbEZvcm1hdCA9IFBpeGVsRm9ybWF0
OjpCR1JBODsKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykK
KyAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkRpc3BsYXlQMygp
OworICAgIHVzaW5nIFBpeGVsQnVmZmVyQ29sb3JUeXBlID0gRGlzcGxheVAzPHVpbnQ4X3Q+Owor
ICAgIHVzaW5nIFNhbXBsZUNvbG9yVHlwZSA9IERpc3BsYXlQMzxmbG9hdD47CisjZWxzZQorICAg
IGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOworICAgIHVz
aW5nIFBpeGVsQnVmZmVyQ29sb3JUeXBlID0gU1JHQkE8dWludDhfdD47CisgICAgdXNpbmcgU2Ft
cGxlQ29sb3JUeXBlID0gU1JHQkE8ZmxvYXQ+OworI2VuZGlmCisKICAgICBBU1NFUlQoZG9jdW1l
bnQudmlldygpKTsKLSAgICBhdXRvIHNuYXBzaG90ID0gc25hcHNob3RGcmFtZVJlY3QoZG9jdW1l
bnQudmlldygpLT5mcmFtZSgpLCBJbnRSZWN0KGxvY2F0aW9uLCBJbnRTaXplKDEsIDEpKSwgU25h
cHNob3RPcHRpb25zRXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZyB8IFNuYXBzaG90T3B0aW9u
c1BhaW50RXZlcnl0aGluZ0V4Y2x1ZGluZ1NlbGVjdGlvbik7CisgICAgYXV0byBzbmFwc2hvdCA9
IHNuYXBzaG90RnJhbWVSZWN0KGRvY3VtZW50LnZpZXcoKS0+ZnJhbWUoKSwgSW50UmVjdChsb2Nh
dGlvbiwgSW50U2l6ZSgxLCAxKSksIHsgLmZsYWdzID0geyBTbmFwc2hvdEZsYWdzOjpFeGNsdWRl
U2VsZWN0aW9uSGlnaGxpZ2h0aW5nLCBTbmFwc2hvdEZsYWdzOjpQYWludEV2ZXJ5dGhpbmdFeGNs
dWRpbmdTZWxlY3Rpb24gfSwgcGl4ZWxGb3JtYXQsIGNvbG9yU3BhY2UgfSk7CiAgICAgaWYgKCFz
bmFwc2hvdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBzbmFwc2hvdC0+Z2V0UGl4ZWxCdWZmZXIoeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfSwgeyB7IH0sIHNuYXBzaG90LT5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSBzbmFwc2hvdC0+Z2V0UGl4ZWxCdWZmZXIoeyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHBpeGVsRm9ybWF0LCBjb2xvclNwYWNlIH0sIHsg
eyB9LCBzbmFwc2hvdC0+bG9naWNhbFNpemUoKSB9KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgQVNTRVJUKHBpeGVsQnVmZmVyLT5k
YXRhKCkubGVuZ3RoKCkgPj0gNCk7CiAKICAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHBpeGVsQnVm
ZmVyLT5kYXRhKCkuZGF0YSgpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4o
U1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNo
b3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxM
YWI8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8U2FtcGxlQ29sb3JUeXBlPihQaXhlbEJ1ZmZlckNvbG9y
VHlwZSB7IHNuYXBzaG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERhdGFbMF0s
IHNuYXBzaG90RGF0YVszXSB9KSk7CiB9CiAKIHN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNl
KExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYgcmhzKQpAQCAtMjU2LDcgKzI2NywxMyBAQCBP
cHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBhZ2UmIHBhZ2UpCiAg
ICAgICAgIC8vIFNraXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9m
IHNhbXBsZXMgdG8gYXZlcmFnZS4KICAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwogICAgIH0K
LSAgICByZXR1cm4gQ29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2Ft
cGxlQ291bnQpKTsKKyAgICBhdXRvIGF2ZXJhZ2UgPSBhdmVyYWdlQ29sb3Ioc2FtcGxlc1RvQXZl
cmFnZSwgdmFsaWRTYW1wbGVDb3VudCk7CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0RJU1BMQVlfUDMpCisgICAgdXNpbmcgT3V0cHV0Q29sb3JUeXBlID0gRGlzcGxheVAzPGZs
b2F0PjsKKyNlbHNlCisgICAgdXNpbmcgT3V0cHV0Q29sb3JUeXBlID0gU1JHQkE8ZmxvYXQ+Owor
I2VuZGlmCisgICAgcmV0dXJuIENvbG9yKGNvbnZlcnRDb2xvcjxPdXRwdXRDb2xvclR5cGU+KFdU
Rk1vdmUoYXZlcmFnZSkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0NzM3Y2RhYTg1MDU3OTViZGNk
M2RmZTE2ODJkNzkzZGE4ZTQ2ZWI5Li5mYmM5Yjk2OGU1OTViYjM4ZTUxZmE4YjkyNDhlZjQ2Nzg2
ZTgyODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAt
NDA0LDcgKzQwNCw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgIGlmICghdGFy
Z2V0KSB7CiAgICAgICAgICAgICAvLyBJZiBubyB0YXJnZXQgaXMgcHJvdmlkZWQsIGNhcHR1cmUg
YW4gaW1hZ2Ugb2YgdGhlIHZpZXdwb3J0LgogICAgICAgICAgICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKS0+c2l6ZUZvclZpc2li
bGVDb250ZW50KCkpOwotICAgICAgICAgICAgaWYgKGF1dG8gc25hcHNob3QgPSBXZWJDb3JlOjpz
bmFwc2hvdEZyYW1lUmVjdChtX3BhZ2UubWFpbkZyYW1lKCksIGltYWdlUmVjdCwgU25hcHNob3RP
cHRpb25zSW5WaWV3Q29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgaWYgKGF1dG8gc25hcHNob3Qg
PSBXZWJDb3JlOjpzbmFwc2hvdEZyYW1lUmVjdChtX3BhZ2UubWFpbkZyYW1lKCksIGltYWdlUmVj
dCwgeyAuZmxhZ3MgPSB7IFNuYXBzaG90RmxhZ3M6OkluVmlld0Nvb3JkaW5hdGVzIH0gfSkpCiAg
ICAgICAgICAgICAgICAgZGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJf
cywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMDg5NWFiMjQxYTk5MDMxYmQw
NDM2MWU4ZGU0ZTI1YjliMWM2NmFhNi4uZDdkMzQ4ZGUzNDQyZmRiYmM5MTk4YzI1ZjMyYWRiMjY3
NGYwMjYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0xMjcsMjYg
KzEyNywyNyBAQCBzdGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogCiBzdGF0aWMgU25hcHNob3RPcHRpb25zIHNuYXBzaG90
T3B0aW9uc0ZvclRleHRJbmRpY2F0b3JPcHRpb25zKE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0
aW9uPiBvcHRpb25zKQogewotICAgIFNuYXBzaG90T3B0aW9ucyBzbmFwc2hvdE9wdGlvbnMgPSBT
bmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yOworICAgIFNuYXBzaG90
T3B0aW9ucyBzbmFwc2hvdE9wdGlvbnM7CisgICAgc25hcHNob3RPcHRpb25zLmZsYWdzLmFkZChT
bmFwc2hvdEZsYWdzOjpQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKTsKIAogICAgIGlmICgh
b3B0aW9ucy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQpKSB7
CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50
QmFja2dyb3VuZHMpKQotICAgICAgICAgICAgc25hcHNob3RPcHRpb25zIHw9IFNuYXBzaG90T3B0
aW9uc1BhaW50U2VsZWN0aW9uQW5kQmFja2dyb3VuZHNPbmx5OworICAgICAgICAgICAgc25hcHNo
b3RPcHRpb25zLmZsYWdzLmFkZChTbmFwc2hvdEZsYWdzOjpQYWludFNlbGVjdGlvbkFuZEJhY2tn
cm91bmRzT25seSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc25hcHNob3RPcHRpb25z
IHw9IFNuYXBzaG90T3B0aW9uc1BhaW50U2VsZWN0aW9uT25seTsKKyAgICAgICAgICAgIHNuYXBz
aG90T3B0aW9ucy5mbGFncy5hZGQoU25hcHNob3RGbGFnczo6UGFpbnRTZWxlY3Rpb25Pbmx5KTsK
IAogICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246
OlJlc3BlY3RUZXh0Q29sb3IpKQotICAgICAgICAgICAgICAgIHNuYXBzaG90T3B0aW9ucyB8PSBT
bmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4dDsKKyAgICAgICAgICAgICAgICBzbmFwc2hvdE9w
dGlvbnMuZmxhZ3MuYWRkKFNuYXBzaG90RmxhZ3M6OkZvcmNlQmxhY2tUZXh0KTsKICAgICAgICAg
fQogICAgIH0gZWxzZQotICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25z
RXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZzsKKyAgICAgICAgc25hcHNob3RPcHRpb25zLmZs
YWdzLmFkZChTbmFwc2hvdEZsYWdzOjpFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nKTsKIAog
ICAgIHJldHVybiBzbmFwc2hvdE9wdGlvbnM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IHRh
a2VTbmFwc2hvdChGcmFtZSYgZnJhbWUsIEludFJlY3QgcmVjdCwgU25hcHNob3RPcHRpb25zIG9w
dGlvbnMsIGZsb2F0JiBzY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGNsaXBS
ZWN0c0luRG9jdW1lbnRDb29yZGluYXRlcykKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IHRha2VTbmFw
c2hvdChGcmFtZSYgZnJhbWUsIEludFJlY3QgcmVjdCwgU25hcHNob3RPcHRpb25zJiYgb3B0aW9u
cywgZmxvYXQmIHNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgY2xpcFJlY3Rz
SW5Eb2N1bWVudENvb3JkaW5hdGVzKQogewotICAgIGF1dG8gYnVmZmVyID0gc25hcHNob3RGcmFt
ZVJlY3RXaXRoQ2xpcChmcmFtZSwgcmVjdCwgY2xpcFJlY3RzSW5Eb2N1bWVudENvb3JkaW5hdGVz
LCBvcHRpb25zKTsKKyAgICBhdXRvIGJ1ZmZlciA9IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAo
ZnJhbWUsIHJlY3QsIGNsaXBSZWN0c0luRG9jdW1lbnRDb29yZGluYXRlcywgV1RGTW92ZShvcHRp
b25zKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNj
YWxlRmFjdG9yID0gYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKTsKQEAgLTE1NSwyMiArMTU2LDIw
IEBAIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHRha2VTbmFwc2hvdChGcmFtZSYgZnJhbWUsIEludFJl
Y3QgcmVjdCwgU25hcHNob3RPcHRpb25zIG9wCiAKIHN0YXRpYyBib29sIHRha2VTbmFwc2hvdHMo
VGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgSW50UmVjdCBzbmFwc2hvdFJl
Y3QsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBjbGlwUmVjdHNJbkRvY3VtZW50Q29vcmRpbmF0
ZXMpCiB7Ci0gICAgU25hcHNob3RPcHRpb25zIHNuYXBzaG90T3B0aW9ucyA9IHNuYXBzaG90T3B0
aW9uc0ZvclRleHRJbmRpY2F0b3JPcHRpb25zKGRhdGEub3B0aW9ucyk7Ci0KLSAgICBkYXRhLmNv
bnRlbnRJbWFnZSA9IHRha2VTbmFwc2hvdChmcmFtZSwgc25hcHNob3RSZWN0LCBzbmFwc2hvdE9w
dGlvbnMsIGRhdGEuY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNsaXBSZWN0c0luRG9jdW1lbnRD
b29yZGluYXRlcyk7CisgICAgZGF0YS5jb250ZW50SW1hZ2UgPSB0YWtlU25hcHNob3QoZnJhbWUs
IHNuYXBzaG90UmVjdCwgc25hcHNob3RPcHRpb25zRm9yVGV4dEluZGljYXRvck9wdGlvbnMoZGF0
YS5vcHRpb25zKSwgZGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvciwgY2xpcFJlY3RzSW5Eb2N1
bWVudENvb3JkaW5hdGVzKTsKICAgICBpZiAoIWRhdGEuY29udGVudEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0
b3JPcHRpb246OkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQpKSB7CiAgICAg
ICAgIGZsb2F0IHNuYXBzaG90U2NhbGVGYWN0b3I7Ci0gICAgICAgIGRhdGEuY29udGVudEltYWdl
V2l0aEhpZ2hsaWdodCA9IHRha2VTbmFwc2hvdChmcmFtZSwgc25hcHNob3RSZWN0LCBTbmFwc2hv
dE9wdGlvbnNOb25lLCBzbmFwc2hvdFNjYWxlRmFjdG9yLCBjbGlwUmVjdHNJbkRvY3VtZW50Q29v
cmRpbmF0ZXMpOworICAgICAgICBkYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQgPSB0YWtl
U25hcHNob3QoZnJhbWUsIHNuYXBzaG90UmVjdCwgeyB9LCBzbmFwc2hvdFNjYWxlRmFjdG9yLCBj
bGlwUmVjdHNJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOwogICAgICAgICBBU1NFUlQoIWRhdGEuY29u
dGVudEltYWdlV2l0aEhpZ2hsaWdodCB8fCBkYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yID49
IHNuYXBzaG90U2NhbGVGYWN0b3IpOwogICAgIH0KIAogICAgIGlmIChkYXRhLm9wdGlvbnMuY29u
dGFpbnMoVGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29u
dGVudFdpdGhvdXRTZWxlY3Rpb24pKSB7CiAgICAgICAgIGZsb2F0IHNuYXBzaG90U2NhbGVGYWN0
b3I7CiAgICAgICAgIGF1dG8gc25hcHNob3RSZWN0ID0gZnJhbWUudmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKTsKLSAgICAgICAgZGF0YS5jb250ZW50SW1hZ2VXaXRob3V0U2VsZWN0aW9uID0g
dGFrZVNuYXBzaG90KGZyYW1lLCBzbmFwc2hvdFJlY3QsIFNuYXBzaG90T3B0aW9uc1BhaW50RXZl
cnl0aGluZ0V4Y2x1ZGluZ1NlbGVjdGlvbiwgc25hcHNob3RTY2FsZUZhY3RvciwgeyB9KTsKKyAg
ICAgICAgZGF0YS5jb250ZW50SW1hZ2VXaXRob3V0U2VsZWN0aW9uID0gdGFrZVNuYXBzaG90KGZy
YW1lLCBzbmFwc2hvdFJlY3QsIHsgLmZsYWdzID0geyBTbmFwc2hvdEZsYWdzOjpQYWludEV2ZXJ5
dGhpbmdFeGNsdWRpbmdTZWxlY3Rpb24gfSB9LCBzbmFwc2hvdFNjYWxlRmFjdG9yLCB7IH0pOwog
ICAgICAgICBkYXRhLmNvbnRlbnRJbWFnZVdpdGhvdXRTZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoc25hcHNob3RSZWN0
KTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCAx
OTM5ZmI5MGMyMjU2NGQwMmNhZGY2NWJkYWY3ZjY1Y2NiN2NlOWE3Li5jZWRiOTM1N2Y4OTFlMDM5
Nzg4NTU2YjVjMDliNDVhMjVlMGFkZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFn
ZS5jcHAKQEAgLTEyNiw4ICsxMjYsMTAgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
ck5vZGUoRnJhbWUmIGZyYW1lLCBOb2RlJiBub2RlKQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmLCBib29s
IGZvcmNlQmxhY2tUZXh0KQogewotICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zID0gZm9yY2VC
bGFja1RleHQgPyBTbmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4dCA6IFNuYXBzaG90T3B0aW9u
c05vbmU7Ci0gICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdFNl
bGVjdGlvbihmcmFtZSwgb3B0aW9ucyksIG51bGxwdHIpOworICAgIFNuYXBzaG90T3B0aW9ucyBv
cHRpb25zOworICAgIGlmIChmb3JjZUJsYWNrVGV4dCkKKyAgICAgICAgb3B0aW9ucy5mbGFncy5h
ZGQoU25hcHNob3RGbGFnczo6Rm9yY2VCbGFja1RleHQpOworICAgIHJldHVybiBjcmVhdGVEcmFn
SW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RTZWxlY3Rpb24oZnJhbWUsIFdURk1vdmUob3B0aW9u
cykpLCBudWxscHRyKTsKIH0KIAogI2VuZGlmCkBAIC0xODIsMTQgKzE4NCwxOCBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGJvbwogICAgIGlmICghc3RhcnRSZW5kZXJlciB8fCAhZW5kUmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgU25hcHNob3RPcHRpb25zIG9wdGlvbnMg
PSBTbmFwc2hvdE9wdGlvbnNQYWludFNlbGVjdGlvbk9ubHkgfCAoZm9yY2VCbGFja1RleHQgPyBT
bmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4dCA6IFNuYXBzaG90T3B0aW9uc05vbmUpOworICAg
IFNuYXBzaG90T3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuZmxhZ3MuYWRkKFNuYXBzaG90
RmxhZ3M6OlBhaW50U2VsZWN0aW9uT25seSk7CisgICAgaWYgKGZvcmNlQmxhY2tUZXh0KQorICAg
ICAgICBvcHRpb25zLmZsYWdzLmFkZChTbmFwc2hvdEZsYWdzOjpGb3JjZUJsYWNrVGV4dCk7CisK
ICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgIGludCBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBB
U1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CiAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuc2V0KHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0s
IFNlbGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgIC8vIFdlIGNh
cHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNl
bGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxlY3Rpb24oKSB1
c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgotICAgIHJldHVybiBjcmVh
dGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNl
bGVjdGlvbigpLmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCksIG9wdGlvbnMpLCBudWxs
cHRyKTsKKyAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90KHNuYXBzaG90RnJh
bWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb24oKS5ib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29u
dGVudCgpLCBXVEZNb3ZlKG9wdGlvbnMpKSwgbnVsbHB0cik7CiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
aW5kZXggOTNiOTk5NGRmOTFjM2ZmY2UxMGQ3NzJkMGRlMjU1M2ZkNjJkN2FhNi4uNTViMDM3OGMz
MWZlMTE1OTgyZTc2MjgwMDM4MTlkYTkyN2Q0ZjBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCkBAIC0yODksNiArMjg5
LDIyIEBAIFNSR0JBPHVpbnQ4X3Q+IENvbG9yQ29udmVyc2lvbjxTUkdCQTx1aW50OF90PiwgU1JH
QkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBTUkdCCiAgICAgfSkpOwogfQogCisvLyBNQVJLOiBE
aXNwbGF5UDM8dWludDhfdD4gY29udmVyc2lvbnMuCisKK0Rpc3BsYXlQMzxmbG9hdD4gQ29sb3JD
b252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD4sIERpc3BsYXlQMzx1aW50OF90Pj46OmNvbnZlcnQo
Y29uc3QgRGlzcGxheVAzPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPERpc3BsYXlQMzxmbG9hdD4+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5tYXAo
W10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAyNTUu
MGY7CisgICAgfSkpOworfQorCitEaXNwbGF5UDM8dWludDhfdD4gQ29sb3JDb252ZXJzaW9uPERp
c3BsYXlQMzx1aW50OF90PiwgRGlzcGxheVAzPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgRGlzcGxh
eVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxEaXNw
bGF5UDM8dWludDhfdD4+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5tYXAoW10oZmxvYXQgdmFs
dWUpIC0+IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2
YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9KSk7Cit9CisKIC8vIE1BUks6IENvbnZl
cnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQg
Y29sb3Igc3BhY2VzLgogCiBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlckNvbG9yQ29t
cG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAppbmRleCAxZGVhYTMzNjM1YWM2NGYwNzg4NjNmNzYxYzYyZDAwNDQxYzdlM2M0Li45NDhlM2Nh
YjliNjliNmE4YjQwOTljMGZlMDIzYWRkMzQ4NTVkMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaApAQCAtMTE1LDcgKzExNSw2
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZs
b2F0LCBXaGl0ZVBvaW50OjpENTA+PiB7CiB9OwogCiAvLyBNQVJLOiBTUkdCQTx1aW50OF90Pgot
Ly8gT25seSBzUkdCIHN1cHBvcnRzIG5vbi1mbG9hdGluZyBwb2ludCBjb21wb25lbnQgdHlwZXMu
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBTUkdCQTx1
aW50OF90Pj4gewogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTUkdCQTxmbG9hdD4gY29udmVy
dChjb25zdCBTUkdCQTx1aW50OF90PiYpOwogfTsKQEAgLTEyMyw2ICsxMjIsMTQgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFNSR0JBPHVpbnQ4X3Q+LCBTUkdCQTxmbG9hdD4+
IHsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU1JHQkE8dWludDhfdD4gY29udmVydChjb25z
dCBTUkdCQTxmbG9hdD4mKTsKIH07CiAKKy8vIE1BUks6IERpc3BsYXlQMzx1aW50OF90PgordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD4sIERpc3BsYXlQ
Mzx1aW50OF90Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBEaXNwbGF5UDM8ZmxvYXQ+
IGNvbnZlcnQoY29uc3QgRGlzcGxheVAzPHVpbnQ4X3Q+Jik7Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29sb3JDb252ZXJzaW9uPERpc3BsYXlQMzx1aW50OF90PiwgRGlzcGxheVAzPGZsb2F0Pj4g
eworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBEaXNwbGF5UDM8dWludDhfdD4gY29udmVydChj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIElkZW50aXR5IGNvbnZlcnNpb24u
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRl
eCAxMzQyMjkzMzM1MjY2ZGMyOTkwOWUwNjFhOTYxODcwNjFmMjNjZmRlLi41NjZmMmYyNTIzYTg5
M2NlMjMyNjNmYjI0ZjcxOTkwYmI0YjU2NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC04NDIsNyArODQyLDcgQEAgUmV0YWluUHRyPENG
RGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdmVEYXRhKEZyYW1lRmlsdGVyRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQKIAogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNl
bGVjdGlvblNuYXBzaG90KCkgY29uc3QKIHsKLSAgICBhdXRvIHNuYXBzaG90ID0gc25hcHNob3RT
ZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNr
VGV4dCk7CisgICAgYXV0byBzbmFwc2hvdCA9IHNuYXBzaG90U2VsZWN0aW9uKCpjb3JlRnJhbWUo
KSwgeyAuZmxhZ3MgPSB7IFdlYkNvcmU6OlNuYXBzaG90RmxhZ3M6OkZvcmNlQmxhY2tUZXh0IH0g
fSk7CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNTRlZjNkNzA1
NjYyNzk5ZjFjZWQwZjExNDNhOTRmNWZkZjYyMTYyLi45YmZhOTZkYmMwMGJjY2NjMDU3NDkwYTI5
ZjRhOGQxYTA2YTgxZTE0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDUtMjUgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IHN1cHBv
cnQgc2FtcGxpbmcgbm9uLVJHQiB2YWx1ZXMgbGlrZSBQMworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1OTQyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83ODE3OTcxMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xv
ci5tbToKKyAgICAgICAgKFRFU1QuU2FtcGxlZFBhZ2VUb3BDb2xvci5Tb2xpZENvbG9yKToKKyAg
ICAgICAgKFRFU1QuU2FtcGxlZFBhZ2VUb3BDb2xvci5IaXRUZXN0SFRNTENhbnZhc1dpdGhvdXRS
ZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFRFU1QuU2FtcGxlZFBhZ2VUb3BDb2xvci5IaXRU
ZXN0Q1NTUG9pbnRlckV2ZW50c05vbmUpOgorICAgICAgICAoVEVTVC5TYW1wbGVkUGFnZVRvcENv
bG9yLkRpc3BsYXlQMyk6CisgICAgICAgIChURVNULlNhbXBsZWRQYWdlVG9wQ29sb3IuTWFpbkRv
Y3VtZW50Q2hhbmdlKToKKwogMjAyMS0wNS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmFpc2Ugaml0TWVtb3J5UmVzZXJ2YXRpb25TaXplIGZvciBmdGwtbm8t
Y2ppdC1zbWFsbC1wb29sKiB0ZXN0cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xvci5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xvci5tbQppbmRleCA4YWQ4
NDJhMTUwMjhiODE3ZjgzMzQ2MWI2OWQ1OGNiODI1MmQ3MGViLi5lNTdkY2I2YjZkYmEwYTBkNTY1
MzU3NzNhN2IxNzg3ZTM5M2ZlMTEyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NhbXBsZWRQYWdlVG9wQ29sb3IubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYW1wbGVkUGFnZVRvcENvbG9yLm1tCkBAIC0yOCwx
MSArMjgsOCBAQAogI2ltcG9ydCAiVGVzdENvY29hLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+CiAj
aW1wb3J0IDx3dGYvRnVuY3Rpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTEzOSw3ICsxMzYsMTggQEAgVEVTVChT
YW1wbGVkUGFnZVRvcENvbG9yLCBTb2xpZENvbG9yKQogICAgIEVYUEVDVF9OVUxMKFt3ZWJWaWV3
IF9zYW1wbGVkUGFnZVRvcENvbG9yXSk7CiAKICAgICB3YWl0Rm9yU2FtcGxlZFBhZ2VUb3BDb2xv
clRvQ2hhbmdlRm9ySFRNTCh3ZWJWaWV3LmdldCgpLCBjcmVhdGVIVE1MR3JhZGllbnRXaXRoQ29s
b3JTdG9wcygicmlnaHQiX3MsIHsgInJlZCJfcywgInJlZCJfcyB9KSk7Ci0gICAgRVhQRUNUX0VR
KFdlYkNvcmU6OkNvbG9yKFt3ZWJWaWV3IF9zYW1wbGVkUGFnZVRvcENvbG9yXS5DR0NvbG9yKSwg
V2ViQ29yZTo6Q29sb3I6OnJlZCk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0
Q29tcG9uZW50cyhbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0uQ0dDb2xvcik7CisjaWYg
RU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNUX0lO
X1JBTkdFKGNvbXBvbmVudHNbMF0sIDAuOTEsIDAuOTIpOworICAgIEVYUEVDVF9JTl9SQU5HRShj
b21wb25lbnRzWzFdLCAwLjIwLCAwLjIxKTsKKyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9uZW50
c1syXSwgMC4xMywgMC4xNCk7CisjZWxzZSAvLyAhRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNbMF0sIDAuOTks
IDEuMDApOworICAgIEVYUEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzFdLCAwLjAwLCAwLjAxKTsK
KyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9uZW50c1syXSwgMC4wMCwgMC4wMSk7CisjZW5kaWYg
Ly8gRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNU
X0VRKGNvbXBvbmVudHNbM10sIDEpOwogfQogCiBURVNUKFNhbXBsZWRQYWdlVG9wQ29sb3IsIERp
ZmZlcmVudENvbG9yc1dpdGhvdXRPdXRsaWVyQmVsb3dNYXhEaWZmZXJlbmNlKQpAQCAtMjkxLDcg
KzI5OSwxOCBAQCBURVNUKFNhbXBsZWRQYWdlVG9wQ29sb3IsIEhpdFRlc3RIVE1MQ2FudmFzV2l0
aG91dFJlbmRlcmluZ0NvbnRleHQpCiAgICAgRVhQRUNUX05VTEwoW3dlYlZpZXcgX3NhbXBsZWRQ
YWdlVG9wQ29sb3JdKTsKIAogICAgIHdhaXRGb3JTYW1wbGVkUGFnZVRvcENvbG9yVG9DaGFuZ2VG
b3JIVE1MKHdlYlZpZXcuZ2V0KCksIEAiPGJvZHkgc3R5bGU9J21hcmdpbjogMCc+PGNhbnZhcyBz
dHlsZT0nd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogcmVkJz48
L2NhbnZhcz5UZXN0Iik7Ci0gICAgRVhQRUNUX0VRKFdlYkNvcmU6OkNvbG9yKFt3ZWJWaWV3IF9z
YW1wbGVkUGFnZVRvcENvbG9yXS5DR0NvbG9yKSwgV2ViQ29yZTo6Q29sb3I6OnJlZCk7CisKKyAg
ICBhdXRvIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9uZW50cyhbd2ViVmlldyBfc2FtcGxl
ZFBhZ2VUb3BDb2xvcl0uQ0dDb2xvcik7CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNbMF0sIDAuOTEs
IDAuOTIpOworICAgIEVYUEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzFdLCAwLjIwLCAwLjIxKTsK
KyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9uZW50c1syXSwgMC4xMywgMC4xNCk7CisjZWxzZSAv
LyAhRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNU
X0lOX1JBTkdFKGNvbXBvbmVudHNbMF0sIDAuOTksIDEuMDApOworICAgIEVYUEVDVF9JTl9SQU5H
RShjb21wb25lbnRzWzFdLCAwLjAwLCAwLjAxKTsKKyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9u
ZW50c1syXSwgMC4wMCwgMC4wMSk7CisjZW5kaWYgLy8gRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0RJU1BMQVlfUDMpCisgICAgRVhQRUNUX0VRKGNvbXBvbmVudHNbM10sIDEpOwogfQog
CiBURVNUKFNhbXBsZWRQYWdlVG9wQ29sb3IsIEhpdFRlc3RIVE1MQ2FudmFzV2l0aFJlbmRlcmlu
Z0NvbnRleHQpCkBAIC0zMjcsMzAgKzM0NiwzOSBAQCBURVNUKFNhbXBsZWRQYWdlVG9wQ29sb3Is
IEhpdFRlc3RDU1NQb2ludGVyRXZlbnRzTm9uZSkKICAgICBFWFBFQ1RfTlVMTChbd2ViVmlldyBf
c2FtcGxlZFBhZ2VUb3BDb2xvcl0pOwogCiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRI
VE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxib2R5
IHN0eWxlPSdtYXJnaW46IDAnPjxkaXYgc3R5bGU9J3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7
IGJhY2tncm91bmQtY29sb3I6IHJlZDsgcG9pbnRlci1ldmVudHM6IG5vbmUnPjwvZGl2PlRlc3Qi
XTsKLSAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Q29sb3IoW3dlYlZpZXcgX3NhbXBsZWRQYWdlVG9w
Q29sb3JdLkNHQ29sb3IpLCBXZWJDb3JlOjpDb2xvcjo6cmVkKTsKKworICAgIGF1dG8gY29tcG9u
ZW50cyA9IENHQ29sb3JHZXRDb21wb25lbnRzKFt3ZWJWaWV3IF9zYW1wbGVkUGFnZVRvcENvbG9y
XS5DR0NvbG9yKTsKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9Q
MykKKyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9uZW50c1swXSwgMC45MSwgMC45Mik7CisgICAg
RVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNbMV0sIDAuMjAsIDAuMjEpOworICAgIEVYUEVDVF9J
Tl9SQU5HRShjb21wb25lbnRzWzJdLCAwLjEzLCAwLjE0KTsKKyNlbHNlIC8vICFFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykKKyAgICBFWFBFQ1RfSU5fUkFOR0UoY29t
cG9uZW50c1swXSwgMC45OSwgMS4wMCk7CisgICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNb
MV0sIDAuMDAsIDAuMDEpOworICAgIEVYUEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzJdLCAwLjAw
LCAwLjAxKTsKKyNlbmRpZiAvLyBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExB
WV9QMykKKyAgICBFWFBFQ1RfRVEoY29tcG9uZW50c1szXSwgMSk7CiB9CiAKLS8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9v
ayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKLVRFU1Qo
U2FtcGxlZFBhZ2VUb3BDb2xvciwgRElTQUJMRURfRGlzcGxheVAzKQorI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQorCitURVNUKFNhbXBsZWRQYWdlVG9wQ29s
b3IsIERpc3BsYXlQMykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBjcmVhdGVXZWJWaWV3V2l0aFNh
bXBsZWRQYWdlVG9wQ29sb3JNYXhEaWZmZXJlbmNlKDUpOwogICAgIEVYUEVDVF9OVUxMKFt3ZWJW
aWV3IF9zYW1wbGVkUGFnZVRvcENvbG9yXSk7CiAKLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OmNy
ZWF0ZUhUTUxHcmFkaWVudFdpdGhDb2xvclN0b3BzKCJyaWdodCJfcywgewotICAgICAgICAiY29s
b3IoZGlzcGxheS1wMyAwLjk5IDAgMCkiX3MsCi0gICAgICAgICJjb2xvcihkaXNwbGF5LXAzIDAu
OTggMCAwKSJfcywKLSAgICAgICAgImNvbG9yKGRpc3BsYXktcDMgMC45NyAwIDApIl9zLAotICAg
ICAgICAiY29sb3IoZGlzcGxheS1wMyAwLjk2IDAgMCkiX3MsCi0gICAgICAgICJjb2xvcihkaXNw
bGF5LXAzIDAuOTUgMCAwKSJfcywKLSAgICB9KV07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpA
Ijxib2R5IHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihkaXNwbGF5LXAzIDEgMCAwKSc+
VGVzdCJdOwogCiAgICAgYXV0byBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoW3dl
YlZpZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpOwotICAgIEVYUEVDVF9JTl9SQU5H
RShjb21wb25lbnRzWzBdLCAwLjMsIDAuNCk7Ci0gICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVu
dHNbMV0sIDEuMDAsIDEuMDEpOwotICAgIEVYUEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzJdLCAx
LjAwLCAxLjAxKTsKKyAgICBFWFBFQ1RfSU5fUkFOR0UoY29tcG9uZW50c1swXSwgMC45OSwgMS4w
MCk7CisgICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNbMV0sIDAuMDAsIDAuMDEpOworICAg
IEVYUEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzJdLCAwLjAwLCAwLjAxKTsKICAgICBFWFBFQ1Rf
RVEoY29tcG9uZW50c1szXSwgMSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKChOU1N0cmluZyAqKUNH
Q29sb3JTcGFjZUNvcHlOYW1lKENHQ29sb3JHZXRDb2xvclNwYWNlKFt3ZWJWaWV3IF9zYW1wbGVk
UGFnZVRvcENvbG9yXS5DR0NvbG9yKSksIChOU1N0cmluZyAqKWtDR0NvbG9yU3BhY2VEaXNwbGF5
UDMpOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BM
QVlfUDMpCisKIFRFU1QoU2FtcGxlZFBhZ2VUb3BDb2xvciwgTWFpbkRvY3VtZW50Q2hhbmdlKQog
ewogICAgIGF1dG8gd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdXaXRoU2FtcGxlZFBhZ2VUb3BDb2xv
ck1heERpZmZlcmVuY2UoNSk7CkBAIC0zNjIsMTMgKzM5MCwyNSBAQCBURVNUKFNhbXBsZWRQYWdl
VG9wQ29sb3IsIE1haW5Eb2N1bWVudENoYW5nZSkKICAgICB9XSk7CiAKICAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZy
YW1lc1BhaW50OkAiPGJvZHk+VGVzdCJdOwotICAgIEVYUEVDVF9FUShXZWJDb3JlOjpDb2xvcihb
d2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0uQ0dDb2xvciksIFdlYkNvcmU6OkNvbG9yOjp3
aGl0ZSk7CisgICAgeworICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9u
ZW50cyhbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0uQ0dDb2xvcik7CisgICAgICAgIEVY
UEVDVF9JTl9SQU5HRShjb21wb25lbnRzWzBdLCAwLjk5LCAxLjAwKTsKKyAgICAgICAgRVhQRUNU
X0lOX1JBTkdFKGNvbXBvbmVudHNbMV0sIDAuOTksIDEuMDApOworICAgICAgICBFWFBFQ1RfSU5f
UkFOR0UoY29tcG9uZW50c1syXSwgMC45OSwgMS4wMCk7CisgICAgICAgIEVYUEVDVF9FUShjb21w
b25lbnRzWzNdLCAxKTsKKyAgICB9CiAgICAgRVhQRUNUX0VRKG5vdGlmaWNhdGlvbkNvdW50LCAx
VUwpOwogCiAgICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOwogCiAgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQ
YWludDpAIjxib2R5PlRlc3QiXTsKLSAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Q29sb3IoW3dlYlZp
ZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpLCBXZWJDb3JlOjpDb2xvcjo6d2hpdGUp
OworICAgIHsKKyAgICAgICAgYXV0byBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMo
W3dlYlZpZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpOworICAgICAgICBFWFBFQ1Rf
SU5fUkFOR0UoY29tcG9uZW50c1swXSwgMC45OSwgMS4wMCk7CisgICAgICAgIEVYUEVDVF9JTl9S
QU5HRShjb21wb25lbnRzWzFdLCAwLjk5LCAxLjAwKTsKKyAgICAgICAgRVhQRUNUX0lOX1JBTkdF
KGNvbXBvbmVudHNbMl0sIDAuOTksIDEuMDApOworICAgICAgICBFWFBFQ1RfRVEoY29tcG9uZW50
c1szXSwgMSk7CisgICAgfQogICAgIC8vIERlcGVuZGluZyBvbiB0aW1pbmcsIGEgbm90aWZpY2F0
aW9uIGNhbiBiZSBzZW50IGZvciB3aGVuIHRoZSBtYWluIGRvY3VtZW50IGNoYW5nZXMgYW5kIHRo
ZW4KICAgICAvLyB3aGVuIHRoZSBuZXcgbWFpbiBkb2N1bWVudCByZW5kZXJzIG9yIGJvdGggY2Fu
IGJlIGNvYWxlc2NlZCBpZiByZW5kZXJpbmcgaXMgZmFzdCBlbm91Z2guCiAgICAgRVhQRUNUX1RS
VUUobm90aWZpY2F0aW9uQ291bnQgPT0gMCB8fCBub3RpZmljYXRpb25Db3VudCA9PSAyKTsKQEAg
LTM4OCw2ICs0MjgsMTIgQEAgVEVTVChTYW1wbGVkUGFnZVRvcENvbG9yLCBNYWluRG9jdW1lbnRD
aGFuZ2UpCiAgICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOwogCiAgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQ
YWludDpAIjxib2R5PlRlc3QiXTsKLSAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Q29sb3IoW3dlYlZp
ZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpLCBXZWJDb3JlOjpDb2xvcjo6d2hpdGUp
OworICAgIHsKKyAgICAgICAgYXV0byBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMo
W3dlYlZpZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpOworICAgICAgICBFWFBFQ1Rf
SU5fUkFOR0UoY29tcG9uZW50c1swXSwgMC45OSwgMS4wMCk7CisgICAgICAgIEVYUEVDVF9JTl9S
QU5HRShjb21wb25lbnRzWzFdLCAwLjk5LCAxLjAwKTsKKyAgICAgICAgRVhQRUNUX0lOX1JBTkdF
KGNvbXBvbmVudHNbMl0sIDAuOTksIDEuMDApOworICAgICAgICBFWFBFQ1RfRVEoY29tcG9uZW50
c1szXSwgMSk7CisgICAgfQogICAgIEVYUEVDVF9FUShub3RpZmljYXRpb25Db3VudCwgMVVMKTsK
IH0K
</data>
<flag name="review"
          id="450927"
          type_id="1"
          status="?"
          setter="hi"
    />
    <flag name="commit-queue"
          id="450928"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>