<?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>234583</bug_id>
          
          <creation_ts>2021-12-21 17:54:11 -0800</creation_ts>
          <short_desc>Encapsulate gradient color stops into a self contained class</short_desc>
          <delta_ts>2021-12-27 11:54:54 -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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826177</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 17:54:11 -0800</bug_when>
    <thetext>Rather than having the gradient color stop vector and a separate m_stopsSorted bit in Gradient, it would be slightly nicer to have a encapsulated object to represent the stops set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826315</commentid>
    <comment_count>1</comment_count>
      <attachid>447809</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-22 09:45:18 -0800</bug_when>
    <thetext>Created attachment 447809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826316</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-22 09:49:26 -0800</bug_when>
    <thetext>I think this is an improvement, but I would eventually like to make Gradient immutable after construction if we can, to simplify things further.

The only place that remains that uses mutation is CanvasGradient, but since mutation invalidates everything anyway, we just store both a GradientColorStops and a lazy created Gradient on CanvasGradient, and just invalidate the Gradient when ever a stop is added.

If we made Gradient immutable, we could simplify sorting and the hash cache by always sorting on creation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826317</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-22 09:49:31 -0800</bug_when>
    <thetext>I think this is an improvement, but I would eventually like to make Gradient immutable after construction if we can, to simplify things further.

The only place that remains that uses mutation is CanvasGradient, but since mutation invalidates everything anyway, we just store both a GradientColorStops and a lazy created Gradient on CanvasGradient, and just invalidate the Gradient when ever a stop is added.

If we made Gradient immutable, we could simplify sorting and the hash cache by always sorting on creation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826320</commentid>
    <comment_count>4</comment_count>
      <attachid>447811</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-22 09:55:16 -0800</bug_when>
    <thetext>Created attachment 447811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826574</commentid>
    <comment_count>5</comment_count>
      <attachid>447884</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-23 11:00:06 -0800</bug_when>
    <thetext>Created attachment 447884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826624</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-23 13:36:14 -0800</bug_when>
    <thetext>Committed r287411 (245546@main): &lt;https://commits.webkit.org/245546@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447884.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826625</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-23 13:37:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/86863966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826724</commentid>
    <comment_count>8</comment_count>
      <attachid>447884</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-24 08:57:42 -0800</bug_when>
    <thetext>Comment on attachment 447884
Patch

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

&gt; Source/WebCore/platform/graphics/GradientColorStops.h:91
&gt; +    template&lt;typename MapFunction&gt; GradientColorStops mapColors(MapFunction&amp;&amp; mapFunction) const

I suggest const MapFunction&amp; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826843</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-25 19:53:06 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 447884 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447884&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GradientColorStops.h:91
&gt; &gt; +    template&lt;typename MapFunction&gt; GradientColorStops mapColors(MapFunction&amp;&amp; mapFunction) const
&gt; 
&gt; I suggest const MapFunction&amp; here.

I think that would disallow stateful lambdas, which can be quite useful. What do you see as the benefit of a const reference over the universal reference here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826967</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-27 11:54:54 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Darin Adler from comment #8)
&gt; &gt; I suggest const MapFunction&amp; here.
&gt; 
&gt; I think that would disallow stateful lambdas, which can be quite useful.
&gt; What do you see as the benefit of a const reference over the universal
&gt; reference here?

I thought the const reference would make it clear that this function does not take ownership of the passed in function, thus the function can be reused elsewhere.

It didn’t occur to me that taking a const T&amp; prevents the use of stateful lambdas or that this is a universal reference, rather than an rvalue reference. I wonder what our general design pattern should be. I was thinking about when we use an rvalue reference for WTF::Function: Function&amp;&amp; vs. const Function&amp;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447809</attachid>
            <date>2021-12-22 09:45:18 -0800</date>
            <delta_ts>2021-12-22 11:00:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234583-20211222094518.patch</filename>
            <type>text/plain</type>
            <size>44245</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAyMS0xMi0yMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgZ3JhZGllbnQg
