<?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>235664</bug_id>
          
          <creation_ts>2022-01-26 12:22:05 -0800</creation_ts>
          <short_desc>ImageAnalysisQueue should prioritize elements that intersect the visible viewport</short_desc>
          <delta_ts>2022-01-27 11:56:37 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>akeerthi</cc>
    
    <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>hi</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834233</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-26 12:22:05 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834378</commentid>
    <comment_count>1</comment_count>
      <attachid>450092</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-26 18:38:59 -0800</bug_when>
    <thetext>Created attachment 450092
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834509</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-27 07:18:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/88131827&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834515</commentid>
    <comment_count>3</comment_count>
      <attachid>450092</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-27 07:54:25 -0800</bug_when>
    <thetext>Comment on attachment 450092
For EWS

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

&gt; Source/WebCore/page/ImageAnalysisQueue.h:65
&gt; +    inline static bool isHigherPriority(const Task&amp;, const Task&amp;);
&gt; +    inline unsigned nextTaskNumber();

I don’t think either of these &quot;inline&quot; keywords are needed or helpful.

&gt; Source/WebCore/page/ImageAnalysisQueue.h:76
&gt; +inline bool ImageAnalysisQueue::isHigherPriority(const ImageAnalysisQueue::Task&amp; left, const ImageAnalysisQueue::Task&amp; right)

Can just write Task for the argument types here without the class prefix, since these are inside the function definition.

Once we can use C++20 comparison, this would be better written as an ordering function rather than a &quot;isHigher&quot; function, maybe with the name orderingByPriority, although that doesn&apos;t make it clear what the secondary sort would be. I find the name isHigherPriority ambiguous for a function that takes two arguments.

&gt; Tools/TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm:158
&gt; +    RetainPtr&lt;NSURL&gt; _imageURL;
&gt; +    RetainPtr&lt;NSURL&gt; _pageURL;

In tests it seems we can/should use ARC rather than relying on RetainPtr for Objectve-C object lifetimes. Future is ARC. WebKit non-ARC code is just a legacy we’ll eventually have to overcome/revise. Maybe we can start doing this a source file at a time in the rest of WebKit too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834562</commentid>
    <comment_count>4</comment_count>
      <attachid>450092</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-27 09:49:07 -0800</bug_when>
    <thetext>Comment on attachment 450092
For EWS

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

Thanks for the review!

&gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:65
&gt;&gt; +    inline unsigned nextTaskNumber();
&gt; 
&gt; I don’t think either of these &quot;inline&quot; keywords are needed or helpful.

Good point — removed!

&gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:76
&gt;&gt; +inline bool ImageAnalysisQueue::isHigherPriority(const ImageAnalysisQueue::Task&amp; left, const ImageAnalysisQueue::Task&amp; right)
&gt; 
&gt; Can just write Task for the argument types here without the class prefix, since these are inside the function definition.
&gt; 
&gt; Once we can use C++20 comparison, this would be better written as an ordering function rather than a &quot;isHigher&quot; function, maybe with the name orderingByPriority, although that doesn&apos;t make it clear what the secondary sort would be. I find the name isHigherPriority ambiguous for a function that takes two arguments.

Changed from ImageAnalysisQueue::Task =&gt; Task.

Perhaps for now, I can rename the function (and its arguments) for clarity — I was thinking something like `isHigherPriorityThanOtherTask(const Task&amp; task, const Task&amp; other)`, which would make it more clear which direction the comparison goes.

&gt;&gt; Tools/TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm:158
&gt;&gt; +    RetainPtr&lt;NSURL&gt; _pageURL;
&gt; 
&gt; In tests it seems we can/should use ARC rather than relying on RetainPtr for Objectve-C object lifetimes. Future is ARC. WebKit non-ARC code is just a legacy we’ll eventually have to overcome/revise. Maybe we can start doing this a source file at a time in the rest of WebKit too.

Got it. Yeah, ideally these would not use MRC, but I think it&apos;s tricky in this case because `ImageAnalysisTestingUtilities.mm` is a unified source, so I don&apos;t think we can easily mark the file as ARC (without opting out of unified sources, that is). This makes me wonder if we should adjust the way we unify sources, such that we can unify all ARC-enabled source files together (separately from non-ARC files).

If you prefer, I can `@no-unify` this file and add `-fobjc-arc` to this file; otherwise, I&apos;ll keep it as-is for now, if that&apos;s okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834567</commentid>
    <comment_count>5</comment_count>
      <attachid>450092</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-27 09:55:46 -0800</bug_when>
    <thetext>Comment on attachment 450092
For EWS

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

&gt;&gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:76
&gt;&gt;&gt; +inline bool ImageAnalysisQueue::isHigherPriority(const ImageAnalysisQueue::Task&amp; left, const ImageAnalysisQueue::Task&amp; right)
&gt;&gt; 
&gt;&gt; Can just write Task for the argument types here without the class prefix, since these are inside the function definition.
&gt;&gt; 
&gt;&gt; Once we can use C++20 comparison, this would be better written as an ordering function rather than a &quot;isHigher&quot; function, maybe with the name orderingByPriority, although that doesn&apos;t make it clear what the secondary sort would be. I find the name isHigherPriority ambiguous for a function that takes two arguments.
&gt; 
&gt; Changed from ImageAnalysisQueue::Task =&gt; Task.
&gt; 
&gt; Perhaps for now, I can rename the function (and its arguments) for clarity — I was thinking something like `isHigherPriorityThanOtherTask(const Task&amp; task, const Task&amp; other)`, which would make it more clear which direction the comparison goes.

I would use a name like firstIsHigherPriority.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834568</commentid>
    <comment_count>6</comment_count>
      <attachid>450092</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-27 09:57:22 -0800</bug_when>
    <thetext>Comment on attachment 450092
For EWS

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

&gt;&gt;&gt; Tools/TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm:158
&gt;&gt;&gt; +    RetainPtr&lt;NSURL&gt; _pageURL;
&gt;&gt; 
&gt;&gt; In tests it seems we can/should use ARC rather than relying on RetainPtr for Objectve-C object lifetimes. Future is ARC. WebKit non-ARC code is just a legacy we’ll eventually have to overcome/revise. Maybe we can start doing this a source file at a time in the rest of WebKit too.
&gt; 
&gt; Got it. Yeah, ideally these would not use MRC, but I think it&apos;s tricky in this case because `ImageAnalysisTestingUtilities.mm` is a unified source, so I don&apos;t think we can easily mark the file as ARC (without opting out of unified sources, that is). This makes me wonder if we should adjust the way we unify sources, such that we can unify all ARC-enabled source files together (separately from non-ARC files).
&gt; 
&gt; If you prefer, I can `@no-unify` this file and add `-fobjc-arc` to this file; otherwise, I&apos;ll keep it as-is for now, if that&apos;s okay.

We need to start turning the tide and not just accumulate more and more non-ARC code.

Not by doing @no-unify, but my making ARC normal and non-ARC the exception in this project. It’s the non-ARC that will need something like @no-unify. But I understand if you can’t be the one to do it with this one source file.

By the way, I think we can convert all our tests and it won’t even be a challenging project. Converting WebKit itself is far more difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834579</commentid>
    <comment_count>7</comment_count>
      <attachid>450092</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-27 10:13:09 -0800</bug_when>
    <thetext>Comment on attachment 450092
For EWS

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

&gt;&gt;&gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:76
&gt;&gt;&gt;&gt; +inline bool ImageAnalysisQueue::isHigherPriority(const ImageAnalysisQueue::Task&amp; left, const ImageAnalysisQueue::Task&amp; right)
&gt;&gt;&gt; 
&gt;&gt;&gt; Can just write Task for the argument types here without the class prefix, since these are inside the function definition.
&gt;&gt;&gt; 
&gt;&gt;&gt; Once we can use C++20 comparison, this would be better written as an ordering function rather than a &quot;isHigher&quot; function, maybe with the name orderingByPriority, although that doesn&apos;t make it clear what the secondary sort would be. I find the name isHigherPriority ambiguous for a function that takes two arguments.
&gt;&gt; 
&gt;&gt; Changed from ImageAnalysisQueue::Task =&gt; Task.
&gt;&gt; 
&gt;&gt; Perhaps for now, I can rename the function (and its arguments) for clarity — I was thinking something like `isHigherPriorityThanOtherTask(const Task&amp; task, const Task&amp; other)`, which would make it more clear which direction the comparison goes.
&gt; 
&gt; I would use a name like firstIsHigherPriority.

Sounds good — I&apos;ll go with firstIsHigherPriority(first, second).

&gt;&gt;&gt;&gt; Tools/TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm:158
&gt;&gt;&gt;&gt; +    RetainPtr&lt;NSURL&gt; _pageURL;
&gt;&gt;&gt; 
&gt;&gt;&gt; In tests it seems we can/should use ARC rather than relying on RetainPtr for Objectve-C object lifetimes. Future is ARC. WebKit non-ARC code is just a legacy we’ll eventually have to overcome/revise. Maybe we can start doing this a source file at a time in the rest of WebKit too.
&gt;&gt; 
&gt;&gt; Got it. Yeah, ideally these would not use MRC, but I think it&apos;s tricky in this case because `ImageAnalysisTestingUtilities.mm` is a unified source, so I don&apos;t think we can easily mark the file as ARC (without opting out of unified sources, that is). This makes me wonder if we should adjust the way we unify sources, such that we can unify all ARC-enabled source files together (separately from non-ARC files).
&gt;&gt; 
&gt;&gt; If you prefer, I can `@no-unify` this file and add `-fobjc-arc` to this file; otherwise, I&apos;ll keep it as-is for now, if that&apos;s okay.
&gt; 
&gt; We need to start turning the tide and not just accumulate more and more non-ARC code.
&gt; 
&gt; Not by doing @no-unify, but my making ARC normal and non-ARC the exception in this project. It’s the non-ARC that will need something like @no-unify. But I understand if you can’t be the one to do it with this one source file.
&gt; 
&gt; By the way, I think we can convert all our tests and it won’t even be a challenging project. Converting WebKit itself is far more difficult.

👍🏻 I&apos;ll keep this part of the patch as-is, then — I filed https://bugs.webkit.org/show_bug.cgi?id=235722 to track enabling ARC in TestWebKitAPI.

From a cursory glance, there aren&apos;t a whole lot of manual -release/-retains, so (as you mentioned) it should be relatively straightforward! I&apos;ll take a look later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834608</commentid>
    <comment_count>8</comment_count>
      <attachid>450156</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-27 10:38:35 -0800</bug_when>
    <thetext>Created attachment 450156
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834611</commentid>
    <comment_count>9</comment_count>
      <attachid>450156</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-27 10:40:50 -0800</bug_when>
    <thetext>Comment on attachment 450156
Patch for landing

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

&gt; Source/WebCore/page/ImageAnalysisQueue.h:87
&gt; +inline unsigned ImageAnalysisQueue::nextTaskNumber()
&gt; +{
&gt; +    return ++m_currentTaskNumber;
&gt; +}

Just realized this function can be in the .cpp file. Sure, it’s inline, but all callers are also in the .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834612</commentid>
    <comment_count>10</comment_count>
      <attachid>450156</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-27 10:41:17 -0800</bug_when>
    <thetext>Comment on attachment 450156
Patch for landing

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

&gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:87
&gt;&gt; +}
&gt; 
&gt; Just realized this function can be in the .cpp file. Sure, it’s inline, but all callers are also in the .cpp file.

