<?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>236894</bug_id>
          
          <creation_ts>2022-02-19 14:17:11 -0800</creation_ts>
          <short_desc>Explain visit children and opaque roots in Introduction.md</short_desc>
          <delta_ts>2022-02-24 14:35:04 -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>WebCore Misc.</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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>heycam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843907</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-19 14:17:11 -0800</bug_when>
    <thetext>Add descriptions for these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843908</commentid>
    <comment_count>1</comment_count>
      <attachid>452655</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-19 14:18:23 -0800</bug_when>
    <thetext>Created attachment 452655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843909</commentid>
    <comment_count>2</comment_count>
      <attachid>452655</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-02-19 14:27:30 -0800</bug_when>
    <thetext>Comment on attachment 452655
Patch

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

Wow, this is so useful, thank you for the write-up!

&gt; Introduction.md:731
&gt; +[WebCore](https://github.com/WebKit/WebKit/tree/main/Source/WebCore) contains hundreds of [Web IDL](https://heycam.github.io/webidl/) (.idl) files.

nit: Web IDL spec was moved to more canonical URL: https://webidl.spec.whatwg.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843934</commentid>
    <comment_count>3</comment_count>
      <attachid>452655</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-19 17:08:33 -0800</bug_when>
    <thetext>Comment on attachment 452655
Patch

There is a zero chance this patch would have caused the reported test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844242</commentid>
    <comment_count>4</comment_count>
      <attachid>452655</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-21 09:43:44 -0800</bug_when>
    <thetext>Comment on attachment 452655
Patch

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

&gt; Introduction.md:807
&gt; +*Visit Children* is useful when a JS wrapper needs to keep another JS wrapper or JS object alive.

I&apos;d say something like:
Visit Children is the mechanism we use when a JS Wrapper needs to keep another JS wrapper or JS cell alive.

Particularly, using &quot;useful&quot; doesn&apos;t quite capture the necessity.

&gt; Introduction.md:846
&gt; +Note that [JSValueInWrappedObject](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/bindings/js/JSValueInWrappedObject.h)
&gt; +is a weak reference to an JS object.
&gt; +We can&apos;t use a strong reference here since the stored JS object may also have a reference back to this object,
&gt; +and such a back reference would also strongly keep this `ErrorEvent` object alive.
&gt; +Because the garbage collector has no way of knowing or clearing such a strong reference in this hypothetical version of `ErrorEvent`,
&gt; +it would never be able to collect either object, resulting in memory leak.

I think we need to come up with different terminology when speaking of GC references. Notably, really aren&apos;t using a weak reference here, since we&apos;re visiting it (and presumably we&apos;re also emitting a write barrier when storing to it).

So, saying this is Weak is wrong. I&apos;m not sure what the exact terminology we should use is, but I don&apos;t think the language here is right. Maybe we can do something like:
- &quot;Weak reference&quot;. Actual weak reference. We make no attempts to keep this reference alive. (Notably, not the &quot;m_error&quot; field above, since we visit it.)
- &quot;GC reference&quot;. We keep the thing pointed to alive as long as the thing pointing to it is alive. If X points to Y, and X is alive, then Y must also be alive. (I think a lot of literature might actually use the terminology &quot;Strong&quot; to refer to this kind of reference.)
- &quot;Root reference&quot; or &quot;Strong&quot; reference. This means that we keep the thing being pointed to alive as long as the C++ reference is alive. JSC implements this via the &quot;Strong&lt;T&gt;&quot; class. This is a &quot;Root&quot; in the classical GC sense.

We should probably define what we mean in this document before using the terminology.

&gt; Introduction.md:859
&gt; +*Reachable from Opaque Roots* is useful when we have an underlying C++ object and want to keep JS wrappers of other C++ objects alive.

nit: again, I&apos;d find a different way of saying this than &quot;useful&quot;. Maybe just &quot;... is used when we have...&quot;

&gt; Introduction.md:874
&gt; +*Opaque roots* avoid these problems by letting the garbage collector know that a particular JavaScript wrapper needs to be kept alive

nit: &quot;avoid these problems&quot; =&gt; &quot;allows us to solve these problems&quot;?

&gt; Introduction.md:929
&gt; + 1. Add opque roots in `visitAdditionalChildren`.

opque =&gt; opaque

&gt; Introduction.md:996
&gt; +Similar to visiting children or adding opaque roots,

nit: this sentence is kinda confusing with starting with how they&apos;re similar and ending the sentence with how they&apos;re different. I think I&apos;d just call out the differences. Or perhaps break it up into two sentences?

&gt; Introduction.md:997
&gt; +**an opaque root is reachable or not is checked in parallel** but **while the main is paused**

an =&gt; whether an
main is =&gt; main thread is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845711</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-24 12:26:28 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Comment on attachment 452655 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452655&amp;action=review
&gt; 
&gt; &gt; Introduction.md:807
&gt; &gt; +*Visit Children* is useful when a JS wrapper needs to keep another JS wrapper or JS object alive.
&gt; 
&gt; I&apos;d say something like:
&gt; Visit Children is the mechanism we use when a JS Wrapper needs to keep
&gt; another JS wrapper or JS cell alive.
&gt; 
&gt; Particularly, using &quot;useful&quot; doesn&apos;t quite capture the necessity.

Sure, I&apos;m gonna stick to &quot;JS object&quot; here though since most people working on WebCore aren&apos;t (and they don&apos;t need to be) familiar with the notion of a cell.

&gt; &gt; Introduction.md:846
&gt; &gt; +Note that [JSValueInWrappedObject](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/bindings/js/JSValueInWrappedObject.h)
&gt; &gt; +is a weak reference to an JS object.
&gt; &gt; +We can&apos;t use a strong reference here since the stored JS object may also have a reference back to this object,
&gt; &gt; +and such a back reference would also strongly keep this `ErrorEvent` object alive.
&gt; &gt; +Because the garbage collector has no way of knowing or clearing such a strong reference in this hypothetical version of `ErrorEvent`,
&gt; &gt; +it would never be able to collect either object, resulting in memory leak.
&gt; 
&gt; I think we need to come up with different terminology when speaking of GC
&gt; references. Notably, really aren&apos;t using a weak reference here, since we&apos;re
&gt; visiting it (and presumably we&apos;re also emitting a write barrier when storing
&gt; to it).
&gt; 
&gt; So, saying this is Weak is wrong. I&apos;m not sure what the exact terminology we
&gt; should use is, but I don&apos;t think the language here is right. Maybe we can do
&gt; something like:
&gt; - &quot;Weak reference&quot;. Actual weak reference. We make no attempts to keep this
&gt; reference alive. (Notably, not the &quot;m_error&quot; field above, since we visit it.)
&gt; - &quot;GC reference&quot;. We keep the thing pointed to alive as long as the thing
&gt; pointing to it is alive. If X points to Y, and X is alive, then Y must also
&gt; be alive. (I think a lot of literature might actually use the terminology
&gt; &quot;Strong&quot; to refer to this kind of reference.)
&gt; - &quot;Root reference&quot; or &quot;Strong&quot; reference. This means that we keep the thing
&gt; being pointed to alive as long as the C++ reference is alive. JSC implements
&gt; this via the &quot;Strong&lt;T&gt;&quot; class. This is a &quot;Root&quot; in the classical GC sense.

That&apos;s an interesting point. I guess there is a reference that&apos;s weak in its conceptual level vs. what&apos;s mechanically Weak vs. Strong.

I&apos;ve rephrased as follows:
Note that [`JSValueInWrappedObject`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/bindings/js/JSValueInWrappedObject.h)
uses [`Weak`](https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/heap/Weak.h),
which does not keep the referenced object alive on its own.
We can&apos;t use a reference type such as [`Strong`](https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/heap/Strong.h)
which keeps the referenced object alive on its own since the stored JS object may also have this `ErrorEvent` object stored as its property.
Because the garbage collector has no way of knowing or clearing the `Strong` reference
or the property to `ErrorEvent` in this hypothetical version of `ErrorEvent`,
it would never be able to collect either object, resulting in a memory leak.

&gt; &gt; Introduction.md:859
&gt; &gt; +*Reachable from Opaque Roots* is useful when we have an underlying C++ object and want to keep JS wrappers of other C++ objects alive.
&gt; 
&gt; nit: again, I&apos;d find a different way of saying this than &quot;useful&quot;. Maybe
&gt; just &quot;... is used when we have...&quot;

Sure, fixed.

&gt; &gt; Introduction.md:874
&gt; &gt; +*Opaque roots* avoid these problems by letting the garbage collector know that a particular JavaScript wrapper needs to be kept alive
&gt; 
&gt; nit: &quot;avoid these problems&quot; =&gt; &quot;allows us to solve these problems&quot;?

I&apos;d just say &quot;*Opaque roots* solves these problems by&quot;

&gt; &gt; Introduction.md:929
&gt; &gt; + 1. Add opque roots in `visitAdditionalChildren`.
&gt; 
&gt; opque =&gt; opaque

Fixed.

&gt; &gt; Introduction.md:996
&gt; &gt; +Similar to visiting children or adding opaque roots,
&gt; 
&gt; nit: this sentence is kinda confusing with starting with how they&apos;re similar
&gt; and ending the sentence with how they&apos;re different. I think I&apos;d just call
&gt; out the differences. Or perhaps break it up into two sentences?

Okay, split into two sentences:

Similar to visiting children or adding opaque roots, **an opaque root is reachable or not is checked in parallel**.
However, it happens **while the main is paused** unlike visiting children or adding opaque roots,
which happen concurrently while the main thread is running.

&gt; &gt; Introduction.md:997
&gt; &gt; +**an opaque root is reachable or not is checked in parallel** but **while the main is paused**
&gt; 
&gt; an =&gt; whether an
&gt; main is =&gt; main thread is

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845713</commentid>
    <comment_count>6</comment_count>
      <attachid>453126</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-24 12:28:15 -0800</bug_when>
    <thetext>Created attachment 453126
Addresed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845716</commentid>
    <comment_count>7</comment_count>
      <attachid>453126</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-24 12:46:54 -0800</bug_when>
    <thetext>Comment on attachment 453126
Addresed review comments

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845762</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-24 14:33:49 -0800</bug_when>
    <thetext>Committed r290463 (247762@main): &lt;https://commits.webkit.org/247762@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453126.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845764</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-24 14:34:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/89439787&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452655</attachid>
            <date>2022-02-19 14:18:23 -0800</date>
            <delta_ts>2022-02-24 12:28:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236894-20220219141823.patch</filename>
            <type>text/plain</type>
            <size>19197</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjE0CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFu
Z2VMb2cKaW5kZXggZjQ2YTA0MDc2YmZjNDAwYzRjMzlkZDM4MzMxMzVhZThjYWYwMzEzYS4uMDhk
ZTU5Zjg1NzQ1NGJhMzNiNDFmYmYyMWM5NTFjYjY1ZDBkNGQ5NyAxMDA2NDQKLS0tIGEvQ2hhbmdl
TG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAyLTE5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cGxhaW4gdmlzaXQgY2hpbGRy
ZW4gYW5kIG9wYXF1ZSByb290cyBpbiBJbnRyb2R1Y3Rpb24ubWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBkZXNjcmlwdGlvbnMgb2Yg
dmlzaXQgY2hpbGRyZW4gYW5kIG9wYXF1ZSByb290cworICAgICAgICBhcyB3ZWxsIGFzIGhvdyB0
byBhZGQgSURMIGZpbGVzLgorCisgICAgICAgICogSW50cm9kdWN0aW9uLm1kOgorCiAyMDIyLTAy
LTE5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
V1BFXVtHVEtdIEVuYWJsZSBUaHVuZGVyIGFuZCByZW1vdmUgb2xkIENsZWFya2V5IENETS9EZWNy
eXB0b3IKZGlmZiAtLWdpdCBhL0ludHJvZHVjdGlvbi5tZCBiL0ludHJvZHVjdGlvbi5tZAppbmRl
eCAzMjJiMTczYjRmMmIxZmQ2NjE1MTFmYTg1MDUyN2JmZGI1OTMxOWJiLi41NDFjNTE3ZTUwZTdi
ZThiMzNmYjQ1ZjZkMjYyNjcyYmUzYTQxNjVhIDEwMDY0NAotLS0gYS9JbnRyb2R1Y3Rpb24ubWQK
KysrIGIvSW50cm9kdWN0aW9uLm1kCkBAIC03MjUsMjMgKzcyNSwzMiBAQCB1bmRlciB1c2VyIGdl
c3R1cmVzIGFuZCBoYXZlIFthY2Nlc3MgYmFjayB0byBpdHMgb3BlbmVyXShodHRwczovL2RldmVs
b3Blci5tb3ppbAogbXVsdGlwbGUgd2ViIHBhZ2VzIGFjcm9zcyBtdWx0aXBsZSB0YWJzIG1pZ2h0
IGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBvbmUgYW5vdGhlciB2aWEgSmF2YVNjcmlwdCBB
UEkKIHN1Y2ggYXMgW3Bvc3RNZXNzYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L3Bvc3RNZXNzYWdlKS4KIAotIyMgSmF2YVNjcmlwdCBX
cmFwcGVycwotCi1FYWNoIERPTSBub2Rl4oCZcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBhcyBh
IEMrKyBjbGFzcyBpbiBXZWJDb3JlLgotSmF2YVNjcmlwdCBBUEkgaXMgcHJpbWFyaWx5IGltcGxl
bWVudGVkIHVzaW5nIFtXZWIgSURMXShodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyks
Ci1hbiBbaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlXShodHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9JbnRlcmZhY2VfZGVzY3JpcHRpb25fbGFuZ3VhZ2UpLAotZnJvbSB3aGljaCB2
YXJpb3VzIFtKUyBET00gYmluZGluZyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC90cmVlL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MpCi1pcyBhdXRvLWdlbmVyYXRl
ZCBieSBhIFtwZXJsIHNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxv
Yi9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
KSwKLWZvciBleGFtcGxlLCB1bmRlciBgV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9gIGZvciBkZWJ1ZyBidWlsZHMuCisjIyBKYXZhU2NyaXB0IFdyYXBwZXJzIGFuZCBJ
REwgZmlsZXMKKworSW4gYWRkaXRpb24gdG8gdHlwaWNhbCBDKysgdHJhbnNsYXRpb24gdW5pdHMg
KC5jcHApIGFuZCBDKysgaGVhZGVyIGZpbGVzICguY3BwKSBhbG9uZyB3aXRoIHNvbWUgT2JqZWN0
aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgZmlsZXMsCitbV2ViQ29yZV0oaHR0cHM6Ly9naXRodWIu
Y29tL1dlYktpdC9XZWJLaXQvdHJlZS9tYWluL1NvdXJjZS9XZWJDb3JlKSBjb250YWlucyBodW5k
cmVkcyBvZiBbV2ViIElETF0oaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8pICguaWRs
KSBmaWxlcy4KK1tXZWIgSURMXShodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLykgaXMg
YW4gW2ludGVyZmFjZSBkZXNjcmlwdGlvbiBsYW5ndWFnZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvSW50ZXJmYWNlX2Rlc2NyaXB0aW9uX2xhbmd1YWdlKQorYW5kIGl0J3MgdXNlZCB0
byBkZWZpbmUgdGhlIHNoYXBlIGFuZCB0aGUgYmVoYXZpb3Igb2YgSmF2YVNjcmlwdCBBUEkgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0LgorCitXaGVuIGJ1aWxkaW5nIFdlYktpdCwgYSBbcGVybCBzY3Jp
cHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSkKK2dlbmVyYXRlcyBhcHBy
b3ByaWF0ZSBDKysgdHJhbnNsYXRpb24gdW5pdHMgYW5kIEMrKyBoZWFkZXIgZmlsZXMgY29ycmVz
cG9uZGluZyB0byB0aGVzZSBJREwgZmlsZXMgdW5kZXIgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvYAord2hlcmUgYERlYnVnYCBpcyB0aGUgY3VycmVudCBidWlsZCBj
b25maWd1cmF0aW9uIChlLmcuIGl0IGNvdWxkIGJlIGBSZWxlYXNlLWlwaG9uZXNpbXVsYXRvcmAg
Zm9yIGV4YW1wbGUpLgorCitUaGVzZSBhdXRvLWdlbmVyYXRlZCBmaWxlcyBhbG9uZyB3aXRoIG1h
bnVhbGx5IHdyaXR0ZW4gZmlsZXMgW1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzXShodHRwczovL2dp
dGh1Yi5jb20vV2ViS2l0L1dlYktpdC90cmVlL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mp
CithcmUgY2FsbGVkICoqSlMgRE9NIGJpbmRpbmcgY29kZSoqIGFuZCBpbXBsZW1lbnRzIEphdmFT
Y3JpcHQgQVBJIGZvciBvYmplY3RzIGFuZCBjb25jZXB0cyB3aG9zZSB1bmRlcmx5aW5nIHNoYXBl
IGFuZCBiZWhhdmlvcnMgYXJlIHdyaXR0ZW4gaW4gQysrLgorCiBGb3IgZXhhbXBsZSwgQysrIGlt
cGxlbWVudGF0aW9uIG9mIFtOb2RlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V
Uy9kb2NzL1dlYi9BUEkvTm9kZSkKIGlzIFtOb2RlIGNsYXNzXShodHRwczovL2dpdGh1Yi5jb20v
V2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCkKLWFuZCBp
dHMgSmF2YVNjcmlwdCBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgSlNOb2RlIGNsYXNzLAot
bW9zdCBvZiB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZCBidXQgaGFzIHNvbWUgY3VzdG9tIGJpbmRp
bmdzIGNvZGUgaW4KLVtKU05vZGVDdXN0b21dKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2Vi
S2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
KS4KK2FuZCBpdHMgSmF2YVNjcmlwdCBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgYEpTTm9k
ZWAgY2xhc3MuCitUaGUgY2xhc3MgZGVjbGFydGlvbiBhbmQgbW9zdCBvZiBkZWZpbml0aW9ucyBh
cmUgYXV0by1nZW5lcmF0ZWQKK2F0IGBXZWJLaXRCdWlsZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTTm9kZS5oYCBhbmQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOb2RlLmNwcGAgZm9yIGRlYnVnIGJ1aWxkcy4KK0l0IGFsc28gaGFzIHNvbWUgY3Vz
dG9tLCBtYW51YWxseSB3cml0dGVuLCBiaW5kaW5ncyBjb2RlIGluCitbU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9X
ZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHApLgogU2ltaWxhcmx5LCBDKysgaW1wbGVtZW50YXRpb24gb2YgW1JhbmdlIGludGVyZmFjZV0o
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JhbmdlKQog
aXMgW1JhbmdlIGNsYXNzXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21h
aW4vU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgpCi13aGlsc3QgaXRzIEphdmFTY3JpcHQgQVBJ
IGlzIGltcGxlbWVudGVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBKU1JhbmdlIGNsYXNzLgotV2Ug
Y2FsbCBpbnN0YW5jZXMgb2YgdGhlIGxhdHRlciBKUyogY2xhc3NlcyAqSlMgd3JhcHBlcnMqLgor
d2hpbHN0IGl0cyBKYXZhU2NyaXB0IEFQSSBpcyBpbXBsZW1lbnRlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgSlNSYW5nZSBjbGFzcworKGxvY2F0ZWQgYXQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNSYW5nZS5oYCBhbmQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNSYW5nZS5jcHBgIGZvciBkZWJ1ZyBidWlsZHMpCitXZSBjYWxs
IGluc3RhbmNlcyBvZiB0aGVzZSBKU1ggY2xhc3NlcyAqSlMgd3JhcHBlcnMqIG9mIFguCiAKIFRo
ZXNlIEpTIHdyYXBwZXJzIGV4aXN0IGluIHdoYXQgd2UgY2FsbCBhIFtgRE9NV3JhcHBlcldvcmxk
YF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oKS4KIEVhY2ggYERPTVdyYXBwZXJXb3Js
ZGAgaGFzIGl0cyBvd24gSlMgd3JhcHBlciBmb3IgZWFjaCBDKysgb2JqZWN0LgpAQCAtNzU5LDE5
ICs3NjgsMzMgQEAgV2hlbiB0aGVyZSBpcyBhbHJlYWR5IGEgSlMgd3JhcHBlciBvYmplY3QgZm9y
IGEgZ2l2ZW4gQysrIG9iamVjdCwKIGB0b0pTYCBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIGFwcHJv
cHJpYXRlIEpTIHdyYXBwZXIgaW4KIGEgW2hhc2ggbWFwXShodHRwczovL2dpdGh1Yi5jb20vV2Vi
S2l0L1dlYktpdC9ibG9iL2VhMWE1NmVlMTFhMjZmMjkyZjNkMmJhZWQyYTNhZWE5NWZlYTQwZjEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgjTDc0KQogb2YgdGhl
IGdpdmVuIGBET01XcmFwcGVyV29ybGRgLgotQmVjYXVzZSBhIGhhc2ggbWFwIGxvb2t1cCBpcyBl
eHBlbnNpdmUsIHNvbWUgV2ViQ29yZSBvYmplY3RzIHdpbGwgaW5oZXJpdCBmcm9tCitCZWNhdXNl
IGEgaGFzaCBtYXAgbG9va3VwIGlzIGV4cGVuc2l2ZSwgc29tZSBXZWJDb3JlIG9iamVjdHMgaW5o
ZXJpdCBmcm9tCiBbU2NyaXB0V3JhcHBhYmxlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxl
LmgpLAogd2hpY2ggaGFzIGFuIGlubGluZSBwb2ludGVyIHRvIHRoZSBKUyB3cmFwcGVyIGZvciB0
aGUgbWFpbiB3b3JsZCBpZiBvbmUgd2FzIGFscmVhZHkgY3JlYXRlZC4KIAorIyMjIEFkZGluZyBu
ZXcgSmF2YVNjcmlwdCBBUEkKKworVG8gaW50cm9kdWNlIGEgbmV3IEphdmFTY3JpcHQgQVBJIGlu
IFtXZWJDb3JlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291
cmNlL1dlYkNvcmUvKSwgCitmaXJzdCBpZGVudGlmeSB0aGUgZGlyZWN0b3J5IHVuZGVyIHdoaWNo
IHRvIGltcGxlbWVudCB0aGlzIG5ldyBBUEksIGFuZCBpbnRyb2R1Y2UgY29ycmVzcG9uZGluZyBX
ZWIgSURMIGZpbGVzLgorTmV3IElETCBmaWxlcyBzaG91bGQgYmUgbGlzdGVkIGluIFtTb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSkKK3NvIHRo
YXQgdGhlIGFmb3JlbWVudGlvbmVkIHBlcmwgc2NyaXB0IGNhbiBnZW5lcmF0ZSBjb3JyZXNwb25k
aW5nIEpTKi5jcHAgYW5kIEpTKi5oIGZpbGllcy4KK0FkZCB0aGVzZSBuZXdseSBnZW5lcmF0ZWQg
SlMqLmNwcCBmaWxlcyB0byBbU291cmNlL1dlYkNvcmUvU291cmNlcy50eHRdKGh0dHBzOi8vZ2l0
aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCkKK2luIG9yZGVyIGZvciB0aGVtIHRvIGJlIGNvbXBpbGVkLgorUmVtZW1iZXIgdG8gYWRkIHRo
ZXNlIGZpbGVzIHRvIFtXZWJDb3JlJ3MgWGNvZGUgcHJvamVjdF0oaHR0cHM6Ly9naXRodWIuY29t
L1dlYktpdC9XZWJLaXQvdHJlZS9tYWluL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
KSBhcyB3ZWxsLgorCitGb3IgZXhhbXBsZSwgW3RoaXMgY29tbWl0XShodHRwczovL2dpdGh1Yi5j
b20vV2ViS2l0L1dlYktpdC9jb21taXQvY2JkYTY4YTI5YmViM2RhOTBkMTk4NTU4ODJjNTM0MGNl
MDZmMTU0NikKK2ludHJvZHVjZWQgW2BJZGxlRGVhZGxpbmUuaWRsYF0oaHR0cHM6Ly9naXRodWIu
Y29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJDb3JlL2RvbS9JZGxlRGVhZGxp
bmUuaWRsKQorYW5kIGFkZGVkIGBKU0lkbGVEZWFkbGluZS5jcHBgIHRvIHRoZSBsaXN0IG9mIGRl
cml2ZWQgc291cmNlcyB0byBiZSBjb21waWxlZC4KKwogIyMgSlMgV3JhcHBlciBMaWZlY3ljbGUg
TWFuYWdlbWVudAogCi1BcyBhIGdlbmVyYWwgcnVsZSwgYSBKUyB3cmFwcGVyIG9iamVjdCBrZWVw
cyBpdHMgdW5kZXJseWluZyBDKysgb2JqZWN0IGFsaXZlIGJ5IG1lYW5zIG9mIHJlZmVyZW5jZSBj
b3VudGluZworQXMgYSBnZW5lcmFsIHJ1bGUsIGEgSlMgd3JhcHBlciBrZWVwcyBpdHMgdW5kZXJs
eWluZyBDKysgb2JqZWN0IGFsaXZlIGJ5IG1lYW5zIG9mIHJlZmVyZW5jZSBjb3VudGluZwogaW4g
W0pTRE9NV3JhcHBlcl0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWlu
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oKSB0ZW1wbGUgY2xhc3MK
IGZyb20gd2hpY2ggYWxsIEpTIHdyYXBwZXJzIGluIFdlYkNvcmUgaW5oZXJpdHMuCiBIb3dldmVy
LCAqKkMrKyBvYmplY3RzIGRvIG5vdCBrZWVwIHRoZWlyIGNvcnJlc3BvbmRpbmcgSlMgd3JhcHBl
ciBpbiBlYWNoIHdvcmxkIGFsaXZlKiogYnkgdGhlIHZpcnR1ZSBvZiB0aGVtIHN0YXlpbmcgYWxp
dmUKIGFzIHN1Y2ggYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpbGwgcmVzdWx0IGluIGEgbWVtb3J5
IGxlYWsuCiAKLVRoZXJlIGFyZSB0d28gcHJpbWFyeSBtZWNoYW5pc21zIHRvIGtlZXAgSlMgd3Jh
cHBlcnMgYWxpdmUgaW4gV2ViQ29yZToKK1RoZXJlIGFyZSB0d28gcHJpbWFyeSBtZWNoYW5pc21z
IHRvIGtlZXAgSlMgd3JhcHBlcnMgYWxpdmUgaW4gW1dlYkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNv
bS9XZWJLaXQvV2ViS2l0L3RyZWUvbWFpbi9Tb3VyY2UvV2ViQ29yZSk6CiAKICogKipWaXNpdCBD
aGlsZHJlbioqIC0gV2hlbiBKYXZhU2NyaXB0Q29yZeKAmXMgZ2FyYmFnZSBjb2xsZWN0aW9uIHZp
c2l0cyBzb21lIEpTIHdyYXBwZXIgZHVyaW5nCiAgICAgdGhlIFttYXJraW5nIHBoYXNlXShodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmFjaW5nX2dhcmJhZ2VfY29sbGVjdGlvbiNCYXNp
Y19hbGdvcml0aG0pLApAQCAtNzc5LDE1ICs4MDIsMjA2IEBAIFRoZXJlIGFyZSB0d28gcHJpbWFy
eSBtZWNoYW5pc21zIHRvIGtlZXAgSlMgd3JhcHBlcnMgYWxpdmUgaW4gV2ViQ29yZToKICogKipS
ZWFjaGFibGUgZnJvbSBPcGFxdWUgUm9vdHMqKiAtIFRlbGwgSmF2YVNjcmlwdENvcmXigJlzIGdh
cmJhZ2UgY29sbGVjdGlvbiB0aGF0IGEgSlMgd3JhcHBlciBpcyByZWFjaGFibGUKICAgICBmcm9t
IGFuIG9wYXF1ZSByb290IHdoaWNoIHdhcyBhZGRlZCB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290
cyBkdXJpbmcgbWFya2luZyBwaGFzZS4KIAotRklYTUU6IEV4cGxhaW4gaG93IHRvIGFkZCBuZXcg
SURMIGZpbGVzIGFuZCB3aGVyZSBkZXJpdmVkIHNvdXJjZXMgYXJlIGdlbmVyYXRlZC4KLQogIyMj
IFZpc2l0IENoaWxkcmVuCiAKLUZJWE1FOiBFeHBsYWluIGhvdyB2aXNpdCBjaGlsZHJlbiB3b3Jr
cy4KKypWaXNpdCBDaGlsZHJlbiogaXMgdXNlZnVsIHdoZW4gYSBKUyB3cmFwcGVyIG5lZWRzIHRv
IGtlZXAgYW5vdGhlciBKUyB3cmFwcGVyIG9yIEpTIG9iamVjdCBhbGl2ZS4KKworRm9yIGV4YW1w
bGUsIFtgRXJyb3JFdmVudGAgb2JqZWN0XShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktp
dC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaWRsKQordXNlcyB0aGlz
IG1ldGhvZCBpbgorW1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3Rv
bS5jcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwKQordG8ga2VlcCBpdHMg
ImVycm9yIiBJREwgYXR0cmlidXRlIGFzIGZvbGxvd3M6CisKK2BgYGNwcAordGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlz
aXQodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRXJy
b3JFdmVudCk7CitgYGAKKworSGVyZSwgYERFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVO
YCBtYWNybyBnZW5lcmF0ZXMgdGVtcGxhdGUgaW5zdGFuY2VzIG9mIHZpc2l0QWRkaXRpb25hbENo
aWxkcmVuCit3aGljaCBnZXRzIGNhbGxlZCBieSB0aGUgSmF2YVNjcmlwdENvcmUncyBnYXJiYWdl
IGNvbGxlY3Rvci4KK1doZW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHZpc2l0cyBhbiBpbnN0YW5j
ZSBgRXJyb3JFdmVudGAgb2JqZWN0LAoraXQgYWxzbyB2aXNpdHMgYHdyYXBwZWQoKS5vcmlnaW5h
bEVycm9yKClgLCB3aGljaCBpcyB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBvZiAiZXJyb3IiIGF0dHJp
YnV0ZToKKworYGBgY3BwCitjbGFzcyBFcnJvckV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsK
Ky4uLgorICAgIGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9yaWdpbmFsRXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJp
YWxpemVkRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6ZWRFcnJvci5nZXQoKTsgfQor
Li4uCisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCBtX2Vycm9yOworICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZEVycm9yOworICAgIGJvb2wgbV90cmllZFRv
U2VyaWFsaXplIHsgZmFsc2UgfTsKK307CitgYGAKKworTm90ZSB0aGF0IFtKU1ZhbHVlSW5XcmFw
cGVkT2JqZWN0XShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oKQoraXMgYSB3
ZWFrIHJlZmVyZW5jZSB0byBhbiBKUyBvYmplY3QuCitXZSBjYW4ndCB1c2UgYSBzdHJvbmcgcmVm
ZXJlbmNlIGhlcmUgc2luY2UgdGhlIHN0b3JlZCBKUyBvYmplY3QgbWF5IGFsc28gaGF2ZSBhIHJl
ZmVyZW5jZSBiYWNrIHRvIHRoaXMgb2JqZWN0LAorYW5kIHN1Y2ggYSBiYWNrIHJlZmVyZW5jZSB3
b3VsZCBhbHNvIHN0cm9uZ2x5IGtlZXAgdGhpcyBgRXJyb3JFdmVudGAgb2JqZWN0IGFsaXZlLgor
QmVjYXVzZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaGFzIG5vIHdheSBvZiBrbm93aW5nIG9yIGNs
ZWFyaW5nIHN1Y2ggYSBzdHJvbmcgcmVmZXJlbmNlIGluIHRoaXMgaHlwb3RoZXRpY2FsIHZlcnNp
b24gb2YgYEVycm9yRXZlbnRgLAoraXQgd291bGQgbmV2ZXIgYmUgYWJsZSB0byBjb2xsZWN0IGVp
dGhlciBvYmplY3QsIHJlc3VsdGluZyBpbiBtZW1vcnkgbGVhay4KKworVG8gdXNlIHRoaXMgbWV0
aG9kIG9mIGtlZXBpbmcgYSBKYXZhU2NyaXB0IG9iamVjdCBvciB3cmFwcGVyIGFsaXZlLCBhZGQg
YEpTQ3VzdG9tTWFya0Z1bmN0aW9uYCB0byB0aGUgSURMIGZpbGUsCit0aGVuIGludHJvZHVjZSBK
UypDdXN0b20uY3BwIGZpbGUgdW5kZXIgW1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzXShodHRw
czovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC90cmVlL21haW4vU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMpCithbmQgaW1wbGVtZW50IGB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IEpTKkV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKWAgYXMg
c2VlbiBhYm92ZSBmb3IgYEVycm9yRXZlbnRgLgorCisqKnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
IGlzIGNhbGxlZCBjb25jdXJyZW50bHkqKiB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgaXMgcnVubmlu
Zy4KK0FueSBvcGVyYXRpb24gZG9uZSBpbiB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiBuZWVkcyB0
byBiZSBtdWx0aS10aHJlYWQgc2FmZS4KK0ZvciBleGFtcGxlLCBpdCBjYW5ub3QgaW5jcmVtZW50
IG9yIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGEgYFJlZkNvdW50ZWRgIG9iamVj
dAorb3IgY3JlYXRlIGEgbmV3IGBXZWFrUHRyYCBmcm9tIGBDYW5NYWtlV2Vha1B0cmAgc2luY2Ug
dGhlc2UgV1RGIGNsYXNzZXMgYXJlIG5vdCB0aHJlYWQgc2FmZS4KIAogIyMjIE9wYXF1ZSBSb290
cwogCi1GSVhNRTogRXhwbGFpbiBob3cgb3BhcXVlIHJvb3RzIHdvcmsuCisqUmVhY2hhYmxlIGZy
b20gT3BhcXVlIFJvb3RzKiBpcyB1c2VmdWwgd2hlbiB3ZSBoYXZlIGFuIHVuZGVybHlpbmcgQysr
IG9iamVjdCBhbmQgd2FudCB0byBrZWVwIEpTIHdyYXBwZXJzIG9mIG90aGVyIEMrKyBvYmplY3Rz
IGFsaXZlLgorCitUbyBzZWUgd2h5LCBsZXQncyBjb25zaWRlciBhIFtgU3R5bGVTaGVldGAgb2Jq
ZWN0XShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsKS4KK1NvIGxvbmcgYXMgdGhpcyBvYmplY3QgaXMgYWxp
dmUsIHdlIGFsc28gbmVlZCB0byBrZWVwIHRoZSBET00gbm9kZSByZXR1cm5lZCBieSB0aGUgYG93
bmVyTm9kZWAgYXR0cmlidXRlLgorQWxzbywgdGhlIG9iamVjdCBpdHNlbGYgbmVlZHMgdG8gYmUg
a2VwdCBhbGl2ZSBzbyBsb25nIGFzIHRoZSBvd25lciBub2RlIGlzIGFsaXZlCitzaW5jZSB0aGlz
IFtgU3R5bGVTaGVldGAgb2JqZWN0XSBjYW4gYmUgYWNjZXNzZWQgdmlhIFtgc2hlZXRgIElETCBh
dHRyaWJ1dGVdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jdGhlLWxpbmtzdHlsZS1p
bnRlcmZhY2UpCitvZiB0aGUgb3duZXIgbm9kZS4KK0lmIHdlIHdlcmUgdG8gdXNlIHRoZSAqdmlz
aXQgY2hpbGRyZW4qIG1lY2hhbmlzbSwKK3dlIG5lZWQgdG8gdmlzaXQgZXZlcnkgSlMgd3JhcHBl
ciBvZiB0aGUgb3duZXIgbm9kZSB3aGVuZXZlciB0aGlzIGBTdHlsZVNoZWV0YCBvYmplY3QgaXMg
dmlzaXRlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IsCithbmQgd2UgbmVlZCB0byB2aXNpdCBl
dmVyeSBKUyB3cmFwcGVyIG9mIHRoZSBgU3R5bGVTaGVldGAgb2JqZWN0IHdoZW5ldmVyIGFuIG93
bmVyIG5vZGUgaXMgdmlzaXRlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCitCdXQgaW4gb3Jk
ZXIgdG8gZG8gc28sIHdlIG5lZWQgdG8gcXVlcnkgZXZlcnkgYERPTVdyYXBwZXJXb3JsZGAncyB3
cmFwcGVyIG1hcCB0byBzZWUgaWYgdGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIuCitUaGlz
IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gdGhhdCBuZWVkcyB0byBoYXBwZW4gYWxsIHRoZSB0
aW1lLAorYW5kIGNyZWF0ZXMgYSB0aWUgY291cGxpbmcgYmV0d2VlbiBgTm9kZWAgYW5kIGBTdHls
ZVNoZWV0YCBvYmplY3RzCitzaW5jZSBlYWNoIEpTIHdyYXBwZXIgb2JqZWN0cyBuZWVkIHRvIGJl
ICBhd2FyZSBvZiBvdGhlciBvYmplY3RzJyBleGlzdGVuY2UuIAorCisqT3BhcXVlIHJvb3RzKiBh
dm9pZCB0aGVzZSBwcm9ibGVtcyBieSBsZXR0aW5nIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBrbm93
IHRoYXQgYSBwYXJ0aWN1bGFyIEphdmFTY3JpcHQgd3JhcHBlciBuZWVkcyB0byBiZSBrZXB0IGFs
aXZlCitzbyBsb25nIGFzIHRoZSBnYXJnYWJlIGNvbGxlY3RvciBoYWQgZW5jb3VudGVyZWQgc3Bl
Y2lmaWMgb3BhcXVlIHJvb3QocykgdGhpcyBKYXZhU2NyaXB0IHdyYXBwZXIgY2FyZXMgYWJvdXQK
K2V2ZW4gaWYgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGRpZG4ndCB2aXNpdCB0aGUgSmF2YVNjcmlw
dCB3cmFwcGVyIGRpcmVjdGx5LgorQW4gb3BhcXVlIHJvb3QgaXMgc2ltcGx5IGEgYHZvaWQqYCBp
ZGVudGlmaWVyIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBrZWVwcyB0cmFjayBvZiBkdXJpbmcgZWFj
aCBtYXJraW5nIHBoYXNlLAorYW5kIGl0IGRvZXMgbm90IGNvbmZvcm0gdG8gYSBzcGVjaWZpYyBp
bnRlcmZhY2Ugb3IgYmVoYXZpb3IuCitJdCBjb3VsZCBoYXZlIGJlZW4gYW4gYXJiaXRyYXJ5IGlu
dGVnZXIgdmFsdWUgYnV0IGB2b2lkKmAgaXMgdXNlZCBvdXQgb2YgY29udmVuaWVuY2Ugc2luY2Ug
cG9pbnRlciB2YWx1ZXMgb2YgbGl2ZSBvYmplY3RzIGFyZSB1bmlxdWUuCisKK0luIHRoZSBjYXNl
IG9mIGEgYFN0eWxlU2hlZXRgIG9iamVjdCwgYFN0eWxlU2hlZXRgJ3MgSmF2YVNjcmlwdCB3cmFw
cGVyIHRlbGxzIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0aGF0IGl0IG5lZWRzIHRvIGJlIGtlcHQg
YWxpdmUKK2JlY2F1c2UgYW4gb3BhcXVlIHJvb3QgaXQgY2FyZXMgYWJvdXQgaGFzIGJlZW4gZW5j
b3VudGVyZWQgd2hlbmV2ZXIgYG9ud2VyTm9kZWAgaXMgdmlzaXRlZCBieSB0aGUgZ2FyYmFnZSBj
b2xsZWN0b3IuCisKK0luIHRoZSBtb3N0IHNpbXBsaXN0aWMgbW9kZWwsIHRoZSBvcGFxdWUgcm9v
dCBmb3IgdGhpcyBjYXNlIHdpbGwgYmUgdGhlIGBvbndlck5vZGVgIGl0c2VsZi4KK0hvd2V2ZXIs
IGVhY2ggYE5vZGVgIG9iamVjdCBhbHNvIGhhcyB0byBrZWVwIGl0cyBwYXJlbnQsIHNpYmxpbmdz
LCBhbmQgY2hpbGRyZW4gYWxpdmUuCitUbyB0aGlzIGVuZCwgZWFjaCBgTm9kZWAgZGVzaWduYXRl
cyB0aGUgW3Jvb3RdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC10cmVlLXJv
b3QpIG5vZGUgYXMgaXRzIG9wYXF1ZSByb290LgorQm90aCBgTm9kZWAgYW5kIGBTdHlsZVNoZWV0
YCBvYmplY3RzIHVzZSB0aGlzIHVuaXF1ZSBvcGFxdWUgcm9vdCBhcyBhIHdheSBvZiBjb21tdW5p
Y2F0aW5nIHdpdGggdGhlIGdhcmdhZ2UgY29sbGVjdG9yLgorCitGb3IgZXhhbXBsZSwgYFN0eWxl
U2hlZXRgIG9iamVjdCBpbmZvcm1zIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBvZiB0aGlzIG9wYXF1
ZSByb290IHdoZW4gaXQncyBhc2tlZCB0byB2aXNpdCBpdHMgY2hpbGRyZW4gaW4KK1tKU1N0eWxl
U2hlZXRDdXN0b20uY3BwXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21h
aW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCk6CisK
K2BgYGNwcAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNTdHlsZVNoZWV0Ojp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KCZ3cmFwcGVkKCkpKTsKK30KK2BgYAorCitIZXJlLCBgdm9pZCog
cm9vdChTdHlsZVNoZWV0KilgIHJldHVybnMgdGhlIG9wYXF1ZSByb290IG9mIHRoZSBgU3R5bGVT
aGVldGAgb2JqZWN0IGFzIGZvbGxvd3M6CisKK2BgYGNwcAoraW5saW5lIHZvaWQqIHJvb3QoU3R5
bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxl
ID0gc3R5bGVTaGVldC0+b3duZXJSdWxlKCkpCisgICAgICAgIHJldHVybiByb290KG93bmVyUnVs
ZSk7CisgICAgaWYgKE5vZGUqIG93bmVyTm9kZSA9IHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpKQor
ICAgICAgICByZXR1cm4gcm9vdChvd25lck5vZGUpOworICAgIHJldHVybiBzdHlsZVNoZWV0Owor
fQorYGBgCisKK0FuZCB0aGVuIGluIGBKU1N0eWxlU2hlZXQuY3BwYCAobG9jYXRlZCBhdCBgV2Vi
S2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0eWxlU2hlZXQuY3BwYCBm
b3IgZGVidWcgYnVpbGRzKQorYEpTU3R5bGVTaGVldE93bmVyYCAoYSBoZWxwZXIgSmF2YVNjcmlw
dCBvYmplY3QgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IpIHRlbGxz
IHRoZSBnYXJiYWdlIGNvbGxlY3RvcgordGhhdCBgSlNTdHlsZVNoZWV0YCBzaG91bGQgYmUga2Vw
dCBhbGl2ZSBzbyBsb25nIGFzIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBoYWQgZW5jb3VudGVyZWQg
dGhpcyBgU3R5bGVTaGVldGAncyBvcGFxdWUgcm9vdDoKKworYGBgY3BwCitib29sIEpTU3R5bGVT
aGVldE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCit7CisgICAgYXV0byoganNTdHlsZVNoZWV0ID0ganNDYXN0PEpTU3R5
bGVTaGVldCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICB2b2lkKiByb290ID0gV2Vi
Q29yZTo6cm9vdCgmanNTdHlsZVNoZWV0LT53cmFwcGVkKCkpOworICAgIGlmIChVTkxJS0VMWShy
ZWFzb24pKQorICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIGpzU3R5bGVTaGVldCI7
CisgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOworfQorYGBgCisK
K0dlbmVyYWxseSwgdXNpbmcgb3BhcXVlIHJvb3RzIGFzIGEgd2F5IG9mIGtlZXBpbmcgSmF2YVNj
cmlwdCB3cmFwcGVycyBpbnZvbHZlIHR3byBzdGVwczoKKyAxLiBBZGQgb3BxdWUgcm9vdHMgaW4g
YHZpc2l0QWRkaXRpb25hbENoaWxkcmVuYC4KKyAyLiBSZXR1cm4gdHJ1ZSBpbiBgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHNgIHdoZW4gcmVsZXZhbnQgb3BhcXVlIHJvb3RzIGFyZSBmb3VuZC4K
KworVGhlIGZpcnN0IHN0ZXAgY2FuIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBhZm9yZW1lbnRp
b2VuZCBgSlNDdXN0b21NYXJrRnVuY3Rpb25gIHdpdGggYHZpc2l0QWRkaXRpb25hbENoaWxkcmVu
YC4KK0FsdGVybmF0aXZlbHkgYW5kIG1vcmUgcHJlZmVyYWJseSwgYEdlbmVyYXRlQWRkT3BhcXVl
Um9vdGAgY2FuIGJlIGFkZGVkIHRvIHRoZSBJREwgaW50ZXJmYWNlIHRvIGF1dG8tZ2VuZXJhdGUg
dGhpcyBjb2RlLgorRm9yIGV4YW1wbGUsIFtBYm9ydENvbnRyb2xsZXIuaWRsXShodHRwczovL2dp
dGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL0Fib3J0
Q29udHJvbGxlci5pZGwpCittYWtlcyB1c2Ugb2YgdGhpcyBJREwgYXR0cmlidXRlIGFzIGZvbGxv
d3M6CisKK2BgYGNwcAorWworICAgIEV4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpLAorICAgIEdlbmVy
YXRlQWRkT3BhcXVlUm9vdD1zaWduYWwKK10gaW50ZXJmYWNlIEFib3J0Q29udHJvbGxlciB7Cisg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGNvbnN0cnVjdG9yKCk7CisKKyAg
ICBbU2FtZU9iamVjdF0gcmVhZG9ubHkgYXR0cmlidXRlIEFib3J0U2lnbmFsIHNpZ25hbDsKKwor
ICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3RdIHVuZGVmaW5lZCBhYm9ydChvcHRpb25hbCBhbnkg
cmVhc29uKTsKK307CitgYGAKKworSGVyZSwgYHNpbmdhbGAgaXMgYSBwdWJsaWMgbWVtYmVyIGZ1
bmN0aW9uIGZ1bnRpb24gb2YKK3RoZSBbdW5kZXJseWluZyBDKysgb2JqZWN0XShodHRwczovL2dp
dGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL0Fib3J0
Q29udHJvbGxlci5oKToKKworYGBgY3BwCitjbGFzcyBBYm9ydENvbnRyb2xsZXIgZmluYWwgOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxBYm9ydENvbnRyb2xsZXI+
IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEFib3J0Q29udHJvbGxlcik7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxBYm9ydENvbnRyb2xsZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0Jik7CisgICAgfkFib3J0Q29udHJvbGxlcigpOworCisgICAgQWJvcnRTaWduYWwmIHNp
Z25hbCgpOworICAgIHZvaWQgYWJvcnQoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUg
cmVhc29uKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBBYm9ydENvbnRyb2xsZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpOworCisgICAgUmVmPEFib3J0U2lnbmFsPiBtX3NpZ25hbDsKK307
CitgYGAKKworV2hlbiBgR2VuZXJhdGVBZGRPcGFxdWVSb290YCBpcyBzcGVjaWZpZWQgd2l0aG91
dCBhbnkgdmFsdWUsIGl0IGF1dG9tYXRpY2FsbHkgY2FsbHMgYG9wYXF1ZVJvb3QoKWAgaW5zdGVh
ZC4KKworTGlrZSB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgKiphZGRpbmcgb3BhcXVlIHJvb3Rz
IGhhcHBlbiBjb25jdXJyZW50bHkqKiB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgaXMgcnVubmluZy4K
K0FueSBvcGVyYXRpb24gZG9uZSBpbiB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiBuZWVkcyB0byBi
ZSBtdWx0aS10aHJlYWQgc2FmZS4KK0ZvciBleGFtcGxlLCBpdCBjYW5ub3QgaW5jcmVtZW50IG9y
IGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGEgYFJlZkNvdW50ZWRgIG9iamVjdAor
b3IgY3JlYXRlIGEgbmV3IGBXZWFrUHRyYCBmcm9tIGBDYW5NYWtlV2Vha1B0cmAgc2luY2UgdGhl
c2UgV1RGIGNsYXNzZXMgYXJlIG5vdCB0aHJlYWQgc2FmZS4KKworVGhlIHNlY29uZCBzdGVwIGNh
biBiZSBhY2hpdmVkIGJ5IGFkZGluZyBgQ3VzdG9tSXNSZWFjaGFibGVgIHRvIHRoZSBJREwgZmls
ZSBhbmQKK2ltcGxlbWVudGluZyBgSlMqT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
YCBpbiBKUypDdXN0b20uY3BwIGZpbGUuCitBbHRlcm5hdGl2ZWx5IGFuZCBtb3JlIHByZWZlcmFi
bHksIGBHZW5lcmF0ZUlzUmVhY2hhYmxlYCBjYW4gYmUgYWRkZWQgdG8gSURMIGZpbGUgdG8gYXV0
b21hdGljYWxseSBnZW5lcmF0ZSB0aGlzIGNvZGUKK3dpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXM6
CisgKiBObyB2YWx1ZSAtIEFkZHMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGByb290KFQqKWAgb24g
dGhlIHVuZGVybHlpbmcgQysrIG9iamVjdCBvZiB0eXBlIFQgYXMgdGhlIG9wYXF1ZSByb290Lgor
ICogYEltcGxgIC0gQWRkcyB0aGUgdW5kZXJseWluZyBDKysgb2JqZWN0IGFzIHRoZSBvcGFxdWUg
cm9vdC4KKyAqIGBSZWFjaGFibGVGcm9tRE9NV2luZG93YCAtIEFkZHMgYSBbYERPTVdpbmRvd2Bd
KGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oKQorICAgIHJldHVybmVkIGJ5IGB3aW5kb3coKWAgYXMgdGhlIG9w
YXF1ZSByb290LgorICogYFJlYWNoYWJsZUZyb21OYXZpZ2F0b3JgIC0gQWRkcyBhIFtgTmF2aWdh
dG9yYF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgpCisgICAgcmV0dXJuZWQgYnkgYG5hdmlnYXRvcigpYCBh
cyB0aGUgb3BhcXVlIHJvb3QuCisgKiBgSW1wbERvY3VtZW50YCAtIEFkZHMgYSBbYERvY3VtZW50
YF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oKQorICAgIHJldHVybmVkIGJ5IGBkb2N1bWVudCgpYCBhcyB0aGUg
b3BhcXVlIHJvb3QuCisgKiBgSW1wbEVsZW1lbnRSb290YCAtIEFkZHMgdGhlIHJvb3Qgbm9kZSBv
ZiBhIFtgRWxlbWVudGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFp
bi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oKQorICAgIHJldHVybmVkIGJ5IGBlbGVtZW50
KClgIGFzIHRoZSBvcGFxdWUgcm9vdC4KKyAqIGBJbXBsT3duZXJOb2RlUm9vdGAgLSBBZGRzIHRo
ZSByb290IG5vZGUgb2YgYSBbYE5vZGVgXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktp
dC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCkKKyAgICByZXR1cm5lZCBieSBg
b3duZXJOb2RlKClgIGFzIHRoZSBvcGFxdWUgcm9vdC4KKyAqIGBJbXBsU2NyaXB0RXhlY3V0aW9u
Q29udGV4dGAgLSBBZGRzIGEgW2BTY3JpcHRFeGVjdXRpb25Db250ZXh0YF0oaHR0cHM6Ly9naXRo
dWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgpCisgICAgcmV0dXJuZWQgYnkgYHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKWAgYXMgdGhlIG9wYXF1ZSByb290LgorCitTaW1pbGFyIHRvIHZpc2l0aW5nIGNoaWxkcmVu
IG9yIGFkZGluZyBvcGFxdWUgcm9vdHMsCisqKmFuIG9wYXF1ZSByb290IGlzIHJlYWNoYWJsZSBv
ciBub3QgaXMgY2hlY2tlZCBpbiBwYXJhbGxlbCoqIGJ1dCAqKndoaWxlIHRoZSBtYWluIGlzIHBh
dXNlZCoqCit1bmxpa2UgdmlzaXRpbmcgY2hpbGRyZW4gb3IgYWRkaW5nIG9wYXF1ZSByb290cyB3
aGljaCBoYXBwZW4gY29uY3VycmVudGx5IHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBydW5uaW5n
LgorVGhpcyBtZWFucyB0aGF0IGFueSBvcGVyYXRpb24gZG9uZSBpbiBgSlMqT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzYAorb3IgYW55IGZ1bmN0aW9uIGNhbGxlZCBieSBHZW5lcmF0
ZUlzUmVhY2hhYmxlIGNhbm5vdCBoYXZlIHRocmVhZCB1bnNhZmUgc2lkZSBlZmZlY3RzCitzdWNo
IGFzIGluY3JlbWVudGluZyBvciBkZWNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBh
IGBSZWZDb3VudGVkYCBvYmplY3QKK29yIGNyZWF0aW5nIGEgbmV3IGBXZWFrUHRyYCBmcm9tIGBD
YW5NYWtlV2Vha1B0cmAgc2luY2UgdGhlc2UgV1RGIGNsYXNzZXMnIG11dGF0aW9uIG9wZXJhdGlv
bnMgYXJlIG5vdCB0aHJlYWQgc2FmZS4KKworRklYTUU6IERpc2N1c3MgQWN0aXZlIERPTSBvYmpl
Y3RzCiAKICMjIEluc2VydGluZyBvciBSZW1vdmluZyBET00gTm9kZXMgCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453126</attachid>
            <date>2022-02-24 12:28:15 -0800</date>
            <delta_ts>2022-02-24 14:35:04 -0800</delta_ts>
            <desc>Addresed review comments</desc>
            <filename>bug-236894-20220224122814.patch</filename>
            <type>text/plain</type>
            <size>19577</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjE0CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFu
Z2VMb2cKaW5kZXggZjQ2YTA0MDc2YmZjNDAwYzRjMzlkZDM4MzMxMzVhZThjYWYwMzEzYS4uMDhk
ZTU5Zjg1NzQ1NGJhMzNiNDFmYmYyMWM5NTFjYjY1ZDBkNGQ5NyAxMDA2NDQKLS0tIGEvQ2hhbmdl
TG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAyLTE5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cGxhaW4gdmlzaXQgY2hpbGRy
ZW4gYW5kIG9wYXF1ZSByb290cyBpbiBJbnRyb2R1Y3Rpb24ubWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBkZXNjcmlwdGlvbnMgb2Yg
dmlzaXQgY2hpbGRyZW4gYW5kIG9wYXF1ZSByb290cworICAgICAgICBhcyB3ZWxsIGFzIGhvdyB0
byBhZGQgSURMIGZpbGVzLgorCisgICAgICAgICogSW50cm9kdWN0aW9uLm1kOgorCiAyMDIyLTAy
LTE5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
V1BFXVtHVEtdIEVuYWJsZSBUaHVuZGVyIGFuZCByZW1vdmUgb2xkIENsZWFya2V5IENETS9EZWNy
eXB0b3IKZGlmZiAtLWdpdCBhL0ludHJvZHVjdGlvbi5tZCBiL0ludHJvZHVjdGlvbi5tZAppbmRl
eCAzMjJiMTczYjRmMmIxZmQ2NjE1MTFmYTg1MDUyN2JmZGI1OTMxOWJiLi45ZTllNjc0Y2E4MmFj
OTk4ZDI5NTBmMWE5MTc5ODBlMTlkYTg3OTZkIDEwMDY0NAotLS0gYS9JbnRyb2R1Y3Rpb24ubWQK
KysrIGIvSW50cm9kdWN0aW9uLm1kCkBAIC03MjUsMjMgKzcyNSwzMiBAQCB1bmRlciB1c2VyIGdl
c3R1cmVzIGFuZCBoYXZlIFthY2Nlc3MgYmFjayB0byBpdHMgb3BlbmVyXShodHRwczovL2RldmVs
b3Blci5tb3ppbAogbXVsdGlwbGUgd2ViIHBhZ2VzIGFjcm9zcyBtdWx0aXBsZSB0YWJzIG1pZ2h0
IGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBvbmUgYW5vdGhlciB2aWEgSmF2YVNjcmlwdCBB
UEkKIHN1Y2ggYXMgW3Bvc3RNZXNzYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L3Bvc3RNZXNzYWdlKS4KIAotIyMgSmF2YVNjcmlwdCBX
cmFwcGVycwotCi1FYWNoIERPTSBub2Rl4oCZcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBhcyBh
IEMrKyBjbGFzcyBpbiBXZWJDb3JlLgotSmF2YVNjcmlwdCBBUEkgaXMgcHJpbWFyaWx5IGltcGxl
bWVudGVkIHVzaW5nIFtXZWIgSURMXShodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyks
Ci1hbiBbaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlXShodHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9JbnRlcmZhY2VfZGVzY3JpcHRpb25fbGFuZ3VhZ2UpLAotZnJvbSB3aGljaCB2
YXJpb3VzIFtKUyBET00gYmluZGluZyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC90cmVlL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MpCi1pcyBhdXRvLWdlbmVyYXRl
ZCBieSBhIFtwZXJsIHNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxv
Yi9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
KSwKLWZvciBleGFtcGxlLCB1bmRlciBgV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9gIGZvciBkZWJ1ZyBidWlsZHMuCisjIyBKYXZhU2NyaXB0IFdyYXBwZXJzIGFuZCBJ
REwgZmlsZXMKKworSW4gYWRkaXRpb24gdG8gdHlwaWNhbCBDKysgdHJhbnNsYXRpb24gdW5pdHMg
KC5jcHApIGFuZCBDKysgaGVhZGVyIGZpbGVzICguY3BwKSBhbG9uZyB3aXRoIHNvbWUgT2JqZWN0
aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgZmlsZXMsCitbV2ViQ29yZV0oaHR0cHM6Ly9naXRodWIu
Y29tL1dlYktpdC9XZWJLaXQvdHJlZS9tYWluL1NvdXJjZS9XZWJDb3JlKSBjb250YWlucyBodW5k
cmVkcyBvZiBbV2ViIElETF0oaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8pICguaWRs
KSBmaWxlcy4KK1tXZWIgSURMXShodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLykgaXMg
YW4gW2ludGVyZmFjZSBkZXNjcmlwdGlvbiBsYW5ndWFnZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvSW50ZXJmYWNlX2Rlc2NyaXB0aW9uX2xhbmd1YWdlKQorYW5kIGl0J3MgdXNlZCB0
byBkZWZpbmUgdGhlIHNoYXBlIGFuZCB0aGUgYmVoYXZpb3Igb2YgSmF2YVNjcmlwdCBBUEkgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0LgorCitXaGVuIGJ1aWxkaW5nIFdlYktpdCwgYSBbcGVybCBzY3Jp
cHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSkKK2dlbmVyYXRlcyBhcHBy
b3ByaWF0ZSBDKysgdHJhbnNsYXRpb24gdW5pdHMgYW5kIEMrKyBoZWFkZXIgZmlsZXMgY29ycmVz
cG9uZGluZyB0byB0aGVzZSBJREwgZmlsZXMgdW5kZXIgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvYAord2hlcmUgYERlYnVnYCBpcyB0aGUgY3VycmVudCBidWlsZCBj
b25maWd1cmF0aW9uIChlLmcuIGl0IGNvdWxkIGJlIGBSZWxlYXNlLWlwaG9uZXNpbXVsYXRvcmAg
Zm9yIGV4YW1wbGUpLgorCitUaGVzZSBhdXRvLWdlbmVyYXRlZCBmaWxlcyBhbG9uZyB3aXRoIG1h
bnVhbGx5IHdyaXR0ZW4gZmlsZXMgW1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzXShodHRwczovL2dp
dGh1Yi5jb20vV2ViS2l0L1dlYktpdC90cmVlL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mp
CithcmUgY2FsbGVkICoqSlMgRE9NIGJpbmRpbmcgY29kZSoqIGFuZCBpbXBsZW1lbnRzIEphdmFT
Y3JpcHQgQVBJIGZvciBvYmplY3RzIGFuZCBjb25jZXB0cyB3aG9zZSB1bmRlcmx5aW5nIHNoYXBl
IGFuZCBiZWhhdmlvcnMgYXJlIHdyaXR0ZW4gaW4gQysrLgorCiBGb3IgZXhhbXBsZSwgQysrIGlt
cGxlbWVudGF0aW9uIG9mIFtOb2RlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V
Uy9kb2NzL1dlYi9BUEkvTm9kZSkKIGlzIFtOb2RlIGNsYXNzXShodHRwczovL2dpdGh1Yi5jb20v
V2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCkKLWFuZCBp
dHMgSmF2YVNjcmlwdCBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgSlNOb2RlIGNsYXNzLAot
bW9zdCBvZiB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZCBidXQgaGFzIHNvbWUgY3VzdG9tIGJpbmRp
bmdzIGNvZGUgaW4KLVtKU05vZGVDdXN0b21dKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2Vi
S2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
KS4KK2FuZCBpdHMgSmF2YVNjcmlwdCBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgYEpTTm9k
ZWAgY2xhc3MuCitUaGUgY2xhc3MgZGVjbGFydGlvbiBhbmQgbW9zdCBvZiBkZWZpbml0aW9ucyBh
cmUgYXV0by1nZW5lcmF0ZWQKK2F0IGBXZWJLaXRCdWlsZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTTm9kZS5oYCBhbmQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNOb2RlLmNwcGAgZm9yIGRlYnVnIGJ1aWxkcy4KK0l0IGFsc28gaGFzIHNvbWUgY3Vz
dG9tLCBtYW51YWxseSB3cml0dGVuLCBiaW5kaW5ncyBjb2RlIGluCitbU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9X
ZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHApLgogU2ltaWxhcmx5LCBDKysgaW1wbGVtZW50YXRpb24gb2YgW1JhbmdlIGludGVyZmFjZV0o
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JhbmdlKQog
aXMgW1JhbmdlIGNsYXNzXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21h
aW4vU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgpCi13aGlsc3QgaXRzIEphdmFTY3JpcHQgQVBJ
IGlzIGltcGxlbWVudGVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBKU1JhbmdlIGNsYXNzLgotV2Ug
Y2FsbCBpbnN0YW5jZXMgb2YgdGhlIGxhdHRlciBKUyogY2xhc3NlcyAqSlMgd3JhcHBlcnMqLgor
d2hpbHN0IGl0cyBKYXZhU2NyaXB0IEFQSSBpcyBpbXBsZW1lbnRlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgSlNSYW5nZSBjbGFzcworKGxvY2F0ZWQgYXQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNSYW5nZS5oYCBhbmQgYFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNSYW5nZS5jcHBgIGZvciBkZWJ1ZyBidWlsZHMpCitXZSBjYWxs
IGluc3RhbmNlcyBvZiB0aGVzZSBKU1ggY2xhc3NlcyAqSlMgd3JhcHBlcnMqIG9mIFguCiAKIFRo
ZXNlIEpTIHdyYXBwZXJzIGV4aXN0IGluIHdoYXQgd2UgY2FsbCBhIFtgRE9NV3JhcHBlcldvcmxk
YF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oKS4KIEVhY2ggYERPTVdyYXBwZXJXb3Js
ZGAgaGFzIGl0cyBvd24gSlMgd3JhcHBlciBmb3IgZWFjaCBDKysgb2JqZWN0LgpAQCAtNzU5LDE5
ICs3NjgsMzMgQEAgV2hlbiB0aGVyZSBpcyBhbHJlYWR5IGEgSlMgd3JhcHBlciBvYmplY3QgZm9y
IGEgZ2l2ZW4gQysrIG9iamVjdCwKIGB0b0pTYCBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIGFwcHJv
cHJpYXRlIEpTIHdyYXBwZXIgaW4KIGEgW2hhc2ggbWFwXShodHRwczovL2dpdGh1Yi5jb20vV2Vi
S2l0L1dlYktpdC9ibG9iL2VhMWE1NmVlMTFhMjZmMjkyZjNkMmJhZWQyYTNhZWE5NWZlYTQwZjEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgjTDc0KQogb2YgdGhl
IGdpdmVuIGBET01XcmFwcGVyV29ybGRgLgotQmVjYXVzZSBhIGhhc2ggbWFwIGxvb2t1cCBpcyBl
eHBlbnNpdmUsIHNvbWUgV2ViQ29yZSBvYmplY3RzIHdpbGwgaW5oZXJpdCBmcm9tCitCZWNhdXNl
IGEgaGFzaCBtYXAgbG9va3VwIGlzIGV4cGVuc2l2ZSwgc29tZSBXZWJDb3JlIG9iamVjdHMgaW5o
ZXJpdCBmcm9tCiBbU2NyaXB0V3JhcHBhYmxlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxl
LmgpLAogd2hpY2ggaGFzIGFuIGlubGluZSBwb2ludGVyIHRvIHRoZSBKUyB3cmFwcGVyIGZvciB0
aGUgbWFpbiB3b3JsZCBpZiBvbmUgd2FzIGFscmVhZHkgY3JlYXRlZC4KIAorIyMjIEFkZGluZyBu
ZXcgSmF2YVNjcmlwdCBBUEkKKworVG8gaW50cm9kdWNlIGEgbmV3IEphdmFTY3JpcHQgQVBJIGlu
IFtXZWJDb3JlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291
cmNlL1dlYkNvcmUvKSwgCitmaXJzdCBpZGVudGlmeSB0aGUgZGlyZWN0b3J5IHVuZGVyIHdoaWNo
IHRvIGltcGxlbWVudCB0aGlzIG5ldyBBUEksIGFuZCBpbnRyb2R1Y2UgY29ycmVzcG9uZGluZyBX
ZWIgSURMIGZpbGVzLgorTmV3IElETCBmaWxlcyBzaG91bGQgYmUgbGlzdGVkIGluIFtTb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dl
YktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSkKK3NvIHRo
YXQgdGhlIGFmb3JlbWVudGlvbmVkIHBlcmwgc2NyaXB0IGNhbiBnZW5lcmF0ZSBjb3JyZXNwb25k
aW5nIEpTKi5jcHAgYW5kIEpTKi5oIGZpbGllcy4KK0FkZCB0aGVzZSBuZXdseSBnZW5lcmF0ZWQg
SlMqLmNwcCBmaWxlcyB0byBbU291cmNlL1dlYkNvcmUvU291cmNlcy50eHRdKGh0dHBzOi8vZ2l0
aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCkKK2luIG9yZGVyIGZvciB0aGVtIHRvIGJlIGNvbXBpbGVkLgorUmVtZW1iZXIgdG8gYWRkIHRo
ZXNlIGZpbGVzIHRvIFtXZWJDb3JlJ3MgWGNvZGUgcHJvamVjdF0oaHR0cHM6Ly9naXRodWIuY29t
L1dlYktpdC9XZWJLaXQvdHJlZS9tYWluL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
KSBhcyB3ZWxsLgorCitGb3IgZXhhbXBsZSwgW3RoaXMgY29tbWl0XShodHRwczovL2dpdGh1Yi5j
b20vV2ViS2l0L1dlYktpdC9jb21taXQvY2JkYTY4YTI5YmViM2RhOTBkMTk4NTU4ODJjNTM0MGNl
MDZmMTU0NikKK2ludHJvZHVjZWQgW2BJZGxlRGVhZGxpbmUuaWRsYF0oaHR0cHM6Ly9naXRodWIu
Y29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9XZWJDb3JlL2RvbS9JZGxlRGVhZGxp
bmUuaWRsKQorYW5kIGFkZGVkIGBKU0lkbGVEZWFkbGluZS5jcHBgIHRvIHRoZSBsaXN0IG9mIGRl
cml2ZWQgc291cmNlcyB0byBiZSBjb21waWxlZC4KKwogIyMgSlMgV3JhcHBlciBMaWZlY3ljbGUg
TWFuYWdlbWVudAogCi1BcyBhIGdlbmVyYWwgcnVsZSwgYSBKUyB3cmFwcGVyIG9iamVjdCBrZWVw
cyBpdHMgdW5kZXJseWluZyBDKysgb2JqZWN0IGFsaXZlIGJ5IG1lYW5zIG9mIHJlZmVyZW5jZSBj
b3VudGluZworQXMgYSBnZW5lcmFsIHJ1bGUsIGEgSlMgd3JhcHBlciBrZWVwcyBpdHMgdW5kZXJs
eWluZyBDKysgb2JqZWN0IGFsaXZlIGJ5IG1lYW5zIG9mIHJlZmVyZW5jZSBjb3VudGluZwogaW4g
W0pTRE9NV3JhcHBlcl0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWlu
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oKSB0ZW1wbGUgY2xhc3MK
IGZyb20gd2hpY2ggYWxsIEpTIHdyYXBwZXJzIGluIFdlYkNvcmUgaW5oZXJpdHMuCiBIb3dldmVy
LCAqKkMrKyBvYmplY3RzIGRvIG5vdCBrZWVwIHRoZWlyIGNvcnJlc3BvbmRpbmcgSlMgd3JhcHBl
ciBpbiBlYWNoIHdvcmxkIGFsaXZlKiogYnkgdGhlIHZpcnR1ZSBvZiB0aGVtIHN0YXlpbmcgYWxp
dmUKIGFzIHN1Y2ggYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpbGwgcmVzdWx0IGluIGEgbWVtb3J5
IGxlYWsuCiAKLVRoZXJlIGFyZSB0d28gcHJpbWFyeSBtZWNoYW5pc21zIHRvIGtlZXAgSlMgd3Jh
cHBlcnMgYWxpdmUgaW4gV2ViQ29yZToKK1RoZXJlIGFyZSB0d28gcHJpbWFyeSBtZWNoYW5pc21z
IHRvIGtlZXAgSlMgd3JhcHBlcnMgYWxpdmUgaW4gW1dlYkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNv
bS9XZWJLaXQvV2ViS2l0L3RyZWUvbWFpbi9Tb3VyY2UvV2ViQ29yZSk6CiAKICogKipWaXNpdCBD
aGlsZHJlbioqIC0gV2hlbiBKYXZhU2NyaXB0Q29yZeKAmXMgZ2FyYmFnZSBjb2xsZWN0aW9uIHZp
c2l0cyBzb21lIEpTIHdyYXBwZXIgZHVyaW5nCiAgICAgdGhlIFttYXJraW5nIHBoYXNlXShodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmFjaW5nX2dhcmJhZ2VfY29sbGVjdGlvbiNCYXNp
Y19hbGdvcml0aG0pLApAQCAtNzc5LDE1ICs4MDIsMjA5IEBAIFRoZXJlIGFyZSB0d28gcHJpbWFy
eSBtZWNoYW5pc21zIHRvIGtlZXAgSlMgd3JhcHBlcnMgYWxpdmUgaW4gV2ViQ29yZToKICogKipS
ZWFjaGFibGUgZnJvbSBPcGFxdWUgUm9vdHMqKiAtIFRlbGwgSmF2YVNjcmlwdENvcmXigJlzIGdh
cmJhZ2UgY29sbGVjdGlvbiB0aGF0IGEgSlMgd3JhcHBlciBpcyByZWFjaGFibGUKICAgICBmcm9t
IGFuIG9wYXF1ZSByb290IHdoaWNoIHdhcyBhZGRlZCB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290
cyBkdXJpbmcgbWFya2luZyBwaGFzZS4KIAotRklYTUU6IEV4cGxhaW4gaG93IHRvIGFkZCBuZXcg
SURMIGZpbGVzIGFuZCB3aGVyZSBkZXJpdmVkIHNvdXJjZXMgYXJlIGdlbmVyYXRlZC4KLQogIyMj
IFZpc2l0IENoaWxkcmVuCiAKLUZJWE1FOiBFeHBsYWluIGhvdyB2aXNpdCBjaGlsZHJlbiB3b3Jr
cy4KKypWaXNpdCBDaGlsZHJlbiogaXMgdGhlIG1lY2hhbmlzbSB3ZSB1c2Ugd2hlbiBhIEpTIHdy
YXBwZXIgbmVlZHMgdG8ga2VlcCBhbm90aGVyIEpTIHdyYXBwZXIgb3IKK1tKUyBvYmplY3RdKGh0
dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oKSBhbGl2ZS4KKworRm9yIGV4YW1wbGUsIFtgRXJyb3JF
dmVudGAgb2JqZWN0XShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4v
U291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaWRsKQordXNlcyB0aGlzIG1ldGhvZCBpbgor
W1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JFdmVudEN1c3RvbS5jcHBdKGh0dHBz
Oi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Vycm9yRXZlbnRDdXN0b20uY3BwKQordG8ga2VlcCBpdHMgImVycm9yIiBJREwg
YXR0cmlidXRlIGFzIGZvbGxvd3M6CisKK2BgYGNwcAordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgSlNFcnJvckV2ZW50Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKCkudmlzaXQodmlzaXRvcik7
Cit9CisKK0RFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOKEpTRXJyb3JFdmVudCk7Citg
YGAKKworSGVyZSwgYERFRklORV9WSVNJVF9BRERJVElPTkFMX0NISUxEUkVOYCBtYWNybyBnZW5l
cmF0ZXMgdGVtcGxhdGUgaW5zdGFuY2VzIG9mIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuCit3aGlj
aCBnZXRzIGNhbGxlZCBieSB0aGUgSmF2YVNjcmlwdENvcmUncyBnYXJiYWdlIGNvbGxlY3Rvci4K
K1doZW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHZpc2l0cyBhbiBpbnN0YW5jZSBgRXJyb3JFdmVu
dGAgb2JqZWN0LAoraXQgYWxzbyB2aXNpdHMgYHdyYXBwZWQoKS5vcmlnaW5hbEVycm9yKClgLCB3
aGljaCBpcyB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBvZiAiZXJyb3IiIGF0dHJpYnV0ZToKKworYGBg
Y3BwCitjbGFzcyBFcnJvckV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKKy4uLgorICAgIGNv
bnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIG9yaWdpbmFsRXJyb3IoKSBjb25zdCB7IHJldHVy
biBtX2Vycm9yOyB9CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkRXJyb3Io
KSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6ZWRFcnJvci5nZXQoKTsgfQorLi4uCisgICAgSlNW
YWx1ZUluV3JhcHBlZE9iamVjdCBtX2Vycm9yOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1fc2VyaWFsaXplZEVycm9yOworICAgIGJvb2wgbV90cmllZFRvU2VyaWFsaXplIHsg
ZmFsc2UgfTsKK307CitgYGAKKworTm90ZSB0aGF0IFtgSlNWYWx1ZUluV3JhcHBlZE9iamVjdGBd
KGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgpCit1c2VzIFtgV2Vha2BdKGh0
dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmgpLAord2hpY2ggZG9lcyBub3Qga2VlcCB0aGUgcmVmZXJlbmNlZCBv
YmplY3QgYWxpdmUgb24gaXRzIG93bi4KK1dlIGNhbid0IHVzZSBhIHJlZmVyZW5jZSB0eXBlIHN1
Y2ggYXMgW2BTdHJvbmdgXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21h
aW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgpCit3aGljaCBrZWVwcyB0aGUg
cmVmZXJlbmNlZCBvYmplY3QgYWxpdmUgb24gaXRzIG93biBzaW5jZSB0aGUgc3RvcmVkIEpTIG9i
amVjdCBtYXkgYWxzbyBoYXZlIHRoaXMgYEVycm9yRXZlbnRgIG9iamVjdCBzdG9yZWQgYXMgaXRz
IHByb3BlcnR5LgorQmVjYXVzZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaGFzIG5vIHdheSBvZiBr
bm93aW5nIG9yIGNsZWFyaW5nIHRoZSBgU3Ryb25nYCByZWZlcmVuY2UKK29yIHRoZSBwcm9wZXJ0
eSB0byBgRXJyb3JFdmVudGAgaW4gdGhpcyBoeXBvdGhldGljYWwgdmVyc2lvbiBvZiBgRXJyb3JF
dmVudGAsCitpdCB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIGNvbGxlY3QgZWl0aGVyIG9iamVjdCwg
cmVzdWx0aW5nIGluIGEgbWVtb3J5IGxlYWsuCisKK1RvIHVzZSB0aGlzIG1ldGhvZCBvZiBrZWVw
aW5nIGEgSmF2YVNjcmlwdCBvYmplY3Qgb3Igd3JhcHBlciBhbGl2ZSwgYWRkIGBKU0N1c3RvbU1h
cmtGdW5jdGlvbmAgdG8gdGhlIElETCBmaWxlLAordGhlbiBpbnRyb2R1Y2UgSlMqQ3VzdG9tLmNw
cCBmaWxlIHVuZGVyIFtTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qc10oaHR0cHM6Ly9naXRodWIu
Y29tL1dlYktpdC9XZWJLaXQvdHJlZS9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzKQor
YW5kIGltcGxlbWVudCBgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBKUypFdmVudDo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcilgIGFzIHNlZW4gYWJvdmUg
Zm9yIGBFcnJvckV2ZW50YC4KKworKip2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiBpcyBjYWxsZWQg
Y29uY3VycmVudGx5Kiogd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIHJ1bm5pbmcuCitBbnkgb3Bl
cmF0aW9uIGRvbmUgaW4gdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4gbmVlZHMgdG8gYmUgbXVsdGkt
dGhyZWFkIHNhZmUuCitGb3IgZXhhbXBsZSwgaXQgY2Fubm90IGluY3JlbWVudCBvciBkZWNyZW1l
bnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhIGBSZWZDb3VudGVkYCBvYmplY3QKK29yIGNyZWF0
ZSBhIG5ldyBgV2Vha1B0cmAgZnJvbSBgQ2FuTWFrZVdlYWtQdHJgIHNpbmNlIHRoZXNlIFdURiBj
bGFzc2VzIGFyZSBub3QgdGhyZWFkIHNhZmUuCiAKICMjIyBPcGFxdWUgUm9vdHMKIAotRklYTUU6
IEV4cGxhaW4gaG93IG9wYXF1ZSByb290cyB3b3JrLgorKlJlYWNoYWJsZSBmcm9tIE9wYXF1ZSBS
b290cyogaXMgdGhlIG1lY2hhbmlzbSB3ZSB1c2Ugd2hlbiB3ZSBoYXZlIGFuIHVuZGVybHlpbmcg
QysrIG9iamVjdCBhbmQgd2FudCB0byBrZWVwIEpTIHdyYXBwZXJzIG9mIG90aGVyIEMrKyBvYmpl
Y3RzIGFsaXZlLgorCitUbyBzZWUgd2h5LCBsZXQncyBjb25zaWRlciBhIFtgU3R5bGVTaGVldGAg
b2JqZWN0XShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsKS4KK1NvIGxvbmcgYXMgdGhpcyBvYmplY3QgaXMg
YWxpdmUsIHdlIGFsc28gbmVlZCB0byBrZWVwIHRoZSBET00gbm9kZSByZXR1cm5lZCBieSB0aGUg
YG93bmVyTm9kZWAgYXR0cmlidXRlLgorQWxzbywgdGhlIG9iamVjdCBpdHNlbGYgbmVlZHMgdG8g
YmUga2VwdCBhbGl2ZSBzbyBsb25nIGFzIHRoZSBvd25lciBub2RlIGlzIGFsaXZlCitzaW5jZSB0
aGlzIFtgU3R5bGVTaGVldGAgb2JqZWN0XSBjYW4gYmUgYWNjZXNzZWQgdmlhIFtgc2hlZXRgIElE
TCBhdHRyaWJ1dGVdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jdGhlLWxpbmtzdHls
ZS1pbnRlcmZhY2UpCitvZiB0aGUgb3duZXIgbm9kZS4KK0lmIHdlIHdlcmUgdG8gdXNlIHRoZSAq
dmlzaXQgY2hpbGRyZW4qIG1lY2hhbmlzbSwKK3dlIG5lZWQgdG8gdmlzaXQgZXZlcnkgSlMgd3Jh
cHBlciBvZiB0aGUgb3duZXIgbm9kZSB3aGVuZXZlciB0aGlzIGBTdHlsZVNoZWV0YCBvYmplY3Qg
aXMgdmlzaXRlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IsCithbmQgd2UgbmVlZCB0byB2aXNp
dCBldmVyeSBKUyB3cmFwcGVyIG9mIHRoZSBgU3R5bGVTaGVldGAgb2JqZWN0IHdoZW5ldmVyIGFu
IG93bmVyIG5vZGUgaXMgdmlzaXRlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCitCdXQgaW4g
b3JkZXIgdG8gZG8gc28sIHdlIG5lZWQgdG8gcXVlcnkgZXZlcnkgYERPTVdyYXBwZXJXb3JsZGAn
cyB3cmFwcGVyIG1hcCB0byBzZWUgaWYgdGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIuCitU
aGlzIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gdGhhdCBuZWVkcyB0byBoYXBwZW4gYWxsIHRo
ZSB0aW1lLAorYW5kIGNyZWF0ZXMgYSB0aWUgY291cGxpbmcgYmV0d2VlbiBgTm9kZWAgYW5kIGBT
dHlsZVNoZWV0YCBvYmplY3RzCitzaW5jZSBlYWNoIEpTIHdyYXBwZXIgb2JqZWN0cyBuZWVkIHRv
IGJlICBhd2FyZSBvZiBvdGhlciBvYmplY3RzJyBleGlzdGVuY2UuIAorCisqT3BhcXVlIHJvb3Rz
KiBzb2x2ZXMgdGhlc2UgcHJvYmxlbXMgYnkgbGV0dGluZyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Ig
a25vdyB0aGF0IGEgcGFydGljdWxhciBKYXZhU2NyaXB0IHdyYXBwZXIgbmVlZHMgdG8gYmUga2Vw
dCBhbGl2ZQorc28gbG9uZyBhcyB0aGUgZ2FyZ2FiZSBjb2xsZWN0b3IgaGFkIGVuY291bnRlcmVk
IHNwZWNpZmljIG9wYXF1ZSByb290KHMpIHRoaXMgSmF2YVNjcmlwdCB3cmFwcGVyIGNhcmVzIGFi
b3V0CitldmVuIGlmIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBkaWRuJ3QgdmlzaXQgdGhlIEphdmFT
Y3JpcHQgd3JhcHBlciBkaXJlY3RseS4KK0FuIG9wYXF1ZSByb290IGlzIHNpbXBseSBhIGB2b2lk
KmAgaWRlbnRpZmllciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Iga2VlcHMgdHJhY2sgb2YgZHVyaW5n
IGVhY2ggbWFya2luZyBwaGFzZSwKK2FuZCBpdCBkb2VzIG5vdCBjb25mb3JtIHRvIGEgc3BlY2lm
aWMgaW50ZXJmYWNlIG9yIGJlaGF2aW9yLgorSXQgY291bGQgaGF2ZSBiZWVuIGFuIGFyYml0cmFy
eSBpbnRlZ2VyIHZhbHVlIGJ1dCBgdm9pZCpgIGlzIHVzZWQgb3V0IG9mIGNvbnZlbmllbmNlIHNp
bmNlIHBvaW50ZXIgdmFsdWVzIG9mIGxpdmUgb2JqZWN0cyBhcmUgdW5pcXVlLgorCitJbiB0aGUg
Y2FzZSBvZiBhIGBTdHlsZVNoZWV0YCBvYmplY3QsIGBTdHlsZVNoZWV0YCdzIEphdmFTY3JpcHQg
d3JhcHBlciB0ZWxscyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdGhhdCBpdCBuZWVkcyB0byBiZSBr
ZXB0IGFsaXZlCitiZWNhdXNlIGFuIG9wYXF1ZSByb290IGl0IGNhcmVzIGFib3V0IGhhcyBiZWVu
IGVuY291bnRlcmVkIHdoZW5ldmVyIGBvbndlck5vZGVgIGlzIHZpc2l0ZWQgYnkgdGhlIGdhcmJh
Z2UgY29sbGVjdG9yLgorCitJbiB0aGUgbW9zdCBzaW1wbGlzdGljIG1vZGVsLCB0aGUgb3BhcXVl
IHJvb3QgZm9yIHRoaXMgY2FzZSB3aWxsIGJlIHRoZSBgb253ZXJOb2RlYCBpdHNlbGYuCitIb3dl
dmVyLCBlYWNoIGBOb2RlYCBvYmplY3QgYWxzbyBoYXMgdG8ga2VlcCBpdHMgcGFyZW50LCBzaWJs
aW5ncywgYW5kIGNoaWxkcmVuIGFsaXZlLgorVG8gdGhpcyBlbmQsIGVhY2ggYE5vZGVgIGRlc2ln
bmF0ZXMgdGhlIFtyb290XShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdHJl
ZS1yb290KSBub2RlIGFzIGl0cyBvcGFxdWUgcm9vdC4KK0JvdGggYE5vZGVgIGFuZCBgU3R5bGVT
aGVldGAgb2JqZWN0cyB1c2UgdGhpcyB1bmlxdWUgb3BhcXVlIHJvb3QgYXMgYSB3YXkgb2YgY29t
bXVuaWNhdGluZyB3aXRoIHRoZSBnYXJnYWdlIGNvbGxlY3Rvci4KKworRm9yIGV4YW1wbGUsIGBT
dHlsZVNoZWV0YCBvYmplY3QgaW5mb3JtcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb2YgdGhpcyBv
cGFxdWUgcm9vdCB3aGVuIGl0J3MgYXNrZWQgdG8gdmlzaXQgaXRzIGNoaWxkcmVuIGluCitbSlNT
dHlsZVNoZWV0Q3VzdG9tLmNwcF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxv
Yi9tYWluL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAp
OgorCitgYGBjcHAKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTU3R5bGVTaGVl
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3JhcHBlZCgpKSk7Cit9CitgYGAKKworSGVyZSwgYHZv
aWQqIHJvb3QoU3R5bGVTaGVldCopYCByZXR1cm5zIHRoZSBvcGFxdWUgcm9vdCBvZiB0aGUgYFN0
eWxlU2hlZXRgIG9iamVjdCBhcyBmb2xsb3dzOgorCitgYGBjcHAKK2lubGluZSB2b2lkKiByb290
KFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgaWYgKENTU0ltcG9ydFJ1bGUqIG93bmVy
UnVsZSA9IHN0eWxlU2hlZXQtPm93bmVyUnVsZSgpKQorICAgICAgICByZXR1cm4gcm9vdChvd25l
clJ1bGUpOworICAgIGlmIChOb2RlKiBvd25lck5vZGUgPSBzdHlsZVNoZWV0LT5vd25lck5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIHJvb3Qob3duZXJOb2RlKTsKKyAgICByZXR1cm4gc3R5bGVTaGVl
dDsKK30KK2BgYAorCitBbmQgdGhlbiBpbiBgSlNTdHlsZVNoZWV0LmNwcGAgKGxvY2F0ZWQgYXQg
YFdlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHlsZVNoZWV0LmNw
cGAgZm9yIGRlYnVnIGJ1aWxkcykKK2BKU1N0eWxlU2hlZXRPd25lcmAgKGEgaGVscGVyIEphdmFT
Y3JpcHQgb2JqZWN0IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdG9yKSB0
ZWxscyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKK3RoYXQgYEpTU3R5bGVTaGVldGAgc2hvdWxkIGJl
IGtlcHQgYWxpdmUgc28gbG9uZyBhcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaGFkIGVuY291bnRl
cmVkIHRoaXMgYFN0eWxlU2hlZXRgJ3Mgb3BhcXVlIHJvb3Q6CisKK2BgYGNwcAorYm9vbCBKU1N0
eWxlU2hlZXRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQoreworICAgIGF1dG8qIGpzU3R5bGVTaGVldCA9IGpzQ2FzdDxK
U1N0eWxlU2hlZXQqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgdm9pZCogcm9vdCA9
IFdlYkNvcmU6OnJvb3QoJmpzU3R5bGVTaGVldC0+d3JhcHBlZCgpKTsKKyAgICBpZiAoVU5MSUtF
TFkocmVhc29uKSkKKyAgICAgICAgKnJlYXNvbiA9ICJSZWFjaGFibGUgZnJvbSBqc1N0eWxlU2hl
ZXQiOworICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKK30KK2Bg
YAorCitHZW5lcmFsbHksIHVzaW5nIG9wYXF1ZSByb290cyBhcyBhIHdheSBvZiBrZWVwaW5nIEph
dmFTY3JpcHQgd3JhcHBlcnMgaW52b2x2ZSB0d28gc3RlcHM6CisgMS4gQWRkIG9wYXF1ZSByb290
cyBpbiBgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW5gLgorIDIuIFJldHVybiB0cnVlIGluIGBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290c2Agd2hlbiByZWxldmFudCBvcGFxdWUgcm9vdHMgYXJlIGZv
dW5kLgorCitUaGUgZmlyc3Qgc3RlcCBjYW4gYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGFmb3Jl
bWVudGlvZW5kIGBKU0N1c3RvbU1hcmtGdW5jdGlvbmAgd2l0aCBgdmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW5gLgorQWx0ZXJuYXRpdmVseSBhbmQgbW9yZSBwcmVmZXJhYmx5LCBgR2VuZXJhdGVBZGRP
cGFxdWVSb290YCBjYW4gYmUgYWRkZWQgdG8gdGhlIElETCBpbnRlcmZhY2UgdG8gYXV0by1nZW5l
cmF0ZSB0aGlzIGNvZGUuCitGb3IgZXhhbXBsZSwgW0Fib3J0Q29udHJvbGxlci5pZGxdKGh0dHBz
Oi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9kb20v
QWJvcnRDb250cm9sbGVyLmlkbCkKK21ha2VzIHVzZSBvZiB0aGlzIElETCBhdHRyaWJ1dGUgYXMg
Zm9sbG93czoKKworYGBgY3BwCitbCisgICAgRXhwb3NlZD0oV2luZG93LFdvcmtlciksCisgICAg
R2VuZXJhdGVBZGRPcGFxdWVSb290PXNpZ25hbAorXSBpbnRlcmZhY2UgQWJvcnRDb250cm9sbGVy
IHsKKyAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gY29uc3RydWN0b3IoKTsK
KworICAgIFtTYW1lT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1dGUgQWJvcnRTaWduYWwgc2lnbmFs
OworCisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdF0gdW5kZWZpbmVkIGFib3J0KG9wdGlvbmFs
IGFueSByZWFzb24pOworfTsKK2BgYAorCitIZXJlLCBgc2luZ2FsYCBpcyBhIHB1YmxpYyBtZW1i
ZXIgZnVuY3Rpb24gZnVudGlvbiBvZgordGhlIFt1bmRlcmx5aW5nIEMrKyBvYmplY3RdKGh0dHBz
Oi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9kb20v
QWJvcnRDb250cm9sbGVyLmgpOgorCitgYGBjcHAKK2NsYXNzIEFib3J0Q29udHJvbGxlciBmaW5h
bCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPEFib3J0Q29udHJv
bGxlcj4geworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQWJvcnRDb250cm9sbGVyKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFib3J0Q29udHJvbGxlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmKTsKKyAgICB+QWJvcnRDb250cm9sbGVyKCk7CisKKyAgICBBYm9ydFNpZ25h
bCYgc2lnbmFsKCk7CisgICAgdm9pZCBhYm9ydChKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSByZWFzb24pOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEFib3J0Q29udHJvbGxlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisKKyAgICBSZWY8QWJvcnRTaWduYWw+IG1fc2lnbmFs
OworfTsKK2BgYAorCitXaGVuIGBHZW5lcmF0ZUFkZE9wYXF1ZVJvb3RgIGlzIHNwZWNpZmllZCB3
aXRob3V0IGFueSB2YWx1ZSwgaXQgYXV0b21hdGljYWxseSBjYWxscyBgb3BhcXVlUm9vdCgpYCBp
bnN0ZWFkLgorCitMaWtlIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLCAqKmFkZGluZyBvcGFxdWUg
cm9vdHMgaGFwcGVuIGNvbmN1cnJlbnRseSoqIHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBydW5u
aW5nLgorQW55IG9wZXJhdGlvbiBkb25lIGluIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuIG5lZWRz
IHRvIGJlIG11bHRpLXRocmVhZCBzYWZlLgorRm9yIGV4YW1wbGUsIGl0IGNhbm5vdCBpbmNyZW1l
bnQgb3IgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYSBgUmVmQ291bnRlZGAgb2Jq
ZWN0CitvciBjcmVhdGUgYSBuZXcgYFdlYWtQdHJgIGZyb20gYENhbk1ha2VXZWFrUHRyYCBzaW5j
ZSB0aGVzZSBXVEYgY2xhc3NlcyBhcmUgbm90IHRocmVhZCBzYWZlLgorCitUaGUgc2Vjb25kIHN0
ZXAgY2FuIGJlIGFjaGl2ZWQgYnkgYWRkaW5nIGBDdXN0b21Jc1JlYWNoYWJsZWAgdG8gdGhlIElE
TCBmaWxlIGFuZAoraW1wbGVtZW50aW5nIGBKUypPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHNgIGluIEpTKkN1c3RvbS5jcHAgZmlsZS4KK0FsdGVybmF0aXZlbHkgYW5kIG1vcmUgcHJl
ZmVyYWJseSwgYEdlbmVyYXRlSXNSZWFjaGFibGVgIGNhbiBiZSBhZGRlZCB0byBJREwgZmlsZSB0
byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoaXMgY29kZQord2l0aCB0aGUgZm9sbG93aW5nIHZh
bHVlczoKKyAqIE5vIHZhbHVlIC0gQWRkcyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYHJvb3QoVCop
YCBvbiB0aGUgdW5kZXJseWluZyBDKysgb2JqZWN0IG9mIHR5cGUgVCBhcyB0aGUgb3BhcXVlIHJv
b3QuCisgKiBgSW1wbGAgLSBBZGRzIHRoZSB1bmRlcmx5aW5nIEMrKyBvYmplY3QgYXMgdGhlIG9w
YXF1ZSByb290LgorICogYFJlYWNoYWJsZUZyb21ET01XaW5kb3dgIC0gQWRkcyBhIFtgRE9NV2lu
ZG93YF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgpCisgICAgcmV0dXJuZWQgYnkgYHdpbmRvdygpYCBhcyB0
aGUgb3BhcXVlIHJvb3QuCisgKiBgUmVhY2hhYmxlRnJvbU5hdmlnYXRvcmAgLSBBZGRzIGEgW2BO
YXZpZ2F0b3JgXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291
cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaCkKKyAgICByZXR1cm5lZCBieSBgbmF2aWdhdG9y
KClgIGFzIHRoZSBvcGFxdWUgcm9vdC4KKyAqIGBJbXBsRG9jdW1lbnRgIC0gQWRkcyBhIFtgRG9j
dW1lbnRgXShodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgpCisgICAgcmV0dXJuZWQgYnkgYGRvY3VtZW50KClgIGFz
IHRoZSBvcGFxdWUgcm9vdC4KKyAqIGBJbXBsRWxlbWVudFJvb3RgIC0gQWRkcyB0aGUgcm9vdCBu
b2RlIG9mIGEgW2BFbGVtZW50YF0oaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxv
Yi9tYWluL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgpCisgICAgcmV0dXJuZWQgYnkgYGVs
ZW1lbnQoKWAgYXMgdGhlIG9wYXF1ZSByb290LgorICogYEltcGxPd25lck5vZGVSb290YCAtIEFk
ZHMgdGhlIHJvb3Qgbm9kZSBvZiBhIFtgTm9kZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQv
V2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oKQorICAgIHJldHVybmVk
IGJ5IGBvd25lck5vZGUoKWAgYXMgdGhlIG9wYXF1ZSByb290LgorICogYEltcGxTY3JpcHRFeGVj
dXRpb25Db250ZXh0YCAtIEFkZHMgYSBbYFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRgXShodHRwczov
L2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCkKKyAgICByZXR1cm5lZCBieSBgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpYCBhcyB0aGUgb3BhcXVlIHJvb3QuCisKK1NpbWlsYXIgdG8gdmlzaXRpbmcgY2hp
bGRyZW4gb3IgYWRkaW5nIG9wYXF1ZSByb290cywgKip3aGV0aGVyIGFuIG9wYXF1ZSByb290IGlz
IHJlYWNoYWJsZSBvciBub3QgaXMgY2hlY2tlZCBpbiBwYXJhbGxlbCoqLgorSG93ZXZlciwgaXQg
aGFwcGVucyAqKndoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBwYXVzZWQqKiB1bmxpa2UgdmlzaXRp
bmcgY2hpbGRyZW4gb3IgYWRkaW5nIG9wYXF1ZSByb290cywKK3doaWNoIGhhcHBlbiBjb25jdXJy
ZW50bHkgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIHJ1bm5pbmcuCitUaGlzIG1lYW5zIHRoYXQg
YW55IG9wZXJhdGlvbiBkb25lIGluIGBKUypPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHNgCitvciBhbnkgZnVuY3Rpb24gY2FsbGVkIGJ5IEdlbmVyYXRlSXNSZWFjaGFibGUgY2Fubm90
IGhhdmUgdGhyZWFkIHVuc2FmZSBzaWRlIGVmZmVjdHMKK3N1Y2ggYXMgaW5jcmVtZW50aW5nIG9y
IGRlY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGEgYFJlZkNvdW50ZWRgIG9iamVj
dAorb3IgY3JlYXRpbmcgYSBuZXcgYFdlYWtQdHJgIGZyb20gYENhbk1ha2VXZWFrUHRyYCBzaW5j
ZSB0aGVzZSBXVEYgY2xhc3NlcycgbXV0YXRpb24gb3BlcmF0aW9ucyBhcmUgbm90IHRocmVhZCBz
YWZlLgorCitGSVhNRTogRGlzY3VzcyBBY3RpdmUgRE9NIG9iamVjdHMKIAogIyMgSW5zZXJ0aW5n
IG9yIFJlbW92aW5nIERPTSBOb2RlcyAKIAo=
</data>
<flag name="commit-queue"
          id="480413"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>