Y29sb3Igc3RvcHMgaW50byBhIHNlbGYgY29udGFpbmVkIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIG1vc3QgdXNlcyBvZiBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGggbmV3IEdyYWRpZW50Q29sb3JTdG9wcyBjbGFzcy4K
KworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGUuCisKKyAgICAgICAgKiBjc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyk6CisgICAg
ICAgIFJlcGxhY2Ugc29tZSB1c2FnZSBvZiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGgg
R3JhZGllbnRDb2xvclN0b3BzLiBXaGlsZSBoZXJlLAorICAgICAgICBvcHRpbWl6ZSBjb2xvciBm
aWx0ZXIgdHJhbnNmb3JtYXRpb24gdG8gb25seSBoYXBwZW4gd2hlbiB0aGVyZSBpcyBjb2xvciBm
aWx0ZXIsCisgICAgICAgIHJlbW92aW5nIGV4dHJhIHVubmVjZXNzYXJ5IGNvcGllcyBvZiBDb2xv
cnMuCisKKyAgICAgICAgQWxzbyB1dGlsaXplcyB0aGUgR3JhZGllbnRDb2xvclN0b3BzOjpTb3J0
ZWQgdHlwZSB0byBjcmVhdGUgYSBHcmFkaWVudENvbG9yU3RvcHMKKyAgICAgICAgb2JqZWN0IHRo
YXQgaGFzIHRoZSBpc1NvcnRlZCBiaXQgc2V0LgorIAorICAgICAgICAoV2ViQ29yZTo6Q1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIFRoZSBjYWxs
cyB0byBzZXRTb3J0ZWRDb2xvclN0b3BzIGlzIG5vIGxvbmdlciBuZWVkZWQsIGFzIHRoZSBHcmFk
aWVudENvbG9yU3RvcHMKKyAgICAgICAgbm93IG1haW50YWlucyB0aGF0IHN0YXRlLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
CisgICAgICAgIE1vdmUgZGVmaW5pdGlvbiBvZiBhZGQoSGFzaGVyJiwgQ29sb3IpIGhlcmUsIHdo
ZXJlIGl0IG1ha2VzIHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdy
YWRpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgTW92ZSBkZWZpbml0aW9uIG9mIGFkZChIYXNo
ZXImLCBGbG9hdFBvaW50KSBoZXJlLCB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcmF0aGVyIHRoYW4K
KyAgICAgICAga2VlcGluZyBpdCBpbiBHcmFkaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
ZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U29ydGVkQ29sb3JTdG9wcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgUmVwbGFjZSBDb2xvclN0b3BWZWN0b3Igd2l0aCBHcmFkaWVudENvbG9yU3RvcHMu
IFRoaXMgYWxsb3dzIHJlbW92aW5nIHRoZSBtX3N0b3BzU29ydGVkCisgICAgICAgIGJpdCwgYXMg
dGhlIG5ldyBjbGFzcyBtYWludGFpbnMgdGhhdCwgYXMgd2VsbCBhcyByZW1vdmluZyBzZXRTb3J0
ZWRDb2xvclN0b3BzIHNpbmNlCisgICAgICAgIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGp1c3Qg
Y3JlYXRpbmcgdGhlIEdyYWRpZW50IHdpdGggYSBHcmFkaWVudENvbG9yU3RvcHMgdGhhdCBrbm93
cworICAgICAgICBpdCBpcyBzb3J0ZWQgKHVzaW5nIHRoZSBHcmFkaWVudENvbG9yU3RvcHM6OlNv
cnRlZCBoZWxwZXIpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xv
clN0b3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIE1vdmUgZGVmaW5pdGlv
biBvZiBhZGQoSGFzaGVyJiwgR3JhZGllbnRDb2xvclN0b3ApIGhlcmUsIHdoZXJlIGl0IG1ha2Vz
IHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3BzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpHcmFkaWVudENvbG9yU3RvcHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjphZGRDb2xvclN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpzb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c29ydGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudENvbG9yU3RvcHM6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRDb2xvclN0b3BzOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dENvbG9yU3RvcHM6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6Om1hcENvbG9ycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OnN0b3BzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Q29sb3JTdG9w
czo6dmFsaWRhdGVJc1NvcnRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENv
bG9yU3RvcHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OmRlY29kZSk6CisgICAgICAgIEVuY2Fwc3VsYXRlIHN0YXRlIGFuZCBmdW5jdGlvbmFs
aXR5IG9mIHRoZSBncmFkaWVudCBjb2xvciBzdG9wIGxpc3QsIG1haW50YWluaW5nCisgICAgICAg
IHRoZSBzb3J0ZWQgc3RhdGUsIGFuZCBwcm92aWRpbmcgYSBwbGVhc2VudCBBUEkgdG8gd29yayB3
aXRoLiBJbiB0aGUgZnV0dXJlLCB0aGlzCisgICAgICAgIHdpbGwgYmUgYSBnb29kIHBsYWNlIHRv
IGFkZCBmdW5jdGlvbnMgdG8gYW5hbHl6ZSBhbmQgdHJhbnNmb3JtIHRoZSBsaXN0IGZvciBvcHRp
bWl6aW5nCisgICAgICAgIHdoYXQgY2FuIHVzZSB0aGUgZ3JhZGllbnQgZmFzdCBwYXRocy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIHRoZSBuZXcgbmFtZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpw
YWludCk6CisgICAgICAgIEVuc3VyZSB0aGUgY29sb3Igc3RvcHMgcGFzc2VkIHRvIHRoZSBncmFk
aWVudCByZW5kZXJlciBhcmUgc29ydGVkIHVzaW5nIHRoZSBzb3J0ZWQoKQorICAgICAgICBoZWxw
ZXIsIHdoaWNoIGRvZXMgYW4gaW5wbGFjZSBzb3J0IGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVy
ZXJDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OkdyYWRpZW50UmVu
ZGVyZXJDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OnBpY2tTdHJh
dGVneSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VH
cmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1h
a2VTaGFkaW5nIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JT
dG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3BzLgorCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OnN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKToKKyAgICAg
ICAgQWRkIGVhcmx5IHJldHVybiBpZiB0aGVyZSBpcyBubyBjb2xvciBmaWx0ZXIgdG8gYXBwbHks
IGFuZCB1dGlsaXplIHRoZSBtYXBDb2xvcnMoKQorICAgICAgICBmdW5jdGlvbiB0byB1cGRhdGUg
dGhlIGNvbG9ycyBpZiB0aGVyZSBpcy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpidWlsZEdyYWRpZW50IGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6YnVpbGRHcmFk
aWVudCBjb25zdCk6CisgICAgICAgIFJlbW92ZSBzb21lIGV4dHJhbmVvdXMgdHlwZSBuYW1lcy4K
KworICAgICAgICAqIHN2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50QXR0cmlidXRlczo6c3RvcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRBdHRyaWJ1dGVzOjpzZXRTdG9wcyk6CisgICAgICAgICogc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3Rv
cHMpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgUmVwbGFj
ZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3Bz
LgorCiAyMDIxLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIE5vdGlmaWNhdGlvbiBpZGVudGlmaWVycyBiZSBhIFVVSUQgc3RyaW5nIGluc3Rl
YWQgb2YgYSB1aW50NjRfdApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyODczMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYy
LDYgKzE0NjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3AuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4OCw2ICs0MDg4
LDcgQEAKIAkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0
MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE5Q0RGMjI3NkZG
QzZEMDA1M0Y3MzQgLyogR3JhZGllbnRSZW5kZXJlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0RGMDI3NkZGQjI2MDA1M0Y3MzQgLyogR3Jh
ZGllbnRSZW5kZXJlckNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkMxOUNERjQyNzcxMDYzOTAwNTNGNzM0IC8qIEdyYWRpZW50Q29sb3JTdG9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0RG
MzI3NzEwNjM5MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3AuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzE5Q0UyQjI3NzJCRjdCMDA1M0Y3
MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0UyOTI3NzJCRjc3MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xv
clN0b3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMxQTdEOTgxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIuaCAqLzsgfTsKIAkJQkMyMjcyODcwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVm
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMyMjcyODYwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVmbGVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMjI3MkEyMEU4MkU4N0Mw
MEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzIyNzJBMTBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTEzNiw2
ICsxNTEzNyw3IEBACiAJCUJDMTlDREVGMjc2RkZCMjYwMDUzRjczNCAvKiBHcmFkaWVudFJlbmRl
cmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGllbnRSZW5kZXJlckNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxOUNERjAyNzZGRkIyNjAwNTNGNzM0IC8qIEdy
YWRpZW50UmVuZGVyZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFkaWVudFJlbmRlcmVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxOUNERjMyNzcxMDYzOTAwNTNGNzM0IC8q
IEdyYWRpZW50Q29sb3JTdG9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYWRpZW50Q29sb3JTdG9wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMTlDRTI5Mjc3MkJGNzcwMDUzRjczNCAv
KiBHcmFkaWVudENvbG9yU3RvcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhZGllbnRDb2xvclN0b3Bz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUE3RDk1MThGQ0I1QjAwMDQyMTg3
OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUE3RDk2MThGQ0I1QjAw
MDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzIwRkI3RTBDMEU4RTZDMDBE
MTQ0N0YgLyogSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc4NSw2ICsyODc4Nyw3IEBACiAJCQkJ
QkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLywKIAkJCQlCQzUzQzVG
NDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCAqLywKIAkJCQlCQzE5Q0RGMzI3NzEwNjM5
MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3AuaCAqLywKKwkJCQlCQzE5Q0UyOTI3NzJCRjc3
MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggKi8sCiAJCQkJMkQyRkMwNTYxNDYwQ0Q2
RjAwMjYzNjMzIC8qIEdyYWRpZW50SW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU3MTQ2MENENkYw
MDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmggKi8sCiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5jcHAgKi8sCkBAIC0zNzU3MCw2ICszNzU3Myw3IEBACiAJ
CQkJQkU5MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEMUY5QjFDMjcwMjRCQzIwMDYxN0VCNiAvKiBUcmFja1ByaXZhdGVCYXNl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkFDMzBGRTE4NEZCMTQ1MDA4QzRGMUUgLyog
VHJhaWxpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzE5Q0UyQjI3NzJCRjdCMDA1
M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTYwNzEz
MjFCRDgzMDhCMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUNEM0VFRjQxMjU3OTlGRDkwMDY1NjNCQiAvKiBUcmFuc2ZlckZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUU5MTFDNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRp
b25NYXRyaXguaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMTIgKzMwMCwxNCBAQCBj
bGFzcyBDb25pY0dyYWRpZW50QWRhcHRlciB7IChwdWJsaWMpCiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFkaWVudEFkYXB0ZXI+Ci1HcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZW50QWRhcHRlciwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQorR3JhZGllbnRDb2xv
clN0b3BzIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZW50QWRhcHRlciwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0
KQogeworICAgIGJvb2wgaGFzQ29sb3JGaWx0ZXIgPSBzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVy
KCk7CisKICAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRp
ZW50IHx8IG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewot
ICAgICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgR3JhZGll
bnRDb2xvclN0b3BzOjpWZWN0b3IgcmVzdWx0OwogICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3N0b3BzLnNpemUoKSk7Ci0KKyAgICAgICAgCiAgICAgICAgIGZvciAoYXV0
byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldDsKICAgICAgICAg
ICAgIGlmIChzdG9wLnBvc2l0aW9uLT5pc1BlcmNlbnRhZ2UoKSkKQEAgLTMxMywxNyArMzE1LDE0
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
bwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AucG9zaXRp
b24tPmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogCi0gICAgICAgICAgICBD
b2xvciBjb2xvciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKLSAgICAgICAgICAgIGlmIChzdHlsZS5o
YXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICAgICAgc3R5bGUuYXBwbGVDb2xvckZp
bHRlcigpLnRyYW5zZm9ybUNvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoeyBvZmZzZXQsIGNvbG9yIH0pOworICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCh7IG9mZnNldCwgaGFzQ29sb3JGaWx0ZXIgPyBzdHlsZS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihzdG9wLnJlc29sdmVkQ29sb3IpIDogc3RvcC5yZXNvbHZlZENvbG9yIH0pOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChyZXN1bHQuYmVnaW4oKSwgcmVz
dWx0LmVuZCgpLCBbXSAoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGll
bnQ6OkNvbG9yU3RvcCYgYikgeworICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJlc3VsdC5iZWdp
bigpLCByZXN1bHQuZW5kKCksIFtdIChjb25zdCBHcmFkaWVudENvbG9yU3RvcCYgYSwgY29uc3Qg
R3JhZGllbnRDb2xvclN0b3AmIGIpIHsKICAgICAgICAgICAgIHJldHVybiBhLm9mZnNldCA8IGIu
b2Zmc2V0OwogICAgICAgICB9KTsKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gR3JhZGllbnRDb2xvclN0b3BzOjpTb3J0ZWQgeyBXVEZNb3ZlKHJlc3VsdCkgfTsKICAg
ICB9CiAKICAgICBzaXplX3QgbnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKQEAgLTMzNCwxMiAr
MzMzLDggQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21w
dXRlU3RvCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CiAgICAg
ICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogCi0gICAgICAgIENvbG9yIGNvbG9yID0gc3Rv
cC5yZXNvbHZlZENvbG9yOwotICAgICAgICBpZiAoc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigp
KQotICAgICAgICAgICAgc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpLnRyYW5zZm9ybUNvbG9yKGNv
bG9yKTsKKyAgICAgICAgc3RvcHNbaV0uY29sb3IgPSBoYXNDb2xvckZpbHRlciA/IHN0eWxlLmNv
bG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN0b3AucmVzb2x2ZWRDb2xvcikgOiBzdG9wLnJlc29s
dmVkQ29sb3I7CiAKLSAgICAgICAgc3RvcHNbaV0uY29sb3IgPSBjb2xvcjsKLQogICAgICAgICBp
ZiAoc3RvcC5wb3NpdGlvbikgewogICAgICAgICAgICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9ICpz
dG9wLnBvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsdWUuaXNQZXJjZW50YWdl
KCkpCkBAIC01NTQsMTIgKzU0OSwxMiBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dy
YWRpZW50VmFsdWU6OmNvbXB1dGVTdG8KICAgICBpZiAoc3RvcHMuc2l6ZSgpID4gMSAmJiAoKnN0
b3BzLmZpcnN0KCkub2Zmc2V0IDwgMCB8fCAqc3RvcHMubGFzdCgpLm9mZnNldCA+IDEpKQogICAg
ICAgICBncmFkaWVudEFkYXB0ZXIubm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFu
Z2Uoc3RvcHMsIG1fY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKTsKICAgICAKLSAgICBHcmFkaWVu
dDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICBHcmFkaWVudENvbG9yU3RvcHM6OlZlY3Rv
ciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMuc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCh7ICpzdG9wLm9mZnNldCwgc3RvcC5jb2xvciB9KTsKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCh7ICpzdG9wLm9mZnNldCwgV1RGTW92ZShzdG9wLmNvbG9yKSB9KTsKIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEdyYWRpZW50Q29sb3JTdG9wczo6U29ydGVk
IHsgV1RGTW92ZShyZXN1bHQpIH07CiB9CiAKIHN0YXRpYyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1
ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgaXNI
b3Jpem9udGFsKQpAQCAtODY3LDkgKzg2Miw3IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUgogICAgIExpbmVhckdyYWRpZW50QWRhcHRlciBh
ZGFwdGVyIHsgZGF0YSB9OwogICAgIGF1dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRlciwg
Y29udmVyc2lvbkRhdGEsIHJlbmRlcmVyLnN0eWxlKCksIDEpOwogCi0gICAgYXV0byBncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0
aG9kKCkpOwotICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoc3RvcHMp
KTsKLSAgICByZXR1cm4gZ3JhZGllbnQ7CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RG
TW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCksIEdyYWRpZW50U3ByZWFkTWV0
aG9kOjpQYWQsIFdURk1vdmUoc3RvcHMpKTsKIH0KIAogYm9vbCBDU1NMaW5lYXJHcmFkaWVudFZh
bHVlOjplcXVhbHMoY29uc3QgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CkBA
IC0xMjAxLDkgKzExOTQsNyBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6
OmNyZWF0ZUdyYWRpZW50KFIKICAgICBSYWRpYWxHcmFkaWVudEFkYXB0ZXIgYWRhcHRlciB7IGRh
dGEgfTsKICAgICBhdXRvIHN0b3BzID0gY29tcHV0ZVN0b3BzKGFkYXB0ZXIsIGNvbnZlcnNpb25E
YXRhLCByZW5kZXJlci5zdHlsZSgpLCBtYXhFeHRlbnQpOwogCi0gICAgYXV0byBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9k
KCkpOwotICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoc3RvcHMpKTsK
LSAgICByZXR1cm4gZ3JhZGllbnQ7CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RGTW92
ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCksIEdyYWRpZW50U3ByZWFkTWV0aG9k
OjpQYWQsIFdURk1vdmUoc3RvcHMpKTsKIH0KIAogYm9vbCBDU1NSYWRpYWxHcmFkaWVudFZhbHVl
OjplcXVhbHMoY29uc3QgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0x
Mjc1LDkgKzEyNjYsNyBAQCBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlR3JhZGllbnQoUmUKICAgICBDb25pY0dyYWRpZW50QWRhcHRlciBhZGFwdGVyOwogICAgIGF1
dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRlciwgY29udmVyc2lvbkRhdGEsIHJlbmRlcmVy
LnN0eWxlKCksIDEpOwogCi0gICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RG
TW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCkpOwotICAgIGdyYWRpZW50LT5z
ZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoc3RvcHMpKTsKLSAgICByZXR1cm4gZ3JhZGllbnQ7
CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBv
bGF0aW9uTWV0aG9kKCksIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIFdURk1vdmUoc3RvcHMp
KTsKIH0KIAogYm9vbCBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDb25p
Y0dyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5oCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3Mg
Q1NTR3JhZGllbnRWYWx1ZSA6IHB1YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlCiAgICAgewog
ICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4gR3JhZGllbnQ6
OkNvbG9yU3RvcFZlY3RvciBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVu
Z3RoRm9yUmVwZWF0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFkaWVudEFkYXB0ZXI+IEdy
YWRpZW50Q29sb3JTdG9wcyBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVu
Z3RoRm9yUmVwZWF0KTsKIAogICAgIGF1dG8gZmlyc3RYKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dFguZ2V0KCk7IH0KICAgICBhdXRvIGZpcnN0WSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RZLmdl
dCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJl
dmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzMiw2ICs2MzIsMTIgQEAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlCiAgICAgcmV0dXJuIENvbG9yIHsg
YXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7IHZhbHVlIH0pLCBmbGFncyB9OwogfQogCitpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICAv
LyBGSVhNRTogV2UgZG9uJ3Qgd2FudCB0byBoYXNoIGEgaGFzaDsgZG8gYmV0dGVyLgorICAgIGFk
ZChoYXNoZXIsIGNvbG9yLmhhc2goKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
bmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBV
U0UoQ0cpCkBAIC01NSw3ICs1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci1jbGFzcyBJbnRQb2lu
dDsKIGNsYXNzIEludFNpemU7CiAKIGNsYXNzIEZsb2F0UG9pbnQgewpAQCAtMzA4LDYgKzMwOCwx
MSBAQCBpbmxpbmUgRmxvYXRQb2ludCB0b0Zsb2F0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBhKQog
aW5saW5lIGJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25z
dCBGbG9hdFBvaW50JiBiKQogewogICAgIHJldHVybiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
YS54KCksIGIueCgpKSAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS55KCksIGIueSgpKTsK
K30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBhZGQoaGFzaGVyLCBwb2ludC54KCksIHBvaW50LnkoKSk7CiB9CiAKIFdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBGbG9hdFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuY3BwCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEy
ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxHcmFkaWVudD4gR3JhZGll
bnQ6OmNyZWF0ZShEYXRhJiYgZGF0YSwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50
ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCBDb2xv
clN0b3BWZWN0b3ImJiBzdG9wcykKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRh
JiYgZGF0YSwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZCwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCBHcmFkaWVudENvbG9yU3RvcHMm
JiBzdG9wcykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRh
dGEpLCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIHNwcmVhZE1ldGhvZCwgV1RGTW92ZShzdG9w
cykpKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KERhdGEmJiBkYXRhLCBDb2xvckludGVycG9s
YXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QsIENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQorR3JhZGllbnQ6OkdyYWRp
ZW50KERhdGEmJiBkYXRhLCBDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0
aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QsIEdyYWRpZW50Q29s
b3JTdG9wcyYmIHN0b3BzKQogICAgIDogbV9kYXRhIHsgV1RGTW92ZShkYXRhKSB9CiAgICAgLCBt
X2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCB7IGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCB9CiAg
ICAgLCBtX3NwcmVhZE1ldGhvZCB7IHNwcmVhZE1ldGhvZCB9CkBAIC05MSw0NCArOTEsMTMgQEAg
Ym9vbCBHcmFkaWVudDo6aXNaZXJvU2l6ZSgpIGNvbnN0CiAgICAgKTsKIH0KIAotdm9pZCBHcmFk
aWVudDo6YWRkQ29sb3JTdG9wKEdyYWRpZW50OjpDb2xvclN0b3AmJiBzdG9wKQordm9pZCBHcmFk
aWVudDo6YWRkQ29sb3JTdG9wKEdyYWRpZW50Q29sb3JTdG9wJiYgc3RvcCkKIHsKLSAgICBtX3N0
b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsKLSAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7Cisg
ICAgbV9zdG9wcy5hZGRDb2xvclN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgbV9jYWNoZWRIYXNo
ID0gMDsKICAgICBzdG9wc0NoYW5nZWQoKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6c2V0U29ydGVk
Q29sb3JTdG9wcyhDb2xvclN0b3BWZWN0b3ImJiBzdG9wcykKLXsKLSAgICBtX3N0b3BzID0gV1RG
TW92ZShzdG9wcyk7Ci0gICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0gICAgbV9jYWNoZWRIYXNo
ID0gMDsKLSAgICBzdG9wc0NoYW5nZWQoKTsKLX0KLQotdm9pZCBHcmFkaWVudDo6c29ydFN0b3Bz
KCkgY29uc3QKLXsKLSAgICBpZiAobV9zdG9wc1NvcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdp
bigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewotICAgICAgICByZXR1
cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKLSAgICB9KTsKLX0KLQotLy8gRklYTUU6IEluc3RlYWQg
b2YgdGhlc2UgYWRkKEhhc2hlcikgZnVuY3Rpb25zLCBjb25zaWRlciB1c2luZyBlbmNvZGUgZnVu
Y3Rpb25zIHRvIGNvbXB1dGUgdGhlIGhhc2guCi0KLXN0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgYWRkKGhhc2hlciwgcG9pbnQu
eCgpLCBwb2ludC55KCkpOwotfQotCi1zdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCi17Ci0gICAgYWRkKGhhc2hlciwgc3RvcC5v
ZmZzZXQsIHN0b3AuY29sb3IpOwotfQotCiBzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IGNvbnN0IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRhKQogewogICAgIGFkZChoYXNoZXIsIGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSk7CkBAIC0xNDYsMTAgKzExNSw4IEBAIHN0YXRpYyB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OkNvbmljRAogCiB1bnNpZ25lZCBH
cmFkaWVudDo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NhY2hlZEhhc2gpIHsKLSAgICAg
ICAgc29ydFN0b3BzKCk7Ci0gICAgICAgIG1fY2FjaGVkSGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0
YSwgbV9jb2xvckludGVycG9sYXRpb25NZXRob2QsIG1fc3ByZWFkTWV0aG9kLCBtX3N0b3BzKTsK
LSAgICB9CisgICAgaWYgKCFtX2NhY2hlZEhhc2gpCisgICAgICAgIG1fY2FjaGVkSGFzaCA9IGNv
bXB1dGVIYXNoKG1fZGF0YSwgbV9jb2xvckludGVycG9sYXRpb25NZXRob2QsIG1fc3ByZWFkTWV0
aG9kLCBtX3N0b3BzLnNvcnRlZCgpKTsKICAgICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlz
aW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgog
I2luY2x1ZGUgIkNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5oIgogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLSNpbmNsdWRlICJHcmFkaWVudENvbG9yU3RvcC5oIgorI2luY2x1ZGUgIkdyYWRpZW50
Q29sb3JTdG9wcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlIDx2YXJp
YW50PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY0LDkgKzY0LDYgQEAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwogCiBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRp
ZW50PiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQ29sb3JTdG9wID0gR3JhZGllbnRDb2xvclN0b3A7
Ci0gICAgdXNpbmcgQ29sb3JTdG9wVmVjdG9yID0gR3JhZGllbnRDb2xvclN0b3BWZWN0b3I7Ci0K
ICAgICBzdHJ1Y3QgTGluZWFyRGF0YSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOwogICAg
ICAgICBGbG9hdFBvaW50IHBvaW50MTsKQEAgLTk2LDE2ICs5MywxNSBAQCBjbGFzcyBHcmFkaWVu
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7IChwdWJsaWMKIAogICAgIHVzaW5nIERh
dGEgPSBzdGQ6OnZhcmlhbnQ8TGluZWFyRGF0YSwgUmFkaWFsRGF0YSwgQ29uaWNEYXRhPjsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYsIENv
bG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGllbnRTcHJlYWRNZXRob2QgPSBHcmFkaWVudFNw
cmVhZE1ldGhvZDo6UGFkLCBDb2xvclN0b3BWZWN0b3ImJiA9IHsgfSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKERhdGEmJiwgQ29sb3JJbnRlcnBvbGF0
aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCA9IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQ
YWQsIEdyYWRpZW50Q29sb3JTdG9wcyYmID0geyB9KTsKIAogICAgIGJvb2wgaXNaZXJvU2l6ZSgp
IGNvbnN0OwogCiAgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoQ29sb3JTdG9wJiYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U29ydGVkQ29sb3JTdG9wcyhDb2xvclN0b3BWZWN0
b3ImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoR3JhZGllbnRDb2xv
clN0b3AmJik7CiAKLSAgICBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHN0b3BzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9wczsgfQorICAgIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc3RvcHMoKSBj
b25zdCB7IHJldHVybiBtX3N0b3BzOyB9CiAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFk
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KIAogICAgIHZvaWQgZmls
bChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEzMCwxNiArMTI2LDE0
IEBAIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsgKHB1Ymxp
YwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
ZjxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQg
R3JhZGllbnQoRGF0YSYmLCBDb2xvckludGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFk
TWV0aG9kLCBDb2xvclN0b3BWZWN0b3ImJik7CisgICAgZXhwbGljaXQgR3JhZGllbnQoRGF0YSYm
LCBDb2xvckludGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kLCBHcmFkaWVu
dENvbG9yU3RvcHMmJik7CiAKLSAgICB2b2lkIHNvcnRTdG9wcygpIGNvbnN0OwogICAgIHZvaWQg
c3RvcHNDaGFuZ2VkKCk7CiAKICAgICBEYXRhIG1fZGF0YTsKICAgICBDb2xvckludGVycG9sYXRp
b25NZXRob2QgbV9jb2xvckludGVycG9sYXRpb25NZXRob2Q7CiAgICAgR3JhZGllbnRTcHJlYWRN
ZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgbXV0YWJsZSBDb2xvclN0b3BWZWN0b3IgbV9zdG9w
czsKLSAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZCB7IGZhbHNlIH07CisgICAgR3JhZGll
bnRDb2xvclN0b3BzIG1fc3RvcHM7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEhhc2gg
eyAwIH07CiAKICNpZiBVU0UoQ0cpCkBAIC0yNTcsMTggKzI1MSwxMiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFJlZjxHcmFkaWVudD4KICAgICBpZiAoIXNwcmVh
ZE1ldGhvZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9u
YWw8Q29sb3JTdG9wVmVjdG9yPiBzdG9wczsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50Q29s
b3JTdG9wcz4gc3RvcHM7CiAgICAgZGVjb2RlciA+PiBzdG9wczsKICAgICBpZiAoIXN0b3BzKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVh
dGUoV1RGTW92ZSgqZGF0YSksICpjb2xvckludGVycG9sYXRpb25NZXRob2QsICpzcHJlYWRNZXRo
b2QsIFdURk1vdmUoKnN0b3BzKSk7Ci19Ci0KLWlubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIC8vIEZJWE1FOiBXZSBkb24ndCB3YW50IHRv
IGhhc2ggYSBoYXNoOyBkbyBiZXR0ZXIuCi0gICAgYWRkKGhhc2hlciwgY29sb3IuaGFzaCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudENvbG9yU3RvcC5oCShyZXZpc2lvbiAyODcz
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudENvbG9yU3Rv
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgPG9wdGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksOCArMzksNiBA
QCBzdHJ1Y3QgR3JhZGllbnRDb2xvclN0b3AgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50Q29sb3JTdG9wPiBkZWNvZGUoRGVjb2Rl
ciYpOwogfTsKIAotdXNpbmcgR3JhZGllbnRDb2xvclN0b3BWZWN0b3IgPSBWZWN0b3I8R3JhZGll
bnRDb2xvclN0b3AsIDI+OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRp
ZW50Q29sb3JTdG9wOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNv
ZGVyIDw8IG9mZnNldDsKQEAgLTYwLDYgKzU4LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+IHN0ZDo6b3B0aW9uYWw8R3JhZGllbnRDb2xvcgogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCiAgICAgcmV0dXJuIHt7ICpvZmZzZXQsICpjb2xvciB9fTsKK30KKworaW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcCYgc3RvcCkKK3sK
KyAgICBhZGQoaGFzaGVyLCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvcik7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29s
b3JTdG9wcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYWRpZW50Q29sb3JTdG9wLmgiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFkaWVudENvbG9yU3Rv
cHMgeworcHVibGljOgorICAgIHVzaW5nIFZlY3RvciA9IFZlY3RvcjxHcmFkaWVudENvbG9yU3Rv
cCwgMj47CisKKyAgICBzdHJ1Y3QgU29ydGVkIHsKKyAgICAgICAgVmVjdG9yIHN0b3BzOworICAg
IH07CisKKyAgICBHcmFkaWVudENvbG9yU3RvcHMoKQorICAgICAgICA6IG1faXNTb3J0ZWQgeyB0
cnVlIH0KKyAgICB7CisgICAgfQorCisgICAgR3JhZGllbnRDb2xvclN0b3BzKFZlY3RvciBzdG9w
cykKKyAgICAgICAgOiBtX3N0b3BzIHsgV1RGTW92ZShzdG9wcykgfQorICAgICAgICAsIG1faXNT
b3J0ZWQgeyBmYWxzZSB9CisgICAgeworICAgIH0KKworICAgIEdyYWRpZW50Q29sb3JTdG9wcyhT
b3J0ZWQgc29ydGVkU3RvcHMpCisgICAgICAgIDogbV9zdG9wcyB7IFdURk1vdmUoc29ydGVkU3Rv
cHMuc3RvcHMpIH0KKyAgICAgICAgLCBtX2lzU29ydGVkIHsgdHJ1ZSB9CisgICAgeworICAgICAg
ICBBU1NFUlQodmFsaWRhdGVJc1NvcnRlZCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZENvbG9y
U3RvcChHcmFkaWVudENvbG9yU3RvcCBzdG9wKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0b3Bz
LmlzRW1wdHkoKSAmJiBtX3N0b3BzLmxhc3QoKS5vZmZzZXQgPiBzdG9wLm9mZnNldCkKKyAgICAg
ICAgICAgIG1faXNTb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdG9wcy5hcHBlbmQoV1RGTW92
ZShzdG9wKSk7CisgICAgfQorCisgICAgdm9pZCBzb3J0KCkKKyAgICB7CisgICAgICAgIGlmICht
X2lzU29ydGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0ZDo6c3RhYmxlX3Nv
cnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikg
eworICAgICAgICAgICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgICAgIH0pOwor
ICAgICAgICBtX2lzU29ydGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBHcmFkaWVudENv
bG9yU3RvcHMmIHNvcnRlZCgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PEdyYWRp
ZW50Q29sb3JTdG9wcyo+KHRoaXMpLT5zb3J0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcy5pc0VtcHR5KCk7IH0K
KworICAgIFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3N0
b3BzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RvcHMuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcEZ1bmN0
aW9uPiBHcmFkaWVudENvbG9yU3RvcHMgbWFwQ29sb3JzKE1hcEZ1bmN0aW9uJiYgbWFwRnVuY3Rp
b24pIGNvbnN0CisgICAgeworICAgICAgICBHcmFkaWVudENvbG9yU3RvcHMgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9zdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUoKSk7CisgICAg
ICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpCisgICAgICAgICAgICByZXN1bHQubV9zdG9w
cy51bmNoZWNrZWRBcHBlbmQoeyBzdG9wLm9mZnNldCwgbWFwRnVuY3Rpb24oc3RvcC5jb2xvcikg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yJiBz
dG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHcmFkaWVudENvbG9yU3RvcHM+IGRl
Y29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29s
IHZhbGlkYXRlSXNTb3J0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNf
c29ydGVkKG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8m
IGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLm9mZnNldCA8IGIub2Zmc2V0OworICAgICAgICB9
KTsKKyAgICB9CisjZW5kaWYKKworICAgIFZlY3RvciBtX3N0b3BzOworICAgIGJvb2wgbV9pc1Nv
cnRlZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnRDb2xv
clN0b3BzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IG1fc3RvcHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8
R3JhZGllbnRDb2xvclN0b3BzPiBHcmFkaWVudENvbG9yU3RvcHM6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPiBzdG9wczsKKyAgICBkZWNvZGVy
ID4+IHN0b3BzOworICAgIGlmICghc3RvcHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RvcHMpIH19OworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIHsKIH0KIAotc3RhdGljIHZv
aWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudDo6
Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQorc3RhdGljIHZvaWQgYWRkQ29sb3JT
dG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3RvcCBzdG9w
LCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0
b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7
CkBAIC01Myw3ICs1Myw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogICAgIGRvdWJsZSB4
LCB5OwogfSBwb2ludF90OwogCi1zdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9f
cGF0dGVybl90KiBncmFkaWVudCwgaW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZs
b2F0IGdsb2JhbEFscGhhKQorc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJvX3Bh
dHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnRDb2xvclN0b3Agc3RvcCwgZmxvYXQg
Z2xvYmFsQWxwaGEpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xv
cl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKQEAgLTc0LDcg
Kzc0LDcgQEAgc3RhdGljIGRvdWJsZSBub3JtYWxpemVBbmdsZShkb3VibGUgYW5nbGUpCiB9CiAK
IHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIGZs
b2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgciwgZmxvYXQgYW5nbGVSYWRpYW5zLAotICAgIEdyYWRp
ZW50OjpDb2xvclN0b3AgZnJvbSwgR3JhZGllbnQ6OkNvbG9yU3RvcCB0bywgZmxvYXQgZ2xvYmFs
QWxwaGEpCisgICAgR3JhZGllbnRDb2xvclN0b3AgZnJvbSwgR3JhZGllbnRDb2xvclN0b3AgdG8s
IGZsb2F0IGdsb2JhbEFscGhhKQogewogICAgIGNvbnN0IGRvdWJsZSBhbmdPZmZzZXQgPSAwLjI1
OyAvLyA5MCBkZWdyZWVzLgogCkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgYWRkQ29u
aWNTZWN0b3IoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgCiB9CiAKIHN0YXRpYyBSZWZQdHI8
Y2Fpcm9fcGF0dGVybl90PiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0IHIs
IGZsb2F0IGFuZ2xlUmFkaWFucywKLSAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHN0b3Bz
LCBmbG9hdCBnbG9iYWxBbHBoYSkKKyAgICBHcmFkaWVudENvbG9yU3RvcHM6OlZlY3RvciBzdG9w
cywgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7CiAgICAgLy8gRGVnZW5lcmF0ZWQgZ3JhZGllbnRzIHdp
dGggdHdvIHN0b3BzIGF0IHRoZSBzYW1lIG9mZnNldCBhcnJpdmUgd2l0aCBhIHNpbmdsZSBzdG9w
IGF0IDAuMAogICAgIC8vIEFkZCBhbm90aGVyIHBvaW50IGhlcmUgc28gaXQgY2FuIGJlIGludGVy
cG9sYXRlZCBwcm9wZXJseSBiZWxvdy4KQEAgLTE3Myw3ICsxNzMsNyBAQCBzdGF0aWMgUmVmUHRy
PGNhaXJvX3BhdHRlcm5fdD4gY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGYKICAgICAgICAgICAgICAg
ICBsYXN0LCB7MC4yNSwgbGFzdC5jb2xvcn0sIHswLjUsIGxhc3QuY29sb3J9LCB7MC43NSwgbGFz
dC5jb2xvcn0sIHsxLjAsIGxhc3QuY29sb3J9CiAgICAgICAgICAgICB9OwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgYXV0byBpbnRlcnBvbGF0ZWRTdG9wID0gWyZdIChkb3VibGUgZnJh
Y3Rpb24pIC0+IEdyYWRpZW50OjpDb2xvclN0b3AgeworICAgICAgICAgICAgYXV0byBpbnRlcnBv
bGF0ZWRTdG9wID0gWyZdIChkb3VibGUgZnJhY3Rpb24pIC0+IEdyYWRpZW50Q29sb3JTdG9wIHsK
ICAgICAgICAgICAgICAgICBhdXRvIG9mZnNldCA9IGJsZW5kKHN0b3BzLmZpcnN0KCkub2Zmc2V0
LCBzdG9wcy5sYXN0KCkub2Zmc2V0LCBmcmFjdGlvbik7CiAgICAgICAgICAgICAgICAgYXV0byBp
bnRlcnBDb2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KHN0b3BzLmZpcnN0KCkuY29sb3Is
IHN0b3BzLmxhc3QoKS5jb2xvciwgZnJhY3Rpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB7
IG9mZnNldCwgaW50ZXJwQ29sb3IgfTsKQEAgLTIyNCw3ICsyMjQsNyBAQCBSZWZQdHI8Y2Fpcm9f
cGF0dGVybl90PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCAKICAgICAgICAgICAgIC8v
IFRodXMsIGhlcmUgSSBnaXZlIHRoZSByYWRpdXMgYW4gZXh0cmVtZWx5IGxhcmdlIHZhbHVlLiBU
aGUgcmVzdWx0aW5nIGdyYWRpZW50IHdpbGwgYmUgbGF0ZXIgY2xpcHBlZCBieSBmaWxsUmVjdC4K
ICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIGNvdWxkIGJlIHRvIGNoYW5n
ZSB0aGUgQVBJIGFuZCBwYXNzIGEgcmVjdCdzIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3B0aW1pemUg
dGhlIGNvbXB1dGF0aW9uIG9mIHRoZSByYWRpdXMuCiAgICAgICAgICAgICBjb25zdCBmbG9hdCBy
YWRpdXMgPSA0MDk2OwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbmljKGRhdGEucG9pbnQw
LngoKSwgZGF0YS5wb2ludDAueSgpLCByYWRpdXMsIGRhdGEuYW5nbGVSYWRpYW5zLCBzdG9wcygp
LCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29uaWMoZGF0YS5wb2lu
dDAueCgpLCBkYXRhLnBvaW50MC55KCksIHJhZGl1cywgZGF0YS5hbmdsZVJhZGlhbnMsIHN0b3Bz
KCkuc3RvcHMoKSwgZ2xvYmFsQWxwaGEpOwogICAgICAgICB9CiAgICAgKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJ
KHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsOCBAQCB2b2lkIEdy
YWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKIHZvaWQgR3JhZGllbnQ6
OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQpCiB7Ci0gICAgaWYgKCFtX3BsYXRm
b3JtUmVuZGVyZXIpIHsKLSAgICAgICAgc29ydFN0b3BzKCk7Ci0gICAgICAgIG1fcGxhdGZvcm1S
ZW5kZXJlciA9IEdyYWRpZW50UmVuZGVyZXJDRyB7IG1fY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9k
LCBtX3N0b3BzIH07Ci0gICAgfQorICAgIGlmICghbV9wbGF0Zm9ybVJlbmRlcmVyKQorICAgICAg
ICBtX3BsYXRmb3JtUmVuZGVyZXIgPSBHcmFkaWVudFJlbmRlcmVyQ0cgeyBtX2NvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZCwgbV9zdG9wcy5zb3J0ZWQoKSB9OwogCiAgICAgV1RGOjpzd2l0Y2hPbiht
X2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVu
dFJlbmRlcmVyQ0cuY3BwCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxOCArMjgsMTkgQEAKIAogI2luY2x1ZGUgIkNvbG9ySW50ZXJwb2xhdGlvbi5oIgogI2lu
Y2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgorI2luY2x1ZGUgIkdyYWRpZW50Q29sb3JTdG9wcy5oIgog
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotR3JhZGllbnRSZW5kZXJlckNHOjpHcmFkaWVudFJlbmRlcmVyQ0coQ29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRD
b2xvclN0b3BWZWN0b3ImIHN0b3BzKQorR3JhZGllbnRSZW5kZXJlckNHOjpHcmFkaWVudFJlbmRl
cmVyQ0coQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwg
Y29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBzdG9wcykKICAgICA6IG1fc3RyYXRlZ3kgeyBwaWNr
U3RyYXRlZ3koY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBzdG9wcykgfQogewogfQogCiAvLyBN
QVJLOiAtIFN0cmF0ZWd5IHNlbGVjdGlvbi4KIAotR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVn
eSBHcmFkaWVudFJlbmRlcmVyQ0c6OnBpY2tTdHJhdGVneShDb2xvckludGVycG9sYXRpb25NZXRo
b2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZlY3Rv
ciYgc3RvcHMpIGNvbnN0CitHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVu
ZGVyZXJDRzo6cGlja1N0cmF0ZWd5KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVy
cG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc3RvcHMpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLmNvbG9y
U3BhY2UsCiAgICAgICAgIFsmXSAoY29uc3QgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdC
JikgLT4gU3RyYXRlZ3kgewpAQCAtNjQsNyArNjUsNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0
cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6cGlja1MKIAogLy8gTUFSSzogLSBHcmFkaWVudCBz
dHJhdGVneS4KIAotR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVy
Q0c6Om1ha2VHcmFkaWVudChDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0
aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZlY3RvciYgc3RvcHMpIGNvbnN0CitH
cmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRp
ZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNv
bnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc3RvcHMpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1VOVVNF
RChjb2xvckludGVycG9sYXRpb25NZXRob2QsIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3JJ
bnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCPihjb2xvckludGVycG9sYXRpb25NZXRob2QuY29sb3JT
cGFjZSkpOwogI2lmICFIQVZFKENPUkVfR1JBUEhJQ1NfUFJFTVVMVElQTElFRF9JTlRFUlBPTEFU
SU9OX0dSQURJRU5UKQpAQCAtMjAxLDcgKzIwMiw3IEBAIHZvaWQgR3JhZGllbnRSZW5kZXJlckNH
OjpTaGFkaW5nOjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAgICAgICBvdXRbY29tcG9uZW50SW5k
ZXhdID0gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNlW2NvbXBvbmVudElu
ZGV4XTsKIH0KIAotR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVy
Q0c6Om1ha2VTaGFkaW5nKENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRp
b25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJiBzdG9wcykgY29uc3QKK0dy
YWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlU2hhZGlu
ZyhDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25z
dCBHcmFkaWVudENvbG9yU3RvcHMmIHN0b3BzKSBjb25zdAogewogICAgIGF1dG8gbWFrZURhdGEg
PSBbJl0gKGF1dG8gY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBhdXRvJiBzdG9wcykgewogICAg
ICAgICBhdXRvIGNvbnZlcnRDb2xvclRvQ29sb3JJbnRlcnBvbGF0aW9uU3BhY2UgPSBbJl0gKGNv
bnN0IENvbG9yJiBjb2xvciwgYXV0byBjb2xvckludGVycG9sYXRpb25NZXRob2QpIC0+IENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgJKHJldmlzaW9uIDI4
NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVu
ZGVyZXJDRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJD
b2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvckludGVycG9sYXRpb25NZXRob2QuaCIK
LSNpbmNsdWRlICJHcmFkaWVudENvbG9yU3RvcC5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
b3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0zNSw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgR3JhZGllbnRDb2xvclN0b3BzOworCiBzdHJ1Y3QgQ29sb3JDb252
ZXJ0ZWRUb0ludGVycG9sYXRpb25Db2xvclNwYWNlU3RvcCB7CiAgICAgZmxvYXQgb2Zmc2V0Owog
ICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29sb3JDb21wb25lbnRzOwpAQCAtNDIsNyAr
NDMsNyBAQCBzdHJ1Y3QgQ29sb3JDb252ZXJ0ZWRUb0ludGVycG9sYXRpb25Db2xvclNwYWNlU3Rv
cCB7CiAKIGNsYXNzIEdyYWRpZW50UmVuZGVyZXJDRyB7CiBwdWJsaWM6Ci0gICAgR3JhZGllbnRS
ZW5kZXJlckNHKENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRDb2xvclN0
b3BWZWN0b3ImKTsKKyAgICBHcmFkaWVudFJlbmRlcmVyQ0coQ29sb3JJbnRlcnBvbGF0aW9uTWV0
aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmKTsKIAogICAgIHZvaWQgZHJhd0xpbmVhckdy
YWRpZW50KENHQ29udGV4dFJlZiwgQ0dQb2ludCBzdGFydFBvaW50LCBDR1BvaW50IGVuZFBvaW50
LCBDR0dyYWRpZW50RHJhd2luZ09wdGlvbnMpOwogICAgIHZvaWQgZHJhd1JhZGlhbEdyYWRpZW50
KENHQ29udGV4dFJlZiwgQ0dQb2ludCBzdGFydENlbnRlciwgQ0dGbG9hdCBzdGFydFJhZGl1cywg
Q0dQb2ludCBlbmRDZW50ZXIsIENHRmxvYXQgZW5kUmFkaXVzLCBDR0dyYWRpZW50RHJhd2luZ09w
dGlvbnMpOwpAQCAtODQsOSArODUsOSBAQCBjbGFzcyBHcmFkaWVudFJlbmRlcmVyQ0cgeyAocHJp
dmF0ZSkKIAogICAgIHVzaW5nIFN0cmF0ZWd5ID0gc3RkOjp2YXJpYW50PEdyYWRpZW50LCBTaGFk
aW5nPjsKIAotICAgIFN0cmF0ZWd5IHBpY2tTdHJhdGVneShDb2xvckludGVycG9sYXRpb25NZXRo
b2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJikgY29uc3Q7Ci0gICAgU3RyYXRlZ3kg
bWFrZUdyYWRpZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRDb2xv
clN0b3BWZWN0b3ImKSBjb25zdDsKLSAgICBTdHJhdGVneSBtYWtlU2hhZGluZyhDb2xvckludGVy
cG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJikgY29uc3Q7Cisg
ICAgU3RyYXRlZ3kgcGlja1N0cmF0ZWd5KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3Qg
R3JhZGllbnRDb2xvclN0b3BzJikgY29uc3Q7CisgICAgU3RyYXRlZ3kgbWFrZUdyYWRpZW50KENv
bG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJikgY29uc3Q7
CisgICAgU3RyYXRlZ3kgbWFrZVNoYWRpbmcoQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25z
dCBHcmFkaWVudENvbG9yU3RvcHMmKSBjb25zdDsKIAogICAgIFN0cmF0ZWd5IG1fc3RyYXRlZ3k7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIyNSwxMiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmQKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CiB9CiAKLUdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dDo6c3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcFZl
Y3RvciYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK0dyYWRpZW50Q29sb3JTdG9w
cyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRlcihj
b25zdCBHcmFkaWVudENvbG9yU3RvcHMmIHN0b3BzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CiB7Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0b3Ag
OiBzdG9wcykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBz
dHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdG9wLmNvbG9yKSB9KTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIGlmICghc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQorICAgICAg
ICByZXR1cm4gc3RvcHM7CisKKyAgICByZXR1cm4gc3RvcHMubWFwQ29sb3JzKFsmXSAoYXV0byYg
Y29sb3IpIHsgcmV0dXJuIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGNvbG9yKTsg
fSk7CiB9CiAKIEdyYWRpZW50U3ByZWFkTWV0aG9kIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6
OnBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUoU1ZHU3ByZWFkTWV0aG9kVHlwZSBtZXRo
b2QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudCA6
IHB1YmxpYyBSZW5kZXJTVkdSZXNvCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudChTVkdHcmFkaWVudEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKIAotICAgIHN0YXRp
YyBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKGNv
bnN0IEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3ImLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAg
IHN0YXRpYyBHcmFkaWVudENvbG9yU3RvcHMgc3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29u
c3QgR3JhZGllbnRDb2xvclN0b3BzJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMg
R3JhZGllbnRTcHJlYWRNZXRob2QgcGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShTVkdT
cHJlYWRNZXRob2RUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50LmNwcAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBSZWY8R3JhZGllbnQ+IFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQ6OmJ1aWxkR3IKIHsKICAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZSgKICAgICAgICAg
R3JhZGllbnQ6OkxpbmVhckRhdGEgeyBzdGFydFBvaW50KG1fYXR0cmlidXRlcyksIGVuZFBvaW50
KG1fYXR0cmlidXRlcykgfSwKLSAgICAgICAgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIHsgQ29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCIHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkIH0sCisgICAgICAgIHsgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpT
UkdCIHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH0sCiAgICAg
ICAgIHBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUobV9hdHRyaWJ1dGVzLnNwcmVhZE1l
dGhvZCgpKSwKICAgICAgICAgc3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIobV9hdHRyaWJ1dGVz
LnN0b3BzKCksIHN0eWxlKQogICAgICk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dC5jcHAJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgUmVmPEdyYWRpZW50PiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
OjpidWlsZEdyCiB7CiAgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoCiAgICAgICAgIEdyYWRp
ZW50OjpSYWRpYWxEYXRhIHsgZm9jYWxQb2ludChtX2F0dHJpYnV0ZXMpLCBjZW50ZXJQb2ludCht
X2F0dHJpYnV0ZXMpLCBmb2NhbFJhZGl1cyhtX2F0dHJpYnV0ZXMpLCByYWRpdXMobV9hdHRyaWJ1
dGVzKSwgMSB9LAotICAgICAgICBDb2xvckludGVycG9sYXRpb25NZXRob2QgeyBDb2xvckludGVy
cG9sYXRpb25NZXRob2Q6OlNSR0IgeyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgfSwKKyAgICAgICAgeyBDb2xvckludGVycG9sYXRpb25NZXRob2Q6OlNSR0IgeyB9
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfSwKICAgICAgICAgcGxh
dGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkp
LAogICAgICAgICBzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRlcihtX2F0dHJpYnV0ZXMuc3RvcHMo
KSwgc3R5bGUpCiAgICAgKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJp
YnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvR3JhZGllbnRBdHRyaWJ1
dGVzLmgJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0
dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBzdHJ1Y3QgR3JhZGll
bnRBdHRyaWJ1dGVzIHsKICAgICBTVkdTcHJlYWRNZXRob2RUeXBlIHNwcmVhZE1ldGhvZCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1NwcmVhZE1ldGhvZFR5cGU+KG1fc3ByZWFkTWV0
aG9kKTsgfQogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cygpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGU+KG1fZ3Jh
ZGllbnRVbml0cyk7IH0KICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9Ci0gICAgY29uc3QgR3JhZGllbnQ6
OkNvbG9yU3RvcFZlY3RvciYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9CisgICAg
Y29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7
IH0KIAogICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKFNWR1NwcmVhZE1ldGhvZFR5cGUgdmFsdWUp
CiAgICAgewpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR3JhZGllbnRBdHRyaWJ1dGVzIHsKICAg
ICAgICAgbV9ncmFkaWVudFRyYW5zZm9ybVNldCA9IHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRTdG9wcyhHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yJiYgdmFsdWUpCisgICAgdm9pZCBzZXRT
dG9wcyhHcmFkaWVudENvbG9yU3RvcHMmJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIG1fc3RvcHMg
PSBXVEZNb3ZlKHZhbHVlKTsKICAgICB9CkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBHcmFkaWVu
dEF0dHJpYnV0ZXMgewogcHJpdmF0ZToKICAgICAvLyBQcm9wZXJ0aWVzCiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fZ3JhZGllbnRUcmFuc2Zvcm07Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBtX3N0b3BzOworICAgIEdyYWRpZW50Q29sb3JTdG9wcyBtX3N0b3BzOwogCiAgICAgdW5zaWdu
ZWQgbV9zcHJlYWRNZXRob2QgOiAyOwogICAgIHVuc2lnbmVkIG1fZ3JhZGllbnRVbml0cyA6IDI7
CkBAIC04Myw3ICs4Myw3IEBAIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMgewogCiBzdHJ1Y3Qg
U2FtZVNpemVBc0dyYWRpZW50QXR0cmlidXRlcyB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGE7Ci0g
ICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBiOworICAgIEdyYWRpZW50Q29sb3JTdG9wcyBi
OwogICAgIHVuc2lnbmVkIGMgOiA3OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNCArOTgs
MTQgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGls
ZENoCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQoKTsKIH0KIAotR3JhZGllbnQ6OkNv
bG9yU3RvcFZlY3RvciBTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3RvcHMoKQorR3JhZGllbnRD
b2xvclN0b3BzIFNWR0dyYWRpZW50RWxlbWVudDo6YnVpbGRTdG9wcygpCiB7Ci0gICAgR3JhZGll
bnQ6OkNvbG9yU3RvcFZlY3RvciBzdG9wczsKKyAgICBHcmFkaWVudENvbG9yU3RvcHMgc3RvcHM7
CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwogICAgIGZvciAoYXV0byYgc3RvcCA6
IGNoaWxkcmVuT2ZUeXBlPFNWR1N0b3BFbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgYXV0byBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldCA9IHN0ZDo6Y2xhbXAoc3RvcC5vZmZzZXQoKSwg
cHJldmlvdXNPZmZzZXQsIDEuMGYpOwogICAgICAgICBwcmV2aW91c09mZnNldCA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nT2Zmc2V0OwotICAgICAgICBzdG9wcy5hcHBlbmQoeyBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ09mZnNldCwgc3RvcC5zdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkgfSk7
CisgICAgICAgIHN0b3BzLmFkZENvbG9yU3RvcCh7IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nT2Zm
c2V0LCBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSB9KTsKICAgICB9CiAgICAgcmV0
dXJuIHN0b3BzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
aAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGNsYXNzIFNWR0dyYWRpZW50
RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50LCBwdWJsaWMgUwogICAgICAgICBTVkdfU1BSRUFE
TUVUSE9EX1JFUEVBVCA9IFNWR1NwcmVhZE1ldGhvZFVua25vd24KICAgICB9OwogCi0gICAgR3Jh
ZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBidWlsZFN0b3BzKCk7CisgICAgR3JhZGllbnRDb2xvclN0
b3BzIGJ1aWxkU3RvcHMoKTsKIAogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9w
ZXJ0eU93bmVyUmVnaXN0cnk8U1ZHR3JhZGllbnRFbGVtZW50LCBTVkdFbGVtZW50LCBTVkdVUklS
ZWZlcmVuY2U+OwogCg==
</data>
<flag name="commit-queue"
          id="473549"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447811</attachid>
            <date>2021-12-22 09:55:16 -0800</date>
            <delta_ts>2021-12-23 11:00:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234583-20211222095515.patch</filename>
            <type>text/plain</type>
            <size>44289</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAyMS0xMi0yMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgZ3JhZGllbnQg