Or, it’s so short it could just be up above:

    unsigned nextTaskNumber() { return ++m_currentTaskNumber; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834615</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-27 10:43:38 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 450156 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450156&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/ImageAnalysisQueue.h:87
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; Just realized this function can be in the .cpp file. Sure, it’s inline, but all callers are also in the .cpp file.
&gt; 
&gt; Or, it’s so short it could just be up above:
&gt; 
&gt;     unsigned nextTaskNumber() { return ++m_currentTaskNumber; }

Sounds good — will move it above!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834616</commentid>
    <comment_count>12</comment_count>
      <attachid>450158</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-27 10:45:00 -0800</bug_when>
    <thetext>Created attachment 450158
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834629</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-27 11:56:34 -0800</bug_when>
    <thetext>Committed r288690 (246489@main): &lt;https://commits.webkit.org/246489@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450158.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450092</attachid>
            <date>2022-01-26 18:38:59 -0800</date>
            <delta_ts>2022-01-27 07:54:25 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-235664-20220126183859.patch</filename>
            <type>text/plain</type>
            <size>20811</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQwOGQ4YjBhYTkyZTQy
ZjdiNDc5YzQ3YjRlNDg3NzUzNTQ1ZDNiMS4uYTQ0ZmFmYjFlNDY3Y2U5ZTVkMzcwMWQ2ODYwMmZk
YmMzZmIwYTRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIyLTAxLTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltYWdlQW5hbHlz
aXNRdWV1ZSBzaG91bGQgcHJpb3JpdGl6ZSBlbGVtZW50cyB0aGF0IGludGVyc2VjdCB0aGUgdmlz
aWJsZSB2aWV3cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1NjY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTWFrZSBmZXcgYWRqdXN0bWVudHMgdG8gdGhlIGltYWdlIGFuYWx5c2lzIHF1ZXVlaW5n
IG1lY2hhbmlzbSwgc3VjaCB0aGF0IHdlIHByaW9yaXRpemUgYW5hbHl6aW5nIGltYWdlcyB0aGF0
CisgICAgICAgIGFyZSBpbiB0aGUgdmlzaWJsZSBkb2N1bWVudCByZWN0IG92ZXIgb2Zmc2NyZWVu
IGltYWdlcy4gVG8gZG8gdGhpcywgd2UgdHVybiB0aGUgY3VycmVudCBpbWFnZSBlbGVtZW50IHF1
ZXVlIGludG8KKyAgICAgICAgYSBQcmlvcml0eVF1ZXVlIGluc3RlYWQsIHdoaWNoIHRyZWF0cyBp
bWFnZXMgdGhhdCBhcmUgaW4gdGhlIHZpc2libGUgdmlld3BvcnQgKGF0IGVucXVldWVpbmcgdGlt
ZSkgYXMgaGlnaGVyCisgICAgICAgIHByaW9yaXR5IG92ZXIgaW1hZ2VzIHRoYXQgYXJlIG5vdCBp
biB0aGUgdmlzaWJsZSB2aWV3cG9ydCwgYW5kIG90aGVyd2lzZSB0cmVhdHMgaW1hZ2VzIHRoYXQg
d2VyZSBxdWV1ZWQgZWFybGllcgorICAgICAgICBhcyBoaWdoZXIgcHJpb3JpdHkgaW4gdGhlIGNh
c2Ugd2hlcmUgYm90aCBpbWFnZXMgYXJlIGVpdGhlciB2aXNpYmxlIG9yIG5vdCB2aXNpYmxlLgor
CisgICAgICAgIFRlc3Q6IEltYWdlQW5hbHlzaXNUZXN0cy5JbWFnZUFuYWx5c2lzUHJpb3JpdGl6
ZXNWaXNpYmxlSW1hZ2VzCisKKyAgICAgICAgKiBwYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUFuYWx5c2lzUXVldWU6OmVucXVldWVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUFuYWx5c2lzUXVldWU6OnJlc3VtZVByb2Nlc3NpbmdT
b29uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQW5hbHlzaXNRdWV1ZTo6cmVzdW1lUHJvY2Vz
c2luZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUFuYWx5c2lzUXVldWU6OmNsZWFyKToKKyAg
ICAgICAgKiBwYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5oOgorCisgICAgICAgIFN3YXAgb3V0IHRo
ZSBEZXF1ZSBmb3IgYSBQcmlvcml0eVF1ZXVlLCBhbmQgaW50cm9kdWNlIEltYWdlQW5hbHlzaXNR
dWV1ZTo6VGFzayB0byByZXByZXNlbnQgYW4gaW1hZ2UgYW5hbHlzaXMKKyAgICAgICAgdGFzayAo
d2hpY2ggY2FuIGJlIGNvbXBhcmVkIGFnYWluc3Qgb3RoZXIgdGFza3MgdG8gZGV0ZXJtaW5lIHBy
aW9yaXR5IHVzaW5nIGBpc0hpZ2hlclByaW9yaXR5KClgIGJlbG93KS4KKworICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VBbmFseXNpc1F1ZXVlOjppc0hpZ2hlclByaW9yaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQW5hbHlzaXNRdWV1ZTo6bmV4dFRhc2tOdW1iZXIpOgorCiAyMDIyLTAxLTI2
ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04ocjI4ODYyMykgTVNWQyByZXBvcnRzICJJbnNwZWN0b3JET01BZ2VudC5jcHAoNTU4
LDQwKTogZXJyb3IgQzIwNTk6IHN5bnRheCBlcnJvcjogJzonIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9JbWFnZUFuYWx5c2lzUXVldWUuY3BwCmluZGV4IDU1MTQ0Y2U2NDdlNWM5NzE0NjdiNjI4NGNh
MGJjN2MyOWRlYWFiNTQuLmJlMTFhNjcyMzFiYjlkYWExOTMzM2ZmMWM0OTE1MGQyZmRlZjBjOGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VBbmFseXNpc1F1ZXVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5jcHAKQEAgLTMwLDEw
ICszMCwxMiBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsOCArNjksMjEgQEAg
dm9pZCBJbWFnZUFuYWx5c2lzUXVldWU6OmVucXVldWVJZk5lZWRlZChIVE1MSW1hZ2VFbGVtZW50
JiBlbGVtZW50KQogICAgIGlmICghbV9xdWV1ZWRFbGVtZW50cy5hZGQoZWxlbWVudCkuaXNOZXdF
bnRyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9xdWV1ZS5hcHBlbmQoeyBlbGVtZW50IH0p
OwotICAgIHJlc3VtZVByb2Nlc3NpbmcoKTsKKyAgICBSZWYgdmlldyA9IHJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKTsKKyAgICBtX3F1ZXVlLmVucXVldWUoeworICAgICAgICBlbGVtZW50LAor
ICAgICAgICByZW5kZXJlci5pc1Zpc2libGVJbkRvY3VtZW50UmVjdCh2aWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHZpZXctPndpbmRvd0NsaXBSZWN0KCkpKSA/IFByaW9yaXR5OjpIaWdoIDogUHJpb3Jp
dHk6OkxvdywKKyAgICAgICAgbmV4dFRhc2tOdW1iZXIoKQorICAgIH0pOworICAgIHJlc3VtZVBy
b2Nlc3NpbmdTb29uKCk7Cit9CisKK3ZvaWQgSW1hZ2VBbmFseXNpc1F1ZXVlOjpyZXN1bWVQcm9j
ZXNzaW5nU29vbigpCit7CisgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpIHx8IG1fcmVzdW1lUHJv
Y2Vzc2luZ1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzdW1l
UHJvY2Vzc2luZ1RpbWVyLnN0YXJ0T25lU2hvdChyZXN1bWVQcm9jZXNzaW5nRGVsYXkpOwogfQog
CiB2b2lkIEltYWdlQW5hbHlzaXNRdWV1ZTo6ZW5xdWV1ZUFsbEltYWdlcyhEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKQEAgLTkxLDcgKzEwNiw3IEBAIHZvaWQg
SW1hZ2VBbmFseXNpc1F1ZXVlOjpyZXN1bWVQcm9jZXNzaW5nKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdSZXF1ZXN0Q291bnQg
PCBtYXhpbXVtUGVuZGluZ0ltYWdlQW5hbHlzaXNDb3VudCkgewotICAgICAgICBhdXRvIHdlYWtF
bGVtZW50ID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgYXV0byB3ZWFrRWxlbWVudCA9
IG1fcXVldWUuZGVxdWV1ZSgpLmVsZW1lbnQ7CiAgICAgICAgIFJlZlB0ciBlbGVtZW50ID0gd2Vh
a0VsZW1lbnQuZ2V0KCk7CiAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNDb25u
ZWN0ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTksMTQgKzExNCwxMyBAQCB2b2lk
IEltYWdlQW5hbHlzaXNRdWV1ZTo6cmVzdW1lUHJvY2Vzc2luZygpCiAgICAgICAgIG1fcGVuZGlu
Z1JlcXVlc3RDb3VudCsrOwogICAgICAgICBtX3BhZ2UtPnJlc2V0VGV4dFJlY29nbml0aW9uUmVz
dWx0KCplbGVtZW50KTsKICAgICAgICAgbV9wYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5yZXF1ZXN0
VGV4dFJlY29nbml0aW9uKCplbGVtZW50LCBtX2lkZW50aWZpZXIsIFt0aGlzLCBwYWdlID0gbV9w
YWdlXSAoYXV0byYmKSB7Ci0gICAgICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICBpZiAo
IXBhZ2UgfHwgcGFnZS0+aW1hZ2VBbmFseXNpc1F1ZXVlSWZFeGlzdHMoKSAhPSB0aGlzKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RD
b3VudCkKICAgICAgICAgICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0Q291bnQtLTsKIAotICAgICAg
ICAgICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSAmJiAhbV9yZXN1bWVQcm9jZXNzaW5nVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBtX3Jlc3VtZVByb2Nlc3NpbmdUaW1lci5zdGFy
dE9uZVNob3QocmVzdW1lUHJvY2Vzc2luZ0RlbGF5KTsKKyAgICAgICAgICAgIHJlc3VtZVByb2Nl
c3NpbmdTb29uKCk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTExNiw5ICsxMzAsMTAgQEAg
dm9pZCBJbWFnZUFuYWx5c2lzUXVldWU6OmNsZWFyKCkKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgY2FuY2VsIHBlbmRpbmcgcmVxdWVzdHMgaW4gYWRkaXRpb24gdG8gZW1wdHlpbmcgdGhlIHRh
c2sgcXVldWUuCiAgICAgbV9wZW5kaW5nUmVxdWVzdENvdW50ID0gMDsKICAgICBtX3Jlc3VtZVBy
b2Nlc3NpbmdUaW1lci5zdG9wKCk7Ci0gICAgbV9xdWV1ZS5jbGVhcigpOworICAgIG1fcXVldWUg
PSB7IH07CiAgICAgbV9xdWV1ZWRFbGVtZW50cy5jbGVhcigpOwogICAgIG1faWRlbnRpZmllciA9
IHsgfTsKKyAgICBtX2N1cnJlbnRUYXNrTnVtYmVyID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVl
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VBbmFseXNpc1F1ZXVlLmgKaW5kZXggMDZj
NzMzOGNjNjUyYjg4OWY0ZTZhZTMwOGE1NDRjOTNjNDhlYzg4MC4uMDEwZTMwYjI2YTEyZTE1MWI1
YmE5NmYxODU5NDAwZDc3NzUxN2E1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9J
bWFnZUFuYWx5c2lzUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlz
aXNRdWV1ZS5oCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMp
CiAKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNTEsMTYgKzUxLDQxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGVucXVldWVJZk5lZWRlZChIVE1MSW1hZ2VFbGVtZW50Jik7CiAKIHByaXZh
dGU6CisgICAgdm9pZCByZXN1bWVQcm9jZXNzaW5nU29vbigpOwogICAgIHZvaWQgcmVzdW1lUHJv
Y2Vzc2luZygpOwogCisgICAgZW51bSBjbGFzcyBQcmlvcml0eSA6IGJvb2wgeyBMb3csIEhpZ2gg
fTsKKyAgICBzdHJ1Y3QgVGFzayB7CisgICAgICAgIFdlYWtQdHI8SFRNTEltYWdlRWxlbWVudD4g
ZWxlbWVudDsKKyAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgeyBQcmlvcml0eTo6TG93IH07Cisg
ICAgICAgIHVuc2lnbmVkIHRhc2tOdW1iZXIgeyAwIH07CisgICAgfTsKKworICAgIGlubGluZSBz
dGF0aWMgYm9vbCBpc0hpZ2hlclByaW9yaXR5KGNvbnN0IFRhc2smLCBjb25zdCBUYXNrJik7Cisg
ICAgaW5saW5lIHVuc2lnbmVkIG5leHRUYXNrTnVtYmVyKCk7CisKICAgICBTdHJpbmcgbV9pZGVu
dGlmaWVyOwogICAgIFdlYWtQdHI8UGFnZT4gbV9wYWdlOwogICAgIFRpbWVyIG1fcmVzdW1lUHJv
Y2Vzc2luZ1RpbWVyOwogICAgIFdlYWtIYXNoU2V0PEhUTUxJbWFnZUVsZW1lbnQ+IG1fcXVldWVk
RWxlbWVudHM7Ci0gICAgRGVxdWU8V2Vha1B0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9xdWV1ZTsK
KyAgICBQcmlvcml0eVF1ZXVlPFRhc2ssIGlzSGlnaGVyUHJpb3JpdHk+IG1fcXVldWU7CiAgICAg
dW5zaWduZWQgbV9wZW5kaW5nUmVxdWVzdENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fY3Vy
cmVudFRhc2tOdW1iZXIgeyAwIH07CiB9OwogCitpbmxpbmUgYm9vbCBJbWFnZUFuYWx5c2lzUXVl
dWU6OmlzSGlnaGVyUHJpb3JpdHkoY29uc3QgSW1hZ2VBbmFseXNpc1F1ZXVlOjpUYXNrJiBsZWZ0
LCBjb25zdCBJbWFnZUFuYWx5c2lzUXVldWU6OlRhc2smIHJpZ2h0KQoreworICAgIGlmIChsZWZ0
LnByaW9yaXR5ICE9IHJpZ2h0LnByaW9yaXR5KQorICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0
eSA9PSBQcmlvcml0eTo6SGlnaDsKKworICAgIHJldHVybiBsZWZ0LnRhc2tOdW1iZXIgPCByaWdo
dC50YXNrTnVtYmVyOworfQorCitpbmxpbmUgdW5zaWduZWQgSW1hZ2VBbmFseXNpc1F1ZXVlOjpu
ZXh0VGFza051bWJlcigpCit7CisgICAgcmV0dXJuICsrbV9jdXJyZW50VGFza051bWJlcjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0FOQUxZ
U0lTKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDQ2MDEyNDk5YmUxMGQzZTkxZTg1OGI3MWYxNDA4MjFmMmU4YzgyZjEuLjg2MWQ0NGZkZGVjNWU5
MjZjOGM3OWNmMTYxNzY4MWUzMzkxOGJhYTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAyMi0wMS0yNiAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBJbWFnZUFuYWx5c2lz
UXVldWUgc2hvdWxkIHByaW9yaXRpemUgZWxlbWVudHMgdGhhdCBpbnRlcnNlY3QgdGhlIHZpc2li
bGUgdmlld3BvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNTY2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhbiBBUEkgdGVzdCB0byB2ZXJpZnkgdGhhdCBiYXRjaCBpbWFnZSBhbmFseXNpcyBw
cmlvcml0aXplcyBhIHZpc2libGUgaW1hZ2Ugb3ZlciBhbm90aGVyIGltYWdlIHRoYXQgYXBwZWFy
cworICAgICAgICBmaXJzdCBpbiBET00gdHJhdmVyc2FsIG9yZGVyLCBidXQgaXMgb2Zmc2NyZWVu
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bWFnZUFuYWx5c2lzVGVzdHMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwcm9jZXNzZWRS
ZXF1ZXN0cyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwcm9jZXNzUmVxdWVzdFdpdGhSZXN1
bHRzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VGYWtlUmVxdWVzdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjptYWtlSW1hZ2VBbmFseXNpc1JlcXVlc3RTd2l6emxlcik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpwcm9jZXNzUmVxdWVzdFdpdGhFcnJvcik6CisKKyAgICAgICAg
QWRkaXRpb25hbGx5IGFkZCBhIG1lY2hhbmlzbSBmb3Igc3dpenpsaW5nIG91dCBWS0ltYWdlQW5h
bHl6ZXJSZXF1ZXN0IGluaXRpYWxpemF0aW9uIHRvIHJldHVybiBhIG1vY2sgb2JqZWN0CisgICAg
ICAgIChUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCkgaW5zdGVhZCwgd2hpY2ggY2FuIHRoZW4g
YmUgdXNlZCB0byBpbnNwZWN0IHRoZSBDR0ltYWdlIHRoYXQgd291bGQndmUgYmVlbiBzZW50IGZv
cgorICAgICAgICBhbmFseXNpcy4gU2VlIGNoYW5nZXMgaW4gYEltYWdlQW5hbHlzaXNUZXN0aW5n
VXRpbGl0aWVzLipgIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL29mZnNjcmVlbi1pbWFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L2NvY29hL0ltYWdlQW5hbHlzaXNUZXN0aW5nVXRpbGl0aWVzLmg6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9jb2NvYS9JbWFnZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy5tbToKKyAgICAgICAg
KC1bVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3QgaW5pdFdpdGhDR0ltYWdlOm9yaWVudGF0aW9u
OnJlcXVlc3RUeXBlOl0pOgorICAgICAgICAoLVtUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCBp
bWFnZV0pOgorICAgICAgICAoLVtUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCBpbWFnZVVSTF0p
OgorICAgICAgICAoLVtUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCBzZXRJbWFnZVVSTDpdKToK
KyAgICAgICAgKC1bVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3QgcGFnZVVSTF0pOgorICAgICAg
ICAoLVtUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCBzZXRQYWdlVVJMOl0pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Y3JlYXRlUmVxdWVzdCk6CisKIDIwMjItMDEtMjUgIEpvbmF0aGFuIEJl
ZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtFV1NdIFN1cHBvcnQgcHVsbCBy
ZXF1ZXN0cyBpbiBidWlsdCBwcm9kdWN0IG1hbmFnZW1lbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMGEzNDcxMGU2NzVhZTVhNmVjMDE1MTk1Yjc3MWU0ZTgwY2ZlYTcyNy4uNjhkZmE5ZGRk
ZTk3ZmZhMDdmNmNjZmQ0YmQ4NDlmODViYWNmMmJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEwNTgsNiArMTA1OCw3IEBACiAJCUY0NUUxNTczMjExMkNFMjkwMDMwN0U4MiAvKiBLZXli
b2FyZElucHV0VGVzdHNJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDVFMTU3MjIxMTJDRTI5MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1dFRlc3Rz
SU9TLm1tICovOyB9OwogCQlGNDVFMTU3NjIxMTJDRTYyMDAzMDdFODIgLyogVGVzdElucHV0RGVs
ZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDVFMTU3NTIxMTJDRTYyMDAzMDdFODIgLyogVGVzdElucHV0RGVsZWdhdGUubW0gKi87IH07CiAJ
CUY0NUVCNjA0Mjc3MzlGMzQwMDM1NzFBRSAvKiBUZXN0TW9kYWxDb250YWluZXJDb250cm9scy5t
bG1vZGVsYyBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDVFQjYwMzI3NzM5RjJCMDAzNTcxQUUgLyogVGVzdE1vZGFsQ29udGFpbmVyQ29udHJv
bHMubWxtb2RlbGMgKi87IH07CisJCUY0NjBCRUVBMjdBMUY0MTYwMDdCODdEOSAvKiBvZmZzY3Jl
ZW4taW1hZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDYwQkVFNzI3QTFGMkQ2MDA3Qjg3RDkgLyogb2Zmc2NyZWVuLWltYWdlLmh0
bWwgKi87IH07CiAJCUY0NjBGNjU3MjYxMTE2RUEwMDY0RjJCNiAvKiBJbmplY3RlZEJ1bmRsZUhp
dFRlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDYwRjY1NjI2MTExNkVBMDA2NEYyQjYgLyogSW5qZWN0ZWRCdW5kbGVIaXRUZXN0Lm1tICovOyB9
OwogCQlGNDYwRjY1QjI2MTExOTU4MDA2NEYyQjYgLyogSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UGx1
Z0luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2
MEY2NTkyNjExMTdFNzAwNjRGMkI2IC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFBsdWdJbi5tbSAq
LzsgfTsKIAkJRjQ2MEY2NjkyNjEyNjMzNzAwNjRGMkI2IC8qIHNpbXBsZS1yZXNwb25zaXZlLXBh
Z2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDYwRjY2ODI2MTI2MkM3MDA2NEYyQjYgLyogc2ltcGxlLXJlc3BvbnNpdmUtcGFnZS5o
dG1sICovOyB9OwpAQCAtMTQ5OSw2ICsxNTAwLDcgQEAKIAkJCQk0NjZDMzg0MzIxMDYzN0RFMDA2
QTg4REUgLyogbm90aWZ5LXJlc291cmNlTG9hZE9ic2VydmVyLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJQ0RCNURGRkYyMTM2MTBGQTAwRDNFMTg5IC8qIG5vdy1wbGF5aW5nLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJOTNFMkQyNzYxRUQ3RDUzMjAwRkE3NkY2IC8qIG9m
ZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEtZG9jdW1lbnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKKwkJCQlGNDYwQkVFQTI3QTFGNDE2MDA3Qjg3RDkgLyogb2Zmc2NyZWVuLWltYWdlLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMDc0OTk0NDIxRUE1MDM0QjAwMERBNDRGIC8qIG9u
ZGV2aWNlY2hhbmdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMURBQTUyQ0MyNDNC
RTgwNTAwMUEzMTU5IC8qIG9uZS12aWRlby5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CUNFQTZDRjI4MTlDQ0Y2OUQwMDY0RjVBNyAvKiBvcGVuLWFuZC1jbG9zZS13aW5kb3cuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKQEAgLTMwMzUsNiArMzAzNyw3IEBACiAJCUY0NUUxNTc1MjEx
MkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFRlc3RJbnB1dERlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDVFQjYwMzI3NzM5RjJCMDAzNTcxQUUgLyogVGVzdE1vZGFsQ29udGFpbmVyQ29udHJvbHMubWxt
b2RlbGMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyOyBwYXRoID0gVGVzdE1vZGFsQ29udGFpbmVyQ29udHJvbHMubWxtb2RlbGM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUVCNjA2Mjc3M0MzNzEwMDM1NzFBRSAvKiBNb2Rh
bENvbnRhaW5lck9ic2VydmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxDb250
YWluZXJPYnNlcnZhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ2MEJF
RTcyN0ExRjJENjAwN0I4N0Q5IC8qIG9mZnNjcmVlbi1pbWFnZS5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm9m
ZnNjcmVlbi1pbWFnZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2MEY2
NTYyNjExMTZFQTAwNjRGMkI2IC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjQ2MEY2NTkyNjExMTdFNzAwNjRGMkI2IC8qIEluamVjdGVkQnVuZGxlSGl0
VGVzdFBsdWdJbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlSGl0VGVz
dFBsdWdJbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2MEY2NUEyNjExMTgz
RjAwNjRGMkI2IC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFByb3RvY29sLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFByb3RvY29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MTg2LDYgKzQxODksNyBAQAogCQkJCTQ2NkMzODQyMjEwNjM3Q0UwMDZBODhE
RSAvKiBub3RpZnktcmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaHRtbCAqLywKIAkJCQlDREI1REZGRTIx
MzYwRUQ4MDBEM0UxODkgLyogbm93LXBsYXlpbmcuaHRtbCAqLywKIAkJCQk5M0UyRDI3NTFFRDdE
NTE3MDBGQTc2RjYgLyogb2Zmc2NyZWVuLWlmcmFtZS1vZi1tZWRpYS1kb2N1bWVudC5odG1sICov
LAorCQkJCUY0NjBCRUU3MjdBMUYyRDYwMDdCODdEOSAvKiBvZmZzY3JlZW4taW1hZ2UuaHRtbCAq
LywKIAkJCQk3Q0NCOTkyMjFEM0I0NEU3MDAzOTIyRjYgLyogb3Blbi1tdWx0aXBsZS1leHRlcm5h
bC11cmwuaHRtbCAqLywKIAkJCQk5MzFDMjgxQjIyQkM1NTgzMDAxRDk4QzQgLyogb3BlbmRhdGFi
YXNlLWFsd2F5cy1leGlzdHMuaHRtbCAqLywKIAkJCQlGNDk5OTJDNTI0OERBQkU0MDAwMzQxNjcg
Lyogb3ZlcmZsb3ctaGlkZGVuLmh0bWwgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0ltYWdlQW5hbHlzaXNUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RzLm1tCmluZGV4IDlj
MzU2NzllZWU0MTAzOGRjODQ4MDMwYzhjZWYyMWY0OTliMjkyZGQuLjRiZWVjZjMwOTQzYmRlY2Fk
OTJkZGYwMWVjM2RkZTYzOWZhZGEwNzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RzLm1tCkBAIC01Myw2
ICs1MywxMCBAQCBAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCitAaW50
ZXJmYWNlIFZLSW1hZ2VBbmFseXplclJlcXVlc3QgKFRlc3RTdXBwb3J0KQorQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBDR0ltYWdlUmVmIGltYWdlOworQGVuZAorCiBAaW50ZXJmYWNl
IFRlc3RXS1dlYlZpZXcgKEltYWdlQW5hbHlzaXNUZXN0cykKIC0gKHZvaWQpd2FpdEZvckltYWdl
QW5hbHlzaXNSZXF1ZXN0czoodW5zaWduZWQpbnVtYmVyT2ZSZXF1ZXN0czsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpAQCAtOTIsNiArOTYsMTIgQEAgQGVuZAogCiBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKK3N0YXRpYyBWZWN0b3I8UmV0YWluUHRyPFZLSW1hZ2VBbmFseXplclJlcXVl
c3Q+PiYgcHJvY2Vzc2VkUmVxdWVzdHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZCBy
ZXF1ZXN0cyA9IFZlY3RvcjxSZXRhaW5QdHI8VktJbWFnZUFuYWx5emVyUmVxdWVzdD4+IHsgfTsK
KyAgICByZXR1cm4gcmVxdWVzdHMuZ2V0KCk7Cit9CisKIHN0YXRpYyBSZXRhaW5QdHI8VGVzdFdL
V2ViVmlldz4gY3JlYXRlV2ViVmlld1dpdGhUZXh0UmVjb2duaXRpb25FbmhhbmNlbWVudHMoKQog
ewogICAgIFJldGFpblB0ciBjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
X3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1Bs
dWdJbldpdGhJbnRlcm5hbHMiIGNvbmZpZ3VyZUpTQ0ZvclRlc3Rpbmc6WUVTXTsKQEAgLTEwNCwy
MyArMTE0LDMzIEBAIHN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gY3JlYXRlV2ViVmll
d1dpdGhUZXh0UmVjb2duaXRpb25FbmhhbmNlbWVudHMoKQogICAgIHJldHVybiBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDMwMCwg
MzAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIH0KIAotc3RhdGljIHZv
aWQgcHJvY2Vzc1JlcXVlc3RXaXRoUmVzdWx0cyhpZCwgU0VMLCBWS0ltYWdlQW5hbHl6ZXJSZXF1
ZXN0ICosIHZvaWQgKF4pKGRvdWJsZSBwcm9ncmVzcyksIHZvaWQgKF5jb21wbGV0aW9uKShWS0lt
YWdlQW5hbHlzaXMgKiwgTlNFcnJvciAqKSkKK3N0YXRpYyB2b2lkIHByb2Nlc3NSZXF1ZXN0V2l0
aFJlc3VsdHMoaWQsIFNFTCwgVktJbWFnZUFuYWx5emVyUmVxdWVzdCAqcmVxdWVzdCwgdm9pZCAo
XikoZG91YmxlIHByb2dyZXNzKSwgdm9pZCAoXmNvbXBsZXRpb24pKFZLSW1hZ2VBbmFseXNpcyAq
LCBOU0Vycm9yICopKQogewogICAgIGdEaWRQcm9jZXNzUmVxdWVzdENvdW50Kys7CisgICAgcHJv
Y2Vzc2VkUmVxdWVzdHMoKS5hcHBlbmQoeyByZXF1ZXN0IH0pOwogICAgIGNvbXBsZXRpb24oY3Jl
YXRlSW1hZ2VBbmFseXNpc1dpdGhTaW1wbGVGaXhlZFJlc3VsdHMoKS5nZXQoKSwgbmlsKTsKIH0K
IAorc3RhdGljIFZLSW1hZ2VBbmFseXplclJlcXVlc3QgKm1ha2VGYWtlUmVxdWVzdChpZCwgU0VM
LCBDR0ltYWdlUmVmIGltYWdlLCBWS0ltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFZLQW5h
bHlzaXNUeXBlcyByZXF1ZXN0VHlwZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlcXVlc3QoaW1h
Z2UsIG9yaWVudGF0aW9uLCByZXF1ZXN0VHlwZXMpLmxlYWtSZWYoKTsKK30KKwogdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KLUluc3RhbmNlTWV0aG9kU3dpenpsZXIgbWFrZUltYWdl
QW5hbHlzaXNSZXF1ZXN0U3dpenpsZXIoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQorc3RkOjpwYWly
PHN0ZDo6dW5pcXVlX3B0cjxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPiwgc3RkOjp1bmlxdWVfcHRy
PEluc3RhbmNlTWV0aG9kU3dpenpsZXI+PiBtYWtlSW1hZ2VBbmFseXNpc1JlcXVlc3RTd2l6emxl
cihGdW5jdGlvblR5cGUgZnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgeyBQQUw6OmdldFZLSW1hZ2VBbmFseXplckNsYXNzKCksIEBzZWxlY3Rvcihwcm9jZXNz
UmVxdWVzdDpwcm9ncmVzc0hhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXI6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KGZ1bmN0aW9uKSB9OworICAgIHJldHVybiBzdGQ6OnBhaXIgeworICAgICAgICBt
YWtlVW5pcXVlPEluc3RhbmNlTWV0aG9kU3dpenpsZXI+KFBBTDo6Z2V0VktJbWFnZUFuYWx5emVy
Q2xhc3MoKSwgQHNlbGVjdG9yKHByb2Nlc3NSZXF1ZXN0OnByb2dyZXNzSGFuZGxlcjpjb21wbGV0
aW9uSGFuZGxlcjopLCByZWludGVycHJldF9jYXN0PElNUD4oZnVuY3Rpb24pKSwKKyAgICAgICAg
bWFrZVVuaXF1ZTxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPihQQUw6OmdldFZLSW1hZ2VBbmFseXpl
clJlcXVlc3RDbGFzcygpLCBAc2VsZWN0b3IoaW5pdFdpdGhDR0ltYWdlOm9yaWVudGF0aW9uOnJl
cXVlc3RUeXBlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihtYWtlRmFrZVJlcXVlc3QpKQorICAg
IH07CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi1zdGF0aWMgdm9pZCBwcm9jZXNz
UmVxdWVzdFdpdGhFcnJvcihpZCwgU0VMLCBWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0ICosIHZvaWQg
KF4pKGRvdWJsZSBwcm9ncmVzcyksIHZvaWQgKF5jb21wbGV0aW9uKShWS0ltYWdlQW5hbHlzaXMg
KmFuYWx5c2lzLCBOU0Vycm9yICplcnJvcikpCitzdGF0aWMgdm9pZCBwcm9jZXNzUmVxdWVzdFdp
dGhFcnJvcihpZCwgU0VMLCBWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0ICpyZXF1ZXN0LCB2b2lkIChe
KShkb3VibGUgcHJvZ3Jlc3MpLCB2b2lkICheY29tcGxldGlvbikoVktJbWFnZUFuYWx5c2lzICph
bmFseXNpcywgTlNFcnJvciAqZXJyb3IpKQogewogICAgIGdEaWRQcm9jZXNzUmVxdWVzdENvdW50
Kys7CisgICAgcHJvY2Vzc2VkUmVxdWVzdHMoKS5hcHBlbmQoeyByZXF1ZXN0IH0pOwogICAgIGNv
bXBsZXRpb24obmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWlu
IGNvZGU6MSB1c2VySW5mbzpuaWxdKTsKIH0KIApAQCAtMjI0LDYgKzI0NCwyMiBAQCBURVNUKElt
YWdlQW5hbHlzaXNUZXN0cywgUmVzZXRJbWFnZUFuYWx5c2lzQWZ0ZXJOYXZpZ2F0aW9uKQogICAg
IEVYUEVDVF9FUShnRGlkUHJvY2Vzc1JlcXVlc3RDb3VudCwgNVUpOwogfQogCitURVNUKEltYWdl
QW5hbHlzaXNUZXN0cywgSW1hZ2VBbmFseXNpc1ByaW9yaXRpemVzVmlzaWJsZUltYWdlcykKK3sK
KyAgICBhdXRvIHJlcXVlc3RTd2l6emxlciA9IG1ha2VJbWFnZUFuYWx5c2lzUmVxdWVzdFN3aXp6
bGVyKHByb2Nlc3NSZXF1ZXN0V2l0aFJlc3VsdHMpOworICAgIGF1dG8gd2ViVmlldyA9IGNyZWF0
ZVdlYlZpZXdXaXRoVGV4dFJlY29nbml0aW9uRW5oYW5jZW1lbnRzKCk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAib2Zmc2NyZWVuLWltYWdlIl07CisgICAg
W3dlYlZpZXcgX3N0YXJ0SW1hZ2VBbmFseXNpczpuaWxdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JJ
bWFnZUFuYWx5c2lzUmVxdWVzdHM6Ml07CisKKyAgICBhdXRvIGZpcnN0UmVxdWVzdGVkSW1hZ2Ug
PSBbcHJvY2Vzc2VkUmVxdWVzdHMoKS5maXJzdCgpIGltYWdlXTsKKyAgICBhdXRvIGxhc3RSZXF1
ZXN0ZWRJbWFnZSA9IFtwcm9jZXNzZWRSZXF1ZXN0cygpLmxhc3QoKSBpbWFnZV07CisgICAgRVhQ
RUNUX0VRKDIwMFUsIENHSW1hZ2VHZXRXaWR0aChmaXJzdFJlcXVlc3RlZEltYWdlKSk7CisgICAg
RVhQRUNUX0VRKDE1MFUsIENHSW1hZ2VHZXRIZWlnaHQoZmlyc3RSZXF1ZXN0ZWRJbWFnZSkpOwor
ICAgIEVYUEVDVF9FUSg2MDBVLCBDR0ltYWdlR2V0V2lkdGgobGFzdFJlcXVlc3RlZEltYWdlKSk7
CisgICAgRVhQRUNUX0VRKDQ1MFUsIENHSW1hZ2VHZXRIZWlnaHQobGFzdFJlcXVlc3RlZEltYWdl
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJM
RShJTUFHRV9BTkFMWVNJUykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2Evb2Zmc2NyZWVuLWltYWdlLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL29mZnNjcmVlbi1pbWFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3NTM4NjA3
YTBmMzA1ZGQzMDY0ZDc5YzM3YjNmZDEyOWQxNDg5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL29mZnNjcmVlbi1pbWFnZS5odG1sCkBA
IC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5h
bWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEiPgorPHN0eWxlPgoraW1nIHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
aW1nIHN0eWxlPSJ0b3A6IDkwMDBweDsiIHNyYz0ic3Vuc2V0LWluLWN1cGVydGluby02MDBweC5q
cGciPgorPGltZyBzcmM9InN1bnNldC1pbi1jdXBlcnRpbm8tMjAwcHgucG5nIj4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSW1hZ2VBbmFs
eXNpc1Rlc3RpbmdVdGlsaXRpZXMuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSW1hZ2VB
bmFseXNpc1Rlc3RpbmdVdGlsaXRpZXMuaAppbmRleCA5NDVmYzE2ZjNlYzg5MmI5MGRhNTM4ZTNl
YWYwODJiOGNhZWJmN2U1Li4zN2RlODI4YWI3Y2JjODRmMTI4YTA2NmE4MDdiYzdkNjc3ZjVmOTNm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0ltYWdlQW5hbHlzaXNUZXN0
aW5nVXRpbGl0aWVzLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9JbWFnZUFuYWx5
c2lzVGVzdGluZ1V0aWxpdGllcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1Zpc2lvbktpdENvcmVTUEkuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogI2lmIEhBVkUoVktfSU1BR0VfQU5BTFlTSVMpCkBAIC00Miw2ICs0
Myw3IEBAIFJldGFpblB0cjxWS1F1YWQ+IGNyZWF0ZVF1YWQoQ0dQb2ludCB0b3BMZWZ0LCBDR1Bv
aW50IHRvcFJpZ2h0LCBDR1BvaW50IGJvdHRvbUxlCiBSZXRhaW5QdHI8VktXS1RleHRJbmZvPiBj
cmVhdGVUZXh0SW5mbyhOU1N0cmluZyAqdGV4dCwgVktRdWFkICopOwogUmV0YWluUHRyPFZLV0tM
aW5lSW5mbz4gY3JlYXRlTGluZUluZm8oTlNTdHJpbmcgKnRleHQsIFZLUXVhZCAqLCBOU0FycmF5
PFZLV0tUZXh0SW5mbyAqPiAqKTsKIFJldGFpblB0cjxWS0ltYWdlQW5hbHlzaXM+IGNyZWF0ZUlt
YWdlQW5hbHlzaXMoTlNBcnJheTxWS1dLTGluZUluZm8gKj4gKik7CitSZXRhaW5QdHI8VktJbWFn
ZUFuYWx5emVyUmVxdWVzdD4gY3JlYXRlUmVxdWVzdChDR0ltYWdlUmVmLCBWS0ltYWdlT3JpZW50
YXRpb24sIFZLQW5hbHlzaXNUeXBlcyk7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9JbWFnZUFuYWx5c2lzVGVz
dGluZ1V0aWxpdGllcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSW1hZ2VBbmFseXNp
c1Rlc3RpbmdVdGlsaXRpZXMubW0KaW5kZXggMTJhYTZlYTVlMWI2ZmE4YTlkOGVmYzA0MDZiN2U2
MWI5MWQ0MTc4Mi4uOWE5ZDNiMGJlMzRiNTdjZDBiMTVlMWU4ZjQ5MjEzOWYyZTg2NDhkZSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9JbWFnZUFuYWx5c2lzVGVzdGluZ1V0
aWxpdGllcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0ltYWdlQW5hbHlzaXNU
ZXN0aW5nVXRpbGl0aWVzLm1tCkBAIC0xNDIsNiArMTQyLDYwIEBAIC0gKEJPT0wpaGFzUmVzdWx0
c0ZvckFuYWx5c2lzVHlwZXM6KFZLQW5hbHlzaXNUeXBlcylhbmFseXNpc1R5cGVzCiAKIEBlbmQK
IAorQGludGVyZmFjZSBUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHSW1hZ2VSZWYgaW1hZ2U7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFZLSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVktBbmFseXNpc1R5cGVzIHJlcXVlc3RUeXBl
OworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TVVJMICppbWFnZVVSTDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1VSTCAqcGFnZVVSTDsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0IHsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gX2ltYWdlOworICAgIFZLSW1hZ2VPcmllbnRhdGlvbiBfb3JpZW50YXRpb247CisgICAgVktB
bmFseXNpc1R5cGVzIF9yZXF1ZXN0VHlwZTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IF9pbWFnZVVS
TDsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IF9wYWdlVVJMOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDR0ltYWdlOihDR0ltYWdlUmVmKWltYWdlIG9yaWVudGF0aW9uOihWS0ltYWdlT3Jp
ZW50YXRpb24pb3JpZW50YXRpb24gcmVxdWVzdFR5cGU6KFZLQW5hbHlzaXNUeXBlcylyZXF1ZXN0
VHlwZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX2ltYWdlID0gaW1hZ2U7CisgICAgX29yaWVudGF0aW9uID0gb3JpZW50YXRp
b247CisgICAgX3JlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKENHSW1hZ2VSZWYpaW1hZ2UKK3sKKyAgICByZXR1cm4gX2ltYWdlLmdldCgpOworfQor
CistIChOU1VSTCAqKWltYWdlVVJMCit7CisgICAgcmV0dXJuIF9pbWFnZVVSTC5nZXQoKTsKK30K
KworLSAodm9pZClzZXRJbWFnZVVSTDooTlNVUkwgKil1cmwKK3sKKyAgICBfaW1hZ2VVUkwgPSBh
ZG9wdE5TKHVybC5jb3B5KTsKK30KKworLSAoTlNVUkwgKilwYWdlVVJMCit7CisgICAgcmV0dXJu
IF9wYWdlVVJMLmdldCgpOworfQorCistICh2b2lkKXNldFBhZ2VVUkw6KE5TVVJMICopdXJsCit7
CisgICAgX3BhZ2VVUkwgPSBhZG9wdE5TKHVybC5jb3B5KTsKK30KKworQGVuZAorCiBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CiAKIFJldGFpblB0cjxWS1F1YWQ+IGNyZWF0ZVF1YWQoQ0dQb2lu
dCB0b3BMZWZ0LCBDR1BvaW50IHRvcFJpZ2h0LCBDR1BvaW50IGJvdHRvbUxlZnQsIENHUG9pbnQg
Ym90dG9tUmlnaHQpCkBAIC0xNzIsNiArMjI2LDExIEBAIFJldGFpblB0cjxWS0ltYWdlQW5hbHlz
aXM+IGNyZWF0ZUltYWdlQW5hbHlzaXNXaXRoU2ltcGxlRml4ZWRSZXN1bHRzKCkKICAgICByZXR1
cm4gY3JlYXRlSW1hZ2VBbmFseXNpcyhAWyBsaW5lLmdldCgpIF0pOwogfQogCitSZXRhaW5QdHI8
VktJbWFnZUFuYWx5emVyUmVxdWVzdD4gY3JlYXRlUmVxdWVzdChDR0ltYWdlUmVmIGltYWdlLCBW
S0ltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFZLQW5hbHlzaXNUeXBlcyB0eXBlcykKK3sK
KyAgICByZXR1cm4gYWRvcHROUyhzdGF0aWNfY2FzdDxWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0ICo+
KFtbVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3QgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTppbWFn
ZSBvcmllbnRhdGlvbjpvcmllbnRhdGlvbiByZXF1ZXN0VHlwZTp0eXBlc10pKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYgLy8gSEFWRShWS19JTUFHRV9BTkFM
WVNJUykK
</data>
<flag name="review"
          id="476438"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450156</attachid>
            <date>2022-01-27 10:38:35 -0800</date>
            <delta_ts>2022-01-27 10:41:33 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235664-20220127103834.patch</filename>
            <type>text/plain</type>
            <size>6446</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQwOGQ4YjBhYTkyZTQy
ZjdiNDc5YzQ3YjRlNDg3NzUzNTQ1ZDNiMS4uMGVkM2Q5N2U4NDc3NGM2ZTdlY2IwNDM0NmQ1MDUw
NTMwY2JhNmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAxLTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltYWdlQW5hbHlz
aXNRdWV1ZSBzaG91bGQgcHJpb3JpdGl6ZSBlbGVtZW50cyB0aGF0IGludGVyc2VjdCB0aGUgdmlz
aWJsZSB2aWV3cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1NjY0CisgICAgICAgIHJkYXI6Ly84ODEzMTgyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIE1ha2UgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSBp
bWFnZSBhbmFseXNpcyBxdWV1ZWluZyBtZWNoYW5pc20sIHN1Y2ggdGhhdCB3ZSBwcmlvcml0aXpl
IGFuYWx5emluZyBpbWFnZXMgdGhhdAorICAgICAgICBhcmUgaW4gdGhlIHZpc2libGUgZG9jdW1l
bnQgcmVjdCBvdmVyIG9mZnNjcmVlbiBpbWFnZXMuIFRvIGRvIHRoaXMsIHdlIHR1cm4gdGhlIGN1
cnJlbnQgaW1hZ2UgZWxlbWVudCBxdWV1ZSBpbnRvCisgICAgICAgIGEgUHJpb3JpdHlRdWV1ZSBp
bnN0ZWFkLCB3aGljaCB0cmVhdHMgaW1hZ2VzIHRoYXQgYXJlIGluIHRoZSB2aXNpYmxlIHZpZXdw
b3J0IChhdCBlbnF1ZXVlaW5nIHRpbWUpIGFzIGhpZ2hlcgorICAgICAgICBwcmlvcml0eSBvdmVy
IGltYWdlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHZpc2libGUgdmlld3BvcnQsIGFuZCBvdGhlcndp
c2UgdHJlYXRzIGltYWdlcyB0aGF0IHdlcmUgcXVldWVkIGVhcmxpZXIKKyAgICAgICAgYXMgaGln
aGVyIHByaW9yaXR5IGluIHRoZSBjYXNlIHdoZXJlIGJvdGggaW1hZ2VzIGFyZSBlaXRoZXIgdmlz
aWJsZSBvciBub3QgdmlzaWJsZS4KKworICAgICAgICBUZXN0OiBJbWFnZUFuYWx5c2lzVGVzdHMu
SW1hZ2VBbmFseXNpc1ByaW9yaXRpemVzVmlzaWJsZUltYWdlcworCisgICAgICAgICogcGFnZS9J
bWFnZUFuYWx5c2lzUXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1
ZXVlOjplbnF1ZXVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1
ZXVlOjpyZXN1bWVQcm9jZXNzaW5nU29vbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUFuYWx5
c2lzUXVldWU6OnJlc3VtZVByb2Nlc3NpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFs
eXNpc1F1ZXVlOjpjbGVhcik6CisgICAgICAgICogcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuaDoK
KworICAgICAgICBTd2FwIG91dCB0aGUgRGVxdWUgZm9yIGEgUHJpb3JpdHlRdWV1ZSwgYW5kIGlu
dHJvZHVjZSBJbWFnZUFuYWx5c2lzUXVldWU6OlRhc2sgdG8gcmVwcmVzZW50IGFuIGltYWdlIGFu
YWx5c2lzCisgICAgICAgIHRhc2sgKHdoaWNoIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IG90aGVy
IHRhc2tzIHRvIGRldGVybWluZSBwcmlvcml0eSB1c2luZyBgZmlyc3RJc0hpZ2hlclByaW9yaXR5
KClgIGJlbG93KS4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1ZXVlOjpmaXJz
dElzSGlnaGVyUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1ZXVl
OjpuZXh0VGFza051bWJlcik6CisKIDIwMjItMDEtMjYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjg4NjIzKSBNU1ZDIHJl
cG9ydHMgIkluc3BlY3RvckRPTUFnZW50LmNwcCg1NTgsNDApOiBlcnJvciBDMjA1OTogc3ludGF4
IGVycm9yOiAnOiciCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlz
aXNRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5jcHAK
aW5kZXggNTUxNDRjZTY0N2U1Yzk3MTQ2N2I2Mjg0Y2EwYmM3YzI5ZGVhYWI1NC4uZmY4NjhlYzZi
MWRmZGNiN2Q2YTQ5ZjgwNGYwNzlmZGI2ODNiNWE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SW1hZ2VBbmFseXNpc1F1ZXVlLmNwcApAQCAtMzAsMTAgKzMwLDEyIEBACiAKICNpbmNsdWRlICJD
aHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5o
IgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02Nyw4ICs2OSwyMSBAQCB2b2lkIEltYWdlQW5hbHlzaXNRdWV1ZTo6
ZW5xdWV1ZUlmTmVlZGVkKEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKCFtX3F1
ZXVlZEVsZW1lbnRzLmFkZChlbGVtZW50KS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3F1ZXVlLmFwcGVuZCh7IGVsZW1lbnQgfSk7Ci0gICAgcmVzdW1lUHJvY2Vzc2luZygp
OworICAgIFJlZiB2aWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworICAgIG1fcXVl
dWUuZW5xdWV1ZSh7CisgICAgICAgIGVsZW1lbnQsCisgICAgICAgIHJlbmRlcmVyLmlzVmlzaWJs
ZUluRG9jdW1lbnRSZWN0KHZpZXctPndpbmRvd1RvQ29udGVudHModmlldy0+d2luZG93Q2xpcFJl
Y3QoKSkpID8gUHJpb3JpdHk6OkhpZ2ggOiBQcmlvcml0eTo6TG93LAorICAgICAgICBuZXh0VGFz
a051bWJlcigpCisgICAgfSk7CisgICAgcmVzdW1lUHJvY2Vzc2luZ1Nvb24oKTsKK30KKwordm9p
ZCBJbWFnZUFuYWx5c2lzUXVldWU6OnJlc3VtZVByb2Nlc3NpbmdTb29uKCkKK3sKKyAgICBpZiAo
bV9xdWV1ZS5pc0VtcHR5KCkgfHwgbV9yZXN1bWVQcm9jZXNzaW5nVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXN1bWVQcm9jZXNzaW5nVGltZXIuc3RhcnRPbmVT
aG90KHJlc3VtZVByb2Nlc3NpbmdEZWxheSk7CiB9CiAKIHZvaWQgSW1hZ2VBbmFseXNpc1F1ZXVl
OjplbnF1ZXVlQWxsSW1hZ2VzKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyKQpAQCAtOTEsMjIgKzEwNiwyMCBAQCB2b2lkIEltYWdlQW5hbHlzaXNRdWV1ZTo6cmVz
dW1lUHJvY2Vzc2luZygpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdoaWxlICghbV9xdWV1ZS5p
c0VtcHR5KCkgJiYgbV9wZW5kaW5nUmVxdWVzdENvdW50IDwgbWF4aW11bVBlbmRpbmdJbWFnZUFu
YWx5c2lzQ291bnQpIHsKLSAgICAgICAgYXV0byB3ZWFrRWxlbWVudCA9IG1fcXVldWUudGFrZUZp
cnN0KCk7Ci0gICAgICAgIFJlZlB0ciBlbGVtZW50ID0gd2Vha0VsZW1lbnQuZ2V0KCk7CisgICAg
ICAgIFJlZlB0ciBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCkuZWxlbWVudC5nZXQoKTsKICAg
ICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Nvbm5lY3RlZCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgbV9wZW5kaW5nUmVxdWVzdENvdW50Kys7CiAgICAgICAg
IG1fcGFnZS0+cmVzZXRUZXh0UmVjb2duaXRpb25SZXN1bHQoKmVsZW1lbnQpOwogICAgICAgICBt
X3BhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnJlcXVlc3RUZXh0UmVjb2duaXRpb24oKmVsZW1lbnQs
IG1faWRlbnRpZmllciwgW3RoaXMsIHBhZ2UgPSBtX3BhZ2VdIChhdXRvJiYpIHsKLSAgICAgICAg
ICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIGlmICghcGFnZSB8fCBwYWdlLT5pbWFnZUFuYWx5
c2lzUXVldWVJZkV4aXN0cygpICE9IHRoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICBpZiAobV9wZW5kaW5nUmVxdWVzdENvdW50KQogICAgICAgICAgICAgICAgIG1f
cGVuZGluZ1JlcXVlc3RDb3VudC0tOwogCi0gICAgICAgICAgICBpZiAoIW1fcXVldWUuaXNFbXB0
eSgpICYmICFtX3Jlc3VtZVByb2Nlc3NpbmdUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAg
ICAgIG1fcmVzdW1lUHJvY2Vzc2luZ1RpbWVyLnN0YXJ0T25lU2hvdChyZXN1bWVQcm9jZXNzaW5n
RGVsYXkpOworICAgICAgICAgICAgcmVzdW1lUHJvY2Vzc2luZ1Nvb24oKTsKICAgICAgICAgfSk7
CiAgICAgfQogfQpAQCAtMTE2LDkgKzEyOSwxMCBAQCB2b2lkIEltYWdlQW5hbHlzaXNRdWV1ZTo6
Y2xlYXIoKQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYW5jZWwgcGVuZGluZyByZXF1ZXN0
cyBpbiBhZGRpdGlvbiB0byBlbXB0eWluZyB0aGUgdGFzayBxdWV1ZS4KICAgICBtX3BlbmRpbmdS
ZXF1ZXN0Q291bnQgPSAwOwogICAgIG1fcmVzdW1lUHJvY2Vzc2luZ1RpbWVyLnN0b3AoKTsKLSAg
ICBtX3F1ZXVlLmNsZWFyKCk7CisgICAgbV9xdWV1ZSA9IHsgfTsKICAgICBtX3F1ZXVlZEVsZW1l
bnRzLmNsZWFyKCk7CiAgICAgbV9pZGVudGlmaWVyID0geyB9OworICAgIG1fY3VycmVudFRhc2tO
dW1iZXIgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9JbWFnZUFuYWx5c2lzUXVldWUuaAppbmRleCAwNmM3MzM4Y2M2NTJiODg5ZjRlNmFlMzA4YTU0
NGM5M2M0OGVjODgwLi41ZDFjM2FkYWY1M2VmOGMxNThjY2M1ZWE2MWMxNWExNjNmNTNjMjllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VBbmFseXNpc1F1ZXVlLmgKQEAgLTI3LDggKzI3LDgg
QEAKIAogI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKIAotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1ByaW9yaXR5UXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgogCkBAIC01MSwxNiArNTEsNDEgQEAgcHVibGljOgogICAgIHZvaWQgZW5xdWV1ZUlmTmVl
ZGVkKEhUTUxJbWFnZUVsZW1lbnQmKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHJlc3VtZVByb2Nl
c3NpbmdTb29uKCk7CiAgICAgdm9pZCByZXN1bWVQcm9jZXNzaW5nKCk7CiAKKyAgICBlbnVtIGNs
YXNzIFByaW9yaXR5IDogYm9vbCB7IExvdywgSGlnaCB9OworICAgIHN0cnVjdCBUYXNrIHsKKyAg
ICAgICAgV2Vha1B0cjxIVE1MSW1hZ2VFbGVtZW50PiBlbGVtZW50OworICAgICAgICBQcmlvcml0
eSBwcmlvcml0eSB7IFByaW9yaXR5OjpMb3cgfTsKKyAgICAgICAgdW5zaWduZWQgdGFza051bWJl
ciB7IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgZmlyc3RJc0hpZ2hlclByaW9yaXR5
KGNvbnN0IFRhc2smLCBjb25zdCBUYXNrJik7CisgICAgdW5zaWduZWQgbmV4dFRhc2tOdW1iZXIo
KTsKKwogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CiAgICAgV2Vha1B0cjxQYWdlPiBtX3BhZ2U7
CiAgICAgVGltZXIgbV9yZXN1bWVQcm9jZXNzaW5nVGltZXI7CiAgICAgV2Vha0hhc2hTZXQ8SFRN
TEltYWdlRWxlbWVudD4gbV9xdWV1ZWRFbGVtZW50czsKLSAgICBEZXF1ZTxXZWFrUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+PiBtX3F1ZXVlOworICAgIFByaW9yaXR5UXVldWU8VGFzaywgZmlyc3RJc0hp
Z2hlclByaW9yaXR5PiBtX3F1ZXVlOwogICAgIHVuc2lnbmVkIG1fcGVuZGluZ1JlcXVlc3RDb3Vu
dCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRUYXNrTnVtYmVyIHsgMCB9OwogfTsKIAor
aW5saW5lIGJvb2wgSW1hZ2VBbmFseXNpc1F1ZXVlOjpmaXJzdElzSGlnaGVyUHJpb3JpdHkoY29u
c3QgVGFzayYgZmlyc3QsIGNvbnN0IFRhc2smIHNlY29uZCkKK3sKKyAgICBpZiAoZmlyc3QucHJp
b3JpdHkgIT0gc2Vjb25kLnByaW9yaXR5KQorICAgICAgICByZXR1cm4gZmlyc3QucHJpb3JpdHkg
PT0gUHJpb3JpdHk6OkhpZ2g7CisKKyAgICByZXR1cm4gZmlyc3QudGFza051bWJlciA8IHNlY29u
ZC50YXNrTnVtYmVyOworfQorCitpbmxpbmUgdW5zaWduZWQgSW1hZ2VBbmFseXNpc1F1ZXVlOjpu
ZXh0VGFza051bWJlcigpCit7CisgICAgcmV0dXJuICsrbV9jdXJyZW50VGFza051bWJlcjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0FOQUxZ
U0lTKQo=
</data>
<flag name="commit-queue"
          id="476468"
          type_id="3"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450158</attachid>
            <date>2022-01-27 10:45:00 -0800</date>
            <delta_ts>2022-01-27 11:56:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235664-20220127104459.patch</filename>
            <type>text/plain</type>
            <size>20656</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQwOGQ4YjBhYTkyZTQy
ZjdiNDc5YzQ3YjRlNDg3NzUzNTQ1ZDNiMS4uNzVmM2JmMTY3YWYyOGEwODc1NmUzMjVhMTc1YTU3
YTRmOTg1MzkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIyLTAxLTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltYWdlQW5hbHlz
aXNRdWV1ZSBzaG91bGQgcHJpb3JpdGl6ZSBlbGVtZW50cyB0aGF0IGludGVyc2VjdCB0aGUgdmlz
aWJsZSB2aWV3cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1NjY0CisgICAgICAgIHJkYXI6Ly84ODEzMTgyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIE1ha2UgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSBp
bWFnZSBhbmFseXNpcyBxdWV1ZWluZyBtZWNoYW5pc20sIHN1Y2ggdGhhdCB3ZSBwcmlvcml0aXpl
IGFuYWx5emluZyBpbWFnZXMgdGhhdAorICAgICAgICBhcmUgaW4gdGhlIHZpc2libGUgZG9jdW1l
bnQgcmVjdCBvdmVyIG9mZnNjcmVlbiBpbWFnZXMuIFRvIGRvIHRoaXMsIHdlIHR1cm4gdGhlIGN1
cnJlbnQgaW1hZ2UgZWxlbWVudCBxdWV1ZSBpbnRvCisgICAgICAgIGEgUHJpb3JpdHlRdWV1ZSBp
bnN0ZWFkLCB3aGljaCB0cmVhdHMgaW1hZ2VzIHRoYXQgYXJlIGluIHRoZSB2aXNpYmxlIHZpZXdw
b3J0IChhdCBlbnF1ZXVlaW5nIHRpbWUpIGFzIGhpZ2hlcgorICAgICAgICBwcmlvcml0eSBvdmVy
IGltYWdlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHZpc2libGUgdmlld3BvcnQsIGFuZCBvdGhlcndp
c2UgdHJlYXRzIGltYWdlcyB0aGF0IHdlcmUgcXVldWVkIGVhcmxpZXIKKyAgICAgICAgYXMgaGln
aGVyIHByaW9yaXR5IGluIHRoZSBjYXNlIHdoZXJlIGJvdGggaW1hZ2VzIGFyZSBlaXRoZXIgdmlz
aWJsZSBvciBub3QgdmlzaWJsZS4KKworICAgICAgICBUZXN0OiBJbWFnZUFuYWx5c2lzVGVzdHMu
SW1hZ2VBbmFseXNpc1ByaW9yaXRpemVzVmlzaWJsZUltYWdlcworCisgICAgICAgICogcGFnZS9J
bWFnZUFuYWx5c2lzUXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1
ZXVlOjplbnF1ZXVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1
ZXVlOjpyZXN1bWVQcm9jZXNzaW5nU29vbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUFuYWx5
c2lzUXVldWU6OnJlc3VtZVByb2Nlc3NpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFs
eXNpc1F1ZXVlOjpjbGVhcik6CisgICAgICAgICogcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuaDoK
KworICAgICAgICBTd2FwIG91dCB0aGUgRGVxdWUgZm9yIGEgUHJpb3JpdHlRdWV1ZSwgYW5kIGlu
dHJvZHVjZSBJbWFnZUFuYWx5c2lzUXVldWU6OlRhc2sgdG8gcmVwcmVzZW50IGFuIGltYWdlIGFu
YWx5c2lzCisgICAgICAgIHRhc2sgKHdoaWNoIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IG90aGVy
IHRhc2tzIHRvIGRldGVybWluZSBwcmlvcml0eSB1c2luZyBgZmlyc3RJc0hpZ2hlclByaW9yaXR5
KClgIGJlbG93KS4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VBbmFseXNpc1F1ZXVlOjpmaXJz
dElzSGlnaGVyUHJpb3JpdHkpOgorCiAyMDIyLTAxLTI2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI4ODYyMykgTVNWQyBy
ZXBvcnRzICJJbnNwZWN0b3JET01BZ2VudC5jcHAoNTU4LDQwKTogZXJyb3IgQzIwNTk6IHN5bnRh
eCBlcnJvcjogJzonIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5
c2lzUXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuY3Bw
CmluZGV4IDU1MTQ0Y2U2NDdlNWM5NzE0NjdiNjI4NGNhMGJjN2MyOWRlYWFiNTQuLmZmODY4ZWM2
YjFkZmRjYjdkNmE0OWY4MDRmMDc5ZmRiNjgzYjVhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvSW1hZ2VBbmFseXNpc1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ltYWdlQW5hbHlzaXNRdWV1ZS5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogCiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNjcsOCArNjksMjEgQEAgdm9pZCBJbWFnZUFuYWx5c2lzUXVldWU6
OmVucXVldWVJZk5lZWRlZChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogICAgIGlmICghbV9x
dWV1ZWRFbGVtZW50cy5hZGQoZWxlbWVudCkuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9xdWV1ZS5hcHBlbmQoeyBlbGVtZW50IH0pOwotICAgIHJlc3VtZVByb2Nlc3Npbmco
KTsKKyAgICBSZWYgdmlldyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKyAgICBtX3F1
ZXVlLmVucXVldWUoeworICAgICAgICBlbGVtZW50LAorICAgICAgICByZW5kZXJlci5pc1Zpc2li
bGVJbkRvY3VtZW50UmVjdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHZpZXctPndpbmRvd0NsaXBS
ZWN0KCkpKSA/IFByaW9yaXR5OjpIaWdoIDogUHJpb3JpdHk6OkxvdywKKyAgICAgICAgbmV4dFRh
c2tOdW1iZXIoKQorICAgIH0pOworICAgIHJlc3VtZVByb2Nlc3NpbmdTb29uKCk7Cit9CisKK3Zv
aWQgSW1hZ2VBbmFseXNpc1F1ZXVlOjpyZXN1bWVQcm9jZXNzaW5nU29vbigpCit7CisgICAgaWYg
KG1fcXVldWUuaXNFbXB0eSgpIHx8IG1fcmVzdW1lUHJvY2Vzc2luZ1RpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzdW1lUHJvY2Vzc2luZ1RpbWVyLnN0YXJ0T25l
U2hvdChyZXN1bWVQcm9jZXNzaW5nRGVsYXkpOwogfQogCiB2b2lkIEltYWdlQW5hbHlzaXNRdWV1
ZTo6ZW5xdWV1ZUFsbEltYWdlcyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikKQEAgLTkxLDIyICsxMDYsMjAgQEAgdm9pZCBJbWFnZUFuYWx5c2lzUXVldWU6OnJl
c3VtZVByb2Nlc3NpbmcoKQogICAgICAgICByZXR1cm47CiAKICAgICB3aGlsZSAoIW1fcXVldWUu
aXNFbXB0eSgpICYmIG1fcGVuZGluZ1JlcXVlc3RDb3VudCA8IG1heGltdW1QZW5kaW5nSW1hZ2VB
bmFseXNpc0NvdW50KSB7Ci0gICAgICAgIGF1dG8gd2Vha0VsZW1lbnQgPSBtX3F1ZXVlLnRha2VG
aXJzdCgpOwotICAgICAgICBSZWZQdHIgZWxlbWVudCA9IHdlYWtFbGVtZW50LmdldCgpOworICAg
ICAgICBSZWZQdHIgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpLmVsZW1lbnQuZ2V0KCk7CiAg
ICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNDb25uZWN0ZWQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RDb3VudCsrOwogICAgICAg
ICBtX3BhZ2UtPnJlc2V0VGV4dFJlY29nbml0aW9uUmVzdWx0KCplbGVtZW50KTsKICAgICAgICAg
bV9wYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5yZXF1ZXN0VGV4dFJlY29nbml0aW9uKCplbGVtZW50
LCBtX2lkZW50aWZpZXIsIFt0aGlzLCBwYWdlID0gbV9wYWdlXSAoYXV0byYmKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+aW1hZ2VBbmFs
eXNpc1F1ZXVlSWZFeGlzdHMoKSAhPSB0aGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RDb3VudCkKICAgICAgICAgICAgICAgICBt
X3BlbmRpbmdSZXF1ZXN0Q291bnQtLTsKIAotICAgICAgICAgICAgaWYgKCFtX3F1ZXVlLmlzRW1w
dHkoKSAmJiAhbV9yZXN1bWVQcm9jZXNzaW5nVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAg
ICAgICBtX3Jlc3VtZVByb2Nlc3NpbmdUaW1lci5zdGFydE9uZVNob3QocmVzdW1lUHJvY2Vzc2lu
Z0RlbGF5KTsKKyAgICAgICAgICAgIHJlc3VtZVByb2Nlc3NpbmdTb29uKCk7CiAgICAgICAgIH0p
OwogICAgIH0KIH0KQEAgLTExNiw5ICsxMjksMTAgQEAgdm9pZCBJbWFnZUFuYWx5c2lzUXVldWU6
OmNsZWFyKCkKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2FuY2VsIHBlbmRpbmcgcmVxdWVz
dHMgaW4gYWRkaXRpb24gdG8gZW1wdHlpbmcgdGhlIHRhc2sgcXVldWUuCiAgICAgbV9wZW5kaW5n
UmVxdWVzdENvdW50ID0gMDsKICAgICBtX3Jlc3VtZVByb2Nlc3NpbmdUaW1lci5zdG9wKCk7Ci0g
ICAgbV9xdWV1ZS5jbGVhcigpOworICAgIG1fcXVldWUgPSB7IH07CiAgICAgbV9xdWV1ZWRFbGVt
ZW50cy5jbGVhcigpOwogICAgIG1faWRlbnRpZmllciA9IHsgfTsKKyAgICBtX2N1cnJlbnRUYXNr
TnVtYmVyID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSW1hZ2VBbmFseXNpc1F1ZXVlLmgKaW5kZXggMDZjNzMzOGNjNjUyYjg4OWY0ZTZhZTMwOGE1
NDRjOTNjNDhlYzg4MC4uZTRjMGNmZjBlMjM0MDhiMzFlMzY0YWUyMmU3Y2ZlMjNhMmQ1YTVhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZUFuYWx5c2lzUXVldWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlQW5hbHlzaXNRdWV1ZS5oCkBAIC0yNyw4ICsyNyw4
IEBACiAKICNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCiAKLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1
ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIApAQCAtNTEsMTYgKzUxLDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVucXVldWVJZk5l
ZWRlZChIVE1MSW1hZ2VFbGVtZW50Jik7CiAKIHByaXZhdGU6CisgICAgdm9pZCByZXN1bWVQcm9j
ZXNzaW5nU29vbigpOwogICAgIHZvaWQgcmVzdW1lUHJvY2Vzc2luZygpOwogCisgICAgZW51bSBj
bGFzcyBQcmlvcml0eSA6IGJvb2wgeyBMb3csIEhpZ2ggfTsKKyAgICBzdHJ1Y3QgVGFzayB7Cisg
ICAgICAgIFdlYWtQdHI8SFRNTEltYWdlRWxlbWVudD4gZWxlbWVudDsKKyAgICAgICAgUHJpb3Jp
dHkgcHJpb3JpdHkgeyBQcmlvcml0eTo6TG93IH07CisgICAgICAgIHVuc2lnbmVkIHRhc2tOdW1i
ZXIgeyAwIH07CisgICAgfTsKKworICAgIHN0YXRpYyBib29sIGZpcnN0SXNIaWdoZXJQcmlvcml0
eShjb25zdCBUYXNrJiwgY29uc3QgVGFzayYpOworICAgIHVuc2lnbmVkIG5leHRUYXNrTnVtYmVy
KCkgeyByZXR1cm4gKyttX2N1cnJlbnRUYXNrTnVtYmVyOyB9CisKICAgICBTdHJpbmcgbV9pZGVu
dGlmaWVyOwogICAgIFdlYWtQdHI8UGFnZT4gbV9wYWdlOwogICAgIFRpbWVyIG1fcmVzdW1lUHJv
Y2Vzc2luZ1RpbWVyOwogICAgIFdlYWtIYXNoU2V0PEhUTUxJbWFnZUVsZW1lbnQ+IG1fcXVldWVk
RWxlbWVudHM7Ci0gICAgRGVxdWU8V2Vha1B0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gbV9xdWV1ZTsK
KyAgICBQcmlvcml0eVF1ZXVlPFRhc2ssIGZpcnN0SXNIaWdoZXJQcmlvcml0eT4gbV9xdWV1ZTsK
ICAgICB1bnNpZ25lZCBtX3BlbmRpbmdSZXF1ZXN0Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQg
bV9jdXJyZW50VGFza051bWJlciB7IDAgfTsKIH07CiAKK2lubGluZSBib29sIEltYWdlQW5hbHlz
aXNRdWV1ZTo6Zmlyc3RJc0hpZ2hlclByaW9yaXR5KGNvbnN0IFRhc2smIGZpcnN0LCBjb25zdCBU
YXNrJiBzZWNvbmQpCit7CisgICAgaWYgKGZpcnN0LnByaW9yaXR5ICE9IHNlY29uZC5wcmlvcml0
eSkKKyAgICAgICAgcmV0dXJuIGZpcnN0LnByaW9yaXR5ID09IFByaW9yaXR5OjpIaWdoOworCisg
ICAgcmV0dXJuIGZpcnN0LnRhc2tOdW1iZXIgPCBzZWNvbmQudGFza051bWJlcjsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0FOQUxZU0lTKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ2MDEy
NDk5YmUxMGQzZTkxZTg1OGI3MWYxNDA4MjFmMmU4YzgyZjEuLjExZjRlOTE0YmY5ODQwYmM4MDgy
Y2M0NDE1N2EzNDM3OWVlNzA4YTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMi0wMS0yNiAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBJbWFnZUFuYWx5c2lzUXVldWUg
c2hvdWxkIHByaW9yaXRpemUgZWxlbWVudHMgdGhhdCBpbnRlcnNlY3QgdGhlIHZpc2libGUgdmll
d3BvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NTY2NAorICAgICAgICByZGFyOi8vODgxMzE4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBBZGQgYW4gQVBJIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYmF0Y2gg
aW1hZ2UgYW5hbHlzaXMgcHJpb3JpdGl6ZXMgYSB2aXNpYmxlIGltYWdlIG92ZXIgYW5vdGhlciBp
bWFnZSB0aGF0IGFwcGVhcnMKKyAgICAgICAgZmlyc3QgaW4gRE9NIHRyYXZlcnNhbCBvcmRlciwg
YnV0IGlzIG9mZnNjcmVlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RzLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6cHJvY2Vzc2VkUmVxdWVzdHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cHJvY2Vz
c1JlcXVlc3RXaXRoUmVzdWx0cyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWtlRmFrZVJl
cXVlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUltYWdlQW5hbHlzaXNSZXF1ZXN0
U3dpenpsZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cHJvY2Vzc1JlcXVlc3RXaXRoRXJy
b3IpOgorCisgICAgICAgIEFkZGl0aW9uYWxseSBhZGQgYSBtZWNoYW5pc20gZm9yIHN3aXp6bGlu
ZyBvdXQgVktJbWFnZUFuYWx5emVyUmVxdWVzdCBpbml0aWFsaXphdGlvbiB0byByZXR1cm4gYSBt
b2NrIG9iamVjdAorICAgICAgICAoVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3QpIGluc3RlYWQs
IHdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgdG8gaW5zcGVjdCB0aGUgQ0dJbWFnZSB0aGF0IHdvdWxk
J3ZlIGJlZW4gc2VudCBmb3IKKyAgICAgICAgYW5hbHlzaXMuIFNlZSBjaGFuZ2VzIGluIGBJbWFn
ZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy4qYCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K
KworICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9vZmZzY3JlZW4taW1hZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9JbWFnZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy5oOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RpbmdVdGlsaXRp
ZXMubW06CisgICAgICAgICgtW1Rlc3RWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0IGluaXRXaXRoQ0dJ
bWFnZTpvcmllbnRhdGlvbjpyZXF1ZXN0VHlwZTpdKToKKyAgICAgICAgKC1bVGVzdFZLSW1hZ2VB
bmFseXplclJlcXVlc3QgaW1hZ2VdKToKKyAgICAgICAgKC1bVGVzdFZLSW1hZ2VBbmFseXplclJl
cXVlc3QgaW1hZ2VVUkxdKToKKyAgICAgICAgKC1bVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3Qg
c2V0SW1hZ2VVUkw6XSk6CisgICAgICAgICgtW1Rlc3RWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0IHBh
Z2VVUkxdKToKKyAgICAgICAgKC1bVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3Qgc2V0UGFnZVVS
TDpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZVJlcXVlc3QpOgorCiAyMDIyLTAx
LTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVdT
XSBTdXBwb3J0IHB1bGwgcmVxdWVzdHMgaW4gYnVpbHQgcHJvZHVjdCBtYW5hZ2VtZW50CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDBhMzQ3MTBlNjc1YWU1YTZlYzAxNTE5NWI3NzFlNGU4MGNm
ZWE3MjcuLjY4ZGZhOWRkZGU5N2ZmYTA3ZjZjY2ZkNGJkODQ5Zjg1YmFjZjJiZDUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMDU4LDYgKzEwNTgsNyBAQAogCQlGNDVFMTU3MzIxMTJDRTI5
MDAzMDdFODIgLyogS2V5Ym9hcmRJbnB1dFRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1RTE1NzIyMTEyQ0UyOTAwMzA3RTgyIC8qIEtl
eWJvYXJkSW5wdXRUZXN0c0lPUy5tbSAqLzsgfTsKIAkJRjQ1RTE1NzYyMTEyQ0U2MjAwMzA3RTgy
IC8qIFRlc3RJbnB1dERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ1RTE1NzUyMTEyQ0U2MjAwMzA3RTgyIC8qIFRlc3RJbnB1dERlbGVn
YXRlLm1tICovOyB9OwogCQlGNDVFQjYwNDI3NzM5RjM0MDAzNTcxQUUgLyogVGVzdE1vZGFsQ29u
dGFpbmVyQ29udHJvbHMubWxtb2RlbGMgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1RUI2MDMyNzczOUYyQjAwMzU3MUFFIC8qIFRlc3RNb2Rh
bENvbnRhaW5lckNvbnRyb2xzLm1sbW9kZWxjICovOyB9OworCQlGNDYwQkVFQTI3QTFGNDE2MDA3
Qjg3RDkgLyogb2Zmc2NyZWVuLWltYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2MEJFRTcyN0ExRjJENjAwN0I4N0Q5IC8qIG9m
ZnNjcmVlbi1pbWFnZS5odG1sICovOyB9OwogCQlGNDYwRjY1NzI2MTExNkVBMDA2NEYyQjYgLyog
SW5qZWN0ZWRCdW5kbGVIaXRUZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ2MEY2NTYyNjExMTZFQTAwNjRGMkI2IC8qIEluamVjdGVkQnVuZGxl
SGl0VGVzdC5tbSAqLzsgfTsKIAkJRjQ2MEY2NUIyNjExMTk1ODAwNjRGMkI2IC8qIEluamVjdGVk
QnVuZGxlSGl0VGVzdFBsdWdJbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NjBGNjU5MjYxMTE3RTcwMDY0RjJCNiAvKiBJbmplY3RlZEJ1bmRsZUhp
dFRlc3RQbHVnSW4ubW0gKi87IH07CiAJCUY0NjBGNjY5MjYxMjYzMzcwMDY0RjJCNiAvKiBzaW1w
bGUtcmVzcG9uc2l2ZS1wYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2MEY2NjgyNjEyNjJDNzAwNjRGMkI2IC8qIHNpbXBsZS1y
ZXNwb25zaXZlLXBhZ2UuaHRtbCAqLzsgfTsKQEAgLTE0OTksNiArMTUwMCw3IEBACiAJCQkJNDY2
QzM4NDMyMTA2MzdERTAwNkE4OERFIC8qIG5vdGlmeS1yZXNvdXJjZUxvYWRPYnNlcnZlci5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUNEQjVERkZGMjEzNjEwRkEwMEQzRTE4OSAvKiBu
b3ctcGxheWluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkzRTJEMjc2MUVEN0Q1
MzIwMEZBNzZGNiAvKiBvZmZzY3JlZW4taWZyYW1lLW9mLW1lZGlhLWRvY3VtZW50Lmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCisJCQkJRjQ2MEJFRUEyN0ExRjQxNjAwN0I4N0Q5IC8qIG9mZnNj
cmVlbi1pbWFnZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTA3NDk5NDQyMUVBNTAz
NEIwMDBEQTQ0RiAvKiBvbmRldmljZWNoYW5nZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTFEQUE1MkNDMjQzQkU4MDUwMDFBMzE1OSAvKiBvbmUtdmlkZW8uaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKIAkJCQlDRUE2Q0YyODE5Q0NGNjlEMDA2NEY1QTcgLyogb3Blbi1hbmQtY2xv
c2Utd2luZG93Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0zMDM1LDYgKzMwMzcsNyBA
QAogCQlGNDVFMTU3NTIxMTJDRTYyMDAzMDdFODIgLyogVGVzdElucHV0RGVsZWdhdGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0SW5wdXREZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjQ1RUI2MDMyNzczOUYyQjAwMzU3MUFFIC8qIFRlc3RNb2RhbENvbnRh
aW5lckNvbnRyb2xzLm1sbW9kZWxjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlcjsgcGF0aCA9IFRlc3RNb2RhbENvbnRhaW5lckNvbnRyb2xz
Lm1sbW9kZWxjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVFQjYwNjI3NzNDMzcx
MDAzNTcxQUUgLyogTW9kYWxDb250YWluZXJPYnNlcnZhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE1vZGFsQ29udGFpbmVyT2JzZXJ2YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUY0NjBCRUU3MjdBMUYyRDYwMDdCODdEOSAvKiBvZmZzY3JlZW4taW1hZ2UuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9ICJvZmZzY3JlZW4taW1hZ2UuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0NjBGNjU2MjYxMTE2RUEwMDY0RjJCNiAvKiBJbmplY3RlZEJ1bmRsZUhpdFRl
c3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjBGNjU5MjYxMTE3RTcwMDY0RjJCNiAvKiBJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RQbHVnSW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmpl
Y3RlZEJ1bmRsZUhpdFRlc3RQbHVnSW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0NjBGNjVBMjYxMTE4M0YwMDY0RjJCNiAvKiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RQcm90b2Nv
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RQcm90b2NvbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE4Niw2ICs0MTg5LDcgQEAKIAkJCQk0NjZDMzg0
MjIxMDYzN0NFMDA2QTg4REUgLyogbm90aWZ5LXJlc291cmNlTG9hZE9ic2VydmVyLmh0bWwgKi8s
CiAJCQkJQ0RCNURGRkUyMTM2MEVEODAwRDNFMTg5IC8qIG5vdy1wbGF5aW5nLmh0bWwgKi8sCiAJ
CQkJOTNFMkQyNzUxRUQ3RDUxNzAwRkE3NkY2IC8qIG9mZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEt
ZG9jdW1lbnQuaHRtbCAqLywKKwkJCQlGNDYwQkVFNzI3QTFGMkQ2MDA3Qjg3RDkgLyogb2Zmc2Ny
ZWVuLWltYWdlLmh0bWwgKi8sCiAJCQkJN0NDQjk5MjIxRDNCNDRFNzAwMzkyMkY2IC8qIG9wZW4t
bXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0bWwgKi8sCiAJCQkJOTMxQzI4MUIyMkJDNTU4MzAwMUQ5
OEM0IC8qIG9wZW5kYXRhYmFzZS1hbHdheXMtZXhpc3RzLmh0bWwgKi8sCiAJCQkJRjQ5OTkyQzUy
NDhEQUJFNDAwMDM0MTY3IC8qIG92ZXJmbG93LWhpZGRlbi5odG1sICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbWFnZUFuYWx5c2lzVGVzdHMu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ltYWdlQW5hbHlzaXNU
ZXN0cy5tbQppbmRleCA5YzM1Njc5ZWVlNDEwMzhkYzg0ODAzMGM4Y2VmMjFmNDk5YjI5MmRkLi40
YmVlY2YzMDk0M2JkZWNhZDkyZGRmMDFlYzNkZGU2MzlmYWRhMDcxIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ltYWdlQW5hbHlzaXNUZXN0cy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ltYWdlQW5hbHlzaXNU
ZXN0cy5tbQpAQCAtNTMsNiArNTMsMTAgQEAgQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIAorQGludGVyZmFjZSBWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0IChUZXN0U3VwcG9y
dCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dJbWFnZVJlZiBpbWFnZTsKK0Bl
bmQKKwogQGludGVyZmFjZSBUZXN0V0tXZWJWaWV3IChJbWFnZUFuYWx5c2lzVGVzdHMpCiAtICh2
b2lkKXdhaXRGb3JJbWFnZUFuYWx5c2lzUmVxdWVzdHM6KHVuc2lnbmVkKW51bWJlck9mUmVxdWVz
dHM7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTkyLDYgKzk2LDEyIEBAIEBlbmQKIAog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCitzdGF0aWMgVmVjdG9yPFJldGFpblB0cjxWS0lt
YWdlQW5hbHl6ZXJSZXF1ZXN0Pj4mIHByb2Nlc3NlZFJlcXVlc3RzKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQgcmVxdWVzdHMgPSBWZWN0b3I8UmV0YWluUHRyPFZLSW1hZ2VBbmFseXpl
clJlcXVlc3Q+PiB7IH07CisgICAgcmV0dXJuIHJlcXVlc3RzLmdldCgpOworfQorCiBzdGF0aWMg
UmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IGNyZWF0ZVdlYlZpZXdXaXRoVGV4dFJlY29nbml0aW9u
RW5oYW5jZW1lbnRzKCkKIHsKICAgICBSZXRhaW5QdHIgY29uZmlndXJhdGlvbiA9IFtXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFt
ZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIiBjb25maWd1cmVKU0NGb3JUZXN0aW5n
OllFU107CkBAIC0xMDQsMjMgKzExNCwzMyBAQCBzdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZp
ZXc+IGNyZWF0ZVdlYlZpZXdXaXRoVGV4dFJlY29nbml0aW9uRW5oYW5jZW1lbnRzKCkKICAgICBy
ZXR1cm4gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NSZXF1ZXN0V2l0aFJlc3VsdHMoaWQsIFNFTCwgVktJ
bWFnZUFuYWx5emVyUmVxdWVzdCAqLCB2b2lkICheKShkb3VibGUgcHJvZ3Jlc3MpLCB2b2lkIChe
Y29tcGxldGlvbikoVktJbWFnZUFuYWx5c2lzICosIE5TRXJyb3IgKikpCitzdGF0aWMgdm9pZCBw
cm9jZXNzUmVxdWVzdFdpdGhSZXN1bHRzKGlkLCBTRUwsIFZLSW1hZ2VBbmFseXplclJlcXVlc3Qg
KnJlcXVlc3QsIHZvaWQgKF4pKGRvdWJsZSBwcm9ncmVzcyksIHZvaWQgKF5jb21wbGV0aW9uKShW
S0ltYWdlQW5hbHlzaXMgKiwgTlNFcnJvciAqKSkKIHsKICAgICBnRGlkUHJvY2Vzc1JlcXVlc3RD
b3VudCsrOworICAgIHByb2Nlc3NlZFJlcXVlc3RzKCkuYXBwZW5kKHsgcmVxdWVzdCB9KTsKICAg
ICBjb21wbGV0aW9uKGNyZWF0ZUltYWdlQW5hbHlzaXNXaXRoU2ltcGxlRml4ZWRSZXN1bHRzKCku
Z2V0KCksIG5pbCk7CiB9CiAKK3N0YXRpYyBWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0ICptYWtlRmFr
ZVJlcXVlc3QoaWQsIFNFTCwgQ0dJbWFnZVJlZiBpbWFnZSwgVktJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBWS0FuYWx5c2lzVHlwZXMgcmVxdWVzdFR5cGVzKQoreworICAgIHJldHVybiBj
cmVhdGVSZXF1ZXN0KGltYWdlLCBvcmllbnRhdGlvbiwgcmVxdWVzdFR5cGVzKS5sZWFrUmVmKCk7
Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1JbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIG1ha2VJbWFnZUFuYWx5c2lzUmVxdWVzdFN3aXp6bGVyKEZ1bmN0aW9uVHlwZSBmdW5j
dGlvbikKK3N0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW5zdGFuY2VNZXRob2RTd2l6emxlcj4s
IHN0ZDo6dW5pcXVlX3B0cjxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPj4gbWFrZUltYWdlQW5hbHlz
aXNSZXF1ZXN0U3dpenpsZXIoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHsgUEFMOjpnZXRWS0ltYWdlQW5hbHl6ZXJDbGFzcygpLCBA
c2VsZWN0b3IocHJvY2Vzc1JlcXVlc3Q6cHJvZ3Jlc3NIYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihmdW5jdGlvbikgfTsKKyAgICByZXR1cm4gc3RkOjpw
YWlyIHsKKyAgICAgICAgbWFrZVVuaXF1ZTxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPihQQUw6Omdl
dFZLSW1hZ2VBbmFseXplckNsYXNzKCksIEBzZWxlY3Rvcihwcm9jZXNzUmVxdWVzdDpwcm9ncmVz
c0hhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXI6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KGZ1bmN0
aW9uKSksCisgICAgICAgIG1ha2VVbmlxdWU8SW5zdGFuY2VNZXRob2RTd2l6emxlcj4oUEFMOjpn
ZXRWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0Q2xhc3MoKSwgQHNlbGVjdG9yKGluaXRXaXRoQ0dJbWFn
ZTpvcmllbnRhdGlvbjpyZXF1ZXN0VHlwZTopLCByZWludGVycHJldF9jYXN0PElNUD4obWFrZUZh
a2VSZXF1ZXN0KSkKKyAgICB9OwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotc3Rh
dGljIHZvaWQgcHJvY2Vzc1JlcXVlc3RXaXRoRXJyb3IoaWQsIFNFTCwgVktJbWFnZUFuYWx5emVy
UmVxdWVzdCAqLCB2b2lkICheKShkb3VibGUgcHJvZ3Jlc3MpLCB2b2lkICheY29tcGxldGlvbiko
VktJbWFnZUFuYWx5c2lzICphbmFseXNpcywgTlNFcnJvciAqZXJyb3IpKQorc3RhdGljIHZvaWQg
cHJvY2Vzc1JlcXVlc3RXaXRoRXJyb3IoaWQsIFNFTCwgVktJbWFnZUFuYWx5emVyUmVxdWVzdCAq
cmVxdWVzdCwgdm9pZCAoXikoZG91YmxlIHByb2dyZXNzKSwgdm9pZCAoXmNvbXBsZXRpb24pKFZL
SW1hZ2VBbmFseXNpcyAqYW5hbHlzaXMsIE5TRXJyb3IgKmVycm9yKSkKIHsKICAgICBnRGlkUHJv
Y2Vzc1JlcXVlc3RDb3VudCsrOworICAgIHByb2Nlc3NlZFJlcXVlc3RzKCkuYXBwZW5kKHsgcmVx
dWVzdCB9KTsKICAgICBjb21wbGV0aW9uKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5T
Q29jb2FFcnJvckRvbWFpbiBjb2RlOjEgdXNlckluZm86bmlsXSk7CiB9CiAKQEAgLTIyNCw2ICsy
NDQsMjIgQEAgVEVTVChJbWFnZUFuYWx5c2lzVGVzdHMsIFJlc2V0SW1hZ2VBbmFseXNpc0FmdGVy
TmF2aWdhdGlvbikKICAgICBFWFBFQ1RfRVEoZ0RpZFByb2Nlc3NSZXF1ZXN0Q291bnQsIDVVKTsK
IH0KIAorVEVTVChJbWFnZUFuYWx5c2lzVGVzdHMsIEltYWdlQW5hbHlzaXNQcmlvcml0aXplc1Zp
c2libGVJbWFnZXMpCit7CisgICAgYXV0byByZXF1ZXN0U3dpenpsZXIgPSBtYWtlSW1hZ2VBbmFs
eXNpc1JlcXVlc3RTd2l6emxlcihwcm9jZXNzUmVxdWVzdFdpdGhSZXN1bHRzKTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBjcmVhdGVXZWJWaWV3V2l0aFRleHRSZWNvZ25pdGlvbkVuaGFuY2VtZW50cygp
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIm9mZnNjcmVl
bi1pbWFnZSJdOworICAgIFt3ZWJWaWV3IF9zdGFydEltYWdlQW5hbHlzaXM6bmlsXTsKKyAgICBb
d2ViVmlldyB3YWl0Rm9ySW1hZ2VBbmFseXNpc1JlcXVlc3RzOjJdOworCisgICAgYXV0byBmaXJz
dFJlcXVlc3RlZEltYWdlID0gW3Byb2Nlc3NlZFJlcXVlc3RzKCkuZmlyc3QoKSBpbWFnZV07Cisg
ICAgYXV0byBsYXN0UmVxdWVzdGVkSW1hZ2UgPSBbcHJvY2Vzc2VkUmVxdWVzdHMoKS5sYXN0KCkg
aW1hZ2VdOworICAgIEVYUEVDVF9FUSgyMDBVLCBDR0ltYWdlR2V0V2lkdGgoZmlyc3RSZXF1ZXN0
ZWRJbWFnZSkpOworICAgIEVYUEVDVF9FUSgxNTBVLCBDR0ltYWdlR2V0SGVpZ2h0KGZpcnN0UmVx
dWVzdGVkSW1hZ2UpKTsKKyAgICBFWFBFQ1RfRVEoNjAwVSwgQ0dJbWFnZUdldFdpZHRoKGxhc3RS
ZXF1ZXN0ZWRJbWFnZSkpOworICAgIEVYUEVDVF9FUSg0NTBVLCBDR0ltYWdlR2V0SGVpZ2h0KGxh
c3RSZXF1ZXN0ZWRJbWFnZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL29mZnNjcmVlbi1pbWFnZS5odG1sIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9vZmZzY3JlZW4taW1hZ2UuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNzUzODYwN2EwZjMwNWRkMzA2NGQ3OWMzN2IzZmQxMjlkMTQ4OWJiCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9vZmZzY3Jl
ZW4taW1hZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xIj4K
KzxzdHlsZT4KK2ltZyB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworfQorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorPGltZyBzdHlsZT0idG9wOiA5MDAwcHg7IiBzcmM9InN1bnNldC1pbi1j
dXBlcnRpbm8tNjAwcHguanBnIj4KKzxpbWcgc3JjPSJzdW5zZXQtaW4tY3VwZXJ0aW5vLTIwMHB4
LnBuZyI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL0ltYWdlQW5hbHlzaXNUZXN0aW5nVXRpbGl0aWVzLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL0ltYWdlQW5hbHlzaXNUZXN0aW5nVXRpbGl0aWVzLmgKaW5kZXggOTQ1ZmMxNmYz
ZWM4OTJiOTBkYTUzOGUzZWFmMDgyYjhjYWViZjdlNS4uMzdkZTgyOGFiN2NiYzg0ZjEyOGEwNjZh
ODA3YmM3ZDY3N2Y1ZjkzZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9J
bWFnZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvSW1hZ2VBbmFseXNpc1Rlc3RpbmdVdGlsaXRpZXMuaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9WaXNpb25LaXRDb3JlU1BJ
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBIQVZFKFZLX0lNQUdFX0FOQUxZ
U0lTKQpAQCAtNDIsNiArNDMsNyBAQCBSZXRhaW5QdHI8VktRdWFkPiBjcmVhdGVRdWFkKENHUG9p
bnQgdG9wTGVmdCwgQ0dQb2ludCB0b3BSaWdodCwgQ0dQb2ludCBib3R0b21MZQogUmV0YWluUHRy
PFZLV0tUZXh0SW5mbz4gY3JlYXRlVGV4dEluZm8oTlNTdHJpbmcgKnRleHQsIFZLUXVhZCAqKTsK
IFJldGFpblB0cjxWS1dLTGluZUluZm8+IGNyZWF0ZUxpbmVJbmZvKE5TU3RyaW5nICp0ZXh0LCBW
S1F1YWQgKiwgTlNBcnJheTxWS1dLVGV4dEluZm8gKj4gKik7CiBSZXRhaW5QdHI8VktJbWFnZUFu
YWx5c2lzPiBjcmVhdGVJbWFnZUFuYWx5c2lzKE5TQXJyYXk8VktXS0xpbmVJbmZvICo+ICopOwor
UmV0YWluUHRyPFZLSW1hZ2VBbmFseXplclJlcXVlc3Q+IGNyZWF0ZVJlcXVlc3QoQ0dJbWFnZVJl
ZiwgVktJbWFnZU9yaWVudGF0aW9uLCBWS0FuYWx5c2lzVHlwZXMpOwogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
SW1hZ2VBbmFseXNpc1Rlc3RpbmdVdGlsaXRpZXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL0ltYWdlQW5hbHlzaXNUZXN0aW5nVXRpbGl0aWVzLm1tCmluZGV4IDEyYWE2ZWE1ZTFiNmZh
OGE5ZDhlZmMwNDA2YjdlNjFiOTFkNDE3ODIuLjlhOWQzYjBiZTM0YjU3Y2QwYjE1ZTFlOGY0OTIx
MzlmMmU4NjQ4ZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSW1hZ2VB
bmFseXNpc1Rlc3RpbmdVdGlsaXRpZXMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9JbWFnZUFuYWx5c2lzVGVzdGluZ1V0aWxpdGllcy5tbQpAQCAtMTQyLDYgKzE0Miw2MCBAQCAt
IChCT09MKWhhc1Jlc3VsdHNGb3JBbmFseXNpc1R5cGVzOihWS0FuYWx5c2lzVHlwZXMpYW5hbHlz
aXNUeXBlcwogCiBAZW5kCiAKK0BpbnRlcmZhY2UgVGVzdFZLSW1hZ2VBbmFseXplclJlcXVlc3Qg
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR0ltYWdlUmVmIGlt
YWdlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBWS0ltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFZLQW5hbHlzaXNU
eXBlcyByZXF1ZXN0VHlwZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1VSTCAqaW1h
Z2VVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNVUkwgKnBhZ2VVUkw7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0VktJbWFnZUFuYWx5emVyUmVxdWVzdCB7CisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IF9pbWFnZTsKKyAgICBWS0ltYWdlT3JpZW50YXRpb24gX29yaWVu
dGF0aW9uOworICAgIFZLQW5hbHlzaXNUeXBlcyBfcmVxdWVzdFR5cGU7CisgICAgUmV0YWluUHRy
PE5TVVJMPiBfaW1hZ2VVUkw7CisgICAgUmV0YWluUHRyPE5TVVJMPiBfcGFnZVVSTDsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ0dJbWFnZTooQ0dJbWFnZVJlZilpbWFnZSBvcmllbnRh
dGlvbjooVktJbWFnZU9yaWVudGF0aW9uKW9yaWVudGF0aW9uIHJlcXVlc3RUeXBlOihWS0FuYWx5
c2lzVHlwZXMpcmVxdWVzdFR5cGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9pbWFnZSA9IGltYWdlOworICAgIF9vcmllbnRh
dGlvbiA9IG9yaWVudGF0aW9uOworICAgIF9yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOworICAg
IHJldHVybiBzZWxmOworfQorCistIChDR0ltYWdlUmVmKWltYWdlCit7CisgICAgcmV0dXJuIF9p
bWFnZS5nZXQoKTsKK30KKworLSAoTlNVUkwgKilpbWFnZVVSTAoreworICAgIHJldHVybiBfaW1h
Z2VVUkwuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0SW1hZ2VVUkw6KE5TVVJMICopdXJsCit7Cisg
ICAgX2ltYWdlVVJMID0gYWRvcHROUyh1cmwuY29weSk7Cit9CisKKy0gKE5TVVJMICopcGFnZVVS
TAoreworICAgIHJldHVybiBfcGFnZVVSTC5nZXQoKTsKK30KKworLSAodm9pZClzZXRQYWdlVVJM
OihOU1VSTCAqKXVybAoreworICAgIF9wYWdlVVJMID0gYWRvcHROUyh1cmwuY29weSk7Cit9CisK
K0BlbmQKKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBSZXRhaW5QdHI8VktRdWFkPiBj
cmVhdGVRdWFkKENHUG9pbnQgdG9wTGVmdCwgQ0dQb2ludCB0b3BSaWdodCwgQ0dQb2ludCBib3R0
b21MZWZ0LCBDR1BvaW50IGJvdHRvbVJpZ2h0KQpAQCAtMTcyLDYgKzIyNiwxMSBAQCBSZXRhaW5Q
dHI8VktJbWFnZUFuYWx5c2lzPiBjcmVhdGVJbWFnZUFuYWx5c2lzV2l0aFNpbXBsZUZpeGVkUmVz
dWx0cygpCiAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQW5hbHlzaXMoQFsgbGluZS5nZXQoKSBdKTsK
IH0KIAorUmV0YWluUHRyPFZLSW1hZ2VBbmFseXplclJlcXVlc3Q+IGNyZWF0ZVJlcXVlc3QoQ0dJ
bWFnZVJlZiBpbWFnZSwgVktJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBWS0FuYWx5c2lz
VHlwZXMgdHlwZXMpCit7CisgICAgcmV0dXJuIGFkb3B0TlMoc3RhdGljX2Nhc3Q8VktJbWFnZUFu
YWx5emVyUmVxdWVzdCAqPihbW1Rlc3RWS0ltYWdlQW5hbHl6ZXJSZXF1ZXN0IGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6aW1hZ2Ugb3JpZW50YXRpb246b3JpZW50YXRpb24gcmVxdWVzdFR5cGU6dHlw
ZXNdKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEhB
VkUoVktfSU1BR0VfQU5BTFlTSVMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>