Y29sb3Igc3RvcHMgaW50byBhIHNlbGYgY29udGFpbmVkIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIG1vc3QgdXNlcyBvZiBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGggbmV3IEdyYWRpZW50Q29sb3JTdG9wcyBjbGFzcy4K
KworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGUuCisKKyAgICAgICAgKiBjc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyk6CisgICAg
ICAgIFJlcGxhY2Ugc29tZSB1c2FnZSBvZiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGgg
R3JhZGllbnRDb2xvclN0b3BzLiBXaGlsZSBoZXJlLAorICAgICAgICBvcHRpbWl6ZSBjb2xvciBm
aWx0ZXIgdHJhbnNmb3JtYXRpb24gdG8gb25seSBoYXBwZW4gd2hlbiB0aGVyZSBpcyBjb2xvciBm
aWx0ZXIsCisgICAgICAgIHJlbW92aW5nIGV4dHJhIHVubmVjZXNzYXJ5IGNvcGllcyBvZiBDb2xv
cnMuCisKKyAgICAgICAgQWxzbyB1dGlsaXplcyB0aGUgR3JhZGllbnRDb2xvclN0b3BzOjpTb3J0
ZWQgdHlwZSB0byBjcmVhdGUgYSBHcmFkaWVudENvbG9yU3RvcHMKKyAgICAgICAgb2JqZWN0IHRo
YXQgaGFzIHRoZSBpc1NvcnRlZCBiaXQgc2V0LgorIAorICAgICAgICAoV2ViQ29yZTo6Q1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIFRoZSBjYWxs
cyB0byBzZXRTb3J0ZWRDb2xvclN0b3BzIGlzIG5vIGxvbmdlciBuZWVkZWQsIGFzIHRoZSBHcmFk
aWVudENvbG9yU3RvcHMKKyAgICAgICAgbm93IG1haW50YWlucyB0aGF0IHN0YXRlLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
CisgICAgICAgIE1vdmUgZGVmaW5pdGlvbiBvZiBhZGQoSGFzaGVyJiwgQ29sb3IpIGhlcmUsIHdo
ZXJlIGl0IG1ha2VzIHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdy
YWRpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgTW92ZSBkZWZpbml0aW9uIG9mIGFkZChIYXNo
ZXImLCBGbG9hdFBvaW50KSBoZXJlLCB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcmF0aGVyIHRoYW4K
KyAgICAgICAga2VlcGluZyBpdCBpbiBHcmFkaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
ZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U29ydGVkQ29sb3JTdG9wcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgUmVwbGFjZSBDb2xvclN0b3BWZWN0b3Igd2l0aCBHcmFkaWVudENvbG9yU3RvcHMu
IFRoaXMgYWxsb3dzIHJlbW92aW5nIHRoZSBtX3N0b3BzU29ydGVkCisgICAgICAgIGJpdCwgYXMg
dGhlIG5ldyBjbGFzcyBtYWludGFpbnMgdGhhdCwgYXMgd2VsbCBhcyByZW1vdmluZyBzZXRTb3J0
ZWRDb2xvclN0b3BzIHNpbmNlCisgICAgICAgIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGp1c3Qg
Y3JlYXRpbmcgdGhlIEdyYWRpZW50IHdpdGggYSBHcmFkaWVudENvbG9yU3RvcHMgdGhhdCBrbm93
cworICAgICAgICBpdCBpcyBzb3J0ZWQgKHVzaW5nIHRoZSBHcmFkaWVudENvbG9yU3RvcHM6OlNv
cnRlZCBoZWxwZXIpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xv
clN0b3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIE1vdmUgZGVmaW5pdGlv
biBvZiBhZGQoSGFzaGVyJiwgR3JhZGllbnRDb2xvclN0b3ApIGhlcmUsIHdoZXJlIGl0IG1ha2Vz
IHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3BzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpHcmFkaWVudENvbG9yU3RvcHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjphZGRDb2xvclN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpzb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c29ydGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudENvbG9yU3RvcHM6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRDb2xvclN0b3BzOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dENvbG9yU3RvcHM6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6Om1hcENvbG9ycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OnN0b3BzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Q29sb3JTdG9w
czo6dmFsaWRhdGVJc1NvcnRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENv
bG9yU3RvcHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OmRlY29kZSk6CisgICAgICAgIEVuY2Fwc3VsYXRlIHN0YXRlIGFuZCBmdW5jdGlvbmFs
aXR5IG9mIHRoZSBncmFkaWVudCBjb2xvciBzdG9wIGxpc3QsIG1haW50YWluaW5nCisgICAgICAg
IHRoZSBzb3J0ZWQgc3RhdGUsIGFuZCBwcm92aWRpbmcgYSBwbGVhc2VudCBBUEkgdG8gd29yayB3
aXRoLiBJbiB0aGUgZnV0dXJlLCB0aGlzCisgICAgICAgIHdpbGwgYmUgYSBnb29kIHBsYWNlIHRv
IGFkZCBmdW5jdGlvbnMgdG8gYW5hbHl6ZSBhbmQgdHJhbnNmb3JtIHRoZSBsaXN0IGZvciBvcHRp
bWl6aW5nCisgICAgICAgIHdoYXQgY2FuIHVzZSB0aGUgZ3JhZGllbnQgZmFzdCBwYXRocy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIHRoZSBuZXcgbmFtZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpw
YWludCk6CisgICAgICAgIEVuc3VyZSB0aGUgY29sb3Igc3RvcHMgcGFzc2VkIHRvIHRoZSBncmFk
aWVudCByZW5kZXJlciBhcmUgc29ydGVkIHVzaW5nIHRoZSBzb3J0ZWQoKQorICAgICAgICBoZWxw
ZXIsIHdoaWNoIGRvZXMgYW4gaW5wbGFjZSBzb3J0IGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVy
ZXJDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OkdyYWRpZW50UmVu
ZGVyZXJDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OnBpY2tTdHJh
dGVneSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VH
cmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1h
a2VTaGFkaW5nIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JT
dG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3BzLgorCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OnN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKToKKyAgICAg
ICAgQWRkIGVhcmx5IHJldHVybiBpZiB0aGVyZSBpcyBubyBjb2xvciBmaWx0ZXIgdG8gYXBwbHks
IGFuZCB1dGlsaXplIHRoZSBtYXBDb2xvcnMoKQorICAgICAgICBmdW5jdGlvbiB0byB1cGRhdGUg
dGhlIGNvbG9ycyBpZiB0aGVyZSBpcy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpidWlsZEdyYWRpZW50IGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6YnVpbGRHcmFk
aWVudCBjb25zdCk6CisgICAgICAgIFJlbW92ZSBzb21lIGV4dHJhbmVvdXMgdHlwZSBuYW1lcy4K
KworICAgICAgICAqIHN2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50QXR0cmlidXRlczo6c3RvcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRBdHRyaWJ1dGVzOjpzZXRTdG9wcyk6CisgICAgICAgICogc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3Rv
cHMpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgUmVwbGFj
ZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3Bz
LgorCiAyMDIxLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIE5vdGlmaWNhdGlvbiBpZGVudGlmaWVycyBiZSBhIFVVSUQgc3RyaW5nIGluc3Rl
YWQgb2YgYSB1aW50NjRfdApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyODczMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYy
LDYgKzE0NjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3AuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRGbHVzaElkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4OCw2ICs0MDg4
LDcgQEAKIAkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0
MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE5Q0RGMjI3NkZG
QzZEMDA1M0Y3MzQgLyogR3JhZGllbnRSZW5kZXJlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0RGMDI3NkZGQjI2MDA1M0Y3MzQgLyogR3Jh
ZGllbnRSZW5kZXJlckNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkMxOUNERjQyNzcxMDYzOTAwNTNGNzM0IC8qIEdyYWRpZW50Q29sb3JTdG9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0RG
MzI3NzEwNjM5MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3AuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzE5Q0UyQjI3NzJCRjdCMDA1M0Y3
MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzE5Q0UyOTI3NzJCRjc3MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xv
clN0b3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMxQTdEOTgxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIuaCAqLzsgfTsKIAkJQkMyMjcyODcwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVm
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMyMjcyODYwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVmbGVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMjI3MkEyMEU4MkU4N0Mw
MEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzIyNzJBMTBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTEzNiw2
ICsxNTEzNyw3IEBACiAJCUJDMTlDREVGMjc2RkZCMjYwMDUzRjczNCAvKiBHcmFkaWVudFJlbmRl
cmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGllbnRSZW5kZXJlckNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxOUNERjAyNzZGRkIyNjAwNTNGNzM0IC8qIEdy
YWRpZW50UmVuZGVyZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFkaWVudFJlbmRlcmVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxOUNERjMyNzcxMDYzOTAwNTNGNzM0IC8q
IEdyYWRpZW50Q29sb3JTdG9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYWRpZW50Q29sb3JTdG9wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMTlDRTI5Mjc3MkJGNzcwMDUzRjczNCAv
KiBHcmFkaWVudENvbG9yU3RvcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhZGllbnRDb2xvclN0b3Bz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUE3RDk1MThGQ0I1QjAwMDQyMTg3
OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUE3RDk2MThGQ0I1QjAw
MDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzIwRkI3RTBDMEU4RTZDMDBE
MTQ0N0YgLyogSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc4NSw2ICsyODc4Nyw3IEBACiAJCQkJ
QkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLywKIAkJCQlCQzUzQzVG
NDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCAqLywKIAkJCQlCQzE5Q0RGMzI3NzEwNjM5
MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3AuaCAqLywKKwkJCQlCQzE5Q0UyOTI3NzJCRjc3
MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggKi8sCiAJCQkJMkQyRkMwNTYxNDYwQ0Q2
RjAwMjYzNjMzIC8qIEdyYWRpZW50SW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU3MTQ2MENENkYw
MDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmggKi8sCiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5jcHAgKi8sCkBAIC0zNzU3MCw2ICszNzU3Myw3IEBACiAJ
CQkJQkU5MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEMUY5QjFDMjcwMjRCQzIwMDYxN0VCNiAvKiBUcmFja1ByaXZhdGVCYXNl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkFDMzBGRTE4NEZCMTQ1MDA4QzRGMUUgLyog
VHJhaWxpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzE5Q0UyQjI3NzJCRjdCMDA1
M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTYwNzEz
MjFCRDgzMDhCMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUNEM0VFRjQxMjU3OTlGRDkwMDY1NjNCQiAvKiBUcmFuc2ZlckZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUU5MTFDNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRp
b25NYXRyaXguaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMTIgKzMwMCwxNCBAQCBj
bGFzcyBDb25pY0dyYWRpZW50QWRhcHRlciB7IChwdWJsaWMpCiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFkaWVudEFkYXB0ZXI+Ci1HcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZW50QWRhcHRlciwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQorR3JhZGllbnRDb2xv
clN0b3BzIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZW50QWRhcHRlciwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0
KQogeworICAgIGJvb2wgaGFzQ29sb3JGaWx0ZXIgPSBzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVy
KCk7CisKICAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRp
ZW50IHx8IG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewot
ICAgICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgR3JhZGll
bnRDb2xvclN0b3BzOjpTdG9wVmVjdG9yIHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwotCisgICAgICAgIAogICAgICAgICBmb3Ig
KGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAgICAgICAgICBmbG9hdCBvZmZzZXQ7CiAgICAg
ICAgICAgICBpZiAoc3RvcC5wb3NpdGlvbi0+aXNQZXJjZW50YWdlKCkpCkBAIC0zMTMsMTcgKzMx
NSwxNCBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG8KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdG9wLnBv
c2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKIAotICAgICAgICAg
ICAgQ29sb3IgY29sb3IgPSBzdG9wLnJlc29sdmVkQ29sb3I7Ci0gICAgICAgICAgICBpZiAoc3R5
bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQotICAgICAgICAgICAgICAgIHN0eWxlLmFwcGxlQ29s
b3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihjb2xvcik7Ci0gICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKHsgb2Zmc2V0LCBjb2xvciB9KTsKKyAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoeyBvZmZzZXQsIGhhc0NvbG9yRmlsdGVyID8gc3R5bGUuY29sb3JCeUFwcGx5
aW5nQ29sb3JGaWx0ZXIoc3RvcC5yZXNvbHZlZENvbG9yKSA6IHN0b3AucmVzb2x2ZWRDb2xvciB9
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQocmVzdWx0LmJlZ2luKCks
IHJlc3VsdC5lbmQoKSwgW10gKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGEsIGNvbnN0IEdy
YWRpZW50OjpDb2xvclN0b3AmIGIpIHsKKyAgICAgICAgc3RkOjpzdGFibGVfc29ydChyZXN1bHQu
YmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXSAoY29uc3QgR3JhZGllbnRDb2xvclN0b3AmIGEsIGNv
bnN0IEdyYWRpZW50Q29sb3JTdG9wJiBiKSB7CiAgICAgICAgICAgICByZXR1cm4gYS5vZmZzZXQg
PCBiLm9mZnNldDsKICAgICAgICAgfSk7CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIEdyYWRpZW50Q29sb3JTdG9wczo6U29ydGVkIHsgV1RGTW92ZShyZXN1bHQpIH07
CiAgICAgfQogCiAgICAgc2l6ZV90IG51bVN0b3BzID0gbV9zdG9wcy5zaXplKCk7CkBAIC0zMzQs
MTIgKzMzMyw4IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6
Y29tcHV0ZVN0bwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewog
ICAgICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKIAotICAgICAgICBDb2xvciBjb2xvciA9
IHN0b3AucmVzb2x2ZWRDb2xvcjsKLSAgICAgICAgaWYgKHN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0
ZXIoKSkKLSAgICAgICAgICAgIHN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xv
cihjb2xvcik7CisgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gaGFzQ29sb3JGaWx0ZXIgPyBzdHls
ZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdG9wLnJlc29sdmVkQ29sb3IpIDogc3RvcC5y
ZXNvbHZlZENvbG9yOwogCi0gICAgICAgIHN0b3BzW2ldLmNvbG9yID0gY29sb3I7Ci0KICAgICAg
ICAgaWYgKHN0b3AucG9zaXRpb24pIHsKICAgICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUg
PSAqc3RvcC5wb3NpdGlvbjsKICAgICAgICAgICAgIGlmIChwb3NpdGlvblZhbHVlLmlzUGVyY2Vu
dGFnZSgpKQpAQCAtNTU0LDEyICs1NDksMTIgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBD
U1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvCiAgICAgaWYgKHN0b3BzLnNpemUoKSA+IDEgJiYg
KCpzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgKnN0b3BzLmxhc3QoKS5vZmZzZXQgPiAxKSkK
ICAgICAgICAgZ3JhZGllbnRBZGFwdGVyLm5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lk
ZVJhbmdlKHN0b3BzLCBtX2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk7CiAgICAgCi0gICAgR3Jh
ZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7CisgICAgR3JhZGllbnRDb2xvclN0b3BzOjpT
dG9wVmVjdG9yIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdG9w
cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKHsgKnN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yIH0pOworICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgKnN0b3Aub2Zmc2V0LCBXVEZNb3ZlKHN0b3AuY29sb3Ip
IH0pOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gR3JhZGllbnRDb2xvclN0b3Bz
OjpTb3J0ZWQgeyBXVEZNb3ZlKHJlc3VsdCkgfTsKIH0KIAogc3RhdGljIGZsb2F0IHBvc2l0aW9u
RnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Ym9vbCBpc0hvcml6b250YWwpCkBAIC04NjcsOSArODYyLDcgQEAgUmVmPEdyYWRpZW50PiBDU1NM
aW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSCiAgICAgTGluZWFyR3JhZGllbnRB
ZGFwdGVyIGFkYXB0ZXIgeyBkYXRhIH07CiAgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhh
ZGFwdGVyLCBjb252ZXJzaW9uRGF0YSwgcmVuZGVyZXIuc3R5bGUoKSwgMSk7CiAKLSAgICBhdXRv
IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVycG9s
YXRpb25NZXRob2QoKSk7Ci0gICAgZ3JhZGllbnQtPnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92
ZShzdG9wcykpOwotICAgIHJldHVybiBncmFkaWVudDsKKyAgICByZXR1cm4gR3JhZGllbnQ6OmNy
ZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVycG9sYXRpb25NZXRob2QoKSwgR3JhZGllbnRT
cHJlYWRNZXRob2Q6OlBhZCwgV1RGTW92ZShzdG9wcykpOwogfQogCiBib29sIENTU0xpbmVhckdy
YWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiBvdGhlcikg
Y29uc3QKQEAgLTEyMDEsOSArMTE5NCw3IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUgogICAgIFJhZGlhbEdyYWRpZW50QWRhcHRlciBhZGFw
dGVyIHsgZGF0YSB9OwogICAgIGF1dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRlciwgY29u
dmVyc2lvbkRhdGEsIHJlbmRlcmVyLnN0eWxlKCksIG1heEV4dGVudCk7CiAKLSAgICBhdXRvIGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVycG9sYXRp
b25NZXRob2QoKSk7Ci0gICAgZ3JhZGllbnQtPnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZShz
dG9wcykpOwotICAgIHJldHVybiBncmFkaWVudDsKKyAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0
ZShXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVycG9sYXRpb25NZXRob2QoKSwgR3JhZGllbnRTcHJl
YWRNZXRob2Q6OlBhZCwgV1RGTW92ZShzdG9wcykpOwogfQogCiBib29sIENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikgY29u
c3QKQEAgLTEyNzUsOSArMTI2Niw3IEBAIFJlZjxHcmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZh
bHVlOjpjcmVhdGVHcmFkaWVudChSZQogICAgIENvbmljR3JhZGllbnRBZGFwdGVyIGFkYXB0ZXI7
CiAgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhhZGFwdGVyLCBjb252ZXJzaW9uRGF0YSwg
cmVuZGVyZXIuc3R5bGUoKSwgMSk7CiAKLSAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVycG9sYXRpb25NZXRob2QoKSk7Ci0gICAgZ3Jh
ZGllbnQtPnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZShzdG9wcykpOwotICAgIHJldHVybiBn
cmFkaWVudDsKKyAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb2xv
ckludGVycG9sYXRpb25NZXRob2QoKSwgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlBhZCwgV1RGTW92
ZShzdG9wcykpOwogfQogCiBib29sIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0
IENTU0NvbmljR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmgJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBA
QCBjbGFzcyBDU1NHcmFkaWVudFZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUK
ICAgICB7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVyPiBH
cmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9h
dCBtYXhMZW5ndGhGb3JSZXBlYXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRh
cHRlcj4gR3JhZGllbnRDb2xvclN0b3BzIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9h
dCBtYXhMZW5ndGhGb3JSZXBlYXQpOwogCiAgICAgYXV0byBmaXJzdFgoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0WC5nZXQoKTsgfQogICAgIGF1dG8gZmlyc3RZKCkgY29uc3QgeyByZXR1cm4gbV9m
aXJzdFkuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMyLDYgKzYzMiwxMiBAQCB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGUKICAgICByZXR1cm4g
Q29sb3IgeyBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgdmFsdWUgfSksIGZsYWdzIH07CiB9
CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ29sb3ImIGNvbG9yKQor
eworICAgIC8vIEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIGhhc2ggYSBoYXNoOyBkbyBiZXR0ZXIu
CisgICAgYWRkKGhhc2hlciwgY29sb3IuaGFzaCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogI2lmIFVTRShDRykKQEAgLTU1LDcgKzU2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLWNsYXNz
IEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CkBAIC0zMDgs
NiArMzA4LDExIEBAIGlubGluZSBGbG9hdFBvaW50IHRvRmxvYXRQb2ludChjb25zdCBGbG9hdFNp
emUmIGEpCiBpbmxpbmUgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IEZsb2F0UG9pbnQm
IGEsIGNvbnN0IEZsb2F0UG9pbnQmIGIpCiB7CiAgICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChhLngoKSwgYi54KCkpICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhLnkoKSwg
Yi55KCkpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQoreworICAgIGFkZChoYXNoZXIsIHBvaW50LngoKSwgcG9pbnQueSgpKTsK
IH0KIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTIgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPEdyYWRpZW50
PiBHcmFkaWVudDo6Y3JlYXRlKERhdGEmJiBkYXRhLCBDb2xvckludGVycG9sYXRpb25NZXRob2Qg
Y29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRo
b2QsIENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQorUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3Jl
YXRlKERhdGEmJiBkYXRhLCBDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0
aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QsIEdyYWRpZW50Q29s
b3JTdG9wcyYmIHN0b3BzKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdU
Rk1vdmUoZGF0YSksIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgc3ByZWFkTWV0aG9kLCBXVEZN
b3ZlKHN0b3BzKSkpOwogfQogCi1HcmFkaWVudDo6R3JhZGllbnQoRGF0YSYmIGRhdGEsIENvbG9y
SW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3By
ZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMpCitHcmFkaWVu
dDo6R3JhZGllbnQoRGF0YSYmIGRhdGEsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvcklu
dGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgR3Jh
ZGllbnRDb2xvclN0b3BzJiYgc3RvcHMpCiAgICAgOiBtX2RhdGEgeyBXVEZNb3ZlKGRhdGEpIH0K
ICAgICAsIG1fY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIHsgY29sb3JJbnRlcnBvbGF0aW9uTWV0
aG9kIH0KICAgICAsIG1fc3ByZWFkTWV0aG9kIHsgc3ByZWFkTWV0aG9kIH0KQEAgLTkxLDQ0ICs5
MSwxMyBAQCBib29sIEdyYWRpZW50Ojppc1plcm9TaXplKCkgY29uc3QKICAgICApOwogfQogCi12
b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCYmIHN0b3ApCit2
b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoR3JhZGllbnRDb2xvclN0b3AmJiBzdG9wKQogewot
ICAgIG1fc3RvcHMuYXBwZW5kKFdURk1vdmUoc3RvcCkpOwotICAgIG1fc3RvcHNTb3J0ZWQgPSBm
YWxzZTsKKyAgICBtX3N0b3BzLmFkZENvbG9yU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICBtX2Nh
Y2hlZEhhc2ggPSAwOwogICAgIHN0b3BzQ2hhbmdlZCgpOwogfQogCi12b2lkIEdyYWRpZW50Ojpz
ZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQotewotICAgIG1fc3Rv
cHMgPSBXVEZNb3ZlKHN0b3BzKTsKLSAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLSAgICBtX2Nh
Y2hlZEhhc2ggPSAwOwotICAgIHN0b3BzQ2hhbmdlZCgpOwotfQotCi12b2lkIEdyYWRpZW50Ojpz
b3J0U3RvcHMoKSBjb25zdAotewotICAgIGlmIChtX3N0b3BzU29ydGVkKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0gICAgc3RkOjpzdGFibGVfc29ydChtX3N0
b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAg
ICAgIHJldHVybiBhLm9mZnNldCA8IGIub2Zmc2V0OwotICAgIH0pOwotfQotCi0vLyBGSVhNRTog
SW5zdGVhZCBvZiB0aGVzZSBhZGQoSGFzaGVyKSBmdW5jdGlvbnMsIGNvbnNpZGVyIHVzaW5nIGVu
Y29kZSBmdW5jdGlvbnMgdG8gY29tcHV0ZSB0aGUgaGFzaC4KLQotc3RhdGljIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBhZGQoaGFzaGVy
LCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgc3RvcCkKLXsKLSAgICBhZGQoaGFzaGVy
LCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvcik7Ci19Ci0KIHN0YXRpYyB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCiB7CiAgICAgYWRkKGhh
c2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKTsKQEAgLTE0NiwxMCArMTE1LDggQEAgc3Rh
dGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29uaWNECiAKIHVu
c2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY2FjaGVkSGFzaCkg
ewotICAgICAgICBzb3J0U3RvcHMoKTsKLSAgICAgICAgbV9jYWNoZWRIYXNoID0gY29tcHV0ZUhh
c2gobV9kYXRhLCBtX2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgbV9zcHJlYWRNZXRob2QsIG1f
c3RvcHMpOwotICAgIH0KKyAgICBpZiAoIW1fY2FjaGVkSGFzaCkKKyAgICAgICAgbV9jYWNoZWRI
YXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgbV9z
cHJlYWRNZXRob2QsIG1fc3RvcHMuc29ydGVkKCkpOwogICAgIHJldHVybiBtX2NhY2hlZEhhc2g7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
aAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNv
bG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLmgiCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYWRpZW50Q29sb3JTdG9wLmgiCisjaW5jbHVkZSAi
R3JhZGllbnRDb2xvclN0b3BzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1
ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjQsOSArNjQsNiBAQCBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50
ZWQ8R3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBDb2xvclN0b3AgPSBHcmFkaWVudENv
bG9yU3RvcDsKLSAgICB1c2luZyBDb2xvclN0b3BWZWN0b3IgPSBHcmFkaWVudENvbG9yU3RvcFZl
Y3RvcjsKLQogICAgIHN0cnVjdCBMaW5lYXJEYXRhIHsKICAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDA7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOwpAQCAtOTYsMTYgKzkzLDE1IEBAIGNsYXNz
IEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsgKHB1YmxpYwogCiAgICAg
dXNpbmcgRGF0YSA9IHN0ZDo6dmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRhLCBDb25pY0Rh
dGE+OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKERh
dGEmJiwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCA9IEdy
YWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIENvbG9yU3RvcFZlY3RvciYmID0geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoRGF0YSYmLCBDb2xvcklu
dGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kID0gR3JhZGllbnRTcHJlYWRN
ZXRob2Q6OlBhZCwgR3JhZGllbnRDb2xvclN0b3BzJiYgPSB7IH0pOwogCiAgICAgYm9vbCBpc1pl
cm9TaXplKCkgY29uc3Q7CiAKICAgICBjb25zdCBEYXRhJiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChDb2xvclN0
b3AmJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9y
U3RvcFZlY3RvciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChHcmFk
aWVudENvbG9yU3RvcCYmKTsKIAotICAgIGNvbnN0IENvbG9yU3RvcFZlY3RvciYgc3RvcHMoKSBj
b25zdCB7IHJldHVybiBtX3N0b3BzOyB9CisgICAgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBz
dG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KICAgICBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsgfQogCiAgICAg
dm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTMwLDE2
ICsxMjYsMTQgQEAgY2xhc3MgR3JhZGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFkaWVudD4g
eyAocHVibGljCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBHcmFkaWVudChEYXRhJiYsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGll
bnRTcHJlYWRNZXRob2QsIENvbG9yU3RvcFZlY3RvciYmKTsKKyAgICBleHBsaWNpdCBHcmFkaWVu
dChEYXRhJiYsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGllbnRTcHJlYWRNZXRob2Qs
IEdyYWRpZW50Q29sb3JTdG9wcyYmKTsKIAotICAgIHZvaWQgc29ydFN0b3BzKCkgY29uc3Q7CiAg
ICAgdm9pZCBzdG9wc0NoYW5nZWQoKTsKIAogICAgIERhdGEgbV9kYXRhOwogICAgIENvbG9ySW50
ZXJwb2xhdGlvbk1ldGhvZCBtX2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZDsKICAgICBHcmFkaWVu
dFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKLSAgICBtdXRhYmxlIENvbG9yU3RvcFZlY3Rv
ciBtX3N0b3BzOwotICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKKyAg
ICBHcmFkaWVudENvbG9yU3RvcHMgbV9zdG9wczsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2Fj
aGVkSGFzaCB7IDAgfTsKIAogI2lmIFVTRShDRykKQEAgLTI1NywxOCArMjUxLDEyIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50PgogICAgIGlm
ICghc3ByZWFkTWV0aG9kKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxDb2xvclN0b3BWZWN0b3I+IHN0b3BzOworICAgIHN0ZDo6b3B0aW9uYWw8R3Jh
ZGllbnRDb2xvclN0b3BzPiBzdG9wczsKICAgICBkZWNvZGVyID4+IHN0b3BzOwogICAgIGlmICgh
c3RvcHMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gR3JhZGll
bnQ6OmNyZWF0ZShXVEZNb3ZlKCpkYXRhKSwgKmNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgKnNw
cmVhZE1ldGhvZCwgV1RGTW92ZSgqc3RvcHMpKTsKLX0KLQotaW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgLy8gRklYTUU6IFdlIGRvbid0
IHdhbnQgdG8gaGFzaCBhIGhhc2g7IGRvIGJldHRlci4KLSAgICBhZGQoaGFzaGVyLCBjb2xvci5o
YXNoKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudENvbG9yU3RvcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wLmgJKHJldmlz
aW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
Q29sb3JTdG9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSA8b3B0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw4
ICszOSw2IEBAIHN0cnVjdCBHcmFkaWVudENvbG9yU3RvcCB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhZGllbnRDb2xvclN0b3A+IGRlY29k
ZShEZWNvZGVyJik7CiB9OwogCi11c2luZyBHcmFkaWVudENvbG9yU3RvcFZlY3RvciA9IFZlY3Rv
cjxHcmFkaWVudENvbG9yU3RvcCwgMj47Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZv
aWQgR3JhZGllbnRDb2xvclN0b3A6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewog
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OwpAQCAtNjAsNiArNTgsMTEgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxHcmFkaWVudENvbG9yCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4ge3sgKm9mZnNldCwgKmNvbG9yIH19OworfQorCitp
bmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wJiBz
dG9wKQoreworICAgIGFkZChoYXNoZXIsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0
b3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnRDb2xvclN0b3BzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhZGllbnRDb2xvclN0
b3AuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYWRpZW50
Q29sb3JTdG9wcyB7CitwdWJsaWM6CisgICAgdXNpbmcgU3RvcFZlY3RvciA9IFZlY3RvcjxHcmFk
aWVudENvbG9yU3RvcCwgMj47CisKKyAgICBzdHJ1Y3QgU29ydGVkIHsKKyAgICAgICAgU3RvcFZl
Y3RvciBzdG9wczsKKyAgICB9OworCisgICAgR3JhZGllbnRDb2xvclN0b3BzKCkKKyAgICAgICAg
OiBtX2lzU29ydGVkIHsgdHJ1ZSB9CisgICAgeworICAgIH0KKworICAgIEdyYWRpZW50Q29sb3JT
dG9wcyhTdG9wVmVjdG9yIHN0b3BzKQorICAgICAgICA6IG1fc3RvcHMgeyBXVEZNb3ZlKHN0b3Bz
KSB9CisgICAgICAgICwgbV9pc1NvcnRlZCB7IGZhbHNlIH0KKyAgICB7CisgICAgfQorCisgICAg
R3JhZGllbnRDb2xvclN0b3BzKFNvcnRlZCBzb3J0ZWRTdG9wcykKKyAgICAgICAgOiBtX3N0b3Bz
IHsgV1RGTW92ZShzb3J0ZWRTdG9wcy5zdG9wcykgfQorICAgICAgICAsIG1faXNTb3J0ZWQgeyB0
cnVlIH0KKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUlzU29ydGVkKCkpOworICAgIH0K
KworICAgIHZvaWQgYWRkQ29sb3JTdG9wKEdyYWRpZW50Q29sb3JTdG9wIHN0b3ApCisgICAgewor
ICAgICAgICBpZiAoIW1fc3RvcHMuaXNFbXB0eSgpICYmIG1fc3RvcHMubGFzdCgpLm9mZnNldCA+
IHN0b3Aub2Zmc2V0KQorICAgICAgICAgICAgbV9pc1NvcnRlZCA9IGZhbHNlOworICAgICAgICBt
X3N0b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsKKyAgICB9CisKKyAgICB2b2lkIHNvcnQoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1faXNTb3J0ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIFtd
IChhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9m
ZnNldDsKKyAgICAgICAgfSk7CisgICAgICAgIG1faXNTb3J0ZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc29ydGVkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGNvbnN0X2Nhc3Q8R3JhZGllbnRDb2xvclN0b3BzKj4odGhpcyktPnNvcnQoKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9wcy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BzLmlzRW1wdHkoKTsgfQorCisgICAgU3RvcFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX3N0b3BzLmJlZ2luKCk7IH0KKyAgICBTdG9wVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzLmVuZCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbj4gR3JhZGllbnRDb2xvclN0b3BzIG1hcENv
bG9ycyhNYXBGdW5jdGlvbiYmIG1hcEZ1bmN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgR3Jh
ZGllbnRDb2xvclN0b3BzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RvcHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3Bz
KQorICAgICAgICAgICAgcmVzdWx0Lm1fc3RvcHMudW5jaGVja2VkQXBwZW5kKHsgc3RvcC5vZmZz
ZXQsIG1hcEZ1bmN0aW9uKHN0b3AuY29sb3IpIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGNvbnN0IFN0b3BWZWN0b3ImIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9wczsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEdyYWRpZW50Q29sb3JTdG9wcz4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0
ZToKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgdmFsaWRhdGVJc1NvcnRlZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjppc19zb3J0ZWQobV9zdG9wcy5iZWdpbigpLCBt
X3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgeworICAgICAgICAgICAgcmV0dXJu
IGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAg
U3RvcFZlY3RvciBtX3N0b3BzOworICAgIGJvb2wgbV9pc1NvcnRlZDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnRDb2xvclN0b3BzOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc3RvcHM7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8R3JhZGllbnRDb2xvclN0b3BzPiBH
cmFkaWVudENvbG9yU3RvcHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8U3RvcFZlY3Rvcj4gc3RvcHM7CisgICAgZGVjb2RlciA+PiBzdG9wczsKKyAgICBp
ZiAoIXN0b3BzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7
IFdURk1vdmUoKnN0b3BzKSB9fTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHJldmlz
aW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgR3Jh
ZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJH
QkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBm
bG9hdCBnbG9iYWxBbHBoYSkKK3N0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0
dGVybl90ICpncmFkaWVudCwgR3JhZGllbnRDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxw
aGEpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQs
IHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwpAQCAtNTMsNyArNTMsNyBA
QCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsKICAgICBkb3VibGUgeCwgeTsKIH0gcG9pbnRfdDsK
IAotc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGll
bnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkK
K3N0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50
LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewog
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CiAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwg
aWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBk
b3VibGUgbm9ybWFsaXplQW5nbGUoZG91YmxlIGFuZ2xlKQogfQogCiBzdGF0aWMgdm9pZCBhZGRD
b25pY1NlY3RvcihjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBmbG9hdCBjeCwgZmxvYXQgY3ks
IGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFkaWFucywKLSAgICBHcmFkaWVudDo6Q29sb3JTdG9wIGZy
b20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8sIGZsb2F0IGdsb2JhbEFscGhhKQorICAgIEdyYWRp
ZW50Q29sb3JTdG9wIGZyb20sIEdyYWRpZW50Q29sb3JTdG9wIHRvLCBmbG9hdCBnbG9iYWxBbHBo
YSkKIHsKICAgICBjb25zdCBkb3VibGUgYW5nT2Zmc2V0ID0gMC4yNTsgLy8gOTAgZGVncmVlcy4K
IApAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3Bh
dHRlcm5fdCAqZ3JhZGllbnQsIAogfQogCiBzdGF0aWMgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4g
Y3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0IHlvLCBmbG9hdCByLCBmbG9hdCBhbmdsZVJhZGlh
bnMsCi0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBzdG9wcywgZmxvYXQgZ2xvYmFsQWxw
aGEpCisgICAgR3JhZGllbnRDb2xvclN0b3BzOjpTdG9wVmVjdG9yIHN0b3BzLCBmbG9hdCBnbG9i
YWxBbHBoYSkKIHsKICAgICAvLyBEZWdlbmVyYXRlZCBncmFkaWVudHMgd2l0aCB0d28gc3RvcHMg
YXQgdGhlIHNhbWUgb2Zmc2V0IGFycml2ZSB3aXRoIGEgc2luZ2xlIHN0b3AgYXQgMC4wCiAgICAg
Ly8gQWRkIGFub3RoZXIgcG9pbnQgaGVyZSBzbyBpdCBjYW4gYmUgaW50ZXJwb2xhdGVkIHByb3Bl
cmx5IGJlbG93LgpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyBSZWZQdHI8Y2Fpcm9fcGF0dGVy
bl90PiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZgogICAgICAgICAgICAgICAgIGxhc3QsIHswLjI1
LCBsYXN0LmNvbG9yfSwgezAuNSwgbGFzdC5jb2xvcn0sIHswLjc1LCBsYXN0LmNvbG9yfSwgezEu
MCwgbGFzdC5jb2xvcn0KICAgICAgICAgICAgIH07CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBhdXRvIGludGVycG9sYXRlZFN0b3AgPSBbJl0gKGRvdWJsZSBmcmFjdGlvbikgLT4gR3Jh
ZGllbnQ6OkNvbG9yU3RvcCB7CisgICAgICAgICAgICBhdXRvIGludGVycG9sYXRlZFN0b3AgPSBb
Jl0gKGRvdWJsZSBmcmFjdGlvbikgLT4gR3JhZGllbnRDb2xvclN0b3AgewogICAgICAgICAgICAg
ICAgIGF1dG8gb2Zmc2V0ID0gYmxlbmQoc3RvcHMuZmlyc3QoKS5vZmZzZXQsIHN0b3BzLmxhc3Qo
KS5vZmZzZXQsIGZyYWN0aW9uKTsKICAgICAgICAgICAgICAgICBhdXRvIGludGVycENvbG9yID0g
YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoc3RvcHMuZmlyc3QoKS5jb2xvciwgc3RvcHMubGFzdCgp
LmNvbG9yLCBmcmFjdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb2Zmc2V0LCBpbnRl
cnBDb2xvciB9OwpAQCAtMjI0LDcgKzIyNCw3IEBAIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IEdy
YWRpZW50OjpjcmVhdGVQYXR0ZXJuKGZsb2F0IAogICAgICAgICAgICAgLy8gVGh1cywgaGVyZSBJ
IGdpdmUgdGhlIHJhZGl1cyBhbiBleHRyZW1lbHkgbGFyZ2UgdmFsdWUuIFRoZSByZXN1bHRpbmcg
Z3JhZGllbnQgd2lsbCBiZSBsYXRlciBjbGlwcGVkIGJ5IGZpbGxSZWN0LgogICAgICAgICAgICAg
Ly8gQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gY291bGQgYmUgdG8gY2hhbmdlIHRoZSBBUEkgYW5k
IHBhc3MgYSByZWN0J3Mgd2lkdGggYW5kIGhlaWdodCB0byBvcHRpbWl6ZSB0aGUgY29tcHV0YXRp
b24gb2YgdGhlIHJhZGl1cy4KICAgICAgICAgICAgIGNvbnN0IGZsb2F0IHJhZGl1cyA9IDQwOTY7
Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29uaWMoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBv
aW50MC55KCksIHJhZGl1cywgZGF0YS5hbmdsZVJhZGlhbnMsIHN0b3BzKCksIGdsb2JhbEFscGhh
KTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25pYyhkYXRhLnBvaW50MC54KCksIGRhdGEu
cG9pbnQwLnkoKSwgcmFkaXVzLCBkYXRhLmFuZ2xlUmFkaWFucywgc3RvcHMoKS5zdG9wcygpLCBn
bG9iYWxBbHBoYSk7CiAgICAgICAgIH0KICAgICApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkocmV2aXNpb24gMjg3
MzM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1Myw4IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIAogdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKIHsKLSAgICBpZiAoIW1fcGxhdGZvcm1SZW5kZXJlcikg
ewotICAgICAgICBzb3J0U3RvcHMoKTsKLSAgICAgICAgbV9wbGF0Zm9ybVJlbmRlcmVyID0gR3Jh
ZGllbnRSZW5kZXJlckNHIHsgbV9jb2xvckludGVycG9sYXRpb25NZXRob2QsIG1fc3RvcHMgfTsK
LSAgICB9CisgICAgaWYgKCFtX3BsYXRmb3JtUmVuZGVyZXIpCisgICAgICAgIG1fcGxhdGZvcm1S
ZW5kZXJlciA9IEdyYWRpZW50UmVuZGVyZXJDRyB7IG1fY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9k
LCBtX3N0b3BzLnNvcnRlZCgpIH07CiAKICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAg
ICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5j
cHAJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4ICsyOCwx
OSBAQAogCiAjaW5jbHVkZSAiQ29sb3JJbnRlcnBvbGF0aW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZUNHLmgiCisjaW5jbHVkZSAiR3JhZGllbnRDb2xvclN0b3BzLmgiCiAjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFk
aWVudFJlbmRlcmVyQ0c6OkdyYWRpZW50UmVuZGVyZXJDRyhDb2xvckludGVycG9sYXRpb25NZXRo
b2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZlY3Rv
ciYgc3RvcHMpCitHcmFkaWVudFJlbmRlcmVyQ0c6OkdyYWRpZW50UmVuZGVyZXJDRyhDb2xvcklu
dGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVu
dENvbG9yU3RvcHMmIHN0b3BzKQogICAgIDogbV9zdHJhdGVneSB7IHBpY2tTdHJhdGVneShjb2xv
ckludGVycG9sYXRpb25NZXRob2QsIHN0b3BzKSB9CiB7CiB9CiAKIC8vIE1BUks6IC0gU3RyYXRl
Z3kgc2VsZWN0aW9uLgogCi1HcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVu
ZGVyZXJDRzo6cGlja1N0cmF0ZWd5KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVy
cG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJiBzdG9wcykgY29u
c3QKK0dyYWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjpwaWNr
U3RyYXRlZ3koQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBzdG9wcykgY29uc3QKIHsKICAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihjb2xvckludGVycG9sYXRpb25NZXRob2QuY29sb3JTcGFjZSwKICAgICAg
ICAgWyZdIChjb25zdCBDb2xvckludGVycG9sYXRpb25NZXRob2Q6OlNSR0ImKSAtPiBTdHJhdGVn
eSB7CkBAIC02NCw3ICs2NSw3IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGll
bnRSZW5kZXJlckNHOjpwaWNrUwogCiAvLyBNQVJLOiAtIEdyYWRpZW50IHN0cmF0ZWd5LgogCi1H
cmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRp
ZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNv
bnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJiBzdG9wcykgY29uc3QKK0dyYWRpZW50UmVuZGVy
ZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlR3JhZGllbnQoQ29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRD
b2xvclN0b3BzJiBzdG9wcykgY29uc3QKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZCwgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvckludGVycG9sYXRpb25N
ZXRob2Q6OlNSR0I+KGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5jb2xvclNwYWNlKSk7CiAjaWYg
IUhBVkUoQ09SRV9HUkFQSElDU19QUkVNVUxUSVBMSUVEX0lOVEVSUE9MQVRJT05fR1JBRElFTlQp
CkBAIC0yMDEsNyArMjAyLDcgQEAgdm9pZCBHcmFkaWVudFJlbmRlcmVyQ0c6OlNoYWRpbmc6OnNo
YWRpbmdGdW5jdGlvbih2b2lkCiAgICAgICAgIG91dFtjb21wb25lbnRJbmRleF0gPSBpbnRlcnBv
bGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0U3BhY2VbY29tcG9uZW50SW5kZXhdOwogfQogCi1H
cmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRp
bmcoQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
c3QgR3JhZGllbnRDb2xvclN0b3BWZWN0b3ImIHN0b3BzKSBjb25zdAorR3JhZGllbnRSZW5kZXJl
ckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VTaGFkaW5nKENvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29s
b3JTdG9wcyYgc3RvcHMpIGNvbnN0CiB7CiAgICAgYXV0byBtYWtlRGF0YSA9IFsmXSAoYXV0byBj
b2xvckludGVycG9sYXRpb25NZXRob2QsIGF1dG8mIHN0b3BzKSB7CiAgICAgICAgIGF1dG8gY29u
dmVydENvbG9yVG9Db2xvckludGVycG9sYXRpb25TcGFjZSA9IFsmXSAoY29uc3QgQ29sb3ImIGNv
bG9yLCBhdXRvIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCkgLT4gQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFk
aWVudFJlbmRlcmVyQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAkocmV2aXNpb24gMjg3MzM4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50
cy5oIgogI2luY2x1ZGUgIkNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5oIgotI2luY2x1ZGUgIkdy
YWRpZW50Q29sb3JTdG9wLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KQEAgLTM1LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBHcmFkaWVudENvbG9yU3RvcHM7CisKIHN0cnVjdCBDb2xvckNvbnZlcnRlZFRvSW50ZXJw
b2xhdGlvbkNvbG9yU3BhY2VTdG9wIHsKICAgICBmbG9hdCBvZmZzZXQ7CiAgICAgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiBjb2xvckNvbXBvbmVudHM7CkBAIC00Miw3ICs0Myw3IEBAIHN0cnVj
dCBDb2xvckNvbnZlcnRlZFRvSW50ZXJwb2xhdGlvbkNvbG9yU3BhY2VTdG9wIHsKIAogY2xhc3Mg
R3JhZGllbnRSZW5kZXJlckNHIHsKIHB1YmxpYzoKLSAgICBHcmFkaWVudFJlbmRlcmVyQ0coQ29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZlY3RvciYpOwor
ICAgIEdyYWRpZW50UmVuZGVyZXJDRyhDb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdy
YWRpZW50Q29sb3JTdG9wcyYpOwogCiAgICAgdm9pZCBkcmF3TGluZWFyR3JhZGllbnQoQ0dDb250
ZXh0UmVmLCBDR1BvaW50IHN0YXJ0UG9pbnQsIENHUG9pbnQgZW5kUG9pbnQsIENHR3JhZGllbnRE
cmF3aW5nT3B0aW9ucyk7CiAgICAgdm9pZCBkcmF3UmFkaWFsR3JhZGllbnQoQ0dDb250ZXh0UmVm
LCBDR1BvaW50IHN0YXJ0Q2VudGVyLCBDR0Zsb2F0IHN0YXJ0UmFkaXVzLCBDR1BvaW50IGVuZENl
bnRlciwgQ0dGbG9hdCBlbmRSYWRpdXMsIENHR3JhZGllbnREcmF3aW5nT3B0aW9ucyk7CkBAIC04
NCw5ICs4NSw5IEBAIGNsYXNzIEdyYWRpZW50UmVuZGVyZXJDRyB7IChwcml2YXRlKQogCiAgICAg
dXNpbmcgU3RyYXRlZ3kgPSBzdGQ6OnZhcmlhbnQ8R3JhZGllbnQsIFNoYWRpbmc+OwogCi0gICAg
U3RyYXRlZ3kgcGlja1N0cmF0ZWd5KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3Jh
ZGllbnRDb2xvclN0b3BWZWN0b3ImKSBjb25zdDsKLSAgICBTdHJhdGVneSBtYWtlR3JhZGllbnQo
Q29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZlY3RvciYp
IGNvbnN0OwotICAgIFN0cmF0ZWd5IG1ha2VTaGFkaW5nKENvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BWZWN0b3ImKSBjb25zdDsKKyAgICBTdHJhdGVneSBw
aWNrU3RyYXRlZ3koQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9y
U3RvcHMmKSBjb25zdDsKKyAgICBTdHJhdGVneSBtYWtlR3JhZGllbnQoQ29sb3JJbnRlcnBvbGF0
aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmKSBjb25zdDsKKyAgICBTdHJhdGVn
eSBtYWtlU2hhZGluZyhDb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29s
b3JTdG9wcyYpIGNvbnN0OwogCiAgICAgU3RyYXRlZ3kgbV9zdHJhdGVneTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAJKHJldmlzaW9uIDI4NzMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNSwxMyArMjI1LDEyIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotR3JhZGll
bnQ6OkNvbG9yU3RvcFZlY3RvciBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpzdG9wc0J5QXBw
bHlpbmdDb2xvckZpbHRlcihjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yJiBzdG9wcywg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorR3JhZGllbnRDb2xvclN0b3BzIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OnN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKGNvbnN0IEdyYWRpZW50
Q29sb3JTdG9wcyYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzdG9wcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgc3RvcC5vZmZzZXQsIHN0eWxlLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKHN0b3AuY29sb3IpIH0pOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgaWYgKCFzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAgICAgIHJldHVybiBzdG9w
czsKKworICAgIHJldHVybiBzdG9wcy5tYXBDb2xvcnMoWyZdIChhdXRvJiBjb2xvcikgeyByZXR1
cm4gc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29sb3IpOyB9KTsKIH0KIAogR3Jh
ZGllbnRTcHJlYWRNZXRob2QgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cGxhdGZvcm1TcHJl
YWRNZXRob2RGcm9tU1ZHVHlwZShTVkdTcHJlYWRNZXRob2RUeXBlIG1ldGhvZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oCShyZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IDogcHVibGljIFJlbmRl
clNWR1Jlc28KIHByb3RlY3RlZDoKICAgICBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50KFNWR0dy
YWRpZW50RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwogCi0gICAgc3RhdGljIEdyYWRpZW50OjpD
b2xvclN0b3BWZWN0b3Igc3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29uc3QgR3JhZGllbnQ6
OkNvbG9yU3RvcFZlY3RvciYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIEdyYWRp
ZW50Q29sb3JTdG9wcyBzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRlcihjb25zdCBHcmFkaWVudENv
bG9yU3RvcHMmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBwbGF0Zm9ybVNwcmVhZE1ldGhvZEZyb21TVkdUeXBlKFNWR1NwcmVhZE1ldGhvZFR5
cGUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCShy
ZXZpc2lvbiAyODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIFJlZjxHcmFkaWVudD4gUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6YnVpbGRH
cgogewogICAgIHJldHVybiBHcmFkaWVudDo6Y3JlYXRlKAogICAgICAgICBHcmFkaWVudDo6TGlu
ZWFyRGF0YSB7IHN0YXJ0UG9pbnQobV9hdHRyaWJ1dGVzKSwgZW5kUG9pbnQobV9hdHRyaWJ1dGVz
KSB9LAotICAgICAgICBDb2xvckludGVycG9sYXRpb25NZXRob2QgeyBDb2xvckludGVycG9sYXRp
b25NZXRob2Q6OlNSR0IgeyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQgfSwKKyAgICAgICAgeyBDb2xvckludGVycG9sYXRpb25NZXRob2Q6OlNSR0IgeyB9LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfSwKICAgICAgICAgcGxhdGZvcm1T
cHJlYWRNZXRob2RGcm9tU1ZHVHlwZShtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpLAogICAg
ICAgICBzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRlcihtX2F0dHJpYnV0ZXMuc3RvcHMoKSwgc3R5
bGUpCiAgICAgKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkocmV2aXNp
b24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBS
ZWY8R3JhZGllbnQ+IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmJ1aWxkR3IKIHsK
ICAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZSgKICAgICAgICAgR3JhZGllbnQ6OlJhZGlhbERh
dGEgeyBmb2NhbFBvaW50KG1fYXR0cmlidXRlcyksIGNlbnRlclBvaW50KG1fYXR0cmlidXRlcyks
IGZvY2FsUmFkaXVzKG1fYXR0cmlidXRlcyksIHJhZGl1cyhtX2F0dHJpYnV0ZXMpLCAxIH0sCi0g
ICAgICAgIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCB7IENvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZDo6U1JHQiB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCB9LAor
ICAgICAgICB7IENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZDo6U1JHQiB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCB9LAogICAgICAgICBwbGF0Zm9ybVNwcmVhZE1l
dGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSksCiAgICAgICAgIHN0
b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKG1fYXR0cmlidXRlcy5zdG9wcygpLCBzdHlsZSkKICAg
ICApOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNp
b24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMg
ewogICAgIFNWR1NwcmVhZE1ldGhvZFR5cGUgc3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8U1ZHU3ByZWFkTWV0aG9kVHlwZT4obV9zcHJlYWRNZXRob2QpOyB9CiAgICAg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBncmFkaWVudFVuaXRzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZT4obV9ncmFkaWVudFVuaXRzKTsg
fQogICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JhZGllbnRUcmFuc2Zvcm07IH0KLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wVmVj
dG9yJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KKyAgICBjb25zdCBHcmFkaWVu
dENvbG9yU3RvcHMmIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCiAgICAgdm9p
ZCBzZXRTcHJlYWRNZXRob2QoU1ZHU3ByZWFkTWV0aG9kVHlwZSB2YWx1ZSkKICAgICB7CkBAIC01
Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMgewogICAgICAgICBtX2dyYWRp
ZW50VHJhbnNmb3JtU2V0ID0gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0b3BzKEdyYWRp
ZW50OjpDb2xvclN0b3BWZWN0b3ImJiB2YWx1ZSkKKyAgICB2b2lkIHNldFN0b3BzKEdyYWRpZW50
Q29sb3JTdG9wcyYmIHZhbHVlKQogICAgIHsKICAgICAgICAgbV9zdG9wcyA9IFdURk1vdmUodmFs
dWUpOwogICAgIH0KQEAgLTcwLDcgKzcwLDcgQEAgc3RydWN0IEdyYWRpZW50QXR0cmlidXRlcyB7
CiBwcml2YXRlOgogICAgIC8vIFByb3BlcnRpZXMKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFk
aWVudFRyYW5zZm9ybTsKLSAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIG1fc3RvcHM7Cisg
ICAgR3JhZGllbnRDb2xvclN0b3BzIG1fc3RvcHM7CiAKICAgICB1bnNpZ25lZCBtX3NwcmVhZE1l
dGhvZCA6IDI7CiAgICAgdW5zaWduZWQgbV9ncmFkaWVudFVuaXRzIDogMjsKQEAgLTgzLDcgKzgz
LDcgQEAgc3RydWN0IEdyYWRpZW50QXR0cmlidXRlcyB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzR3Jh
ZGllbnRBdHRyaWJ1dGVzIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYTsKLSAgICBHcmFkaWVudDo6
Q29sb3JTdG9wVmVjdG9yIGI7CisgICAgR3JhZGllbnRDb2xvclN0b3BzIGI7CiAgICAgdW5zaWdu
ZWQgYyA6IDc7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjg3MzM4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDE0ICs5OCwxNCBAQCB2b2lkIFNW
R0dyYWRpZW50RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2gKICAgICAgICAg
b2JqZWN0LT5zZXROZWVkc0xheW91dCgpOwogfQogCi1HcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9y
IFNWR0dyYWRpZW50RWxlbWVudDo6YnVpbGRTdG9wcygpCitHcmFkaWVudENvbG9yU3RvcHMgU1ZH
R3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKCkKIHsKLSAgICBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIHN0b3BzOworICAgIEdyYWRpZW50Q29sb3JTdG9wcyBzdG9wczsKICAgICBmbG9hdCBw
cmV2aW91c09mZnNldCA9IDAuMGY7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogY2hpbGRyZW5PZlR5
cGU8U1ZHU3RvcEVsZW1lbnQ+KCp0aGlzKSkgewogICAgICAgICBhdXRvIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nT2Zmc2V0ID0gc3RkOjpjbGFtcChzdG9wLm9mZnNldCgpLCBwcmV2aW91c09mZnNl
dCwgMS4wZik7CiAgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdPZmZzZXQ7Ci0gICAgICAgIHN0b3BzLmFwcGVuZCh7IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
T2Zmc2V0LCBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSB9KTsKKyAgICAgICAgc3Rv
cHMuYWRkQ29sb3JTdG9wKHsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQsIHN0b3Auc3Rv
cENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIH0pOwogICAgIH0KICAgICByZXR1cm4gc3RvcHM7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAy
ODczMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgY2xhc3MgU1ZHR3JhZGllbnRFbGVtZW50IDogcHVi
bGljIFNWR0VsZW1lbnQsIHB1YmxpYyBTCiAgICAgICAgIFNWR19TUFJFQURNRVRIT0RfUkVQRUFU
ID0gU1ZHU3ByZWFkTWV0aG9kVW5rbm93bgogICAgIH07CiAKLSAgICBHcmFkaWVudDo6Q29sb3JT
dG9wVmVjdG9yIGJ1aWxkU3RvcHMoKTsKKyAgICBHcmFkaWVudENvbG9yU3RvcHMgYnVpbGRTdG9w
cygpOwogCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdp
c3RyeTxTVkdHcmFkaWVudEVsZW1lbnQsIFNWR0VsZW1lbnQsIFNWR1VSSVJlZmVyZW5jZT47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447884</attachid>
            <date>2021-12-23 11:00:06 -0800</date>
            <delta_ts>2021-12-23 13:56:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234583-20211223110005.patch</filename>
            <type>text/plain</type>
            <size>45717</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAyMS0xMi0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgZ3JhZGllbnQg
Y29sb3Igc3RvcHMgaW50byBhIHNlbGYgY29udGFpbmVkIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIG1vc3QgdXNlcyBvZiBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGggbmV3IEdyYWRpZW50Q29sb3JTdG9wcyBjbGFzcy4K
KworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGUuCisKKyAgICAgICAgKiBjc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyk6CisgICAg
ICAgIFJlcGxhY2Ugc29tZSB1c2FnZSBvZiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHdpdGgg
R3JhZGllbnRDb2xvclN0b3BzLiBXaGlsZSBoZXJlLAorICAgICAgICBvcHRpbWl6ZSBjb2xvciBm
aWx0ZXIgdHJhbnNmb3JtYXRpb24gdG8gb25seSBoYXBwZW4gd2hlbiB0aGVyZSBpcyBjb2xvciBm
aWx0ZXIsCisgICAgICAgIHJlbW92aW5nIGV4dHJhIHVubmVjZXNzYXJ5IGNvcGllcyBvZiBDb2xv
cnMuCisKKyAgICAgICAgQWxzbyB1dGlsaXplcyB0aGUgR3JhZGllbnRDb2xvclN0b3BzOjpTb3J0
ZWQgdHlwZSB0byBjcmVhdGUgYSBHcmFkaWVudENvbG9yU3RvcHMKKyAgICAgICAgb2JqZWN0IHRo
YXQgaGFzIHRoZSBpc1NvcnRlZCBiaXQgc2V0LgorIAorICAgICAgICAoV2ViQ29yZTo6Q1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIFRoZSBjYWxs
cyB0byBzZXRTb3J0ZWRDb2xvclN0b3BzIGlzIG5vIGxvbmdlciBuZWVkZWQsIGFzIHRoZSBHcmFk
aWVudENvbG9yU3RvcHMKKyAgICAgICAgbm93IG1haW50YWlucyB0aGF0IHN0YXRlLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
CisgICAgICAgIE1vdmUgZGVmaW5pdGlvbiBvZiBhZGQoSGFzaGVyJiwgQ29sb3IpIGhlcmUsIHdo
ZXJlIGl0IG1ha2VzIHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdy
YWRpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgTW92ZSBkZWZpbml0aW9uIG9mIGFkZChIYXNo
ZXImLCBGbG9hdFBvaW50KSBoZXJlLCB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcmF0aGVyIHRoYW4K
KyAgICAgICAga2VlcGluZyBpdCBpbiBHcmFkaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
ZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U29ydGVkQ29sb3JTdG9wcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgUmVwbGFjZSBDb2xvclN0b3BWZWN0b3Igd2l0aCBHcmFkaWVudENvbG9yU3RvcHMu
IFRoaXMgYWxsb3dzIHJlbW92aW5nIHRoZSBtX3N0b3BzU29ydGVkCisgICAgICAgIGJpdCwgYXMg
dGhlIG5ldyBjbGFzcyBtYWludGFpbnMgdGhhdCwgYXMgd2VsbCBhcyByZW1vdmluZyBzZXRTb3J0
ZWRDb2xvclN0b3BzIHNpbmNlCisgICAgICAgIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGp1c3Qg
Y3JlYXRpbmcgdGhlIEdyYWRpZW50IHdpdGggYSBHcmFkaWVudENvbG9yU3RvcHMgdGhhdCBrbm93
cworICAgICAgICBpdCBpcyBzb3J0ZWQgKHVzaW5nIHRoZSBHcmFkaWVudENvbG9yU3RvcHM6OlNv
cnRlZCBoZWxwZXIpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xv
clN0b3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIE1vdmUgZGVmaW5pdGlv
biBvZiBhZGQoSGFzaGVyJiwgR3JhZGllbnRDb2xvclN0b3ApIGhlcmUsIHdoZXJlIGl0IG1ha2Vz
IHNlbnNlLCByYXRoZXIgdGhhbgorICAgICAgICBrZWVwaW5nIGl0IGluIEdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRDb2xvclN0b3BzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpHcmFkaWVudENvbG9yU3RvcHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjphZGRDb2xvclN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRDb2xvclN0b3BzOjpzb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c29ydGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50Q29sb3JTdG9wczo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudENvbG9yU3RvcHM6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRDb2xvclN0b3BzOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dENvbG9yU3RvcHM6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6Om1hcENvbG9ycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OnN0b3BzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Q29sb3JTdG9w
czo6dmFsaWRhdGVJc1NvcnRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENv
bG9yU3RvcHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudENvbG9y
U3RvcHM6OmRlY29kZSk6CisgICAgICAgIEVuY2Fwc3VsYXRlIHN0YXRlIGFuZCBmdW5jdGlvbmFs
aXR5IG9mIHRoZSBncmFkaWVudCBjb2xvciBzdG9wIGxpc3QsIG1haW50YWluaW5nCisgICAgICAg
IHRoZSBzb3J0ZWQgc3RhdGUsIGFuZCBwcm92aWRpbmcgYSBwbGVhc2VudCBBUEkgdG8gd29yayB3
aXRoLiBJbiB0aGUgZnV0dXJlLCB0aGlzCisgICAgICAgIHdpbGwgYmUgYSBnb29kIHBsYWNlIHRv
IGFkZCBmdW5jdGlvbnMgdG8gYW5hbHl6ZSBhbmQgdHJhbnNmb3JtIHRoZSBsaXN0IGZvciBvcHRp
bWl6aW5nCisgICAgICAgIHdoYXQgY2FuIHVzZSB0aGUgZ3JhZGllbnQgZmFzdCBwYXRocy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIHRoZSBuZXcgbmFtZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpw
YWludCk6CisgICAgICAgIEVuc3VyZSB0aGUgY29sb3Igc3RvcHMgcGFzc2VkIHRvIHRoZSBncmFk
aWVudCByZW5kZXJlciBhcmUgc29ydGVkIHVzaW5nIHRoZSBzb3J0ZWQoKQorICAgICAgICBoZWxw
ZXIsIHdoaWNoIGRvZXMgYW4gaW5wbGFjZSBzb3J0IGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVy
ZXJDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OkdyYWRpZW50UmVu
ZGVyZXJDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OnBpY2tTdHJh
dGVneSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VH
cmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1h
a2VTaGFkaW5nIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JT
dG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3BzLgorCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OnN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKToKKyAgICAg
ICAgQWRkIGVhcmx5IHJldHVybiBpZiB0aGVyZSBpcyBubyBjb2xvciBmaWx0ZXIgdG8gYXBwbHks
IGFuZCB1dGlsaXplIHRoZSBtYXBDb2xvcnMoKQorICAgICAgICBmdW5jdGlvbiB0byB1cGRhdGUg
dGhlIGNvbG9ycyBpZiB0aGVyZSBpcy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpidWlsZEdyYWRpZW50IGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6YnVpbGRHcmFk
aWVudCBjb25zdCk6CisgICAgICAgIFJlbW92ZSBzb21lIGV4dHJhbmVvdXMgdHlwZSBuYW1lcy4K
KworICAgICAgICAqIHN2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50QXR0cmlidXRlczo6c3RvcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnRBdHRyaWJ1dGVzOjpzZXRTdG9wcyk6CisgICAgICAgICogc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3Rv
cHMpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaDoKKyAgICAgICAgUmVwbGFj
ZSB1c2VzIG9mIEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yIHdpdGggR3JhZGllbnRDb2xvclN0b3Bz
LgorCiAyMDIxLTEyLTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRml4IGNvbXBpbGluZyB3aXRoIHBpY2tpZXIgY29tcGlsZXIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjg3MzY5KQorKysgU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTQ2Miw2ICsxNDYyLDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dENvbG9yU3RvcHMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
ODczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTQwODgsNiArNDA4OCw3IEBACiAJCUJDMTQwMjhCMEU4MzY4
MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNDAyODkwRTgzNjgwODAwMzE5NzE3IC8q
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOUNERjIyNzZGRkM2RDAwNTNGNzM0IC8qIEdyYWRpZW50
UmVuZGVyZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMxOUNERjAyNzZGRkIyNjAwNTNGNzM0IC8qIEdyYWRpZW50UmVuZGVyZXJDRy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMTlDREY0Mjc3
MTA2MzkwMDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxOUNERjMyNzcxMDYzOTAwNTNGNzM0IC8qIEdy
YWRpZW50Q29sb3JTdG9wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQkMxOUNFMkIyNzcyQkY3QjAwNTNGNzM0IC8qIEdyYWRpZW50Q29sb3JTdG9w
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxOUNF
MjkyNzcyQkY3NzAwNTNGNzM0IC8qIEdyYWRpZW50Q29sb3JTdG9wcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMUE3RDk4MThGQ0I1QjAwMDQy
MTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxQTdEOTYxOEZDQjVCMDAwNDIx
ODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmggKi87IH07CiAJCUJD
MjI3Mjg3MEU4MkU3MDcwMEU3Rjk3NSAvKiBTdHlsZVJlZmxlY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjI3Mjg2MEU4MkU3MDcwMEU3Rjk3
NSAvKiBTdHlsZVJlZmxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMjcyQTEw
RTgyRTg3QzAwRTdGOTc1IC8qIEN1cnNvckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTUxMzYsNiArMTUxMzcsNyBAQAogCQlCQzE5Q0RF
RjI3NkZGQjI2MDA1M0Y3MzQgLyogR3JhZGllbnRSZW5kZXJlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyYWRpZW50UmVuZGVyZXJDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMTlDREYwMjc2RkZCMjYwMDUzRjczNCAvKiBHcmFkaWVudFJlbmRlcmVyQ0cuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhZGllbnRSZW5kZXJlckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMTlDREYzMjc3MTA2MzkwMDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFkaWVudENvbG9yU3RvcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzE5Q0UyOTI3NzJCRjc3MDA1M0Y3MzQgLyogR3JhZGllbnRDb2xvclN0b3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYWRpZW50Q29sb3JTdG9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzFBN0Q5NTE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTRGVwcmVjYXRlZENT
U09NVmFsdWVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRGVwcmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjg3ODUsNiArMjg3ODcsNyBAQAogCQkJCUJDNTNDNjA3MERBNTZDNTcwMDIxRUI1
RCAvKiBHcmFkaWVudC5jcHAgKi8sCiAJCQkJQkM1M0M1RjQwREE1NkI5MjAwMjFFQjVEIC8qIEdy
YWRpZW50LmggKi8sCiAJCQkJQkMxOUNERjMyNzcxMDYzOTAwNTNGNzM0IC8qIEdyYWRpZW50Q29s
b3JTdG9wLmggKi8sCisJCQkJQkMxOUNFMjkyNzcyQkY3NzAwNTNGNzM0IC8qIEdyYWRpZW50Q29s
b3JTdG9wcy5oICovLAogCQkJCTJEMkZDMDU2MTQ2MENENkYwMDI2MzYzMyAvKiBHcmFkaWVudElt
YWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NzE0NjBDRDZGMDAyNjM2MzMgLyogR3JhZGllbnRJbWFn
ZS5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQu
Y3BwICovLApAQCAtMzc1NzAsNiArMzc1NzMsNyBAQAogCQkJCUJFOTEzRDgwMTgxRUY5MjQwMERD
QjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDFGOUIxQzI3
MDI0QkMyMDA2MTdFQjYgLyogVHJhY2tQcml2YXRlQmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkZBQzMwRkUxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQkMxOUNFMkIyNzcyQkY3QjAwNTNGNzM0IC8qIEdyYWRpZW50Q29sb3JT
dG9wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMzIxQkQ4MzA4QjAwREJDNEYyIC8qIFRy
YW5zYWN0aW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFRUY0MTI1Nzk5RkQ5
MDA2NTYzQkIgLyogVHJhbnNmZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEx
QzQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9u
IDI4NzM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAwLDEyICszMDAsMTQgQEAgY2xhc3MgQ29uaWNHcmFkaWVudEFkYXB0
ZXIgeyAocHVibGljKQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVyPgot
R3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMo
R3JhZGllbnRBZGFwdGVyJiBncmFkaWVudEFkYXB0ZXIsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
IG1heExlbmd0aEZvclJlcGVhdCkKK0dyYWRpZW50Q29sb3JTdG9wcyBDU1NHcmFkaWVudFZhbHVl
Ojpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWVudEFkYXB0ZXIsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGZsb2F0IG1heExlbmd0aEZvclJlcGVhdCkKIHsKKyAgICBib29sIGhhc0NvbG9y
RmlsdGVyID0gc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpOworCiAgICAgaWYgKG1fZ3JhZGll
bnRUeXBlID09IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9
PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKLSAgICAgICAgR3JhZGllbnQ6OkNvbG9y
U3RvcFZlY3RvciByZXN1bHQ7CisgICAgICAgIEdyYWRpZW50Q29sb3JTdG9wczo6U3RvcFZlY3Rv
ciByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMu
c2l6ZSgpKTsKLQorICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykg
ewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0OwogICAgICAgICAgICAgaWYgKHN0b3AucG9zaXRp
b24tPmlzUGVyY2VudGFnZSgpKQpAQCAtMzEzLDE3ICszMTUsMTQgQEAgR3JhZGllbnQ6OkNvbG9y
U3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5y
ZXNvbHZlZENvbG9yOwotICAgICAgICAgICAgaWYgKHN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIo
KSkKLSAgICAgICAgICAgICAgICBzdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29s
b3IoY29sb3IpOwotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IG9mZnNldCwg
Y29sb3IgfSk7CisgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0LCBo
YXNDb2xvckZpbHRlciA/IHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN0b3AucmVz
b2x2ZWRDb2xvcikgOiBzdG9wLnJlc29sdmVkQ29sb3IgfSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGQ6OnN0YWJsZV9zb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdIChjb25z
dCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBiKSB7
CisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwg
W10gKGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcCYg
YikgewogICAgICAgICAgICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CiAgICAgICAgIH0p
OwogCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBHcmFkaWVudENvbG9y
U3RvcHM6OlNvcnRlZCB7IFdURk1vdmUocmVzdWx0KSB9OwogICAgIH0KIAogICAgIHNpemVfdCBu
dW1TdG9wcyA9IG1fc3RvcHMuc2l6ZSgpOwpAQCAtMzM0LDEyICszMzMsOCBAQCBHcmFkaWVudDo6
Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG8KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgYXV0byYgc3RvcCA9IG1f
c3RvcHNbaV07CiAKLSAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wLnJlc29sdmVkQ29sb3I7Ci0g
ICAgICAgIGlmIChzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICBzdHls
ZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29sb3IoY29sb3IpOworICAgICAgICBzdG9w
c1tpXS5jb2xvciA9IGhhc0NvbG9yRmlsdGVyID8gc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoc3RvcC5yZXNvbHZlZENvbG9yKSA6IHN0b3AucmVzb2x2ZWRDb2xvcjsKIAotICAgICAg
ICBzdG9wc1tpXS5jb2xvciA9IGNvbG9yOwotCiAgICAgICAgIGlmIChzdG9wLnBvc2l0aW9uKSB7
CiAgICAgICAgICAgICBhdXRvJiBwb3NpdGlvblZhbHVlID0gKnN0b3AucG9zaXRpb247CiAgICAg
ICAgICAgICBpZiAocG9zaXRpb25WYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKQEAgLTU1NCwxMiArNTQ5
LDEyIEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0
ZVN0bwogICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYmICgqc3RvcHMuZmlyc3QoKS5vZmZzZXQg
PCAwIHx8ICpzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCiAgICAgICAgIGdyYWRpZW50QWRhcHRl
ci5ub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShzdG9wcywgbV9jb2xvcklu
dGVycG9sYXRpb25NZXRob2QpOwogICAgIAotICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3Ig
cmVzdWx0OworICAgIEdyYWRpZW50Q29sb3JTdG9wczo6U3RvcFZlY3RvciByZXN1bHQ7CiAgICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1
dG8mIHN0b3AgOiBzdG9wcykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7ICpzdG9w
Lm9mZnNldCwgc3RvcC5jb2xvciB9KTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7
ICpzdG9wLm9mZnNldCwgV1RGTW92ZShzdG9wLmNvbG9yKSB9KTsKIAotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIEdyYWRpZW50Q29sb3JTdG9wczo6U29ydGVkIHsgV1RGTW92ZShyZXN1
bHQpIH07CiB9CiAKIHN0YXRpYyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQpAQCAt
ODY3LDkgKzg2Miw3IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlR3JhZGllbnQoUgogICAgIExpbmVhckdyYWRpZW50QWRhcHRlciBhZGFwdGVyIHsgZGF0YSB9
OwogICAgIGF1dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRlciwgY29udmVyc2lvbkRhdGEs
IHJlbmRlcmVyLnN0eWxlKCksIDEpOwogCi0gICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50Ojpj
cmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCkpOwotICAgIGdy
YWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoc3RvcHMpKTsKLSAgICByZXR1cm4g
Z3JhZGllbnQ7CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kKCksIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIFdURk1v
dmUoc3RvcHMpKTsKIH0KIAogYm9vbCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjplcXVhbHMoY29u
c3QgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0xMjAxLDkgKzExOTQs
NyBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50
KFIKICAgICBSYWRpYWxHcmFkaWVudEFkYXB0ZXIgYWRhcHRlciB7IGRhdGEgfTsKICAgICBhdXRv
IHN0b3BzID0gY29tcHV0ZVN0b3BzKGFkYXB0ZXIsIGNvbnZlcnNpb25EYXRhLCByZW5kZXJlci5z
dHlsZSgpLCBtYXhFeHRlbnQpOwogCi0gICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVh
dGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCkpOwotICAgIGdyYWRp
ZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoc3RvcHMpKTsKLSAgICByZXR1cm4gZ3Jh
ZGllbnQ7CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJ
bnRlcnBvbGF0aW9uTWV0aG9kKCksIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIFdURk1vdmUo
c3RvcHMpKTsKIH0KIAogYm9vbCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3Qg
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0xMjc1LDkgKzEyNjYsNyBA
QCBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmUK
ICAgICBDb25pY0dyYWRpZW50QWRhcHRlciBhZGFwdGVyOwogICAgIGF1dG8gc3RvcHMgPSBjb21w
dXRlU3RvcHMoYWRhcHRlciwgY29udmVyc2lvbkRhdGEsIHJlbmRlcmVyLnN0eWxlKCksIDEpOwog
Ci0gICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kKCkpOwotICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0
b3BzKFdURk1vdmUoc3RvcHMpKTsKLSAgICByZXR1cm4gZ3JhZGllbnQ7CisgICAgcmV0dXJuIEdy
YWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKCks
IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIFdURk1vdmUoc3RvcHMpKTsKIH0KIAogYm9vbCBD
U1NDb25pY0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCShy
ZXZpc2lvbiAyODczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgQ1NTR3JhZGllbnRWYWx1
ZSA6IHB1YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlCiAgICAgewogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4gR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFkaWVudEFkYXB0ZXI+IEdyYWRpZW50Q29sb3JTdG9w
cyBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsK
IAogICAgIGF1dG8gZmlyc3RYKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFguZ2V0KCk7IH0KICAg
ICBhdXRvIGZpcnN0WSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RZLmdldCgpOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI4NzM2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzMiw2ICs2MzIsMTIgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRp
b25hbDxDb2xvcj4gQ29sb3I6OmRlCiAgICAgcmV0dXJuIENvbG9yIHsgYXNTUkdCQShQYWNrZWRD
b2xvcjo6UkdCQSB7IHZhbHVlIH0pLCBmbGFncyB9OwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFz
aGVyJiBoYXNoZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICAvLyBGSVhNRTogV2UgZG9u
J3Qgd2FudCB0byBoYXNoIGEgaGFzaDsgZG8gYmV0dGVyLgorICAgIGFkZChoYXNoZXIsIGNvbG9y
Lmhhc2goKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5o
CShyZXZpc2lvbiAyODczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hl
ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBVU0UoQ0cpCkBAIC01NSw3
ICs1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwog
Y2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci1jbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNp
emU7CiAKIGNsYXNzIEZsb2F0UG9pbnQgewpAQCAtMzA4LDYgKzMwOCwxMSBAQCBpbmxpbmUgRmxv
YXRQb2ludCB0b0Zsb2F0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBhKQogaW5saW5lIGJvb2wgYXJl
RXNzZW50aWFsbHlFcXVhbChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBi
KQogewogICAgIHJldHVybiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS54KCksIGIueCgpKSAm
JiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS55KCksIGIueSgpKTsKK30KKworaW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBh
ZGQoaGFzaGVyLCBwb2ludC54KCksIHBvaW50LnkoKSk7CiB9CiAKIFdFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBv
aW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuY3BwCShyZXZpc2lvbiAyODczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRh
JiYgZGF0YSwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZCwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCBDb2xvclN0b3BWZWN0b3ImJiBz
dG9wcykKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRhJiYgZGF0YSwgQ29sb3JJ
bnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGllbnRTcHJl
YWRNZXRob2Qgc3ByZWFkTWV0aG9kLCBHcmFkaWVudENvbG9yU3RvcHMmJiBzdG9wcykKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpLCBjb2xvckludGVy
cG9sYXRpb25NZXRob2QsIHNwcmVhZE1ldGhvZCwgV1RGTW92ZShzdG9wcykpKTsKIH0KIAotR3Jh
ZGllbnQ6OkdyYWRpZW50KERhdGEmJiBkYXRhLCBDb2xvckludGVycG9sYXRpb25NZXRob2QgY29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Qs
IENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQorR3JhZGllbnQ6OkdyYWRpZW50KERhdGEmJiBkYXRh
LCBDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFk
aWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QsIEdyYWRpZW50Q29sb3JTdG9wcyYmIHN0b3Bz
KQogICAgIDogbV9kYXRhIHsgV1RGTW92ZShkYXRhKSB9CiAgICAgLCBtX2NvbG9ySW50ZXJwb2xh
dGlvbk1ldGhvZCB7IGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCB9CiAgICAgLCBtX3NwcmVhZE1l
dGhvZCB7IHNwcmVhZE1ldGhvZCB9CkBAIC05MSw0NCArOTEsMTMgQEAgYm9vbCBHcmFkaWVudDo6
aXNaZXJvU2l6ZSgpIGNvbnN0CiAgICAgKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JT
dG9wKEdyYWRpZW50OjpDb2xvclN0b3AmJiBzdG9wKQordm9pZCBHcmFkaWVudDo6YWRkQ29sb3JT
dG9wKEdyYWRpZW50Q29sb3JTdG9wJiYgc3RvcCkKIHsKLSAgICBtX3N0b3BzLmFwcGVuZChXVEZN
b3ZlKHN0b3ApKTsKLSAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7CisgICAgbV9zdG9wcy5hZGRD
b2xvclN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgbV9jYWNoZWRIYXNoID0gMDsKICAgICBzdG9w
c0NoYW5nZWQoKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6c2V0U29ydGVkQ29sb3JTdG9wcyhDb2xv
clN0b3BWZWN0b3ImJiBzdG9wcykKLXsKLSAgICBtX3N0b3BzID0gV1RGTW92ZShzdG9wcyk7Ci0g
ICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0gICAgbV9jYWNoZWRIYXNoID0gMDsKLSAgICBzdG9w
c0NoYW5nZWQoKTsKLX0KLQotdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9zdG9wc1NvcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RvcHNTb3J0ZWQg
PSB0cnVlOwotICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVu
ZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewotICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBi
Lm9mZnNldDsKLSAgICB9KTsKLX0KLQotLy8gRklYTUU6IEluc3RlYWQgb2YgdGhlc2UgYWRkKEhh
c2hlcikgZnVuY3Rpb25zLCBjb25zaWRlciB1c2luZyBlbmNvZGUgZnVuY3Rpb25zIHRvIGNvbXB1
dGUgdGhlIGhhc2guCi0KLXN0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCi17Ci0gICAgYWRkKGhhc2hlciwgcG9pbnQueCgpLCBwb2ludC55KCkp
OwotfQotCi1zdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEdyYWRpZW50OjpD
b2xvclN0b3AmIHN0b3ApCi17Ci0gICAgYWRkKGhhc2hlciwgc3RvcC5vZmZzZXQsIHN0b3AuY29s
b3IpOwotfQotCiBzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEdyYWRpZW50
OjpMaW5lYXJEYXRhJiBkYXRhKQogewogICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQwLCBkYXRh
LnBvaW50MSk7CkBAIC0xNDYsMTAgKzExNSw4IEBAIHN0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgR3JhZGllbnQ6OkNvbmljRAogCiB1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NhY2hlZEhhc2gpIHsKLSAgICAgICAgc29ydFN0b3BzKCk7
Ci0gICAgICAgIG1fY2FjaGVkSGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0YSwgbV9jb2xvckludGVy
cG9sYXRpb25NZXRob2QsIG1fc3ByZWFkTWV0aG9kLCBtX3N0b3BzKTsKLSAgICB9CisgICAgaWYg
KCFtX2NhY2hlZEhhc2gpCisgICAgICAgIG1fY2FjaGVkSGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0
YSwgbV9jb2xvckludGVycG9sYXRpb25NZXRob2QsIG1fc3ByZWFkTWV0aG9kLCBtX3N0b3BzLnNv
cnRlZCgpKTsKICAgICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4NzM2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9y
SW50ZXJwb2xhdGlvbk1ldGhvZC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRl
ICJHcmFkaWVudENvbG9yU3RvcC5oIgorI2luY2x1ZGUgIkdyYWRpZW50Q29sb3JTdG9wcy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTY0LDkgKzY0LDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
CiBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7CiBwdWJsaWM6
Ci0gICAgdXNpbmcgQ29sb3JTdG9wID0gR3JhZGllbnRDb2xvclN0b3A7Ci0gICAgdXNpbmcgQ29s
b3JTdG9wVmVjdG9yID0gR3JhZGllbnRDb2xvclN0b3BWZWN0b3I7Ci0KICAgICBzdHJ1Y3QgTGlu
ZWFyRGF0YSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOwogICAgICAgICBGbG9hdFBvaW50
IHBvaW50MTsKQEAgLTk2LDE2ICs5MywxNSBAQCBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZD
b3VudGVkPEdyYWRpZW50PiB7IChwdWJsaWMKIAogICAgIHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlh
bnQ8TGluZWFyRGF0YSwgUmFkaWFsRGF0YSwgQ29uaWNEYXRhPjsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYsIENvbG9ySW50ZXJwb2xhdGlv
bk1ldGhvZCwgR3JhZGllbnRTcHJlYWRNZXRob2QgPSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UGFk
LCBDb2xvclN0b3BWZWN0b3ImJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxHcmFkaWVudD4gY3JlYXRlKERhdGEmJiwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBHcmFk
aWVudFNwcmVhZE1ldGhvZCA9IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQsIEdyYWRpZW50Q29s
b3JTdG9wcyYmID0geyB9KTsKIAogICAgIGJvb2wgaXNaZXJvU2l6ZSgpIGNvbnN0OwogCiAgICAg
Y29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoQ29sb3JTdG9wJiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U29ydGVkQ29sb3JTdG9wcyhDb2xvclN0b3BWZWN0b3ImJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoR3JhZGllbnRDb2xvclN0b3AmJik7CiAKLSAg
ICBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsg
fQorICAgIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BzOyB9CiAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KIAogICAgIHZvaWQgZmlsbChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEzMCwxNiArMTI2LDE0IEBAIGNsYXNzIEdyYWRp
ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsgKHB1YmxpYwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IGRl
Y29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgR3JhZGllbnQoRGF0YSYm
LCBDb2xvckludGVycG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kLCBDb2xvclN0
b3BWZWN0b3ImJik7CisgICAgZXhwbGljaXQgR3JhZGllbnQoRGF0YSYmLCBDb2xvckludGVycG9s
YXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kLCBHcmFkaWVudENvbG9yU3RvcHMmJik7
CiAKLSAgICB2b2lkIHNvcnRTdG9wcygpIGNvbnN0OwogICAgIHZvaWQgc3RvcHNDaGFuZ2VkKCk7
CiAKICAgICBEYXRhIG1fZGF0YTsKICAgICBDb2xvckludGVycG9sYXRpb25NZXRob2QgbV9jb2xv
ckludGVycG9sYXRpb25NZXRob2Q7CiAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRN
ZXRob2Q7Ci0gICAgbXV0YWJsZSBDb2xvclN0b3BWZWN0b3IgbV9zdG9wczsKLSAgICBtdXRhYmxl
IGJvb2wgbV9zdG9wc1NvcnRlZCB7IGZhbHNlIH07CisgICAgR3JhZGllbnRDb2xvclN0b3BzIG1f
c3RvcHM7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEhhc2ggeyAwIH07CiAKICNpZiBV
U0UoQ0cpCkBAIC0yNTcsMTggKzI1MSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBz
dGQ6Om9wdGlvbmFsPFJlZjxHcmFkaWVudD4KICAgICBpZiAoIXNwcmVhZE1ldGhvZCkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3JTdG9wVmVj
dG9yPiBzdG9wczsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50Q29sb3JTdG9wcz4gc3RvcHM7
CiAgICAgZGVjb2RlciA+PiBzdG9wczsKICAgICBpZiAoIXN0b3BzKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqZGF0
YSksICpjb2xvckludGVycG9sYXRpb25NZXRob2QsICpzcHJlYWRNZXRob2QsIFdURk1vdmUoKnN0
b3BzKSk7Ci19Ci0KLWlubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIC8vIEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIGhhc2ggYSBoYXNoOyBk
byBiZXR0ZXIuCi0gICAgYWRkKGhhc2hlciwgY29sb3IuaGFzaCgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnRDb2xvclN0b3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFkaWVudENvbG9yU3RvcC5oCShyZXZpc2lvbiAyODczNjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudENvbG9yU3RvcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPG9w
dGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksOCArMzksNiBAQCBzdHJ1Y3QgR3JhZGll
bnRDb2xvclN0b3AgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEdyYWRpZW50Q29sb3JTdG9wPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAotdXNp
bmcgR3JhZGllbnRDb2xvclN0b3BWZWN0b3IgPSBWZWN0b3I8R3JhZGllbnRDb2xvclN0b3AsIDI+
OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50Q29sb3JTdG9wOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG9mZnNldDsK
QEAgLTYwLDYgKzU4LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9u
YWw8R3JhZGllbnRDb2xvcgogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0
dXJuIHt7ICpvZmZzZXQsICpjb2xvciB9fTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYg
aGFzaGVyLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcCYgc3RvcCkKK3sKKyAgICBhZGQoaGFzaGVy
LCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29sb3JTdG9wcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Q29s
b3JTdG9wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkdyYWRpZW50Q29sb3JTdG9wLmgiCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFkaWVudENvbG9yU3RvcHMgeworcHVibGljOgor
ICAgIHVzaW5nIFN0b3BWZWN0b3IgPSBWZWN0b3I8R3JhZGllbnRDb2xvclN0b3AsIDI+OworCisg
ICAgc3RydWN0IFNvcnRlZCB7CisgICAgICAgIFN0b3BWZWN0b3Igc3RvcHM7CisgICAgfTsKKwor
ICAgIEdyYWRpZW50Q29sb3JTdG9wcygpCisgICAgICAgIDogbV9pc1NvcnRlZCB7IHRydWUgfQor
ICAgIHsKKyAgICB9CisKKyAgICBHcmFkaWVudENvbG9yU3RvcHMoU3RvcFZlY3RvciBzdG9wcykK
KyAgICAgICAgOiBtX3N0b3BzIHsgV1RGTW92ZShzdG9wcykgfQorICAgICAgICAsIG1faXNTb3J0
ZWQgeyBmYWxzZSB9CisgICAgeworICAgIH0KKworICAgIEdyYWRpZW50Q29sb3JTdG9wcyhTb3J0
ZWQgc29ydGVkU3RvcHMpCisgICAgICAgIDogbV9zdG9wcyB7IFdURk1vdmUoc29ydGVkU3RvcHMu
c3RvcHMpIH0KKyAgICAgICAgLCBtX2lzU29ydGVkIHsgdHJ1ZSB9CisgICAgeworICAgICAgICBB
U1NFUlQodmFsaWRhdGVJc1NvcnRlZCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZENvbG9yU3Rv
cChHcmFkaWVudENvbG9yU3RvcCBzdG9wKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0b3BzLmlz
RW1wdHkoKSAmJiBtX3N0b3BzLmxhc3QoKS5vZmZzZXQgPiBzdG9wLm9mZnNldCkKKyAgICAgICAg
ICAgIG1faXNTb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdG9wcy5hcHBlbmQoV1RGTW92ZShz
dG9wKSk7CisgICAgfQorCisgICAgdm9pZCBzb3J0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2lz
U29ydGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQo
bV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewor
ICAgICAgICAgICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgICAgIH0pOworICAg
ICAgICBtX2lzU29ydGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBHcmFkaWVudENvbG9y
U3RvcHMmIHNvcnRlZCgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PEdyYWRpZW50
Q29sb3JTdG9wcyo+KHRoaXMpLT5zb3J0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHMuc2l6ZSgpOyB9Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcy5pc0VtcHR5KCk7IH0KKwor
ICAgIFN0b3BWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9wcy5iZWdpbigpOyB9CisgICAgU3RvcFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9zdG9wcy5lbmQoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFw
RnVuY3Rpb24+IEdyYWRpZW50Q29sb3JTdG9wcyBtYXBDb2xvcnMoTWFwRnVuY3Rpb24mJiBtYXBG
dW5jdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIEdyYWRpZW50Q29sb3JTdG9wcyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3N0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykKKyAgICAgICAgICAgIHJlc3VsdC5t
X3N0b3BzLnVuY2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBtYXBGdW5jdGlvbihzdG9wLmNv
bG9yKSB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBjb25zdCBTdG9w
VmVjdG9yJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHcmFkaWVudENvbG9y
U3RvcHM+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBib29sIHZhbGlkYXRlSXNTb3J0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6aXNfc29ydGVkKG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgW10gKGF1dG8m
IGEsIGF1dG8mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLm9mZnNldCA8IGIub2Zmc2V0Owor
ICAgICAgICB9KTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0b3BWZWN0b3IgbV9zdG9wczsKKyAg
ICBib29sIG1faXNTb3J0ZWQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lk
IEdyYWRpZW50Q29sb3JTdG9wczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX3N0b3BzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBz
dGQ6Om9wdGlvbmFsPEdyYWRpZW50Q29sb3JTdG9wcz4gR3JhZGllbnRDb2xvclN0b3BzOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFN0b3BWZWN0b3I+IHN0
b3BzOworICAgIGRlY29kZXIgPj4gc3RvcHM7CisgICAgaWYgKCFzdG9wcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdG9wcykgfX07Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyODczNjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5nZWQoKQog
ewogfQogCi1zdGF0aWMgdm9pZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3Jh
ZGllbnQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCitzdGF0
aWMgdm9pZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIEdyYWRp
ZW50Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fcGF0
dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwgZywgYiwg
YSAqIGdsb2JhbEFscGhhKTsKQEAgLTUzLDcgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcG9pbnRf
dCB7CiAgICAgZG91YmxlIHgsIHk7CiB9IHBvaW50X3Q7CiAKLXN0YXRpYyB2b2lkIHNldENvcm5l
ckNvbG9yUkdCQShjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50OjpD
b2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCitzdGF0aWMgdm9pZCBzZXRDb3JuZXJD
b2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwgaW50IGlkLCBHcmFkaWVudENvbG9y
U3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJvX21lc2hfcGF0dGVy
bl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFs
QWxwaGEpOwpAQCAtNzQsNyArNzQsNyBAQCBzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZUFuZ2xlKGRv
dWJsZSBhbmdsZSkKIH0KIAogc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVy
bl90ICpncmFkaWVudCwgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByLCBmbG9hdCBhbmdsZVJh
ZGlhbnMsCi0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9w
IHRvLCBmbG9hdCBnbG9iYWxBbHBoYSkKKyAgICBHcmFkaWVudENvbG9yU3RvcCBmcm9tLCBHcmFk
aWVudENvbG9yU3RvcCB0bywgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7CiAgICAgY29uc3QgZG91Ymxl
IGFuZ09mZnNldCA9IDAuMjU7IC8vIDkwIGRlZ3JlZXMuCiAKQEAgLTE0OSw3ICsxNDksNyBAQCBz
dGF0aWMgdm9pZCBhZGRDb25pY1NlY3RvcihjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCAKIH0K
IAogc3RhdGljIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBm
bG9hdCB5bywgZmxvYXQgciwgZmxvYXQgYW5nbGVSYWRpYW5zLAotICAgIEdyYWRpZW50OjpDb2xv
clN0b3BWZWN0b3Igc3RvcHMsIGZsb2F0IGdsb2JhbEFscGhhKQorICAgIEdyYWRpZW50Q29sb3JT
dG9wczo6U3RvcFZlY3RvciBzdG9wcywgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7CiAgICAgLy8gRGVn
ZW5lcmF0ZWQgZ3JhZGllbnRzIHdpdGggdHdvIHN0b3BzIGF0IHRoZSBzYW1lIG9mZnNldCBhcnJp
dmUgd2l0aCBhIHNpbmdsZSBzdG9wIGF0IDAuMAogICAgIC8vIEFkZCBhbm90aGVyIHBvaW50IGhl
cmUgc28gaXQgY2FuIGJlIGludGVycG9sYXRlZCBwcm9wZXJseSBiZWxvdy4KQEAgLTE3Myw3ICsx
NzMsNyBAQCBzdGF0aWMgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gY3JlYXRlQ29uaWMoZmxvYXQg
eG8sIGYKICAgICAgICAgICAgICAgICBsYXN0LCB7MC4yNSwgbGFzdC5jb2xvcn0sIHswLjUsIGxh
c3QuY29sb3J9LCB7MC43NSwgbGFzdC5jb2xvcn0sIHsxLjAsIGxhc3QuY29sb3J9CiAgICAgICAg
ICAgICB9OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBpbnRlcnBvbGF0ZWRT
dG9wID0gWyZdIChkb3VibGUgZnJhY3Rpb24pIC0+IEdyYWRpZW50OjpDb2xvclN0b3AgeworICAg
ICAgICAgICAgYXV0byBpbnRlcnBvbGF0ZWRTdG9wID0gWyZdIChkb3VibGUgZnJhY3Rpb24pIC0+
IEdyYWRpZW50Q29sb3JTdG9wIHsKICAgICAgICAgICAgICAgICBhdXRvIG9mZnNldCA9IGJsZW5k
KHN0b3BzLmZpcnN0KCkub2Zmc2V0LCBzdG9wcy5sYXN0KCkub2Zmc2V0LCBmcmFjdGlvbik7CiAg
ICAgICAgICAgICAgICAgYXV0byBpbnRlcnBDb2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5
KHN0b3BzLmZpcnN0KCkuY29sb3IsIHN0b3BzLmxhc3QoKS5jb2xvciwgZnJhY3Rpb24pOwogICAg
ICAgICAgICAgICAgIHJldHVybiB7IG9mZnNldCwgaW50ZXJwQ29sb3IgfTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihm
bG9hdCAKICAgICAgICAgICAgIC8vIFRodXMsIGhlcmUgSSBnaXZlIHRoZSByYWRpdXMgYW4gZXh0
cmVtZWx5IGxhcmdlIHZhbHVlLiBUaGUgcmVzdWx0aW5nIGdyYWRpZW50IHdpbGwgYmUgbGF0ZXIg
Y2xpcHBlZCBieSBmaWxsUmVjdC4KICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHNvbHV0
aW9uIGNvdWxkIGJlIHRvIGNoYW5nZSB0aGUgQVBJIGFuZCBwYXNzIGEgcmVjdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgdG8gb3B0aW1pemUgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSByYWRpdXMuCiAgICAg
ICAgICAgICBjb25zdCBmbG9hdCByYWRpdXMgPSA0MDk2OwotICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUNvbmljKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCByYWRpdXMsIGRhdGEu
YW5nbGVSYWRpYW5zLCBzdG9wcygpLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlQ29uaWMoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIHJhZGl1cywgZGF0
YS5hbmdsZVJhZGlhbnMsIHN0b3BzKCkuc3RvcHMoKSwgZ2xvYmFsQWxwaGEpOwogICAgICAgICB9
CiAgICAgKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
ZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDI4NzM2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MywxMCArNTMsOCBAQCB2b2lkIEdyYWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiAKIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQp
CiB7Ci0gICAgaWYgKCFtX3BsYXRmb3JtUmVuZGVyZXIpIHsKLSAgICAgICAgc29ydFN0b3BzKCk7
Ci0gICAgICAgIG1fcGxhdGZvcm1SZW5kZXJlciA9IEdyYWRpZW50UmVuZGVyZXJDRyB7IG1fY29s
b3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBtX3N0b3BzIH07Ci0gICAgfQorICAgIGlmICghbV9wbGF0
Zm9ybVJlbmRlcmVyKQorICAgICAgICBtX3BsYXRmb3JtUmVuZGVyZXIgPSBHcmFkaWVudFJlbmRl
cmVyQ0cgeyBtX2NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgbV9zdG9wcy5zb3J0ZWQoKSB9Owog
CiAgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0
YSYgZGF0YSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
ZGllbnRSZW5kZXJlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCShyZXZpc2lvbiAyODczNjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOCArMjgsMTkgQEAKIAogI2luY2x1ZGUgIkNvbG9y
SW50ZXJwb2xhdGlvbi5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgorI2luY2x1ZGUgIkdy
YWRpZW50Q29sb3JTdG9wcy5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGllbnRSZW5kZXJlckNHOjpHcmFkaWVu
dFJlbmRlcmVyQ0coQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1l
dGhvZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BWZWN0b3ImIHN0b3BzKQorR3JhZGllbnRSZW5k
ZXJlckNHOjpHcmFkaWVudFJlbmRlcmVyQ0coQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9y
SW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBzdG9wcykKICAg
ICA6IG1fc3RyYXRlZ3kgeyBwaWNrU3RyYXRlZ3koY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBz
dG9wcykgfQogewogfQogCiAvLyBNQVJLOiAtIFN0cmF0ZWd5IHNlbGVjdGlvbi4KIAotR3JhZGll
bnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6OnBpY2tTdHJhdGVneShD
b2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBH
cmFkaWVudENvbG9yU3RvcFZlY3RvciYgc3RvcHMpIGNvbnN0CitHcmFkaWVudFJlbmRlcmVyQ0c6
OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6cGlja1N0cmF0ZWd5KENvbG9ySW50ZXJwb2xh
dGlvbk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JT
dG9wcyYgc3RvcHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kLmNvbG9yU3BhY2UsCiAgICAgICAgIFsmXSAoY29uc3QgQ29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kOjpTUkdCJikgLT4gU3RyYXRlZ3kgewpAQCAtNjQsNyArNjUsNyBAQCBH
cmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6cGlja1MKIAog
Ly8gTUFSSzogLSBHcmFkaWVudCBzdHJhdGVneS4KIAotR3JhZGllbnRSZW5kZXJlckNHOjpTdHJh
dGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHcmFkaWVudChDb2xvckludGVycG9sYXRpb25N
ZXRob2QgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcFZl
Y3RvciYgc3RvcHMpIGNvbnN0CitHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50
UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvcklu
dGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wcyYgc3RvcHMpIGNvbnN0
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2xvckludGVycG9sYXRpb25NZXRob2QsIHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8Q29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCPihjb2xvckludGVy
cG9sYXRpb25NZXRob2QuY29sb3JTcGFjZSkpOwogI2lmICFIQVZFKENPUkVfR1JBUEhJQ1NfUFJF
TVVMVElQTElFRF9JTlRFUlBPTEFUSU9OX0dSQURJRU5UKQpAQCAtMjAxLDcgKzIwMiw3IEBAIHZv
aWQgR3JhZGllbnRSZW5kZXJlckNHOjpTaGFkaW5nOjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAg
ICAgICBvdXRbY29tcG9uZW50SW5kZXhdID0gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091
dHB1dFNwYWNlW2NvbXBvbmVudEluZGV4XTsKIH0KIAotR3JhZGllbnRSZW5kZXJlckNHOjpTdHJh
dGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VTaGFkaW5nKENvbG9ySW50ZXJwb2xhdGlvbk1l
dGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVj
dG9yJiBzdG9wcykgY29uc3QKK0dyYWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRS
ZW5kZXJlckNHOjptYWtlU2hhZGluZyhDb2xvckludGVycG9sYXRpb25NZXRob2QgY29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmIHN0b3BzKSBjb25zdAog
ewogICAgIGF1dG8gbWFrZURhdGEgPSBbJl0gKGF1dG8gY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9k
LCBhdXRvJiBzdG9wcykgewogICAgICAgICBhdXRvIGNvbnZlcnRDb2xvclRvQ29sb3JJbnRlcnBv
bGF0aW9uU3BhY2UgPSBbJl0gKGNvbnN0IENvbG9yJiBjb2xvciwgYXV0byBjb2xvckludGVycG9s
YXRpb25NZXRob2QpIC0+IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5k
ZXJlckNHLmgJKHJldmlzaW9uIDI4NzM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw2IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvcklu
dGVycG9sYXRpb25NZXRob2QuaCIKLSNpbmNsdWRlICJHcmFkaWVudENvbG9yU3RvcC5oIgogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0zNSw2ICsz
NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR3JhZGllbnRDb2xvclN0b3Bz
OworCiBzdHJ1Y3QgQ29sb3JDb252ZXJ0ZWRUb0ludGVycG9sYXRpb25Db2xvclNwYWNlU3RvcCB7
CiAgICAgZmxvYXQgb2Zmc2V0OwogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29sb3JD
b21wb25lbnRzOwpAQCAtNDIsNyArNDMsNyBAQCBzdHJ1Y3QgQ29sb3JDb252ZXJ0ZWRUb0ludGVy
cG9sYXRpb25Db2xvclNwYWNlU3RvcCB7CiAKIGNsYXNzIEdyYWRpZW50UmVuZGVyZXJDRyB7CiBw
dWJsaWM6Ci0gICAgR3JhZGllbnRSZW5kZXJlckNHKENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwg
Y29uc3QgR3JhZGllbnRDb2xvclN0b3BWZWN0b3ImKTsKKyAgICBHcmFkaWVudFJlbmRlcmVyQ0co
Q29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmKTsKIAog
ICAgIHZvaWQgZHJhd0xpbmVhckdyYWRpZW50KENHQ29udGV4dFJlZiwgQ0dQb2ludCBzdGFydFBv
aW50LCBDR1BvaW50IGVuZFBvaW50LCBDR0dyYWRpZW50RHJhd2luZ09wdGlvbnMpOwogICAgIHZv
aWQgZHJhd1JhZGlhbEdyYWRpZW50KENHQ29udGV4dFJlZiwgQ0dQb2ludCBzdGFydENlbnRlciwg
Q0dGbG9hdCBzdGFydFJhZGl1cywgQ0dQb2ludCBlbmRDZW50ZXIsIENHRmxvYXQgZW5kUmFkaXVz
LCBDR0dyYWRpZW50RHJhd2luZ09wdGlvbnMpOwpAQCAtODQsOSArODUsOSBAQCBjbGFzcyBHcmFk
aWVudFJlbmRlcmVyQ0cgeyAocHJpdmF0ZSkKIAogICAgIHVzaW5nIFN0cmF0ZWd5ID0gc3RkOjp2
YXJpYW50PEdyYWRpZW50LCBTaGFkaW5nPjsKIAotICAgIFN0cmF0ZWd5IHBpY2tTdHJhdGVneShD
b2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JTdG9wVmVjdG9yJikg
Y29uc3Q7Ci0gICAgU3RyYXRlZ3kgbWFrZUdyYWRpZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BWZWN0b3ImKSBjb25zdDsKLSAgICBTdHJhdGVneSBt
YWtlU2hhZGluZyhDb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbnN0IEdyYWRpZW50Q29sb3JT
dG9wVmVjdG9yJikgY29uc3Q7CisgICAgU3RyYXRlZ3kgcGlja1N0cmF0ZWd5KENvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJikgY29uc3Q7CisgICAgU3Ry
YXRlZ3kgbWFrZUdyYWRpZW50KENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgY29uc3QgR3JhZGll
bnRDb2xvclN0b3BzJikgY29uc3Q7CisgICAgU3RyYXRlZ3kgbWFrZVNoYWRpbmcoQ29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kLCBjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmKSBjb25zdDsKIAogICAg
IFN0cmF0ZWd5IG1fc3RyYXRlZ3k7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZp
c2lvbiAyODczNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIyNSwxMiBAQCB2
b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmQKICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLUdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6c3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29uc3Qg
R3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKK0dyYWRpZW50Q29sb3JTdG9wcyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpzdG9wc0J5
QXBwbHlpbmdDb2xvckZpbHRlcihjb25zdCBHcmFkaWVudENvbG9yU3RvcHMmIHN0b3BzLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCh7IHN0b3Aub2Zmc2V0LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdG9w
LmNvbG9yKSB9KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGlmICghc3R5bGUuaGFzQXBwbGVD
b2xvckZpbHRlcigpKQorICAgICAgICByZXR1cm4gc3RvcHM7CisKKyAgICByZXR1cm4gc3RvcHMu
bWFwQ29sb3JzKFsmXSAoYXV0byYgY29sb3IpIHsgcmV0dXJuIHN0eWxlLmNvbG9yQnlBcHBseWlu
Z0NvbG9yRmlsdGVyKGNvbG9yKTsgfSk7CiB9CiAKIEdyYWRpZW50U3ByZWFkTWV0aG9kIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OnBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUoU1ZH
U3ByZWFkTWV0aG9kVHlwZSBtZXRob2QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24g
Mjg3MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvCiBwcm90ZWN0ZWQ6CiAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudChTVkdHcmFkaWVudEVsZW1lbnQmLCBSZW5kZXJT
dHlsZSYmKTsKIAotICAgIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHN0b3BzQnlB
cHBseWluZ0NvbG9yRmlsdGVyKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3ImLCBjb25z
dCBSZW5kZXJTdHlsZSYpOworICAgIHN0YXRpYyBHcmFkaWVudENvbG9yU3RvcHMgc3RvcHNCeUFw
cGx5aW5nQ29sb3JGaWx0ZXIoY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKICAgICBzdGF0aWMgR3JhZGllbnRTcHJlYWRNZXRob2QgcGxhdGZvcm1TcHJlYWRN
ZXRob2RGcm9tU1ZHVHlwZShTVkdTcHJlYWRNZXRob2RUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkocmV2aXNpb24gMjg3MzY5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBSZWY8R3JhZGllbnQ+IFJlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3IKIHsKICAgICByZXR1cm4gR3JhZGll
bnQ6OmNyZWF0ZSgKICAgICAgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBzdGFydFBvaW50KG1f
YXR0cmlidXRlcyksIGVuZFBvaW50KG1fYXR0cmlidXRlcykgfSwKLSAgICAgICAgQ29sb3JJbnRl
cnBvbGF0aW9uTWV0aG9kIHsgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCIHsgfSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH0sCisgICAgICAgIHsgQ29sb3JJ
bnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCIHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkIH0sCiAgICAgICAgIHBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUo
bV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKSwKICAgICAgICAgc3RvcHNCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIobV9hdHRyaWJ1dGVzLnN0b3BzKCksIHN0eWxlKQogICAgICk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDI4NzM2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgUmVmPEdyYWRpZW50PiBSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyCiB7CiAgICAgcmV0dXJuIEdyYWRpZW50Ojpj
cmVhdGUoCiAgICAgICAgIEdyYWRpZW50OjpSYWRpYWxEYXRhIHsgZm9jYWxQb2ludChtX2F0dHJp
YnV0ZXMpLCBjZW50ZXJQb2ludChtX2F0dHJpYnV0ZXMpLCBmb2NhbFJhZGl1cyhtX2F0dHJpYnV0
ZXMpLCByYWRpdXMobV9hdHRyaWJ1dGVzKSwgMSB9LAotICAgICAgICBDb2xvckludGVycG9sYXRp
b25NZXRob2QgeyBDb2xvckludGVycG9sYXRpb25NZXRob2Q6OlNSR0IgeyB9LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfSwKKyAgICAgICAgeyBDb2xvckludGVycG9s
YXRpb25NZXRob2Q6OlNSR0IgeyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgfSwKICAgICAgICAgcGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShtX2F0dHJp
YnV0ZXMuc3ByZWFkTWV0aG9kKCkpLAogICAgICAgICBzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRl
cihtX2F0dHJpYnV0ZXMuc3RvcHMoKSwgc3R5bGUpCiAgICAgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvR3JhZGllbnRBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDI4NzM2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQCBzdHJ1Y3QgR3JhZGllbnRBdHRyaWJ1dGVzIHsKICAgICBTVkdTcHJlYWRNZXRob2RU
eXBlIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1NwcmVhZE1l
dGhvZFR5cGU+KG1fc3ByZWFkTWV0aG9kKTsgfQogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgZ3JhZGllbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGU+KG1fZ3JhZGllbnRVbml0cyk7IH0KICAgICBBZmZpbmVUcmFuc2Zvcm0g
Z3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9
Ci0gICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciYgc3RvcHMoKSBjb25zdCB7IHJl
dHVybiBtX3N0b3BzOyB9CisgICAgY29uc3QgR3JhZGllbnRDb2xvclN0b3BzJiBzdG9wcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KIAogICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKFNWR1Nw
cmVhZE1ldGhvZFR5cGUgdmFsdWUpCiAgICAgewpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR3Jh
ZGllbnRBdHRyaWJ1dGVzIHsKICAgICAgICAgbV9ncmFkaWVudFRyYW5zZm9ybVNldCA9IHRydWU7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRTdG9wcyhHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yJiYg
dmFsdWUpCisgICAgdm9pZCBzZXRTdG9wcyhHcmFkaWVudENvbG9yU3RvcHMmJiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIG1fc3RvcHMgPSBXVEZNb3ZlKHZhbHVlKTsKICAgICB9CkBAIC03MCw3ICs3
MCw3IEBAIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMgewogcHJpdmF0ZToKICAgICAvLyBQcm9w
ZXJ0aWVzCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRUcmFuc2Zvcm07Ci0gICAgR3Jh
ZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBtX3N0b3BzOworICAgIEdyYWRpZW50Q29sb3JTdG9wcyBt
X3N0b3BzOwogCiAgICAgdW5zaWduZWQgbV9zcHJlYWRNZXRob2QgOiAyOwogICAgIHVuc2lnbmVk
IG1fZ3JhZGllbnRVbml0cyA6IDI7CkBAIC04Myw3ICs4Myw3IEBAIHN0cnVjdCBHcmFkaWVudEF0
dHJpYnV0ZXMgewogCiBzdHJ1Y3QgU2FtZVNpemVBc0dyYWRpZW50QXR0cmlidXRlcyB7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIGE7Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBiOworICAg
IEdyYWRpZW50Q29sb3JTdG9wcyBiOwogICAgIHVuc2lnbmVkIGMgOiA3OwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDI4NzM2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCwxNCArOTgsMTQgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OmNoaWxk
cmVuQ2hhbmdlZChjb25zdCBDaGlsZENoCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQo
KTsKIH0KIAotR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1
aWxkU3RvcHMoKQorR3JhZGllbnRDb2xvclN0b3BzIFNWR0dyYWRpZW50RWxlbWVudDo6YnVpbGRT
dG9wcygpCiB7Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBzdG9wczsKKyAgICBHcmFk
aWVudENvbG9yU3RvcHMgc3RvcHM7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwog
ICAgIGZvciAoYXV0byYgc3RvcCA6IGNoaWxkcmVuT2ZUeXBlPFNWR1N0b3BFbGVtZW50PigqdGhp
cykpIHsKICAgICAgICAgYXV0byBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldCA9IHN0ZDo6
Y2xhbXAoc3RvcC5vZmZzZXQoKSwgcHJldmlvdXNPZmZzZXQsIDEuMGYpOwogICAgICAgICBwcmV2
aW91c09mZnNldCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nT2Zmc2V0OwotICAgICAgICBzdG9w
cy5hcHBlbmQoeyBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldCwgc3RvcC5zdG9wQ29sb3JJ
bmNsdWRpbmdPcGFjaXR5KCkgfSk7CisgICAgICAgIHN0b3BzLmFkZENvbG9yU3RvcCh7IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nT2Zmc2V0LCBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHko
KSB9KTsKICAgICB9CiAgICAgcmV0dXJuIHN0b3BzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMjg3MzY5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3
IEBAIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50LCBwdWJsaWMg
UwogICAgICAgICBTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCA9IFNWR1NwcmVhZE1ldGhvZFVua25v
d24KICAgICB9OwogCi0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBidWlsZFN0b3BzKCk7
CisgICAgR3JhZGllbnRDb2xvclN0b3BzIGJ1aWxkU3RvcHMoKTsKIAogICAgIHVzaW5nIFByb3Bl
cnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHR3JhZGllbnRFbGVtZW50
LCBTVkdFbGVtZW50LCBTVkdVUklSZWZlcmVuY2U+OwogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc0MDUpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMi0yMyAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgZ3Jh
ZGllbnQgY29sb3Igc3RvcHMgaW50byBhIHNlbGYgY29udGFpbmVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1ODMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQv
UGxhdGZvcm1HVEsuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvUGxh
dGZvcm1XUEUuY21ha2U6IEFkZGVkLgorICAgICAgICBLZWVwIEdUSyBhbmQgV1BFIHBvcnRzIGJ1
aWxkaW5nIGJ5IHByb3BvZ2F0aW5nIGdsaWIuaCBoZWFkZXIgdG8gdGhlIHRlc3QgcnVubm5lci4g
Q2hhbmdlCisgICAgICAgIGJ5IEZ1amlpIEhpcm9ub3JpLgorCiAyMDIxLTEyLTIzICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBBUEkgdGVzdGlu
ZyBzdXBwb3J0IGZvciBtb2RhbCBjb250YWluZXIgb2JzZXJ2YXRpb24KSW5kZXg6IFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9QbGF0Zm9ybUdUSy5jbWFrZQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9U
ZXN0UnVubmVyU2hhcmVkL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMyBAQAorbGlzdChBUFBFTkQgVGVzdFJ1bm5lclNoYXJlZF9TWVNURU1fSU5DTFVERV9ESVJF
Q1RPUklFUworICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CispCkluZGV4OiBUb29scy9UZXN0UnVu
bmVyU2hhcmVkL1BsYXRmb3JtV1BFLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvUGxhdGZvcm1XUEUuY21ha2UJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9QbGF0Zm9ybVdQRS5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMg
QEAKK2xpc3QoQVBQRU5EIFRlc3RSdW5uZXJTaGFyZWRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAke0dMSUJfSU5DTFVERV9ESVJTfQorKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUK
</data>
<flag name="commit-queue"
          id="473664"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>