<?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>237736</bug_id>
          
          <creation_ts>2022-03-10 15:11:05 -0800</creation_ts>
          <short_desc>[WGSL] Add the core parts of the behavior checker</short_desc>
          <delta_ts>2022-04-13 16:15:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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>
          <dependson>236655</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1850268</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-10 15:11:05 -0800</bug_when>
    <thetext>There are a few validation phases required for WGSL:
- Type checking
- Behavior checking (see https://www.w3.org/TR/WGSL/#behaviors)
- Uniformity analysis
- no recursion
- only valid attributes applied
- etc...

I decided to start by the behavior checking, for the following reasons:
- It is fairly simple
- But it touches both statements and expressions
- And it will be required for uniformity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850331</commentid>
    <comment_count>1</comment_count>
      <attachid>454430</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-10 17:08:52 -0800</bug_when>
    <thetext>Created attachment 454430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850354</commentid>
    <comment_count>2</comment_count>
      <attachid>454430</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-10 19:30:45 -0800</bug_when>
    <thetext>Comment on attachment 454430
Patch

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

&gt; Source/WTF/ChangeLog:9
&gt; +        Added IndexMap::insert, which automatically grows the underlying vector if needed.
&gt; +        It allows using IndexMap ergonomically even if we don&apos;t know the number of keys ahead of time.

This probably should be its own patch, with its own TestWTF tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850986</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-14 13:26:07 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #2)
&gt; Comment on attachment 454430 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454430&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:9
&gt; &gt; +        Added IndexMap::insert, which automatically grows the underlying vector if needed.
&gt; &gt; +        It allows using IndexMap ergonomically even if we don&apos;t know the number of keys ahead of time.
&gt; 
&gt; This probably should be its own patch, with its own TestWTF tests

IndexMap currently does not seem to have any test whatsoever. I filed https://bugs.webkit.org/show_bug.cgi?id=237847 about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850988</commentid>
    <comment_count>4</comment_count>
      <attachid>454617</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-14 13:29:08 -0700</bug_when>
    <thetext>Created attachment 454617
Patch

Validator.h was missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851010</commentid>
    <comment_count>5</comment_count>
      <attachid>454617</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-14 14:16:34 -0700</bug_when>
    <thetext>Comment on attachment 454617
Patch

Cancelling the review as trying to implement the uniformity analysis in the same style showed that it is too limited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852538</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-17 16:12:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/90458338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861314</commentid>
    <comment_count>7</comment_count>
      <attachid>457573</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-04-13 16:15:57 -0700</bug_when>
    <thetext>Created attachment 457573
WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454430</attachid>
            <date>2022-03-10 17:08:52 -0800</date>
            <delta_ts>2022-03-14 13:29:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchBehaviors</filename>
            <type>text/plain</type>
            <size>31736</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNjhkY2RkNzE1Yjc3Li44YjIyYzlhN2QxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MjItMDMtMTAgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0dTTF0gQWRkIHRoZSBjb3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBJbmRleE1h
cDo6aW5zZXJ0LCB3aGljaCBhdXRvbWF0aWNhbGx5IGdyb3dzIHRoZSB1bmRlcmx5aW5nIHZlY3Rv
ciBpZiBuZWVkZWQuCisgICAgICAgIEl0IGFsbG93cyB1c2luZyBJbmRleE1hcCBlcmdvbm9taWNh
bGx5IGV2ZW4gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbnVtYmVyIG9mIGtleXMgYWhlYWQgb2YgdGlt
ZS4KKworICAgICAgICAqIHd0Zi9JbmRleE1hcC5oOgorICAgICAgICAoV1RGOjpJbmRleE1hcDo6
aW5zZXJ0KToKKwogMjAyMi0wMy0wOCAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXVEZdIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQg
Y2FuIGNhdXNlIGEgcmVpbmRleGluZyBvZiB0aGUgZW50aXJlIGJpdCB2ZWN0b3Igd2l0aCBldmVy
eSBjYWxsIGluIHRoZSB3b3JzdCBjYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRl
eE1hcC5oIGIvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAppbmRleCA1OTJiZjY0Zjk2MzEuLjZl
YjkyMTMyYjU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCkBAIC05Niw2ICs5NiwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdmVjdG9yLmFwcGVuZChzdGQ6OmZvcndhcmQ8UGFzc2VkVmFsdWU+KHZhbHVlKSk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVmFsdWU+CisgICAgdm9pZCBpbnNl
cnQoY29uc3QgS2V5JiBrZXksIFBhc3NlZFZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBz
aXplX3QgaW5kZXggPSBJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KTsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fdmVjdG9yLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmVjdG9yLmdyb3coaW5k
ZXggKyAxKTsKKyAgICAgICAgYXQoaW5kZXgpID0gc3RkOjpmb3J3YXJkPFBhc3NlZFZhbHVlPih2
YWx1ZSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFuZ2VMb2cKaW5kZXggMTZkMTQ1ZDgxMjlmLi5jMDlk
MzNjOTM0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjItMDMtMTAgIFJvYmluIE1v
cmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbV0dTTF0gQWRkIHRoZSBj
b3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoIEkgdHJpZWQgdG8gYmFsYW5j
ZSB0aGUgZm9sbG93aW5nIGNvbnRyYWRpY3RvcnkgZ29hbHM6CisgICAgICAgIC0gSGF2ZSBlYWNo
IHZhbGlkYXRpb24gcGhhc2UgaW4gaXRzIG93biBmaWxlLCBhbmQgcmVhZCBhcyBzaW1pbGFybHkg
dG8gdGhlIHNwZWMgYXMgcG9zc2libGUsIGZvciBlYXNlIG9mIG1haW50ZW5hbmNlCisgICAgICAg
IC0gT25seSB3YWxrIHRoZSBBU1Qgb25jZSwgdG8gbWluaW1pemUgdGhlIHBlcmZvcm1hbmNlIGNv
c3Qgb2YgYWxsIG9mIHRoZSB2YWxpZGF0aW9uIHBoYXNlcy4KKworICAgICAgICBJIGRpZCBzbyBi
eSBoYXZpbmcgYSBnZW5lcmljIFZhbGlkYXRvci5jcHAgZmlsZSB3aGljaCBpcyByZXNwb25zaWJs
ZSBmb3Igd2Fsa2luZyB0aGUgQVNUIChhIGRlcHRoLXNlYXJjaCB3YWxrKS4KKyAgICAgICAgT24g
ZWFjaCBBU1ROb2RlIGl0IGNhbGxzIHRoZSByZWxldmFudCB2YWxpZGF0aW9uIGNvZGUgKGN1cnJl
bnRseSBqdXN0IEJlaGF2aW9yQW5hbHlzaXMsIGJ1dCBpdCB3aWxsIHNvb24gaW5jbHVkZSBUeXBl
QW5hbHlzaXMsIFVuaWZvcm1pdHlBbmFseXNpcywgZXRjLi4pLgorCisgICAgICAgIE9uZSBjaGFs
bGVuZ2Ugd2FzIGhvdyB0byBwYXNzIGFsb25nIGluZm9ybWF0aW9uIGZyb20gc3VidHJlZXMgdG8g
dGhlaXIgcGFyZW50IG5vZGUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYmVoYXZpb3Igb2Yg
YSBDb21wb3VuZFN0YXRlbWVudCBkZXBlbmRzIG9uIHRoZSBiZWhhdmlvcnMgb2YgdGhlIHN1Yi1z
dGF0ZW1lbnRzLgorICAgICAgICBJIGNvbnNpZGVyZWQgdGhyZWUgcG9zc2libGUgYXBwcm9hY2hl
czoKKyAgICAgICAgLSBJIGNvdWxkIG5vdCBzaW1wbHkgcmVjdXJzaXZlbHkgY2FsbCB0aGUgYW5h
bHlzZXMgb24gdGhlIHN1YnRyZWVzIHdpdGhvdXQgaGF2aW5nIHNldmVyYWwgd2Fsa3Mgb2YgdGhl
IEFTVCAoaS5lLiBnaXZpbmcgdXAgb24gdXNpbmcgYSBzaW5nbGUgVmFsaWRhdG9yIHBhc3MpLgor
ICAgICAgICAtIEkgY291bGQgaGF2ZSBwdXQgdGhlIHJlc3VsdHMgb2YgZWFjaCBhbmFseXNpcyBp
biB0aGUgQVNUTm9kZXMsIGJ1dCBpdCB3b3VsZCBoYXZlIGhhZCBzZXZlcmFsIGRyYXdiYWNrczoK
KyAgICAgICAgICAgIC0gTW9yZSBtZW1vcnkgdXNhZ2UgYXMgd2Ugd291bGQgaGF2ZSBrZXB0IHRo
ZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgZXZlbiB3aGVuIG5vdCB1c2Vm
dWwKKyAgICAgICAgICAgIC0gV29yc2UgbGF5ZXJpbmcgb2YgdGhlIGNvbXBpbGVyOiBhcyB0aGUg
cGFyc2VyIGZvciBleGFtcGxlIGRlcGVuZHMgb24gdGhlIEFTVCBub2RlcyBpdCB3b3VsZCBhbHNv
IGhhdmUgZGVwZW5kZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdHlwZXMsIGJlaGF2aW9ycywgdW5p
Zm9ybWl0eSBub2RlcywgZXRjLi4KKyAgICAgICAgLSBJbnN0ZWFkIEkgZGVjaWRlZCB0byBvbmx5
IGhhdmUgYSBzaW5nbGUgaWQgcGVyIHN0YXRlbWVudC9leHByZXNzaW9uLCBhbmQgc3RvcmUgdGhl
IGluZm9ybWF0aW9uIGluIEluZGV4TWFwcyBpbiB0aGUgYW5hbHlzZXMgdGhlbXNlbHZlcy4KKyAg
ICAgICAgVGhpcyBzaG91bGQgYmUgdmVyeSBmYXN0IChzaW5jZSBJbmRleE1hcCBpcyBqdXN0IGEg
VmVjdG9yIHVuZGVybmVhdGgpLCBhbmQgd2UgY2FuIHBlcmZlY3RseSBjb250cm9sIGhvdyBsb25n
IHRoaW5ncyByZW1haW4gbGl2ZS4KKworICAgICAgICBJIHRlc3RlZCB0aGlzIHBhdGNoIG1hbnVh
bGx5IG9uIGEgZmV3IGV4YW1wbGVzLiBJIGRpZCBub3Qgd3JpdGUgYXV0b21hdGVkIHRlc3RzIGZv
ciBpdCBhcyB3ZSBzaG91bGQgc29vbiBiZSBhYmxlIHRvIHJ1biBhbGwgdGhvc2UgaW4gdGhlIENU
Uy4KKworICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24uaDoKKyAgICAgICAgKFdHU0w6OkFT
VDo6RXhwcmVzc2lvbjo6c2V0SW5kZXgpOgorICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9u
OjppbmRleCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJl
QWNjZXNzLmg6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24u
aDoKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhdGVtZW50OjpzZXRJbmRleCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0YXRlbWVudDo6aW5k
ZXggY29uc3QpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNpcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV0dTTDo6QmVoYXZpb3JBbmFseXNpczo6cnVuKToKKyAgICAgICAgKFdHU0w6OkJl
aGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNp
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OnJ1bik6CisgICAg
ICAgIChXR1NMOjpCZWhhdmlvckFuYWx5c2lzOjpiZWhhdmlvcnMpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6ZXJyb3JzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlz
aXM6Ondhcm5pbmdzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUp
OgorICAgICAgICAqIFdHU0wvVmFsaWRhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpW
YWxpZGF0b3I6OnJ1bkFuYWx5c2VzKToKKyAgICAgICAgKFdHU0w6OlZhbGlkYXRvcjo6YmVoYXZp
b3JzKToKKyAgICAgICAgKFdHU0w6OnZhbGlkYXRlU2hhZGVyKToKKyAgICAgICAgKFdHU0w6OlZh
bGlkYXRvcjo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6VmFsaWRhdG9y
Ojp2YWxpZGF0ZSk6CisgICAgICAgICogV0dTTC9XR1NMLmNwcDoKKyAgICAgICAgKFdHU0w6OnN0
YXRpY0NoZWNrKToKKyAgICAgICAgKiBXR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbToK
KyAgICAgICAgKC1bV0dTTFBhcnNlclRlc3RzIHRlc3RQYXJzaW5nRnVuY3Rpb25EZWNsXSk6Cisg
ICAgICAgICgtW1dHU0xQYXJzZXJUZXN0cyB0ZXN0VHJpdmlhbEdyYXBoaWNzU2hhZGVyXSk6Cisg
ICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjItMDMtMDkg
IFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0dTTF0g
SW1wbGVtZW50IGVub3VnaCBvZiB0aGUgUGFyc2VyIGZvciB0aGUgc2ltcGxlc3Qgc2hhZGVycwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaAppbmRleCBjODZiMDhiMjliZDEuLjk0MWRmMTg1
NDQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKQEAgLTMwLDYgKzMwLDEwIEBA
CiAKIG5hbWVzcGFjZSBXR1NMOjpBU1QgewogCisvLyBVc2VkIHRvIHB1dCB0aGUgc3RhdGVtZW50
cyBvZiBhIGdpdmVuIGZ1bmN0aW9uIGluIEluZGV4TWFwCisvLyBUaGUgVmFsaWRhdG9yIGlzIHJl
c3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZXNlIHVwIHdoZW4gdHJhdmVyc2luZyB0aGUgQVNUCit1
c2luZyBFeHByZXNzaW9uSW5kZXggPSB1bnNpZ25lZDsKKwogY2xhc3MgRXhwcmVzc2lvbiA6IHB1
YmxpYyBBU1ROb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAg
LTU4LDYgKzYyLDE2IEBAIHB1YmxpYzoKICAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpJZGVudGlmaWVyOyB9CiAgICAgYm9vbCBpc1N0cnVjdHVy
ZUFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdHJ1Y3R1cmVBY2Nlc3M7
IH0KICAgICBib29sIGlzVHlwZUNvbnZlcnNpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
S2luZDo6VHlwZUNvbnZlcnNpb247IH0KKworICAgIHZvaWQgc2V0SW5kZXgoRXhwcmVzc2lvbklu
ZGV4IG5ld0luZGV4KSB7IG1faW5kZXggPSBuZXdJbmRleDsgfQorICAgIEV4cHJlc3Npb25JbmRl
eCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEV4cHJlc3Npb25JbmRleD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCitwcml2YXRlOgorICAgIEV4cHJlc3Npb25JbmRleCBtX2luZGV4IHsg
c3RkOjpudW1lcmljX2xpbWl0czxFeHByZXNzaW9uSW5kZXg+OjptYXgoKSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9F
eHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaAppbmRleCBjN2I1ZDI4NTBhZjAuLjBkYmU3NGNi
NjQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1
Y3R1cmVBY2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0
cnVjdHVyZUFjY2Vzcy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAogbmFtZXNwYWNlIFdHU0w6OkFTVCB7CiAKQEAgLTQxLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtp
bmQ6OlN0cnVjdHVyZUFjY2VzczsgfQotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgYmFzZSgp
IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jh
c2U7IH0KICAgICBjb25zdCBTdHJpbmdWaWV3JiBmaWVsZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZpZWxkTmFtZTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oCmluZGV4IDk1NDJiZTgxMzliMS4uMGRjMzUw
YjhhMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5
cGVDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9U
eXBlQ29udmVyc2lvbi5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBL
aW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpUeXBlQ29udmVyc2lvbjsg
fQotICAgIFVuaXF1ZVJlZjxUeXBlRGVjbD4mIHR5cGVEZWNsKCkgeyByZXR1cm4gbV90eXBlRGVj
bDsgfQorICAgIFR5cGVEZWNsJiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KICAg
ICBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9h
cmd1bWVudHM7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCmluZGV4
IDFhY2E0ZTVjN2QyNC4uNjU0MTI2ZGNjODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50
LmgKQEAgLTMwLDYgKzMwLDEwIEBACiAKIG5hbWVzcGFjZSBXR1NMOjpBU1QgewogCisvLyBVc2Vk
IHRvIHB1dCB0aGUgc3RhdGVtZW50cyBvZiBhIGdpdmVuIGZ1bmN0aW9uIGluIEluZGV4TWFwCisv
LyBUaGUgVmFsaWRhdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZXNlIHVwIHdoZW4g
dHJhdmVyc2luZyB0aGUgQVNUCit1c2luZyBTdGF0ZW1lbnRJbmRleCA9IHVuc2lnbmVkOworCiBj
bGFzcyBTdGF0ZW1lbnQgOiBwdWJsaWMgQVNUTm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAKQEAgLTUxLDYgKzU1LDE2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ29tcG91bmQo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6Q29tcG91bmQ7IH0KICAgICBib29sIGlz
UmV0dXJuKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlJldHVybjsgfQogICAgIGJv
b2wgaXNBc3NpZ25tZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkFzc2lnbm1l
bnQ7IH0KKworICAgIHZvaWQgc2V0SW5kZXgoU3RhdGVtZW50SW5kZXggbmV3SW5kZXgpIHsgbV9p
bmRleCA9IG5ld0luZGV4OyB9CisgICAgU3RhdGVtZW50SW5kZXggaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czxTdGF0ZW1l
bnRJbmRleD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCitwcml2
YXRlOgorICAgIFN0YXRlbWVudEluZGV4IG1faW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPFN0
YXRlbWVudEluZGV4Pjo6bWF4KCkgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwIGIvU291
cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMWFkYTViYmExY2IwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmVoYXZpb3JBbmFseXNp
cy5oIgorCituYW1lc3BhY2UgV0dTTCB7CisKK3ZvaWQgQmVoYXZpb3JBbmFseXNpczo6cnVuKEFT
VDo6RnVuY3Rpb25EZWNsJiBmdW5jKQoreworICAgIEJlaGF2aW9ycyBib2R5QmVoYXZpb3JzID0g
YmVoYXZpb3JzKGZ1bmMuYm9keSgpKTsKKyAgICBpZiAoYm9keUJlaGF2aW9ycy5jb250YWluc0Fu
eSh7IEJlaGF2aW9yOjpDb250aW51ZSwgQmVoYXZpb3I6OkZhbGx0aHJvdWdoLCBCZWhhdmlvcjo6
QnJlYWsgfSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgbXVj
aCBiZXR0ZXIsIHdpdGggZ29vZCBsb2NhbGl6YXRpb24uCisgICAgICAgIC8vIE9uZSBwb3NzaWJp
bGl0eSB3b3VsZCBiZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgYmVoYXZpb3JzIGFyZSBhbGxvd2Vk
IGFzIHdlIHJlY3Vyc2UKKyAgICAgICAgLy8gSG93ZXZlciB0aGlzIHdvdWxkIHRha2Ugb3VyIGlt
cGxlbWVudGF0aW9uIHByZXR0eSBmYXIgZnJvbSB0aGUgc3BlYywgbWFraW5nIGl0IG11Y2ggaGFy
ZGVyIHRvIHZlcmlmeSB0aGF0IHdlIHN0YXkgaW4gc3luYy4KKyAgICAgICAgbV9lcnJvcnMuYXBw
ZW5kKHsgIkNvbnRpbnVlIG91dCBvZiBhIGxvb3AsIEZhbGx0aHJvdWdoIG91dCBvZiBhIHN3aXRj
aCBvciBCcmVhayBvdXQgb2YgYm90aCIsIGZ1bmMuYm9keSgpLnNwYW4oKSB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoZnVuYy5tYXliZVJldHVyblR5cGUoKSAmJiBib2R5QmVo
YXZpb3JzLmNvbnRhaW5zKEJlaGF2aW9yOjpOZXh0KSkgeworICAgICAgICBtX2Vycm9ycy5hcHBl
bmQoeyAiQ29udHJvbC1mbG93IGV4aXRpbmcgYSBub24tdm9pZCBmdW5jdGlvbiIsIGZ1bmMuc3Bh
bigpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitCZWhhdmlvcnMgQmVoYXZpb3JB
bmFseXNpczo6Y29tcHV0ZShBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmIHN0bXQpCit7CisgICAg
QmVoYXZpb3JzIHJlc3VsdCA9IGJlaGF2aW9ycyhzdG10LnJocygpKTsKKyAgICBpZiAoc3RtdC5t
YXliZUxocygpKQorICAgICAgICByZXN1bHQuYWRkKGJlaGF2aW9ycygqc3RtdC5tYXliZUxocygp
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6
OmNvbXB1dGUoQVNUOjpDb21wb3VuZFN0YXRlbWVudCYgc3RtdCkKK3sKKyAgICBCZWhhdmlvcnMg
cmVzdWx0IHsgQmVoYXZpb3I6Ok5leHQgfTsKKyAgICBmb3IgKGF1dG8mIHN1YlN0bXQgOiBzdG10
LnN0YXRlbWVudHMoKSkgeworICAgICAgICByZXN1bHQucmVtb3ZlKEJlaGF2aW9yOjpOZXh0KTsK
KyAgICAgICAgQmVoYXZpb3JzIGJzID0gYmVoYXZpb3JzKHN1YlN0bXQpOworICAgICAgICByZXN1
bHQuYWRkKGJzKTsKKyAgICAgICAgaWYgKCFicy5jb250YWlucyhCZWhhdmlvcjo6TmV4dCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvLyB0cml2aWFsbHkgZGVhZCBjb2RlIGRvZXMgbm90
IGNvbnRyaWJ1dGUgdG8gYmVoYXZpb3IgYW5hbHlzaXMKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUoQVNUOjpSZXR1cm5T
dGF0ZW1lbnQmIHN0bXQpCit7CisgICAgQVNUOjpFeHByZXNzaW9uKiByZXR1cm5FeHByZXNzaW9u
ID0gc3RtdC5tYXliZUV4cHJlc3Npb24oKTsKKyAgICBCZWhhdmlvcnMgcmVzdWx0IHsgQmVoYXZp
b3I6OlJldHVybiB9OworICAgIGlmIChyZXR1cm5FeHByZXNzaW9uKSB7CisgICAgICAgIEJlaGF2
aW9ycyBleHByZXNzaW9uQmVoYXZpb3JzID0gYmVoYXZpb3JzKCpyZXR1cm5FeHByZXNzaW9uKTsK
KyAgICAgICAgZXhwcmVzc2lvbkJlaGF2aW9ycy5yZW1vdmUoQmVoYXZpb3I6Ok5leHQpOworICAg
ICAgICByZXN1bHQuYWRkKGV4cHJlc3Npb25CZWhhdmlvcnMpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitCZWhhdmlvcnMgQmVoYXZpb3JBbmFseXNpczo6Y29tcHV0ZShBU1Q6OlN0
cnVjdHVyZUFjY2VzcyYgZXhwcikKK3sKKyAgICByZXR1cm4gYmVoYXZpb3JzKGV4cHIuYmFzZSgp
KTsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUoQVNUOjpUeXBlQ29u
dmVyc2lvbiYgZXhwcikKK3sKKyAgICBCZWhhdmlvcnMgcmVzdWx0OworICAgIGZvciAoYXV0byYg
c3ViRXhwciA6IGV4cHIuYXJndW1lbnRzKCkpCisgICAgICAgIHJlc3VsdC5hZGQoYmVoYXZpb3Jz
KHN1YkV4cHIpKTsKKyAgICByZXN1bHQuYWRkKHsgQmVoYXZpb3I6Ok5leHQgfSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0JlaGF2
aW9yQW5hbHlzaXMuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9CZWhhdmlvckFuYWx5c2lzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wM2ZlYTYxMWM4MTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQmVoYXZpb3JBbmFseXNpcy5oCkBAIC0w
LDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1Qv
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9JZGVudGlmaWVyRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaCIK
KyNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgiCisjaW5jbHVkZSAi
QVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0Z1bmN0aW9u
RGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVt
ZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvQ29t
cG91bmRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1l
bnQuaCIKKyNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKworZW51bSBjbGFzcyBCZWhhdmlvciA6IHVpbnQ4X3Qg
eworICAgIE5leHQgPSAxPDwwLAorICAgIFJldHVybiA9IDE8PDEsCisgICAgQnJlYWsgPSAxPDwy
LAorICAgIENvbnRpbnVlID0gMTw8MywKKyAgICBGYWxsdGhyb3VnaCA9IDE8PDQsCisgICAgRGlz
Y2FyZCA9IDE8PDUsCit9OworCit1c2luZyBCZWhhdmlvcnMgPSBPcHRpb25TZXQ8QmVoYXZpb3I+
OworCitjbGFzcyBCZWhhdmlvckFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJ1bihBU1Q6
OkZ1bmN0aW9uRGVjbCYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0YXRlbWVudE5vZGU+
CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mX3Y8QVNUOjpTdGF0
ZW1lbnQsIFN0YXRlbWVudE5vZGU+LCB2b2lkPjo6dHlwZSBydW4oU3RhdGVtZW50Tm9kZSYgc3Rt
dCkKKyAgICB7CisgICAgICAgIG1fc3RtdEJlaGF2aW9ycy5pbnNlcnQoc3RtdCwgY29tcHV0ZShz
dG10KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Npb25Ob2RlPgor
ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZl92PEFTVDo6RXhwcmVz
c2lvbiwgRXhwcmVzc2lvbk5vZGU+LCB2b2lkPjo6dHlwZSBydW4oRXhwcmVzc2lvbk5vZGUmIGV4
cHIpCisgICAgeworICAgICAgICBtX2V4cHJCZWhhdmlvcnMuaW5zZXJ0KGV4cHIsIGNvbXB1dGUo
ZXhwcikpOworICAgIH0KKworICAgIEJlaGF2aW9ycyBiZWhhdmlvcnMoQVNUOjpTdGF0ZW1lbnQm
IHN0bXQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc3RtdEJlaGF2aW9yc1tzdG10XS5pc0Vt
cHR5KCkpOworICAgICAgICByZXR1cm4gbV9zdG10QmVoYXZpb3JzW3N0bXRdOworICAgIH0KKyAg
ICBCZWhhdmlvcnMgYmVoYXZpb3JzKEFTVDo6RXhwcmVzc2lvbiYgZXhwcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9leHByQmVoYXZpb3JzW2V4cHJdLmlzRW1wdHkoKSk7CisgICAgICAgIHJl
dHVybiBtX2V4cHJCZWhhdmlvcnNbZXhwcl07CisgICAgfQorCisgICAgdm9pZCByZXNldFBlckZ1
bmN0aW9uRGF0YSgpCisgICAgeworICAgICAgICBtX3N0bXRCZWhhdmlvcnMucmVzaXplKDApOwor
ICAgICAgICBtX2V4cHJCZWhhdmlvcnMucmVzaXplKDApOworICAgICAgICBtX2Vycm9ycy5zaHJp
bmsoMCk7CisgICAgICAgIG1fd2FybmluZ3Muc2hyaW5rKDApOworICAgIH0KKworICAgIFZlY3Rv
cjxFcnJvcj4mIGVycm9ycygpIHsgcmV0dXJuIG1fZXJyb3JzOyB9CisgICAgVmVjdG9yPFdhcm5p
bmc+JiB3YXJuaW5ncygpIHsgcmV0dXJuIG1fd2FybmluZ3M7IH0KKworcHJpdmF0ZToKKyAgICBC
ZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmKTsKKyAgICBCZWhhdmlv
cnMgY29tcHV0ZShBU1Q6OkNvbXBvdW5kU3RhdGVtZW50Jik7CisgICAgQmVoYXZpb3JzIGNvbXB1
dGUoQVNUOjpSZXR1cm5TdGF0ZW1lbnQmKTsKKworICAgIEJlaGF2aW9ycyBjb21wdXRlKEFTVDo6
U3RydWN0dXJlQWNjZXNzJik7CisgICAgQmVoYXZpb3JzIGNvbXB1dGUoQVNUOjpUeXBlQ29udmVy
c2lvbiYpOworICAgIEJlaGF2aW9ycyBjb21wdXRlKEFTVDo6SWRlbnRpZmllckV4cHJlc3Npb24m
KSB7IHJldHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShB
U1Q6OkJvb2xMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlvcjo6TmV4dCB9OyB9CisgICAgQmVo
YXZpb3JzIGNvbXB1dGUoQVNUOjpJbnQzMkxpdGVyYWwmKSB7IHJldHVybiB7IEJlaGF2aW9yOjpO
ZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OlVpbnQzMkxpdGVyYWwmKSB7IHJl
dHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkZs
b2F0MzJMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlvcjo6TmV4dCB9OyB9CisKKyAgICBJbmRl
eE1hcDxBU1Q6OlN0YXRlbWVudCwgQmVoYXZpb3JzPiBtX3N0bXRCZWhhdmlvcnM7CisgICAgSW5k
ZXhNYXA8QVNUOjpFeHByZXNzaW9uLCBCZWhhdmlvcnM+IG1fZXhwckJlaGF2aW9yczsKKyAgICBW
ZWN0b3I8RXJyb3I+IG1fZXJyb3JzOworICAgIFZlY3RvcjxXYXJuaW5nPiBtX3dhcm5pbmdzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L1ZhbGlkYXRvci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVmFsaWRhdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ4ZmMwN2MwY2M2NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9WYWxpZGF0b3IuY3BwCkBAIC0wLDAgKzEsMTc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhbGlkYXRv
ci5oIgorCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIgorI2lu
Y2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9F
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0Z1bmN0aW9uRGVjbC5oIgorI2luY2x1ZGUgIkFT
VC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVt
ZW50cy9Db21wb3VuZFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL1JldHVy
blN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJCZWhh
dmlvckFuYWx5c2lzLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKworY2xhc3MgVmFsaWRhdG9yIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHZhbGlkYXRlKEFTVDo6RnVuY3Rpb25EZWNsJik7CisgICAgdm9p
ZCB2YWxpZGF0ZShBU1Q6OlN0YXRlbWVudCYgc3RtdCwgYm9vbCBpc0RlYWRDb2RlKTsKKyAgICB2
b2lkIHZhbGlkYXRlKEFTVDo6RXhwcmVzc2lvbiYgZXhwciwgYm9vbCBpc0RlYWRDb2RlKTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFTVD4KKyAgICB2b2lkIHJ1bkFuYWx5c2VzKEFTVCYgYXN0
LCBib29sIGlzRGVhZENvZGUpCisgICAgeworICAgICAgICBpZiAoIWlzRGVhZENvZGUpCisgICAg
ICAgICAgICBtX2JlaGF2aW9yQW5hbHlzaXMucnVuKGFzdCk7CisgICAgICAgIC8vIEZJWE1FOiB0
eXBlIGNoZWNraW5nIGZvciBleHByZXNzaW9ucworICAgICAgICAvLyBGSVhNRTogdW5pZm9ybWl0
eSBjaGVja2luZyBmb3IgYm90aCBzdGF0ZW1lbnRzIGFuZCBleHByZXNzaW9ucworICAgIH0KKwor
ICAgIHZvaWQgcmVzZXRQZXJGdW5jdGlvbkRhdGEoKTsKKworICAgIEJlaGF2aW9ycyBiZWhhdmlv
cnMoQVNUOjpTdGF0ZW1lbnQmIHN0bXQpIHsgcmV0dXJuIG1fYmVoYXZpb3JBbmFseXNpcy5iZWhh
dmlvcnMoc3RtdCk7IH0KKworICAgIFZlY3RvcjxXYXJuaW5nPiBtX3dhcm5pbmdzIHsgfTsKKyAg
ICBWZWN0b3I8RXJyb3I+IG1fZXJyb3JzIHsgfTsKKyAgICBBU1Q6OlN0YXRlbWVudEluZGV4IG1f
bmV4dEF2YWlsYWJsZVN0YXRlbWVudEluZGV4IHsgMCB9OworICAgIEFTVDo6RXhwcmVzc2lvbklu
ZGV4IG1fbmV4dEF2YWlsYWJsZUV4cHJlc3Npb25JbmRleCB7IDAgfTsKKyAgICBCZWhhdmlvckFu
YWx5c2lzIG1fYmVoYXZpb3JBbmFseXNpcyB7IH07Cit9OworCisvLyBGSVhNRTogY2hlY2sgYXR0
cmlidXRlcworc3RkOjpwYWlyPFZlY3RvcjxFcnJvcj4sIFZlY3RvcjxXYXJuaW5nPj4gdmFsaWRh
dGVTaGFkZXIoQVNUOjpTaGFkZXJNb2R1bGUmIHNoYWRlcikKK3sKKyAgICBWYWxpZGF0b3IgdmFs
aWRhdG9yOworICAgIGZvciAoYXV0byYgZnVuYyA6IHNoYWRlci5mdW5jdGlvbnMoKSkgeworICAg
ICAgICB2YWxpZGF0b3IucmVzZXRQZXJGdW5jdGlvbkRhdGEoKTsKKyAgICAgICAgdmFsaWRhdG9y
LnZhbGlkYXRlKGZ1bmMpOworICAgIH0KKyAgICByZXR1cm4geyBXVEZNb3ZlKHZhbGlkYXRvci5t
X2Vycm9ycyksIFdURk1vdmUodmFsaWRhdG9yLm1fd2FybmluZ3MpIH07Cit9CisKK3ZvaWQgVmFs
aWRhdG9yOjpyZXNldFBlckZ1bmN0aW9uRGF0YSgpCit7CisgICAgbV9uZXh0QXZhaWxhYmxlU3Rh
dGVtZW50SW5kZXggPSAwOworICAgIG1fbmV4dEF2YWlsYWJsZUV4cHJlc3Npb25JbmRleCA9IDA7
CisgICAgbV9iZWhhdmlvckFuYWx5c2lzLnJlc2V0UGVyRnVuY3Rpb25EYXRhKCk7Cit9CisKKy8v
IEZJWE1FOiB2YWxpZGF0ZSBubyByZWN1cnNpb24KKy8vIEZJWE1FOiBvdGhlciB2YXJpZWQgdmFs
aWRhdGlvbiAoZS5nLiBhbGlhc2luZykKK3ZvaWQgVmFsaWRhdG9yOjp2YWxpZGF0ZShBU1Q6OkZ1
bmN0aW9uRGVjbCYgZnVuYykKK3sKKyAgICBib29sIGlzRGVhZENvZGUgPSBmYWxzZTsKKyAgICB2
YWxpZGF0ZShmdW5jLmJvZHkoKSwgaXNEZWFkQ29kZSk7CisKKyAgICAvLyBUaGlzIG9ubHkgZG9l
cyB0aGUgdG9wLWxldmVsIGNoZWNrIG9uIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yIGFzIGEgd2hv
bGUKKyAgICAvLyBUaGUgYWN0dWFsIGNvbXB1dGF0aW9uIG9mIHRoYXQgYmVoYXZpb3IgaXMgZG9u
ZSB0aHJvdWdoIHRoZSByZWN1cnNpdmUgY2FsbHMgdG8gdmFsaWRhdGUgd2hpY2ggaXMgY2FsbGVk
IGFib3ZlLgorICAgIG1fYmVoYXZpb3JBbmFseXNpcy5ydW4oZnVuYyk7CisgICAgbV9lcnJvcnMu
YXBwZW5kUmFuZ2UobV9iZWhhdmlvckFuYWx5c2lzLmVycm9ycygpLmJlZ2luKCksIG1fYmVoYXZp
b3JBbmFseXNpcy5lcnJvcnMoKS5lbmQoKSk7CisgICAgbV93YXJuaW5ncy5hcHBlbmRSYW5nZSht
X2JlaGF2aW9yQW5hbHlzaXMud2FybmluZ3MoKS5iZWdpbigpLCBtX2JlaGF2aW9yQW5hbHlzaXMu
d2FybmluZ3MoKS5lbmQoKSk7CisKKyAgICAvLyBGSVhNRTogdW5pZm9ybWl0eSBjaGVjaworfQor
Cit2b2lkIFZhbGlkYXRvcjo6dmFsaWRhdGUoQVNUOjpTdGF0ZW1lbnQmIHN0bXQsIGJvb2wgaXNE
ZWFkQ29kZSkKK3sKKyAgICBzdG10LnNldEluZGV4KG1fbmV4dEF2YWlsYWJsZVN0YXRlbWVudElu
ZGV4KyspOworICAgIHN3aXRjaCAoc3RtdC5raW5kKCkpIHsKKyAgICBjYXNlIEFTVDo6U3RhdGVt
ZW50OjpLaW5kOjpDb21wb3VuZDogeworICAgICAgICBhdXRvJiBjb21wb3VuZFN0YXRlbWVudCA9
IGRvd25jYXN0PEFTVDo6Q29tcG91bmRTdGF0ZW1lbnQ+KHN0bXQpOworICAgICAgICBib29sIGlz
Q2hpbGREZWFkQ29kZSA9IGlzRGVhZENvZGU7CisgICAgICAgIHNpemVfdCBzaXplID0gY29tcG91
bmRTdGF0ZW1lbnQuc3RhdGVtZW50cygpLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIEFTVDo6U3RhdGVtZW50JiBzdWJTdG10
ID0gY29tcG91bmRTdGF0ZW1lbnQuc3RhdGVtZW50cygpW2ldOworICAgICAgICAgICAgdmFsaWRh
dGUoc3ViU3RtdCwgaXNDaGlsZERlYWRDb2RlKTsKKyAgICAgICAgICAgIGlmICghaXNDaGlsZERl
YWRDb2RlICYmIChpICsgMSA8IHNpemUpICYmICFiZWhhdmlvcnMoc3ViU3RtdCkuY29udGFpbnMo
QmVoYXZpb3I6Ok5leHQpKSB7CisgICAgICAgICAgICAgICAgaXNDaGlsZERlYWRDb2RlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBtX3dhcm5pbmdzLmFwcGVuZCh7ICJEZWFkIGNvZGUgZm91bmQg
YnkgdGhlIGJlaGF2aW9yIGFuYWx5c2lzIiwgY29tcG91bmRTdGF0ZW1lbnQuc3RhdGVtZW50cygp
W2krMV0tPnNwYW4oKSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBydW5B
bmFseXNlcyhjb21wb3VuZFN0YXRlbWVudCwgaXNEZWFkQ29kZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBBU1Q6OlN0YXRlbWVudDo6S2luZDo6QXNzaWdubWVudDogeworICAg
ICAgICBBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmIGFzc2lnbm1lbnQgPSBkb3duY2FzdDxBU1Q6
OkFzc2lnbm1lbnRTdGF0ZW1lbnQ+KHN0bXQpOworICAgICAgICBpZiAoYXNzaWdubWVudC5tYXli
ZUxocygpKQorICAgICAgICAgICAgdmFsaWRhdGUoKmFzc2lnbm1lbnQubWF5YmVMaHMoKSwgaXNE
ZWFkQ29kZSk7CisgICAgICAgIHZhbGlkYXRlKGFzc2lnbm1lbnQucmhzKCksIGlzRGVhZENvZGUp
OworICAgICAgICBydW5BbmFseXNlcyhhc3NpZ25tZW50LCBpc0RlYWRDb2RlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFTVDo6U3RhdGVtZW50OjpLaW5kOjpSZXR1cm46IHsK
KyAgICAgICAgQVNUOjpSZXR1cm5TdGF0ZW1lbnQmIHJldHVyblN0bXQgPSBkb3duY2FzdDxBU1Q6
OlJldHVyblN0YXRlbWVudD4oc3RtdCk7CisgICAgICAgIEFTVDo6RXhwcmVzc2lvbiogcmV0dXJu
RXhwcmVzc2lvbiA9IHJldHVyblN0bXQubWF5YmVFeHByZXNzaW9uKCk7CisgICAgICAgIGlmIChy
ZXR1cm5FeHByZXNzaW9uKQorICAgICAgICAgICAgdmFsaWRhdGUoKnJldHVybkV4cHJlc3Npb24s
IGlzRGVhZENvZGUpOworICAgICAgICBydW5BbmFseXNlcyhyZXR1cm5TdG10LCBpc0RlYWRDb2Rl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVmFsaWRhdG9yOjp2
YWxpZGF0ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHIsIGJvb2wgaXNEZWFkQ29kZSkKK3sKKyAgICBl
eHByLnNldEluZGV4KG1fbmV4dEF2YWlsYWJsZUV4cHJlc3Npb25JbmRleCsrKTsKKyAgICBzd2l0
Y2ggKGV4cHIua2luZCgpKSB7CisgICAgY2FzZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6OlN0cnVj
dHVyZUFjY2VzczogeworICAgICAgICBBU1Q6OlN0cnVjdHVyZUFjY2VzcyYgc3RydWN0QWNjZXNz
ID0gZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KGV4cHIpOworICAgICAgICB2YWxpZGF0
ZShzdHJ1Y3RBY2Nlc3MuYmFzZSgpLCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcnVuQW5hbHlzZXMo
c3RydWN0QWNjZXNzLCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEFTVDo6RXhwcmVzc2lvbjo6S2luZDo6VHlwZUNvbnZlcnNpb246IHsKKyAgICAgICAgQVNU
OjpUeXBlQ29udmVyc2lvbiYgdHlwZUNvbnZlcnNpb24gPSBkb3duY2FzdDxBU1Q6OlR5cGVDb252
ZXJzaW9uPihleHByKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdWJFeHByIDogdHlwZUNvbnZlcnNp
b24uYXJndW1lbnRzKCkpCisgICAgICAgICAgICB2YWxpZGF0ZShzdWJFeHByLCBpc0RlYWRDb2Rl
KTsKKyAgICAgICAgcnVuQW5hbHlzZXModHlwZUNvbnZlcnNpb24sIGlzRGVhZENvZGUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQVNUOjpFeHByZXNzaW9uOjpLaW5kOjpJZGVu
dGlmaWVyOgorICAgICAgICBydW5BbmFseXNlcyhkb3duY2FzdDxBU1Q6OklkZW50aWZpZXJFeHBy
ZXNzaW9uPihleHByKSwgaXNEZWFkQ29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFT
VDo6RXhwcmVzc2lvbjo6S2luZDo6Qm9vbExpdGVyYWw6CisgICAgICAgIHJ1bkFuYWx5c2VzKGRv
d25jYXN0PEFTVDo6Qm9vbExpdGVyYWw+KGV4cHIpLCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQVNUOjpFeHByZXNzaW9uOjpLaW5kOjpJbnQzMkxpdGVyYWw6CisgICAg
ICAgIHJ1bkFuYWx5c2VzKGRvd25jYXN0PEFTVDo6SW50MzJMaXRlcmFsPihleHByKSwgaXNEZWFk
Q29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFTVDo6RXhwcmVzc2lvbjo6S2luZDo6
VWludDMyTGl0ZXJhbDoKKyAgICAgICAgcnVuQW5hbHlzZXMoZG93bmNhc3Q8QVNUOjpVaW50MzJM
aXRlcmFsPihleHByKSwgaXNEZWFkQ29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFT
VDo6RXhwcmVzc2lvbjo6S2luZDo6RmxvYXQzMkxpdGVyYWw6CisgICAgICAgIHJ1bkFuYWx5c2Vz
KGRvd25jYXN0PEFTVDo6RmxvYXQzMkxpdGVyYWw+KGV4cHIpLCBpc0RlYWRDb2RlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3Bw
CmluZGV4IDZlNzg0MTBmNzk5YS4uNGZlNzRlYWYyMDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV0dTTC5oIgogCiAjaW5jbHVkZSAiUGFyc2VyLmgiCisj
aW5jbHVkZSAiVmFsaWRhdG9yLmgiCiAKIG5hbWVzcGFjZSBXR1NMIHsKIApAQCAtMzksOCArNDAs
MTAgQEAgc3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVjaywgRmFpbGVkQ2hlY2s+IHN0YXRpY0No
ZWNrKGNvbnN0IFN0cmluZyYgd2dzbCwgY29uc3QKICAgICB9CiAgICAgVW5pcXVlUmVmPEFTVDo6
U2hhZGVyTW9kdWxlPiBzaGFkZXIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6U2hhZGVyTW9kdWxlPihX
VEZNb3ZlKHBhcnNlclJlc3VsdC52YWx1ZSgpKSk7CiAKLSAgICBWZWN0b3I8V2FybmluZz4gd2Fy
bmluZ3MgeyB9OwotICAgIC8vIEZJWE1FOiBhZGQgdmFsaWRhdGlvbgorICAgIGF1dG8gW2Vycm9y
cywgd2FybmluZ3NdID0gdmFsaWRhdGVTaGFkZXIoc2hhZGVyKTsKKyAgICBpZiAoIWVycm9ycy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBGYWlsZWRDaGVjayB7IFdURk1vdmUoZXJyb3JzKSwg
V1RGTW92ZSh3YXJuaW5ncykgfTsKKwogICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3VjY2Vzc2Z1
bENoZWNrLCBGYWlsZWRDaGVjaz4oc3RkOjppbl9wbGFjZV90eXBlPFN1Y2Nlc3NmdWxDaGVjaz4s
IFdURk1vdmUod2FybmluZ3MpLCBXVEZNb3ZlKHNoYWRlcikpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFBhcnNlclRlc3RzLm1tIGIvU291cmNlL1dl
YkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbQppbmRleCBmMGI5OWVlMGFlNTQu
LmUyMzA5NjM1YjlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dH
U0xQYXJzZXJUZXN0cy5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFBh
cnNlclRlc3RzLm1tCkBAIC0xMTgsOCArMTE4LDggQEAgLSAodm9pZCl0ZXN0UGFyc2luZ0Z1bmN0
aW9uRGVjbCB7CiAgICAgWENUQXNzZXJ0KHN0bXQubWF5YmVMaHMoKSk7CiAgICAgWENUQXNzZXJ0
KHN0bXQubWF5YmVMaHMoKS0+aXNTdHJ1Y3R1cmVBY2Nlc3MoKSk7CiAgICAgV0dTTDo6QVNUOjpT
dHJ1Y3R1cmVBY2Nlc3MmIHN0cnVjdEFjY2VzcyA9IGRvd25jYXN0PFdHU0w6OkFTVDo6U3RydWN0
dXJlQWNjZXNzPigqc3RtdC5tYXliZUxocygpKTsKLSAgICBYQ1RBc3NlcnQoc3RydWN0QWNjZXNz
LmJhc2UoKS0+aXNJZGVudGlmaWVyKCkpOwotICAgIFdHU0w6OkFTVDo6SWRlbnRpZmllckV4cHJl
c3Npb24gYmFzZSA9IGRvd25jYXN0PFdHU0w6OkFTVDo6SWRlbnRpZmllckV4cHJlc3Npb24+KHN0
cnVjdEFjY2Vzcy5iYXNlKCkuZ2V0KCkpOworICAgIFhDVEFzc2VydChzdHJ1Y3RBY2Nlc3MuYmFz
ZSgpLmlzSWRlbnRpZmllcigpKTsKKyAgICBXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9u
IGJhc2UgPSBkb3duY2FzdDxXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uPihzdHJ1Y3RB
Y2Nlc3MuYmFzZSgpKTsKICAgICBYQ1RBc3NlcnQoYmFzZS5pZGVudGlmaWVyKCkgPT0gIngiKTsK
ICAgICBYQ1RBc3NlcnQoc3RydWN0QWNjZXNzLmZpZWxkTmFtZSgpID09ICJhIik7CiAgICAgWENU
QXNzZXJ0KHN0bXQucmhzKCkuaXNJbnQzMkxpdGVyYWwoKSk7CkBAIC0xOTAsNyArMTkwLDcgQEAg
LSAodm9pZCl0ZXN0VHJpdmlhbEdyYXBoaWNzU2hhZGVyIHsKICAgICAgICAgWENUQXNzZXJ0KHN0
bXQubWF5YmVFeHByZXNzaW9uKCkpOwogICAgICAgICBYQ1RBc3NlcnQoc3RtdC5tYXliZUV4cHJl
c3Npb24oKS0+aXNUeXBlQ29udmVyc2lvbigpKTsKICAgICAgICAgV0dTTDo6QVNUOjpUeXBlQ29u
dmVyc2lvbiYgZXhwciA9IGRvd25jYXN0PFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb24+KCpzdG10
Lm1heWJlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgWENUQXNzZXJ0KGV4cHIudHlwZURlY2woKS0+
aXNQYXJhbWV0ZXJpemVkKCkpOworICAgICAgICBYQ1RBc3NlcnQoZXhwci50eXBlRGVjbCgpLmlz
UGFyYW1ldGVyaXplZCgpKTsKICAgICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKCkuc2l6
ZSgpID09IDQpOwogICAgICAgICBYQ1RBc3NlcnQoZXhwci5hcmd1bWVudHMoKVswXS0+aXNGbG9h
dDMyTGl0ZXJhbCgpKTsKICAgICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKClbMV0tPmlz
RmxvYXQzMkxpdGVyYWwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjNDI2MGFhZGJhNmEuLjliYWVkODEzMDg1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Miw2ICs1
MiwxMCBAQAogCQkzMzlCN0IxQjI3RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjFBMjdEODAwMDkw
MDcyQkY5QSAvKiBQYXJzZXIuY3BwICovOyB9OwogCQkzMzlCN0IxRDI3RDgwQTFDMDA3MkJGOUEg
LyogV0dTTFBhcnNlclRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzM5QjdCMUMyN0Q4MEExQzAwNzJCRjlBIC8qIFdHU0xQYXJzZXJUZXN0cy5t
bSAqLzsgfTsKIAkJMzM5QjdCMUUyN0Q4MTYyNzAwNzJCRjlBIC8qIENvbXBpbGF0aW9uTWVzc2Fn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VB
MTg2NzI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLzsgfTsKKwkJ
MzM5QjdCMjAyN0Q5NjgxMTAwNzJCRjlBIC8qIFZhbGlkYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5QjdCMUYyN0Q5NjgxMTAwNzJCRjlBIC8q
IFZhbGlkYXRvci5oICovOyB9OworCQkzMzlCN0IyMjI3RDk2OTRBMDA3MkJGOUEgLyogVmFsaWRh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMz
OUI3QjIxMjdEOTY5NEEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuY3BwICovOyB9OworCQkzMzlCN0Iy
NDI3RDk3NTg0MDA3MkJGOUEgLyogQmVoYXZpb3JBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5QjdCMjMyN0Q5NzU4NDAwNzJCRjlBIC8q
IEJlaGF2aW9yQW5hbHlzaXMuaCAqLzsgfTsKKwkJMzM5QjdCMjYyN0RBQ0FDQjAwNzJCRjlBIC8q
IEJlaGF2aW9yQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzM5QjdCMjUyN0RBQ0FDQjAwNzJCRjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMu
Y3BwICovOyB9OwogCQkzM0VBMTg1RTI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NUQyN0JDMTk0
RjAwQTFERDUyIC8qIEFTVE5vZGUuaCAqLzsgfTsKIAkJMzNFQTE4NjAyN0JDMTk4MTAwQTFERDUy
IC8qIEdsb2JhbERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzNFQTE4NUYyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5o
ICovOyB9OwogCQkzM0VBMTg2MjI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFsRGVjbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NjEyN0JDMTlD
MTAwQTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLzsgfTsKQEAgLTIwNyw2ICsyMTEsMTAgQEAKIAkJ
MzM5QjdCMTcyN0Q3RkZBNDAwNzJCRjlBIC8qIFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5QjdCMUEyN0Q4MDAwOTAwNzJC
RjlBIC8qIFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMzlCN0IxQzI3RDgwQTFDMDA3MkJGOUEgLyogV0dTTFBh
cnNlclRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0dTTFBhcnNlclRlc3RzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzlCN0IxRjI3RDk2ODExMDA3MkJGOUEgLyog
VmFsaWRhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMzlCN0IyMTI3RDk2OTRBMDA3MkJGOUEgLyogVmFsaWRhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMzOUI3QjIzMjdEOTc1ODQwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJlaGF2aW9yQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzM5QjdCMjUyN0RBQ0FDQjAwNzJCRjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmVoYXZpb3JBbmFseXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMzRUExODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEFTVE5vZGUuaDsgcGF0aCA9IFdHU0wvQVNUTm9kZS5oOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CiAJCTMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJl
Y3RpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFsRGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMzRUExODYxMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdsb2JhbERlY2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM4Myw2ICszOTEsMTAgQEAKIAkJCQkzMzlCN0IxQTI3RDgwMDA5MDA3MkJGOUEgLyogUGFy
c2VyLmNwcCAqLywKIAkJCQkzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLywK
IAkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8sCisJCQkJMzM5QjdC
MUYyN0Q5NjgxMTAwNzJCRjlBIC8qIFZhbGlkYXRvci5oICovLAorCQkJCTMzOUI3QjIxMjdEOTY5
NEEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuY3BwICovLAorCQkJCTMzOUI3QjIzMjdEOTc1ODQwMDcy
QkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggKi8sCisJCQkJMzM5QjdCMjUyN0RBQ0FDQjAwNzJC
RjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuY3BwICovLAogCQkJCTFDRUJEN0Y3MjcxNkIzNDQwMEE1
MjU0RCAvKiBXR1NMLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdHU0w7CkBAIC00NTIsOSArNDY0
LDkgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzNFQTE4ODEy
N0JDMjVEMDAwQTFERDUyIC8qIElkZW50aWZpZXJFeHByZXNzaW9uLmggKi8sCisJCQkJMzNFQTE4
ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oICovLAogCQkJCTMzRUEx
ODgzMjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAqLywKIAkJCQkzM0VBMTg4
NTI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLywKLQkJCQkzM0VBMTg4NzI3
QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IEV4cHJlc3Npb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ4OSw4ICs1
MDEsMTAgQEAKIAkJCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMzRUExODg4MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFsRXhwcmVzc2lv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzOEJCMkNFMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tl
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM5QjdCMjAyN0Q5NjgxMTAwNzJCRjlBIC8qIFZhbGlk
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNFQTE4NkMyN0JDMUNCQzAwQTFERDUyIC8qIEV4
cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1MjU0RCAv
KiBXR1NMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzlCN0IyNDI3RDk3NTg0MDA3MkJGOUEgLyog
QmVoYXZpb3JBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNFQTE4NjIyN0JDMTlDMTAw
QTFERDUyIC8qIEdsb2JhbERlY2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzRUExODgwMjdCQzI0
RTIwMEExREQ1MiAvKiBBc3NpZ25tZW50U3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkz
M0VBMTg4NDI3QkMyNjg2MDBBMURENTIgLyogU3RydWN0dXJlQWNjZXNzLmggaW4gSGVhZGVycyAq
LywKQEAgLTczNiw5ICs3NTAsMTEgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKIAkJCQkzMzlCN0IxRTI3RDgxNjI3MDA3MkJGOUEgLyogQ29tcGlsYXRp
b25NZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzOUI3QjI2MjdEQUNBQ0IwMDcyQkY5
QSAvKiBCZWhhdmlvckFuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzOUI3QjFCMjdE
ODAwMDkwMDcyQkY5QSAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzM4QkIyRDYy
N0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzOEJCMkQw
MjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMzlCN0Iy
MjI3RDk2OTRBMDA3MkJGOUEgLyogVmFsaWRhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFD
RUJEODAzMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwo=
</data>
<flag name="commit-queue"
          id="482061"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454617</attachid>
            <date>2022-03-14 13:29:08 -0700</date>
            <delta_ts>2022-03-14 14:16:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchBehaviors</filename>
            <type>text/plain</type>
            <size>33510</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNjhkY2RkNzE1Yjc3Li44YjIyYzlhN2QxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MjItMDMtMTAgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0dTTF0gQWRkIHRoZSBjb3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBJbmRleE1h
cDo6aW5zZXJ0LCB3aGljaCBhdXRvbWF0aWNhbGx5IGdyb3dzIHRoZSB1bmRlcmx5aW5nIHZlY3Rv
ciBpZiBuZWVkZWQuCisgICAgICAgIEl0IGFsbG93cyB1c2luZyBJbmRleE1hcCBlcmdvbm9taWNh
bGx5IGV2ZW4gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbnVtYmVyIG9mIGtleXMgYWhlYWQgb2YgdGlt
ZS4KKworICAgICAgICAqIHd0Zi9JbmRleE1hcC5oOgorICAgICAgICAoV1RGOjpJbmRleE1hcDo6
aW5zZXJ0KToKKwogMjAyMi0wMy0wOCAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXVEZdIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQg
Y2FuIGNhdXNlIGEgcmVpbmRleGluZyBvZiB0aGUgZW50aXJlIGJpdCB2ZWN0b3Igd2l0aCBldmVy
eSBjYWxsIGluIHRoZSB3b3JzdCBjYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRl
eE1hcC5oIGIvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAppbmRleCA1OTJiZjY0Zjk2MzEuLjZl
YjkyMTMyYjU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCkBAIC05Niw2ICs5NiwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdmVjdG9yLmFwcGVuZChzdGQ6OmZvcndhcmQ8UGFzc2VkVmFsdWU+KHZhbHVlKSk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVmFsdWU+CisgICAgdm9pZCBpbnNl
cnQoY29uc3QgS2V5JiBrZXksIFBhc3NlZFZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBz
aXplX3QgaW5kZXggPSBJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KTsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fdmVjdG9yLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmVjdG9yLmdyb3coaW5k
ZXggKyAxKTsKKyAgICAgICAgYXQoaW5kZXgpID0gc3RkOjpmb3J3YXJkPFBhc3NlZFZhbHVlPih2
YWx1ZSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFuZ2VMb2cKaW5kZXggMTZkMTQ1ZDgxMjlmLi5jMDlk
MzNjOTM0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjItMDMtMTAgIFJvYmluIE1v
cmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbV0dTTF0gQWRkIHRoZSBj
b3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoIEkgdHJpZWQgdG8gYmFsYW5j
ZSB0aGUgZm9sbG93aW5nIGNvbnRyYWRpY3RvcnkgZ29hbHM6CisgICAgICAgIC0gSGF2ZSBlYWNo
IHZhbGlkYXRpb24gcGhhc2UgaW4gaXRzIG93biBmaWxlLCBhbmQgcmVhZCBhcyBzaW1pbGFybHkg
dG8gdGhlIHNwZWMgYXMgcG9zc2libGUsIGZvciBlYXNlIG9mIG1haW50ZW5hbmNlCisgICAgICAg
IC0gT25seSB3YWxrIHRoZSBBU1Qgb25jZSwgdG8gbWluaW1pemUgdGhlIHBlcmZvcm1hbmNlIGNv
c3Qgb2YgYWxsIG9mIHRoZSB2YWxpZGF0aW9uIHBoYXNlcy4KKworICAgICAgICBJIGRpZCBzbyBi
eSBoYXZpbmcgYSBnZW5lcmljIFZhbGlkYXRvci5jcHAgZmlsZSB3aGljaCBpcyByZXNwb25zaWJs
ZSBmb3Igd2Fsa2luZyB0aGUgQVNUIChhIGRlcHRoLXNlYXJjaCB3YWxrKS4KKyAgICAgICAgT24g
ZWFjaCBBU1ROb2RlIGl0IGNhbGxzIHRoZSByZWxldmFudCB2YWxpZGF0aW9uIGNvZGUgKGN1cnJl
bnRseSBqdXN0IEJlaGF2aW9yQW5hbHlzaXMsIGJ1dCBpdCB3aWxsIHNvb24gaW5jbHVkZSBUeXBl
QW5hbHlzaXMsIFVuaWZvcm1pdHlBbmFseXNpcywgZXRjLi4pLgorCisgICAgICAgIE9uZSBjaGFs
bGVuZ2Ugd2FzIGhvdyB0byBwYXNzIGFsb25nIGluZm9ybWF0aW9uIGZyb20gc3VidHJlZXMgdG8g
dGhlaXIgcGFyZW50IG5vZGUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYmVoYXZpb3Igb2Yg
YSBDb21wb3VuZFN0YXRlbWVudCBkZXBlbmRzIG9uIHRoZSBiZWhhdmlvcnMgb2YgdGhlIHN1Yi1z
dGF0ZW1lbnRzLgorICAgICAgICBJIGNvbnNpZGVyZWQgdGhyZWUgcG9zc2libGUgYXBwcm9hY2hl
czoKKyAgICAgICAgLSBJIGNvdWxkIG5vdCBzaW1wbHkgcmVjdXJzaXZlbHkgY2FsbCB0aGUgYW5h
bHlzZXMgb24gdGhlIHN1YnRyZWVzIHdpdGhvdXQgaGF2aW5nIHNldmVyYWwgd2Fsa3Mgb2YgdGhl
IEFTVCAoaS5lLiBnaXZpbmcgdXAgb24gdXNpbmcgYSBzaW5nbGUgVmFsaWRhdG9yIHBhc3MpLgor
ICAgICAgICAtIEkgY291bGQgaGF2ZSBwdXQgdGhlIHJlc3VsdHMgb2YgZWFjaCBhbmFseXNpcyBp
biB0aGUgQVNUTm9kZXMsIGJ1dCBpdCB3b3VsZCBoYXZlIGhhZCBzZXZlcmFsIGRyYXdiYWNrczoK
KyAgICAgICAgICAgIC0gTW9yZSBtZW1vcnkgdXNhZ2UgYXMgd2Ugd291bGQgaGF2ZSBrZXB0IHRo
ZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgZXZlbiB3aGVuIG5vdCB1c2Vm
dWwKKyAgICAgICAgICAgIC0gV29yc2UgbGF5ZXJpbmcgb2YgdGhlIGNvbXBpbGVyOiBhcyB0aGUg
cGFyc2VyIGZvciBleGFtcGxlIGRlcGVuZHMgb24gdGhlIEFTVCBub2RlcyBpdCB3b3VsZCBhbHNv
IGhhdmUgZGVwZW5kZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdHlwZXMsIGJlaGF2aW9ycywgdW5p
Zm9ybWl0eSBub2RlcywgZXRjLi4KKyAgICAgICAgLSBJbnN0ZWFkIEkgZGVjaWRlZCB0byBvbmx5
IGhhdmUgYSBzaW5nbGUgaWQgcGVyIHN0YXRlbWVudC9leHByZXNzaW9uLCBhbmQgc3RvcmUgdGhl
IGluZm9ybWF0aW9uIGluIEluZGV4TWFwcyBpbiB0aGUgYW5hbHlzZXMgdGhlbXNlbHZlcy4KKyAg
ICAgICAgVGhpcyBzaG91bGQgYmUgdmVyeSBmYXN0IChzaW5jZSBJbmRleE1hcCBpcyBqdXN0IGEg
VmVjdG9yIHVuZGVybmVhdGgpLCBhbmQgd2UgY2FuIHBlcmZlY3RseSBjb250cm9sIGhvdyBsb25n
IHRoaW5ncyByZW1haW4gbGl2ZS4KKworICAgICAgICBJIHRlc3RlZCB0aGlzIHBhdGNoIG1hbnVh
bGx5IG9uIGEgZmV3IGV4YW1wbGVzLiBJIGRpZCBub3Qgd3JpdGUgYXV0b21hdGVkIHRlc3RzIGZv
ciBpdCBhcyB3ZSBzaG91bGQgc29vbiBiZSBhYmxlIHRvIHJ1biBhbGwgdGhvc2UgaW4gdGhlIENU
Uy4KKworICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24uaDoKKyAgICAgICAgKFdHU0w6OkFT
VDo6RXhwcmVzc2lvbjo6c2V0SW5kZXgpOgorICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9u
OjppbmRleCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJl
QWNjZXNzLmg6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24u
aDoKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhdGVtZW50OjpzZXRJbmRleCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0YXRlbWVudDo6aW5k
ZXggY29uc3QpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNpcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV0dTTDo6QmVoYXZpb3JBbmFseXNpczo6cnVuKToKKyAgICAgICAgKFdHU0w6OkJl
aGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNp
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OnJ1bik6CisgICAg
ICAgIChXR1NMOjpCZWhhdmlvckFuYWx5c2lzOjpiZWhhdmlvcnMpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6ZXJyb3JzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlz
aXM6Ondhcm5pbmdzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUp
OgorICAgICAgICAqIFdHU0wvVmFsaWRhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpW
YWxpZGF0b3I6OnJ1bkFuYWx5c2VzKToKKyAgICAgICAgKFdHU0w6OlZhbGlkYXRvcjo6YmVoYXZp
b3JzKToKKyAgICAgICAgKFdHU0w6OnZhbGlkYXRlU2hhZGVyKToKKyAgICAgICAgKFdHU0w6OlZh
bGlkYXRvcjo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6VmFsaWRhdG9y
Ojp2YWxpZGF0ZSk6CisgICAgICAgICogV0dTTC9XR1NMLmNwcDoKKyAgICAgICAgKFdHU0w6OnN0
YXRpY0NoZWNrKToKKyAgICAgICAgKiBXR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbToK
KyAgICAgICAgKC1bV0dTTFBhcnNlclRlc3RzIHRlc3RQYXJzaW5nRnVuY3Rpb25EZWNsXSk6Cisg
ICAgICAgICgtW1dHU0xQYXJzZXJUZXN0cyB0ZXN0VHJpdmlhbEdyYXBoaWNzU2hhZGVyXSk6Cisg
ICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjItMDMtMDkg
IFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0dTTF0g
SW1wbGVtZW50IGVub3VnaCBvZiB0aGUgUGFyc2VyIGZvciB0aGUgc2ltcGxlc3Qgc2hhZGVycwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaAppbmRleCBjODZiMDhiMjliZDEuLjk0MWRmMTg1
NDQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKQEAgLTMwLDYgKzMwLDEwIEBA
CiAKIG5hbWVzcGFjZSBXR1NMOjpBU1QgewogCisvLyBVc2VkIHRvIHB1dCB0aGUgc3RhdGVtZW50
cyBvZiBhIGdpdmVuIGZ1bmN0aW9uIGluIEluZGV4TWFwCisvLyBUaGUgVmFsaWRhdG9yIGlzIHJl
c3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZXNlIHVwIHdoZW4gdHJhdmVyc2luZyB0aGUgQVNUCit1
c2luZyBFeHByZXNzaW9uSW5kZXggPSB1bnNpZ25lZDsKKwogY2xhc3MgRXhwcmVzc2lvbiA6IHB1
YmxpYyBBU1ROb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAg
LTU4LDYgKzYyLDE2IEBAIHB1YmxpYzoKICAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpJZGVudGlmaWVyOyB9CiAgICAgYm9vbCBpc1N0cnVjdHVy
ZUFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdHJ1Y3R1cmVBY2Nlc3M7
IH0KICAgICBib29sIGlzVHlwZUNvbnZlcnNpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
S2luZDo6VHlwZUNvbnZlcnNpb247IH0KKworICAgIHZvaWQgc2V0SW5kZXgoRXhwcmVzc2lvbklu
ZGV4IG5ld0luZGV4KSB7IG1faW5kZXggPSBuZXdJbmRleDsgfQorICAgIEV4cHJlc3Npb25JbmRl
eCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEV4cHJlc3Npb25JbmRleD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCitwcml2YXRlOgorICAgIEV4cHJlc3Npb25JbmRleCBtX2luZGV4IHsg
c3RkOjpudW1lcmljX2xpbWl0czxFeHByZXNzaW9uSW5kZXg+OjptYXgoKSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9F
eHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaAppbmRleCBjN2I1ZDI4NTBhZjAuLjBkYmU3NGNi
NjQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1
Y3R1cmVBY2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0
cnVjdHVyZUFjY2Vzcy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAogbmFtZXNwYWNlIFdHU0w6OkFTVCB7CiAKQEAgLTQxLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtp
bmQ6OlN0cnVjdHVyZUFjY2VzczsgfQotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgYmFzZSgp
IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jh
c2U7IH0KICAgICBjb25zdCBTdHJpbmdWaWV3JiBmaWVsZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZpZWxkTmFtZTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oCmluZGV4IDk1NDJiZTgxMzliMS4uMGRjMzUw
YjhhMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5
cGVDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9U
eXBlQ29udmVyc2lvbi5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBL
aW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpUeXBlQ29udmVyc2lvbjsg
fQotICAgIFVuaXF1ZVJlZjxUeXBlRGVjbD4mIHR5cGVEZWNsKCkgeyByZXR1cm4gbV90eXBlRGVj
bDsgfQorICAgIFR5cGVEZWNsJiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KICAg
ICBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9h
cmd1bWVudHM7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCmluZGV4
IDFhY2E0ZTVjN2QyNC4uNjU0MTI2ZGNjODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50
LmgKQEAgLTMwLDYgKzMwLDEwIEBACiAKIG5hbWVzcGFjZSBXR1NMOjpBU1QgewogCisvLyBVc2Vk
IHRvIHB1dCB0aGUgc3RhdGVtZW50cyBvZiBhIGdpdmVuIGZ1bmN0aW9uIGluIEluZGV4TWFwCisv
LyBUaGUgVmFsaWRhdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZXNlIHVwIHdoZW4g
dHJhdmVyc2luZyB0aGUgQVNUCit1c2luZyBTdGF0ZW1lbnRJbmRleCA9IHVuc2lnbmVkOworCiBj
bGFzcyBTdGF0ZW1lbnQgOiBwdWJsaWMgQVNUTm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAKQEAgLTUxLDYgKzU1LDE2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ29tcG91bmQo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6Q29tcG91bmQ7IH0KICAgICBib29sIGlz
UmV0dXJuKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlJldHVybjsgfQogICAgIGJv
b2wgaXNBc3NpZ25tZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkFzc2lnbm1l
bnQ7IH0KKworICAgIHZvaWQgc2V0SW5kZXgoU3RhdGVtZW50SW5kZXggbmV3SW5kZXgpIHsgbV9p
bmRleCA9IG5ld0luZGV4OyB9CisgICAgU3RhdGVtZW50SW5kZXggaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czxTdGF0ZW1l
bnRJbmRleD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCitwcml2
YXRlOgorICAgIFN0YXRlbWVudEluZGV4IG1faW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPFN0
YXRlbWVudEluZGV4Pjo6bWF4KCkgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwIGIvU291
cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMWFkYTViYmExY2IwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmVoYXZpb3JBbmFseXNp
cy5oIgorCituYW1lc3BhY2UgV0dTTCB7CisKK3ZvaWQgQmVoYXZpb3JBbmFseXNpczo6cnVuKEFT
VDo6RnVuY3Rpb25EZWNsJiBmdW5jKQoreworICAgIEJlaGF2aW9ycyBib2R5QmVoYXZpb3JzID0g
YmVoYXZpb3JzKGZ1bmMuYm9keSgpKTsKKyAgICBpZiAoYm9keUJlaGF2aW9ycy5jb250YWluc0Fu
eSh7IEJlaGF2aW9yOjpDb250aW51ZSwgQmVoYXZpb3I6OkZhbGx0aHJvdWdoLCBCZWhhdmlvcjo6
QnJlYWsgfSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgbXVj
aCBiZXR0ZXIsIHdpdGggZ29vZCBsb2NhbGl6YXRpb24uCisgICAgICAgIC8vIE9uZSBwb3NzaWJp
bGl0eSB3b3VsZCBiZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgYmVoYXZpb3JzIGFyZSBhbGxvd2Vk
IGFzIHdlIHJlY3Vyc2UKKyAgICAgICAgLy8gSG93ZXZlciB0aGlzIHdvdWxkIHRha2Ugb3VyIGlt
cGxlbWVudGF0aW9uIHByZXR0eSBmYXIgZnJvbSB0aGUgc3BlYywgbWFraW5nIGl0IG11Y2ggaGFy
ZGVyIHRvIHZlcmlmeSB0aGF0IHdlIHN0YXkgaW4gc3luYy4KKyAgICAgICAgbV9lcnJvcnMuYXBw
ZW5kKHsgIkNvbnRpbnVlIG91dCBvZiBhIGxvb3AsIEZhbGx0aHJvdWdoIG91dCBvZiBhIHN3aXRj
aCBvciBCcmVhayBvdXQgb2YgYm90aCIsIGZ1bmMuYm9keSgpLnNwYW4oKSB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoZnVuYy5tYXliZVJldHVyblR5cGUoKSAmJiBib2R5QmVo
YXZpb3JzLmNvbnRhaW5zKEJlaGF2aW9yOjpOZXh0KSkgeworICAgICAgICBtX2Vycm9ycy5hcHBl
bmQoeyAiQ29udHJvbC1mbG93IGV4aXRpbmcgYSBub24tdm9pZCBmdW5jdGlvbiIsIGZ1bmMuc3Bh
bigpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitCZWhhdmlvcnMgQmVoYXZpb3JB
bmFseXNpczo6Y29tcHV0ZShBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmIHN0bXQpCit7CisgICAg
QmVoYXZpb3JzIHJlc3VsdCA9IGJlaGF2aW9ycyhzdG10LnJocygpKTsKKyAgICBpZiAoc3RtdC5t
YXliZUxocygpKQorICAgICAgICByZXN1bHQuYWRkKGJlaGF2aW9ycygqc3RtdC5tYXliZUxocygp
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6
OmNvbXB1dGUoQVNUOjpDb21wb3VuZFN0YXRlbWVudCYgc3RtdCkKK3sKKyAgICBCZWhhdmlvcnMg
cmVzdWx0IHsgQmVoYXZpb3I6Ok5leHQgfTsKKyAgICBmb3IgKGF1dG8mIHN1YlN0bXQgOiBzdG10
LnN0YXRlbWVudHMoKSkgeworICAgICAgICByZXN1bHQucmVtb3ZlKEJlaGF2aW9yOjpOZXh0KTsK
KyAgICAgICAgQmVoYXZpb3JzIGJzID0gYmVoYXZpb3JzKHN1YlN0bXQpOworICAgICAgICByZXN1
bHQuYWRkKGJzKTsKKyAgICAgICAgaWYgKCFicy5jb250YWlucyhCZWhhdmlvcjo6TmV4dCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvLyB0cml2aWFsbHkgZGVhZCBjb2RlIGRvZXMgbm90
IGNvbnRyaWJ1dGUgdG8gYmVoYXZpb3IgYW5hbHlzaXMKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUoQVNUOjpSZXR1cm5T
dGF0ZW1lbnQmIHN0bXQpCit7CisgICAgQVNUOjpFeHByZXNzaW9uKiByZXR1cm5FeHByZXNzaW9u
ID0gc3RtdC5tYXliZUV4cHJlc3Npb24oKTsKKyAgICBCZWhhdmlvcnMgcmVzdWx0IHsgQmVoYXZp
b3I6OlJldHVybiB9OworICAgIGlmIChyZXR1cm5FeHByZXNzaW9uKSB7CisgICAgICAgIEJlaGF2
aW9ycyBleHByZXNzaW9uQmVoYXZpb3JzID0gYmVoYXZpb3JzKCpyZXR1cm5FeHByZXNzaW9uKTsK
KyAgICAgICAgZXhwcmVzc2lvbkJlaGF2aW9ycy5yZW1vdmUoQmVoYXZpb3I6Ok5leHQpOworICAg
ICAgICByZXN1bHQuYWRkKGV4cHJlc3Npb25CZWhhdmlvcnMpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitCZWhhdmlvcnMgQmVoYXZpb3JBbmFseXNpczo6Y29tcHV0ZShBU1Q6OlN0
cnVjdHVyZUFjY2VzcyYgZXhwcikKK3sKKyAgICByZXR1cm4gYmVoYXZpb3JzKGV4cHIuYmFzZSgp
KTsKK30KKworQmVoYXZpb3JzIEJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUoQVNUOjpUeXBlQ29u
dmVyc2lvbiYgZXhwcikKK3sKKyAgICBCZWhhdmlvcnMgcmVzdWx0OworICAgIGZvciAoYXV0byYg
c3ViRXhwciA6IGV4cHIuYXJndW1lbnRzKCkpCisgICAgICAgIHJlc3VsdC5hZGQoYmVoYXZpb3Jz
KHN1YkV4cHIpKTsKKyAgICByZXN1bHQuYWRkKHsgQmVoYXZpb3I6Ok5leHQgfSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0JlaGF2
aW9yQW5hbHlzaXMuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9CZWhhdmlvckFuYWx5c2lzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wM2ZlYTYxMWM4MTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQmVoYXZpb3JBbmFseXNpcy5oCkBAIC0w
LDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1Qv
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9JZGVudGlmaWVyRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaCIK
KyNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgiCisjaW5jbHVkZSAi
QVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0Z1bmN0aW9u
RGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVt
ZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvQ29t
cG91bmRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1l
bnQuaCIKKyNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKworZW51bSBjbGFzcyBCZWhhdmlvciA6IHVpbnQ4X3Qg
eworICAgIE5leHQgPSAxPDwwLAorICAgIFJldHVybiA9IDE8PDEsCisgICAgQnJlYWsgPSAxPDwy
LAorICAgIENvbnRpbnVlID0gMTw8MywKKyAgICBGYWxsdGhyb3VnaCA9IDE8PDQsCisgICAgRGlz
Y2FyZCA9IDE8PDUsCit9OworCit1c2luZyBCZWhhdmlvcnMgPSBPcHRpb25TZXQ8QmVoYXZpb3I+
OworCitjbGFzcyBCZWhhdmlvckFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJ1bihBU1Q6
OkZ1bmN0aW9uRGVjbCYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0YXRlbWVudE5vZGU+
CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mX3Y8QVNUOjpTdGF0
ZW1lbnQsIFN0YXRlbWVudE5vZGU+LCB2b2lkPjo6dHlwZSBydW4oU3RhdGVtZW50Tm9kZSYgc3Rt
dCkKKyAgICB7CisgICAgICAgIG1fc3RtdEJlaGF2aW9ycy5pbnNlcnQoc3RtdCwgY29tcHV0ZShz
dG10KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Npb25Ob2RlPgor
ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZl92PEFTVDo6RXhwcmVz
c2lvbiwgRXhwcmVzc2lvbk5vZGU+LCB2b2lkPjo6dHlwZSBydW4oRXhwcmVzc2lvbk5vZGUmIGV4
cHIpCisgICAgeworICAgICAgICBtX2V4cHJCZWhhdmlvcnMuaW5zZXJ0KGV4cHIsIGNvbXB1dGUo
ZXhwcikpOworICAgIH0KKworICAgIEJlaGF2aW9ycyBiZWhhdmlvcnMoQVNUOjpTdGF0ZW1lbnQm
IHN0bXQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc3RtdEJlaGF2aW9yc1tzdG10XS5pc0Vt
cHR5KCkpOworICAgICAgICByZXR1cm4gbV9zdG10QmVoYXZpb3JzW3N0bXRdOworICAgIH0KKyAg
ICBCZWhhdmlvcnMgYmVoYXZpb3JzKEFTVDo6RXhwcmVzc2lvbiYgZXhwcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9leHByQmVoYXZpb3JzW2V4cHJdLmlzRW1wdHkoKSk7CisgICAgICAgIHJl
dHVybiBtX2V4cHJCZWhhdmlvcnNbZXhwcl07CisgICAgfQorCisgICAgdm9pZCByZXNldFBlckZ1
bmN0aW9uRGF0YSgpCisgICAgeworICAgICAgICBtX3N0bXRCZWhhdmlvcnMucmVzaXplKDApOwor
ICAgICAgICBtX2V4cHJCZWhhdmlvcnMucmVzaXplKDApOworICAgICAgICBtX2Vycm9ycy5zaHJp
bmsoMCk7CisgICAgICAgIG1fd2FybmluZ3Muc2hyaW5rKDApOworICAgIH0KKworICAgIFZlY3Rv
cjxFcnJvcj4mIGVycm9ycygpIHsgcmV0dXJuIG1fZXJyb3JzOyB9CisgICAgVmVjdG9yPFdhcm5p
bmc+JiB3YXJuaW5ncygpIHsgcmV0dXJuIG1fd2FybmluZ3M7IH0KKworcHJpdmF0ZToKKyAgICBC
ZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmKTsKKyAgICBCZWhhdmlv
cnMgY29tcHV0ZShBU1Q6OkNvbXBvdW5kU3RhdGVtZW50Jik7CisgICAgQmVoYXZpb3JzIGNvbXB1
dGUoQVNUOjpSZXR1cm5TdGF0ZW1lbnQmKTsKKworICAgIEJlaGF2aW9ycyBjb21wdXRlKEFTVDo6
U3RydWN0dXJlQWNjZXNzJik7CisgICAgQmVoYXZpb3JzIGNvbXB1dGUoQVNUOjpUeXBlQ29udmVy
c2lvbiYpOworICAgIEJlaGF2aW9ycyBjb21wdXRlKEFTVDo6SWRlbnRpZmllckV4cHJlc3Npb24m
KSB7IHJldHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShB
U1Q6OkJvb2xMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlvcjo6TmV4dCB9OyB9CisgICAgQmVo
YXZpb3JzIGNvbXB1dGUoQVNUOjpJbnQzMkxpdGVyYWwmKSB7IHJldHVybiB7IEJlaGF2aW9yOjpO
ZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OlVpbnQzMkxpdGVyYWwmKSB7IHJl
dHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkZs
b2F0MzJMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlvcjo6TmV4dCB9OyB9CisKKyAgICBJbmRl
eE1hcDxBU1Q6OlN0YXRlbWVudCwgQmVoYXZpb3JzPiBtX3N0bXRCZWhhdmlvcnM7CisgICAgSW5k
ZXhNYXA8QVNUOjpFeHByZXNzaW9uLCBCZWhhdmlvcnM+IG1fZXhwckJlaGF2aW9yczsKKyAgICBW
ZWN0b3I8RXJyb3I+IG1fZXJyb3JzOworICAgIFZlY3RvcjxXYXJuaW5nPiBtX3dhcm5pbmdzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L1ZhbGlkYXRvci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVmFsaWRhdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFjM2EwMmRmNWMyMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9WYWxpZGF0b3IuY3BwCkBAIC0wLDAgKzEsMTc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhbGlkYXRv
ci5oIgorCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIgorI2lu
Y2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9F
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0Z1bmN0aW9uRGVjbC5oIgorI2luY2x1ZGUgIkFT
VC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVt
ZW50cy9Db21wb3VuZFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL1JldHVy
blN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJCZWhh
dmlvckFuYWx5c2lzLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKworY2xhc3MgVmFsaWRhdG9yIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHZhbGlkYXRlKEFTVDo6RnVuY3Rpb25EZWNsJik7CisgICAgdm9p
ZCB2YWxpZGF0ZShBU1Q6OlN0YXRlbWVudCYsIGJvb2wgaXNEZWFkQ29kZSk7CisgICAgdm9pZCB2
YWxpZGF0ZShBU1Q6OkV4cHJlc3Npb24mLCBib29sIGlzRGVhZENvZGUpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQVNUPgorICAgIHZvaWQgcnVuQW5hbHlzZXMoQVNUJiBhc3QsIGJvb2wgaXNE
ZWFkQ29kZSkKKyAgICB7CisgICAgICAgIGlmICghaXNEZWFkQ29kZSkKKyAgICAgICAgICAgIG1f
YmVoYXZpb3JBbmFseXNpcy5ydW4oYXN0KTsKKyAgICAgICAgLy8gRklYTUU6IHR5cGUgY2hlY2tp
bmcgZm9yIGV4cHJlc3Npb25zCisgICAgICAgIC8vIEZJWE1FOiB1bmlmb3JtaXR5IGNoZWNraW5n
IGZvciBib3RoIHN0YXRlbWVudHMgYW5kIGV4cHJlc3Npb25zCisgICAgfQorCisgICAgdm9pZCBy
ZXNldFBlckZ1bmN0aW9uRGF0YSgpOworCisgICAgQmVoYXZpb3JzIGJlaGF2aW9ycyhBU1Q6OlN0
YXRlbWVudCYgc3RtdCkgeyByZXR1cm4gbV9iZWhhdmlvckFuYWx5c2lzLmJlaGF2aW9ycyhzdG10
KTsgfQorCisgICAgVmVjdG9yPFdhcm5pbmc+IG1fd2FybmluZ3MgeyB9OworICAgIFZlY3RvcjxF
cnJvcj4gbV9lcnJvcnMgeyB9OworICAgIEFTVDo6U3RhdGVtZW50SW5kZXggbV9uZXh0QXZhaWxh
YmxlU3RhdGVtZW50SW5kZXggeyAwIH07CisgICAgQVNUOjpFeHByZXNzaW9uSW5kZXggbV9uZXh0
QXZhaWxhYmxlRXhwcmVzc2lvbkluZGV4IHsgMCB9OworICAgIEJlaGF2aW9yQW5hbHlzaXMgbV9i
ZWhhdmlvckFuYWx5c2lzIHsgfTsKK307CisKKy8vIEZJWE1FOiBjaGVjayBhdHRyaWJ1dGVzCitz
dGQ6OnBhaXI8VmVjdG9yPEVycm9yPiwgVmVjdG9yPFdhcm5pbmc+PiB2YWxpZGF0ZVNoYWRlcihB
U1Q6OlNoYWRlck1vZHVsZSYgc2hhZGVyKQoreworICAgIFZhbGlkYXRvciB2YWxpZGF0b3I7Cisg
ICAgZm9yIChhdXRvJiBmdW5jIDogc2hhZGVyLmZ1bmN0aW9ucygpKSB7CisgICAgICAgIHZhbGlk
YXRvci5yZXNldFBlckZ1bmN0aW9uRGF0YSgpOworICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGUo
ZnVuYyk7CisgICAgfQorICAgIHJldHVybiB7IFdURk1vdmUodmFsaWRhdG9yLm1fZXJyb3JzKSwg
V1RGTW92ZSh2YWxpZGF0b3IubV93YXJuaW5ncykgfTsKK30KKwordm9pZCBWYWxpZGF0b3I6OnJl
c2V0UGVyRnVuY3Rpb25EYXRhKCkKK3sKKyAgICBtX25leHRBdmFpbGFibGVTdGF0ZW1lbnRJbmRl
eCA9IDA7CisgICAgbV9uZXh0QXZhaWxhYmxlRXhwcmVzc2lvbkluZGV4ID0gMDsKKyAgICBtX2Jl
aGF2aW9yQW5hbHlzaXMucmVzZXRQZXJGdW5jdGlvbkRhdGEoKTsKK30KKworLy8gRklYTUU6IHZh
bGlkYXRlIG5vIHJlY3Vyc2lvbgorLy8gRklYTUU6IG90aGVyIHZhcmllZCB2YWxpZGF0aW9uIChl
LmcuIGFsaWFzaW5nKQordm9pZCBWYWxpZGF0b3I6OnZhbGlkYXRlKEFTVDo6RnVuY3Rpb25EZWNs
JiBmdW5jKQoreworICAgIGJvb2wgaXNEZWFkQ29kZSA9IGZhbHNlOworICAgIHZhbGlkYXRlKGZ1
bmMuYm9keSgpLCBpc0RlYWRDb2RlKTsKKworICAgIC8vIFRoaXMgb25seSBkb2VzIHRoZSB0b3At
bGV2ZWwgY2hlY2sgb24gdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgYXMgYSB3aG9sZQorICAgIC8v
IFRoZSBhY3R1YWwgY29tcHV0YXRpb24gb2YgdGhhdCBiZWhhdmlvciBpcyBkb25lIHRocm91Z2gg
dGhlIHJlY3Vyc2l2ZSBjYWxscyB0byB2YWxpZGF0ZSB3aGljaCBpcyBjYWxsZWQgYWJvdmUuCisg
ICAgbV9iZWhhdmlvckFuYWx5c2lzLnJ1bihmdW5jKTsKKyAgICBtX2Vycm9ycy5hcHBlbmRSYW5n
ZShtX2JlaGF2aW9yQW5hbHlzaXMuZXJyb3JzKCkuYmVnaW4oKSwgbV9iZWhhdmlvckFuYWx5c2lz
LmVycm9ycygpLmVuZCgpKTsKKyAgICBtX3dhcm5pbmdzLmFwcGVuZFJhbmdlKG1fYmVoYXZpb3JB
bmFseXNpcy53YXJuaW5ncygpLmJlZ2luKCksIG1fYmVoYXZpb3JBbmFseXNpcy53YXJuaW5ncygp
LmVuZCgpKTsKKworICAgIC8vIEZJWE1FOiB1bmlmb3JtaXR5IGNoZWNrCit9CisKK3ZvaWQgVmFs
aWRhdG9yOjp2YWxpZGF0ZShBU1Q6OlN0YXRlbWVudCYgc3RtdCwgYm9vbCBpc0RlYWRDb2RlKQor
eworICAgIHN0bXQuc2V0SW5kZXgobV9uZXh0QXZhaWxhYmxlU3RhdGVtZW50SW5kZXgrKyk7Cisg
ICAgc3dpdGNoIChzdG10LmtpbmQoKSkgeworICAgIGNhc2UgQVNUOjpTdGF0ZW1lbnQ6OktpbmQ6
OkNvbXBvdW5kOiB7CisgICAgICAgIGF1dG8mIGNvbXBvdW5kU3RhdGVtZW50ID0gZG93bmNhc3Q8
QVNUOjpDb21wb3VuZFN0YXRlbWVudD4oc3RtdCk7CisgICAgICAgIGJvb2wgaXNDaGlsZERlYWRD
b2RlID0gaXNEZWFkQ29kZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBjb21wb3VuZFN0YXRlbWVu
dC5zdGF0ZW1lbnRzKCkuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgQVNUOjpTdGF0ZW1lbnQmIHN1YlN0bXQgPSBjb21wb3Vu
ZFN0YXRlbWVudC5zdGF0ZW1lbnRzKClbaV07CisgICAgICAgICAgICB2YWxpZGF0ZShzdWJTdG10
LCBpc0NoaWxkRGVhZENvZGUpOworICAgICAgICAgICAgaWYgKCFpc0NoaWxkRGVhZENvZGUgJiYg
KGkgKyAxIDwgc2l6ZSkgJiYgIWJlaGF2aW9ycyhzdWJTdG10KS5jb250YWlucyhCZWhhdmlvcjo6
TmV4dCkpIHsKKyAgICAgICAgICAgICAgICBpc0NoaWxkRGVhZENvZGUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIG1fd2FybmluZ3MuYXBwZW5kKHsgIkRlYWQgY29kZSBmb3VuZCBieSB0aGUgYmVo
YXZpb3IgYW5hbHlzaXMiLCBjb21wb3VuZFN0YXRlbWVudC5zdGF0ZW1lbnRzKClbaSsxXS0+c3Bh
bigpIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJ1bkFuYWx5c2VzKGNv
bXBvdW5kU3RhdGVtZW50LCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEFTVDo6U3RhdGVtZW50OjpLaW5kOjpBc3NpZ25tZW50OiB7CisgICAgICAgIEFTVDo6
QXNzaWdubWVudFN0YXRlbWVudCYgYXNzaWdubWVudCA9IGRvd25jYXN0PEFTVDo6QXNzaWdubWVu
dFN0YXRlbWVudD4oc3RtdCk7CisgICAgICAgIGlmIChhc3NpZ25tZW50Lm1heWJlTGhzKCkpCisg
ICAgICAgICAgICB2YWxpZGF0ZSgqYXNzaWdubWVudC5tYXliZUxocygpLCBpc0RlYWRDb2RlKTsK
KyAgICAgICAgdmFsaWRhdGUoYXNzaWdubWVudC5yaHMoKSwgaXNEZWFkQ29kZSk7CisgICAgICAg
IHJ1bkFuYWx5c2VzKGFzc2lnbm1lbnQsIGlzRGVhZENvZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgQVNUOjpTdGF0ZW1lbnQ6OktpbmQ6OlJldHVybjogeworICAgICAgICBB
U1Q6OlJldHVyblN0YXRlbWVudCYgcmV0dXJuU3RtdCA9IGRvd25jYXN0PEFTVDo6UmV0dXJuU3Rh
dGVtZW50PihzdG10KTsKKyAgICAgICAgQVNUOjpFeHByZXNzaW9uKiByZXR1cm5FeHByZXNzaW9u
ID0gcmV0dXJuU3RtdC5tYXliZUV4cHJlc3Npb24oKTsKKyAgICAgICAgaWYgKHJldHVybkV4cHJl
c3Npb24pCisgICAgICAgICAgICB2YWxpZGF0ZSgqcmV0dXJuRXhwcmVzc2lvbiwgaXNEZWFkQ29k
ZSk7CisgICAgICAgIHJ1bkFuYWx5c2VzKHJldHVyblN0bXQsIGlzRGVhZENvZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIH0KK30KKwordm9pZCBWYWxpZGF0b3I6OnZhbGlkYXRlKEFT
VDo6RXhwcmVzc2lvbiYgZXhwciwgYm9vbCBpc0RlYWRDb2RlKQoreworICAgIGV4cHIuc2V0SW5k
ZXgobV9uZXh0QXZhaWxhYmxlRXhwcmVzc2lvbkluZGV4KyspOworICAgIHN3aXRjaCAoZXhwci5r
aW5kKCkpIHsKKyAgICBjYXNlIEFTVDo6RXhwcmVzc2lvbjo6S2luZDo6U3RydWN0dXJlQWNjZXNz
OiB7CisgICAgICAgIEFTVDo6U3RydWN0dXJlQWNjZXNzJiBzdHJ1Y3RBY2Nlc3MgPSBkb3duY2Fz
dDxBU1Q6OlN0cnVjdHVyZUFjY2Vzcz4oZXhwcik7CisgICAgICAgIHZhbGlkYXRlKHN0cnVjdEFj
Y2Vzcy5iYXNlKCksIGlzRGVhZENvZGUpOworICAgICAgICBydW5BbmFseXNlcyhzdHJ1Y3RBY2Nl
c3MsIGlzRGVhZENvZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQVNUOjpF
eHByZXNzaW9uOjpLaW5kOjpUeXBlQ29udmVyc2lvbjogeworICAgICAgICBBU1Q6OlR5cGVDb252
ZXJzaW9uJiB0eXBlQ29udmVyc2lvbiA9IGRvd25jYXN0PEFTVDo6VHlwZUNvbnZlcnNpb24+KGV4
cHIpOworICAgICAgICBmb3IgKGF1dG8mIHN1YkV4cHIgOiB0eXBlQ29udmVyc2lvbi5hcmd1bWVu
dHMoKSkKKyAgICAgICAgICAgIHZhbGlkYXRlKHN1YkV4cHIsIGlzRGVhZENvZGUpOworICAgICAg
ICBydW5BbmFseXNlcyh0eXBlQ29udmVyc2lvbiwgaXNEZWFkQ29kZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6OklkZW50aWZpZXI6Cisg
ICAgICAgIHJ1bkFuYWx5c2VzKGRvd25jYXN0PEFTVDo6SWRlbnRpZmllckV4cHJlc3Npb24+KGV4
cHIpLCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQVNUOjpFeHByZXNz
aW9uOjpLaW5kOjpCb29sTGl0ZXJhbDoKKyAgICAgICAgcnVuQW5hbHlzZXMoZG93bmNhc3Q8QVNU
OjpCb29sTGl0ZXJhbD4oZXhwciksIGlzRGVhZENvZGUpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6OkludDMyTGl0ZXJhbDoKKyAgICAgICAgcnVuQW5h
bHlzZXMoZG93bmNhc3Q8QVNUOjpJbnQzMkxpdGVyYWw+KGV4cHIpLCBpc0RlYWRDb2RlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQVNUOjpFeHByZXNzaW9uOjpLaW5kOjpVaW50MzJMaXRl
cmFsOgorICAgICAgICBydW5BbmFseXNlcyhkb3duY2FzdDxBU1Q6OlVpbnQzMkxpdGVyYWw+KGV4
cHIpLCBpc0RlYWRDb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQVNUOjpFeHByZXNz
aW9uOjpLaW5kOjpGbG9hdDMyTGl0ZXJhbDoKKyAgICAgICAgcnVuQW5hbHlzZXMoZG93bmNhc3Q8
QVNUOjpGbG9hdDMyTGl0ZXJhbD4oZXhwciksIGlzRGVhZENvZGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvVmFsaWRhdG9yLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVmFsaWRhdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45MmJmYjMwMzU2YzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVmFsaWRhdG9yLmgKQEAgLTAsMCArMSwz
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUL1NoYWRlck1v
ZHVsZS5oIgorI2luY2x1ZGUgIkNvbXBpbGF0aW9uTWVzc2FnZS5oIgorCituYW1lc3BhY2UgV0dT
TCB7CisKK3N0ZDo6cGFpcjxWZWN0b3I8RXJyb3I+LCBWZWN0b3I8V2FybmluZz4+IHZhbGlkYXRl
U2hhZGVyKEFTVDo6U2hhZGVyTW9kdWxlJik7CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9X
R1NMLmNwcAppbmRleCA2ZTc4NDEwZjc5OWEuLjRmZTc0ZWFmMjAzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldHU0wuaCIKIAogI2luY2x1ZGUgIlBhcnNl
ci5oIgorI2luY2x1ZGUgIlZhbGlkYXRvci5oIgogCiBuYW1lc3BhY2UgV0dTTCB7CiAKQEAgLTM5
LDggKzQwLDEwIEBAIHN0ZDo6dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNrPiBz
dGF0aWNDaGVjayhjb25zdCBTdHJpbmcmIHdnc2wsIGNvbnN0CiAgICAgfQogICAgIFVuaXF1ZVJl
ZjxBU1Q6OlNoYWRlck1vZHVsZT4gc2hhZGVyID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlNoYWRlck1v
ZHVsZT4oV1RGTW92ZShwYXJzZXJSZXN1bHQudmFsdWUoKSkpOwogCi0gICAgVmVjdG9yPFdhcm5p
bmc+IHdhcm5pbmdzIHsgfTsKLSAgICAvLyBGSVhNRTogYWRkIHZhbGlkYXRpb24KKyAgICBhdXRv
IFtlcnJvcnMsIHdhcm5pbmdzXSA9IHZhbGlkYXRlU2hhZGVyKHNoYWRlcik7CisgICAgaWYgKCFl
cnJvcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRmFpbGVkQ2hlY2sgeyBXVEZNb3ZlKGVy
cm9ycyksIFdURk1vdmUod2FybmluZ3MpIH07CisKICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN1
Y2Nlc3NmdWxDaGVjaywgRmFpbGVkQ2hlY2s+KHN0ZDo6aW5fcGxhY2VfdHlwZTxTdWNjZXNzZnVs
Q2hlY2s+LCBXVEZNb3ZlKHdhcm5pbmdzKSwgV1RGTW92ZShzaGFkZXIpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbSBiL1Nv
dXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0KaW5kZXggZjBiOTll
ZTBhZTU0Li5lMjMwOTYzNWI5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRU
ZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0KKysrIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3Rz
L1dHU0xQYXJzZXJUZXN0cy5tbQpAQCAtMTE4LDggKzExOCw4IEBAIC0gKHZvaWQpdGVzdFBhcnNp
bmdGdW5jdGlvbkRlY2wgewogICAgIFhDVEFzc2VydChzdG10Lm1heWJlTGhzKCkpOwogICAgIFhD
VEFzc2VydChzdG10Lm1heWJlTGhzKCktPmlzU3RydWN0dXJlQWNjZXNzKCkpOwogICAgIFdHU0w6
OkFTVDo6U3RydWN0dXJlQWNjZXNzJiBzdHJ1Y3RBY2Nlc3MgPSBkb3duY2FzdDxXR1NMOjpBU1Q6
OlN0cnVjdHVyZUFjY2Vzcz4oKnN0bXQubWF5YmVMaHMoKSk7Ci0gICAgWENUQXNzZXJ0KHN0cnVj
dEFjY2Vzcy5iYXNlKCktPmlzSWRlbnRpZmllcigpKTsKLSAgICBXR1NMOjpBU1Q6OklkZW50aWZp
ZXJFeHByZXNzaW9uIGJhc2UgPSBkb3duY2FzdDxXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNz
aW9uPihzdHJ1Y3RBY2Nlc3MuYmFzZSgpLmdldCgpKTsKKyAgICBYQ1RBc3NlcnQoc3RydWN0QWNj
ZXNzLmJhc2UoKS5pc0lkZW50aWZpZXIoKSk7CisgICAgV0dTTDo6QVNUOjpJZGVudGlmaWVyRXhw
cmVzc2lvbiBiYXNlID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpJZGVudGlmaWVyRXhwcmVzc2lvbj4o
c3RydWN0QWNjZXNzLmJhc2UoKSk7CiAgICAgWENUQXNzZXJ0KGJhc2UuaWRlbnRpZmllcigpID09
ICJ4Iik7CiAgICAgWENUQXNzZXJ0KHN0cnVjdEFjY2Vzcy5maWVsZE5hbWUoKSA9PSAiYSIpOwog
ICAgIFhDVEFzc2VydChzdG10LnJocygpLmlzSW50MzJMaXRlcmFsKCkpOwpAQCAtMTkwLDcgKzE5
MCw3IEBAIC0gKHZvaWQpdGVzdFRyaXZpYWxHcmFwaGljc1NoYWRlciB7CiAgICAgICAgIFhDVEFz
c2VydChzdG10Lm1heWJlRXhwcmVzc2lvbigpKTsKICAgICAgICAgWENUQXNzZXJ0KHN0bXQubWF5
YmVFeHByZXNzaW9uKCktPmlzVHlwZUNvbnZlcnNpb24oKSk7CiAgICAgICAgIFdHU0w6OkFTVDo6
VHlwZUNvbnZlcnNpb24mIGV4cHIgPSBkb3duY2FzdDxXR1NMOjpBU1Q6OlR5cGVDb252ZXJzaW9u
Pigqc3RtdC5tYXliZUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIFhDVEFzc2VydChleHByLnR5cGVE
ZWNsKCktPmlzUGFyYW1ldGVyaXplZCgpKTsKKyAgICAgICAgWENUQXNzZXJ0KGV4cHIudHlwZURl
Y2woKS5pc1BhcmFtZXRlcml6ZWQoKSk7CiAgICAgICAgIFhDVEFzc2VydChleHByLmFyZ3VtZW50
cygpLnNpemUoKSA9PSA0KTsKICAgICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKClbMF0t
PmlzRmxvYXQzMkxpdGVyYWwoKSk7CiAgICAgICAgIFhDVEFzc2VydChleHByLmFyZ3VtZW50cygp
WzFdLT5pc0Zsb2F0MzJMaXRlcmFsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzQyNjBhYWRiYTZhLi45YmFlZDgxMzA4NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTIsNiArNTIsMTAgQEAKIAkJMzM5QjdCMUIyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzlCN0IxQTI3
RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCAqLzsgfTsKIAkJMzM5QjdCMUQyN0Q4MEExQzAw
NzJCRjlBIC8qIFdHU0xQYXJzZXJUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjFDMjdEODBBMUMwMDcyQkY5QSAvKiBXR1NMUGFyc2Vy
VGVzdHMubW0gKi87IH07CiAJCTMzOUI3QjFFMjdEODE2MjcwMDcyQkY5QSAvKiBDb21waWxhdGlv
bk1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzNFQTE4NjcyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgKi87
IH07CisJCTMzOUI3QjIwMjdEOTY4MTEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjFGMjdEOTY4MTEwMDcy
QkY5QSAvKiBWYWxpZGF0b3IuaCAqLzsgfTsKKwkJMzM5QjdCMjIyN0Q5Njk0QTAwNzJCRjlBIC8q
IFZhbGlkYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMzlCN0IyMTI3RDk2OTRBMDA3MkJGOUEgLyogVmFsaWRhdG9yLmNwcCAqLzsgfTsKKwkJ
MzM5QjdCMjQyN0Q5NzU4NDAwNzJCRjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjIzMjdEOTc1ODQwMDcy
QkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggKi87IH07CisJCTMzOUI3QjI2MjdEQUNBQ0IwMDcy
QkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjI1MjdEQUNBQ0IwMDcyQkY5QSAvKiBCZWhhdmlvckFu
YWx5c2lzLmNwcCAqLzsgfTsKIAkJMzNFQTE4NUUyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODVE
MjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi87IH07CiAJCTMzRUExODYwMjdCQzE5ODEw
MEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJl
Y3RpdmUuaCAqLzsgfTsKIAkJMzNFQTE4NjIyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERlY2wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODYx
MjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi87IH07CkBAIC0yMDcsNiArMjExLDEw
IEBACiAJCTMzOUI3QjE3MjdEN0ZGQTQwMDcyQkY5QSAvKiBQYXJzZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzOUI3QjFBMjdEODAw
MDkwMDcyQkY5QSAvKiBQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5QjdCMUMyN0Q4MEExQzAwNzJCRjlBIC8q
IFdHU0xQYXJzZXJUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xQYXJzZXJUZXN0
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5QjdCMUYyN0Q5NjgxMTAwNzJC
RjlBIC8qIFZhbGlkYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5QjdCMjEyN0Q5Njk0QTAwNzJCRjlBIC8qIFZhbGlkYXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMzlCN0IyMzI3RDk3NTg0MDA3MkJGOUEgLyogQmVoYXZpb3JBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCZWhhdmlvckFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMzOUI3QjI1MjdEQUNBQ0IwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlaGF2aW9yQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzM0VBMTg1RDI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBU1ROb2RlLmg7IHBhdGggPSBXR1NML0FTVE5vZGUuaDsgc291cmNl
VHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkzM0VBMTg1RjI3QkMxOTgxMDBBMURENTIgLyogR2xv
YmFsRGlyZWN0aXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbERpcmVjdGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzM0VBMTg2MTI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFs
RGVjbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zODMsNiArMzkxLDEwIEBACiAJCQkJMzM5QjdCMUEyN0Q4MDAwOTAwNzJCRjlB
IC8qIFBhcnNlci5jcHAgKi8sCiAJCQkJMzM4QkIyQ0QyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2Vu
LmggKi8sCiAJCQkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovLAorCQkJ
CTMzOUI3QjFGMjdEOTY4MTEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuaCAqLywKKwkJCQkzMzlCN0Iy
MTI3RDk2OTRBMDA3MkJGOUEgLyogVmFsaWRhdG9yLmNwcCAqLywKKwkJCQkzMzlCN0IyMzI3RDk3
NTg0MDA3MkJGOUEgLyogQmVoYXZpb3JBbmFseXNpcy5oICovLAorCQkJCTMzOUI3QjI1MjdEQUNB
Q0IwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmNwcCAqLywKIAkJCQkxQ0VCRDdGNzI3MTZC
MzQ0MDBBNTI1NEQgLyogV0dTTC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBXR1NMOwpAQCAtNDUy
LDkgKzQ2NCw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTMz
RUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oICovLAorCQkJ
CTMzRUExODg3MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFsRXhwcmVzc2lvbnMuaCAqLywKIAkJ
CQkzM0VBMTg4MzI3QkMyNjg2MDBBMURENTIgLyogU3RydWN0dXJlQWNjZXNzLmggKi8sCiAJCQkJ
MzNFQTE4ODUyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252ZXJzaW9uLmggKi8sCi0JCQkJMzNF
QTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oICovLAogCQkJKTsK
IAkJCXBhdGggPSBFeHByZXNzaW9uczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00
ODksOCArNTAxLDEwIEBACiAJCQkJMzM4QkIyRDQyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzM0VBMTg4ODI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4
cHJlc3Npb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzhCQjJDRTI3QjZCNjAyMDBFMDY2QUIg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOUI3QjIwMjdEOTY4MTEwMDcyQkY5QSAv
KiBWYWxpZGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzRUExODZDMjdCQzFDQkMwMEExREQ1
MiAvKiBFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VCRDdGODI3MTZCMzQ0MDBB
NTI1NEQgLyogV0dTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM5QjdCMjQyN0Q5NzU4NDAwNzJC
RjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzRUExODYyMjdC
QzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0VBMTg4
MDI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdubWVudFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzNFQTE4ODQyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MzYsOSArNzUwLDExIEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMzM5QjdCMUUyN0Q4MTYyNzAwNzJCRjlBIC8qIENv
bXBpbGF0aW9uTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMzlCN0IyNjI3REFDQUNC
MDA3MkJGOUEgLyogQmVoYXZpb3JBbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzlC
N0IxQjI3RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMz
OEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MzhCQjJEMDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzM5QjdCMjIyN0Q5Njk0QTAwNzJCRjlBIC8qIFZhbGlkYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
</data>
<flag name="review"
          id="482327"
          type_id="1"
          status="-"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="482328"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457573</attachid>
            <date>2022-04-13 16:15:57 -0700</date>
            <delta_ts>2022-04-13 16:15:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39853</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNjhkY2RkNzE1Yjc3Li44YjIyYzlhN2QxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MjItMDMtMTAgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0dTTF0gQWRkIHRoZSBjb3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBJbmRleE1h
cDo6aW5zZXJ0LCB3aGljaCBhdXRvbWF0aWNhbGx5IGdyb3dzIHRoZSB1bmRlcmx5aW5nIHZlY3Rv
ciBpZiBuZWVkZWQuCisgICAgICAgIEl0IGFsbG93cyB1c2luZyBJbmRleE1hcCBlcmdvbm9taWNh
bGx5IGV2ZW4gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbnVtYmVyIG9mIGtleXMgYWhlYWQgb2YgdGlt
ZS4KKworICAgICAgICAqIHd0Zi9JbmRleE1hcC5oOgorICAgICAgICAoV1RGOjpJbmRleE1hcDo6
aW5zZXJ0KToKKwogMjAyMi0wMy0wOCAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXVEZdIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQg
Y2FuIGNhdXNlIGEgcmVpbmRleGluZyBvZiB0aGUgZW50aXJlIGJpdCB2ZWN0b3Igd2l0aCBldmVy
eSBjYWxsIGluIHRoZSB3b3JzdCBjYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbmRl
eE1hcC5oIGIvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAppbmRleCA1OTJiZjY0Zjk2MzEuLjZl
YjkyMTMyYjU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCkBAIC05Niw2ICs5NiwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdmVjdG9yLmFwcGVuZChzdGQ6OmZvcndhcmQ8UGFzc2VkVmFsdWU+KHZhbHVlKSk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVmFsdWU+CisgICAgdm9pZCBpbnNl
cnQoY29uc3QgS2V5JiBrZXksIFBhc3NlZFZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBz
aXplX3QgaW5kZXggPSBJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KTsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fdmVjdG9yLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmVjdG9yLmdyb3coaW5k
ZXggKyAxKTsKKyAgICAgICAgYXQoaW5kZXgpID0gc3RkOjpmb3J3YXJkPFBhc3NlZFZhbHVlPih2
YWx1ZSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFuZ2VMb2cKaW5kZXggMTZkMTQ1ZDgxMjlmLi5jMDlk
MzNjOTM0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjItMDMtMTAgIFJvYmluIE1v
cmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbV0dTTF0gQWRkIHRoZSBj
b3JlIHBhcnRzIG9mIHRoZSBiZWhhdmlvciBjaGVja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoIEkgdHJpZWQgdG8gYmFsYW5j
ZSB0aGUgZm9sbG93aW5nIGNvbnRyYWRpY3RvcnkgZ29hbHM6CisgICAgICAgIC0gSGF2ZSBlYWNo
IHZhbGlkYXRpb24gcGhhc2UgaW4gaXRzIG93biBmaWxlLCBhbmQgcmVhZCBhcyBzaW1pbGFybHkg
dG8gdGhlIHNwZWMgYXMgcG9zc2libGUsIGZvciBlYXNlIG9mIG1haW50ZW5hbmNlCisgICAgICAg
IC0gT25seSB3YWxrIHRoZSBBU1Qgb25jZSwgdG8gbWluaW1pemUgdGhlIHBlcmZvcm1hbmNlIGNv
c3Qgb2YgYWxsIG9mIHRoZSB2YWxpZGF0aW9uIHBoYXNlcy4KKworICAgICAgICBJIGRpZCBzbyBi
eSBoYXZpbmcgYSBnZW5lcmljIFZhbGlkYXRvci5jcHAgZmlsZSB3aGljaCBpcyByZXNwb25zaWJs
ZSBmb3Igd2Fsa2luZyB0aGUgQVNUIChhIGRlcHRoLXNlYXJjaCB3YWxrKS4KKyAgICAgICAgT24g
ZWFjaCBBU1ROb2RlIGl0IGNhbGxzIHRoZSByZWxldmFudCB2YWxpZGF0aW9uIGNvZGUgKGN1cnJl
bnRseSBqdXN0IEJlaGF2aW9yQW5hbHlzaXMsIGJ1dCBpdCB3aWxsIHNvb24gaW5jbHVkZSBUeXBl
QW5hbHlzaXMsIFVuaWZvcm1pdHlBbmFseXNpcywgZXRjLi4pLgorCisgICAgICAgIE9uZSBjaGFs
bGVuZ2Ugd2FzIGhvdyB0byBwYXNzIGFsb25nIGluZm9ybWF0aW9uIGZyb20gc3VidHJlZXMgdG8g
dGhlaXIgcGFyZW50IG5vZGUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYmVoYXZpb3Igb2Yg
YSBDb21wb3VuZFN0YXRlbWVudCBkZXBlbmRzIG9uIHRoZSBiZWhhdmlvcnMgb2YgdGhlIHN1Yi1z
dGF0ZW1lbnRzLgorICAgICAgICBJIGNvbnNpZGVyZWQgdGhyZWUgcG9zc2libGUgYXBwcm9hY2hl
czoKKyAgICAgICAgLSBJIGNvdWxkIG5vdCBzaW1wbHkgcmVjdXJzaXZlbHkgY2FsbCB0aGUgYW5h
bHlzZXMgb24gdGhlIHN1YnRyZWVzIHdpdGhvdXQgaGF2aW5nIHNldmVyYWwgd2Fsa3Mgb2YgdGhl
IEFTVCAoaS5lLiBnaXZpbmcgdXAgb24gdXNpbmcgYSBzaW5nbGUgVmFsaWRhdG9yIHBhc3MpLgor
ICAgICAgICAtIEkgY291bGQgaGF2ZSBwdXQgdGhlIHJlc3VsdHMgb2YgZWFjaCBhbmFseXNpcyBp
biB0aGUgQVNUTm9kZXMsIGJ1dCBpdCB3b3VsZCBoYXZlIGhhZCBzZXZlcmFsIGRyYXdiYWNrczoK
KyAgICAgICAgICAgIC0gTW9yZSBtZW1vcnkgdXNhZ2UgYXMgd2Ugd291bGQgaGF2ZSBrZXB0IHRo
ZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgZXZlbiB3aGVuIG5vdCB1c2Vm
dWwKKyAgICAgICAgICAgIC0gV29yc2UgbGF5ZXJpbmcgb2YgdGhlIGNvbXBpbGVyOiBhcyB0aGUg
cGFyc2VyIGZvciBleGFtcGxlIGRlcGVuZHMgb24gdGhlIEFTVCBub2RlcyBpdCB3b3VsZCBhbHNv
IGhhdmUgZGVwZW5kZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdHlwZXMsIGJlaGF2aW9ycywgdW5p
Zm9ybWl0eSBub2RlcywgZXRjLi4KKyAgICAgICAgLSBJbnN0ZWFkIEkgZGVjaWRlZCB0byBvbmx5
IGhhdmUgYSBzaW5nbGUgaWQgcGVyIHN0YXRlbWVudC9leHByZXNzaW9uLCBhbmQgc3RvcmUgdGhl
IGluZm9ybWF0aW9uIGluIEluZGV4TWFwcyBpbiB0aGUgYW5hbHlzZXMgdGhlbXNlbHZlcy4KKyAg
ICAgICAgVGhpcyBzaG91bGQgYmUgdmVyeSBmYXN0IChzaW5jZSBJbmRleE1hcCBpcyBqdXN0IGEg
VmVjdG9yIHVuZGVybmVhdGgpLCBhbmQgd2UgY2FuIHBlcmZlY3RseSBjb250cm9sIGhvdyBsb25n
IHRoaW5ncyByZW1haW4gbGl2ZS4KKworICAgICAgICBJIHRlc3RlZCB0aGlzIHBhdGNoIG1hbnVh
bGx5IG9uIGEgZmV3IGV4YW1wbGVzLiBJIGRpZCBub3Qgd3JpdGUgYXV0b21hdGVkIHRlc3RzIGZv
ciBpdCBhcyB3ZSBzaG91bGQgc29vbiBiZSBhYmxlIHRvIHJ1biBhbGwgdGhvc2UgaW4gdGhlIENU
Uy4KKworICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24uaDoKKyAgICAgICAgKFdHU0w6OkFT
VDo6RXhwcmVzc2lvbjo6c2V0SW5kZXgpOgorICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9u
OjppbmRleCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJl
QWNjZXNzLmg6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24u
aDoKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhdGVtZW50OjpzZXRJbmRleCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0YXRlbWVudDo6aW5k
ZXggY29uc3QpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNpcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV0dTTDo6QmVoYXZpb3JBbmFseXNpczo6cnVuKToKKyAgICAgICAgKFdHU0w6OkJl
aGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUpOgorICAgICAgICAqIFdHU0wvQmVoYXZpb3JBbmFseXNp
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OnJ1bik6CisgICAg
ICAgIChXR1NMOjpCZWhhdmlvckFuYWx5c2lzOjpiZWhhdmlvcnMpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6
QmVoYXZpb3JBbmFseXNpczo6ZXJyb3JzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlz
aXM6Ondhcm5pbmdzKToKKyAgICAgICAgKFdHU0w6OkJlaGF2aW9yQW5hbHlzaXM6OmNvbXB1dGUp
OgorICAgICAgICAqIFdHU0wvVmFsaWRhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpW
YWxpZGF0b3I6OnJ1bkFuYWx5c2VzKToKKyAgICAgICAgKFdHU0w6OlZhbGlkYXRvcjo6YmVoYXZp
b3JzKToKKyAgICAgICAgKFdHU0w6OnZhbGlkYXRlU2hhZGVyKToKKyAgICAgICAgKFdHU0w6OlZh
bGlkYXRvcjo6cmVzZXRQZXJGdW5jdGlvbkRhdGEpOgorICAgICAgICAoV0dTTDo6VmFsaWRhdG9y
Ojp2YWxpZGF0ZSk6CisgICAgICAgICogV0dTTC9XR1NMLmNwcDoKKyAgICAgICAgKFdHU0w6OnN0
YXRpY0NoZWNrKToKKyAgICAgICAgKiBXR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbToK
KyAgICAgICAgKC1bV0dTTFBhcnNlclRlc3RzIHRlc3RQYXJzaW5nRnVuY3Rpb25EZWNsXSk6Cisg
ICAgICAgICgtW1dHU0xQYXJzZXJUZXN0cyB0ZXN0VHJpdmlhbEdyYXBoaWNzU2hhZGVyXSk6Cisg
ICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjItMDMtMDkg
IFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0dTTF0g
SW1wbGVtZW50IGVub3VnaCBvZiB0aGUgUGFyc2VyIGZvciB0aGUgc2ltcGxlc3Qgc2hhZGVycwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVB
Y2Nlc3MuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNj
ZXNzLmgKaW5kZXggYzdiNWQyODUwYWYwLi4wZGJlNzRjYjY0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgKKysrIGIvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBX
R1NMOjpBU1QgewogCkBAIC00MSw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpTdHJ1Y3R1cmVBY2Nlc3M7IH0K
LSAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KKyAg
ICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9CiAgICAgY29uc3QgU3RyaW5n
VmlldyYgZmllbGROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWVsZE5hbWU7IH0KIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNv
bnZlcnNpb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZl
cnNpb24uaAppbmRleCA5NTQyYmU4MTM5YjEuLjBkYzM1MGI4YTI5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24uaApAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgS2luZCBraW5kKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gS2luZDo6VHlwZUNvbnZlcnNpb247IH0KLSAgICBVbmlxdWVSZWY8VHlwZURl
Y2w+JiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KKyAgICBUeXBlRGVjbCYgdHlw
ZURlY2woKSB7IHJldHVybiBtX3R5cGVEZWNsOyB9CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHBy
ZXNzaW9uPj4mIGFyZ3VtZW50cygpIHsgcmV0dXJuIG1fYXJndW1lbnRzOyB9CiAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUTm9kZS5oIGIvU291cmNlL1dlYkdQ
VS9XR1NML0FTVE5vZGUuaAppbmRleCAzNWRkZTlhOTJhY2IuLjNjMTRkMDI5MDc2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FTVE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUTm9kZS5oCkBAIC0zMCw2ICszMCwxMCBAQAogCiBuYW1lc3BhY2UgV0dTTDo6QVNUIHsK
IAorLy8gVXNlZCB0byBwdXQgdGhlIG5vZGVzIG9mIGEgZ2l2ZW4gZnVuY3Rpb24gaW4gSW5kZXhN
YXAKKy8vIFRoZSBWYWxpZGF0b3IgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlc2UgdXAg
d2hlbiB0cmF2ZXJzaW5nIHRoZSBBU1QKK3VzaW5nIEFTVE5vZGVJbmRleCA9IHVuc2lnbmVkOwor
CiBjbGFzcyBBU1ROb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
QEAgLTQwLDggKzQ0LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFNvdXJjZVNwYW4mIHNwYW4o
KSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KIAorICAgIHZvaWQgc2V0SW5kZXgoQVNUTm9kZUlu
ZGV4IG5ld0luZGV4KSB7IG1faW5kZXggPSBuZXdJbmRleDsgfQorICAgIEFTVE5vZGVJbmRleCBp
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPEFTVE5vZGVJbmRleD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7
CisgICAgfQorCiBwcml2YXRlOgogICAgIFNvdXJjZVNwYW4gbV9zcGFuOworICAgIEFTVE5vZGVJ
bmRleCBtX2luZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czxBU1ROb2RlSW5kZXg+OjptYXgoKSB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQmVoYXZpb3JBbmFseXNpcy5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQmVoYXZp
b3JBbmFseXNpcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44
NTBlOTdlMzY5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQmVoYXZp
b3JBbmFseXNpcy5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCZWhhdmlvckFuYWx5c2lzLmgiCisKK25hbWVzcGFjZSBXR1NM
IHsKKwordm9pZCBCZWhhdmlvckFuYWx5c2lzOjp2aXNpdEFmdGVyQ2hpbGRyZW4oQVNUOjpGdW5j
dGlvbkRlY2wmIGZ1bmMpCit7CisgICAgQmVoYXZpb3JzIGJvZHlCZWhhdmlvcnMgPSBiZWhhdmlv
cnMoZnVuYy5ib2R5KCkpOworICAgIGlmIChib2R5QmVoYXZpb3JzLmNvbnRhaW5zQW55KHsgQmVo
YXZpb3I6OkNvbnRpbnVlLCBCZWhhdmlvcjo6RmFsbHRocm91Z2gsIEJlaGF2aW9yOjpCcmVhayB9
KSkgeworICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGUgZXJyb3IgbWVzc2FnZSBtdWNoIGJldHRl
ciwgd2l0aCBnb29kIGxvY2FsaXphdGlvbi4KKyAgICAgICAgLy8gT25lIHBvc3NpYmlsaXR5IHdv
dWxkIGJlIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBiZWhhdmlvcnMgYXJlIGFsbG93ZWQgYXMgd2Ug
cmVjdXJzZQorICAgICAgICAvLyBIb3dldmVyIHRoaXMgd291bGQgdGFrZSBvdXIgaW1wbGVtZW50
YXRpb24gcHJldHR5IGZhciBmcm9tIHRoZSBzcGVjLCBtYWtpbmcgaXQgbXVjaCBoYXJkZXIgdG8g
dmVyaWZ5IHRoYXQgd2Ugc3RheSBpbiBzeW5jLgorICAgICAgICBtX2Vycm9ycy5hcHBlbmQoeyAi
Q29udGludWUgb3V0IG9mIGEgbG9vcCwgRmFsbHRocm91Z2ggb3V0IG9mIGEgc3dpdGNoIG9yIEJy
ZWFrIG91dCBvZiBib3RoIiwgZnVuYy5ib2R5KCkuc3BhbigpIH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChmdW5jLm1heWJlUmV0dXJuVHlwZSgpICYmIGJvZHlCZWhhdmlvcnMu
Y29udGFpbnMoQmVoYXZpb3I6Ok5leHQpKSB7CisgICAgICAgIG1fZXJyb3JzLmFwcGVuZCh7ICJD
b250cm9sLWZsb3cgZXhpdGluZyBhIG5vbi12b2lkIGZ1bmN0aW9uIiwgZnVuYy5zcGFuKCkgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0JlaGF2aW9ycyBCZWhhdmlvckFuYWx5c2lz
Ojpjb21wdXRlKEFTVDo6QXNzaWdubWVudFN0YXRlbWVudCYgc3RtdCkKK3sKKyAgICBCZWhhdmlv
cnMgcmVzdWx0ID0gYmVoYXZpb3JzKHN0bXQucmhzKCkpOworICAgIGlmIChzdG10Lm1heWJlTGhz
KCkpCisgICAgICAgIHJlc3VsdC5hZGQoYmVoYXZpb3JzKCpzdG10Lm1heWJlTGhzKCkpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitCZWhhdmlvcnMgQmVoYXZpb3JBbmFseXNpczo6Y29tcHV0
ZShBU1Q6OkNvbXBvdW5kU3RhdGVtZW50JiBzdG10KQoreworICAgIEJlaGF2aW9ycyByZXN1bHQg
eyBCZWhhdmlvcjo6TmV4dCB9OworICAgIGZvciAoYXV0byYgc3ViU3RtdCA6IHN0bXQuc3RhdGVt
ZW50cygpKSB7CisgICAgICAgIHJlc3VsdC5yZW1vdmUoQmVoYXZpb3I6Ok5leHQpOworICAgICAg
ICBCZWhhdmlvcnMgYnMgPSBiZWhhdmlvcnMoc3ViU3RtdCk7CisgICAgICAgIHJlc3VsdC5hZGQo
YnMpOworICAgICAgICBpZiAoIWJzLmNvbnRhaW5zKEJlaGF2aW9yOjpOZXh0KSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7IC8vIHRyaXZpYWxseSBkZWFkIGNvZGUgZG9lcyBub3QgY29udHJp
YnV0ZSB0byBiZWhhdmlvciBhbmFseXNpcworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitCZWhhdmlvcnMgQmVoYXZpb3JBbmFseXNpczo6Y29tcHV0ZShBU1Q6OlJldHVyblN0YXRlbWVu
dCYgc3RtdCkKK3sKKyAgICBBU1Q6OkV4cHJlc3Npb24qIHJldHVybkV4cHJlc3Npb24gPSBzdG10
Lm1heWJlRXhwcmVzc2lvbigpOworICAgIEJlaGF2aW9ycyByZXN1bHQgeyBCZWhhdmlvcjo6UmV0
dXJuIH07CisgICAgaWYgKHJldHVybkV4cHJlc3Npb24pIHsKKyAgICAgICAgQmVoYXZpb3JzIGV4
cHJlc3Npb25CZWhhdmlvcnMgPSBiZWhhdmlvcnMoKnJldHVybkV4cHJlc3Npb24pOworICAgICAg
ICBleHByZXNzaW9uQmVoYXZpb3JzLnJlbW92ZShCZWhhdmlvcjo6TmV4dCk7CisgICAgICAgIHJl
c3VsdC5hZGQoZXhwcmVzc2lvbkJlaGF2aW9ycyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0JlaGF2aW9ycyBCZWhhdmlvckFuYWx5c2lzOjpjb21wdXRlKEFTVDo6U3RydWN0dXJl
QWNjZXNzJiBleHByKQoreworICAgIHJldHVybiBiZWhhdmlvcnMoZXhwci5iYXNlKCkpOworfQor
CitCZWhhdmlvcnMgQmVoYXZpb3JBbmFseXNpczo6Y29tcHV0ZShBU1Q6OlR5cGVDb252ZXJzaW9u
JiBleHByKQoreworICAgIEJlaGF2aW9ycyByZXN1bHQ7CisgICAgZm9yIChhdXRvJiBzdWJFeHBy
IDogZXhwci5hcmd1bWVudHMoKSkKKyAgICAgICAgcmVzdWx0LmFkZChiZWhhdmlvcnMoc3ViRXhw
cikpOworICAgIHJlc3VsdC5hZGQoeyBCZWhhdmlvcjo6TmV4dCB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQmVoYXZpb3JBbmFs
eXNpcy5oIGIvU291cmNlL1dlYkdQVS9XR1NML0JlaGF2aW9yQW5hbHlzaXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIxYzRiZDY5OGI3YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9CZWhhdmlvckFuYWx5c2lzLmgKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVC9FeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oIgorI2luY2x1
ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJBU1QvRXhw
cmVzc2lvbnMvVHlwZUNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJBU1QvRnVuY3Rpb25EZWNsLmgi
CisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL0Fz
c2lnbm1lbnRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9Db21wb3VuZFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRlbWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKwor
bmFtZXNwYWNlIFdHU0wgeworCitlbnVtIGNsYXNzIEJlaGF2aW9yIDogdWludDhfdCB7CisgICAg
TmV4dCA9IDE8PDAsCisgICAgUmV0dXJuID0gMTw8MSwKKyAgICBCcmVhayA9IDE8PDIsCisgICAg
Q29udGludWUgPSAxPDwzLAorICAgIEZhbGx0aHJvdWdoID0gMTw8NCwKKyAgICBEaXNjYXJkID0g
MTw8NSwKK307CisKK3VzaW5nIEJlaGF2aW9ycyA9IE9wdGlvblNldDxCZWhhdmlvcj47CisKK2Ns
YXNzIEJlaGF2aW9yQW5hbHlzaXMgeworcHVibGljOgorICAgIHZvaWQgdmlzaXRCZWZvcmVDaGls
ZHJlbihBU1Q6OkZ1bmN0aW9uRGVjbCYpIHsgfQorICAgIHZvaWQgdmlzaXRBZnRlckNoaWxkcmVu
KEFTVDo6RnVuY3Rpb25EZWNsJik7CisKKyAgICB2b2lkIHZpc2l0QmVmb3JlQ2hpbGRyZW4oQVNU
OjpBU1ROb2RlJiBjdXJyZW50LCBBU1Q6OkFTVE5vZGUqIHBhcmVudCwgQVNUOjpBU1ROb2RlKiBs
YXN0U2libGluZykKKyAgICB7CisgICAgICAgIGJvb2wgaXNDdXJyZW50RGVhZENvZGUgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKGxhc3RTaWJsaW5nKSB7CisgICAgICAgICAgICBpc0N1cnJlbnREZWFk
Q29kZSA9IGlzRGVhZENvZGUoKmxhc3RTaWJsaW5nKTsKKyAgICAgICAgICAgIGlmICghaXNEZWFk
Q29kZSgqbGFzdFNpYmxpbmcpICYmICFiZWhhdmlvcnMoKmxhc3RTaWJsaW5nKS5jb250YWlucyhC
ZWhhdmlvcjo6TmV4dCkpIHsKKyAgICAgICAgICAgICAgICBpc0N1cnJlbnREZWFkQ29kZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGN1cnJlbnRseSB0aGlzIGFsc28gZGV0ZWN0
cyB0aGluZ3MgbGlrZSB4W3ldID0gZm9vKCk7IHdoZXJlIGZvbygpIGlzIGp1c3QgZGlzY2FyZDsK
KyAgICAgICAgICAgICAgICAvLyBBbmQgdGhpcyBpcyBub3Qgc3BlYy1jb21wbGlhbnQuIEkgc2hv
dWxkIGVpdGhlciBmaXggaXQsIG9yIHByb3Bvc2UgYSBQUiB0byBmaXggdGhlIHNwZWMuCisgICAg
ICAgICAgICAgICAgbV93YXJuaW5ncy5hcHBlbmQoeyAiRGVhZCBjb2RlIGZvdW5kIGJ5IHRoZSBi
ZWhhdmlvciBhbmFseXNpcyIsIGN1cnJlbnQuc3BhbigpIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcmVudCkKKyAgICAgICAgICAgIGlzQ3VycmVudERl
YWRDb2RlID0gaXNEZWFkQ29kZSgqcGFyZW50KTsKKyAgICAgICAgbV9pc0RlYWRDb2RlLmluc2Vy
dChjdXJyZW50LCBpc0N1cnJlbnREZWFkQ29kZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEFTVE5vZGU+CisgICAgdm9pZCB2aXNpdEFmdGVyQ2hpbGRyZW4oQVNUTm9kZSYgY3Vy
cmVudCkKKyAgICB7CisgICAgICAgIGlmIChpc0RlYWRDb2RlKGN1cnJlbnQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX2JlaGF2aW9ycy5pbnNlcnQoY3VycmVudCwgY29tcHV0ZShj
dXJyZW50KSk7CisgICAgfQorCisgICAgQmVoYXZpb3JzIGJlaGF2aW9ycyhBU1Q6OkFTVE5vZGUm
IG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYmVoYXZpb3JzW25vZGVdLmlzRW1wdHko
KSk7CisgICAgICAgIHJldHVybiBtX2JlaGF2aW9yc1tub2RlXTsKKyAgICB9CisKKyAgICBib29s
IGlzRGVhZENvZGUoQVNUOjpBU1ROb2RlJiBub2RlKSB7IHJldHVybiBtX2lzRGVhZENvZGVbbm9k
ZV07IH0KKworICAgIHZvaWQgcmVzZXRQZXJGdW5jdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAg
bV9iZWhhdmlvcnMucmVzaXplKDApOworICAgICAgICBtX2lzRGVhZENvZGUucmVzaXplKDApOwor
ICAgICAgICBtX2Vycm9ycy5zaHJpbmsoMCk7CisgICAgICAgIG1fd2FybmluZ3Muc2hyaW5rKDAp
OworICAgIH0KKworICAgIFZlY3RvcjxFcnJvcj4mIGVycm9ycygpIHsgcmV0dXJuIG1fZXJyb3Jz
OyB9CisgICAgVmVjdG9yPFdhcm5pbmc+JiB3YXJuaW5ncygpIHsgcmV0dXJuIG1fd2FybmluZ3M7
IH0KKworcHJpdmF0ZToKKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkFzc2lnbm1lbnRTdGF0
ZW1lbnQmKTsKKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkNvbXBvdW5kU3RhdGVtZW50Jik7
CisgICAgQmVoYXZpb3JzIGNvbXB1dGUoQVNUOjpSZXR1cm5TdGF0ZW1lbnQmKTsKKworICAgIEJl
aGF2aW9ycyBjb21wdXRlKEFTVDo6U3RydWN0dXJlQWNjZXNzJik7CisgICAgQmVoYXZpb3JzIGNv
bXB1dGUoQVNUOjpUeXBlQ29udmVyc2lvbiYpOworICAgIEJlaGF2aW9ycyBjb21wdXRlKEFTVDo6
SWRlbnRpZmllckV4cHJlc3Npb24mKSB7IHJldHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAg
ICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6OkJvb2xMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlv
cjo6TmV4dCB9OyB9CisgICAgQmVoYXZpb3JzIGNvbXB1dGUoQVNUOjpJbnQzMkxpdGVyYWwmKSB7
IHJldHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhhdmlvcnMgY29tcHV0ZShBU1Q6
OlVpbnQzMkxpdGVyYWwmKSB7IHJldHVybiB7IEJlaGF2aW9yOjpOZXh0IH07IH0KKyAgICBCZWhh
dmlvcnMgY29tcHV0ZShBU1Q6OkZsb2F0MzJMaXRlcmFsJikgeyByZXR1cm4geyBCZWhhdmlvcjo6
TmV4dCB9OyB9CisKKyAgICBJbmRleE1hcDxBU1Q6OkFTVE5vZGUsIEJlaGF2aW9ycz4gbV9iZWhh
dmlvcnM7CisgICAgSW5kZXhNYXA8QVNUOjpBU1ROb2RlLCBib29sPiBtX2lzRGVhZENvZGU7Cisg
ICAgVmVjdG9yPEVycm9yPiBtX2Vycm9yczsKKyAgICBWZWN0b3I8V2FybmluZz4gbV93YXJuaW5n
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9Vbmlmb3JtaXR5QW5hbHlzaXMuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Vbmlmb3JtaXR5
QW5hbHlzaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM4MjBm
MzU1MmE2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Vbmlmb3JtaXR5
QW5hbHlzaXMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBXR1NMIHsKKwordXNpbmcgVW5pZm9ybWl0eU5vZGUgPSB1bnNpZ25lZDsKKwor
Y2xhc3MgVW5pZm9ybWl0eUFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJ1bihBU1Q6OkZ1
bmN0aW9uRGVjbCYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0YXRlbWVudE5vZGU+Cisg
ICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mX3Y8QVNUOjpTdGF0ZW1l
bnQsIFN0YXRlbWVudE5vZGU+LCB2b2lkPjo6dHlwZSBydW4oU3RhdGVtZW50Tm9kZSYgc3RtdCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBmaWxsIGluCisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEV4cHJlc3Npb25Ob2RlPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfYmFzZV9vZl92PEFTVDo6RXhwcmVzc2lvbiwgRXhwcmVzc2lvbk5vZGU+LCB2b2lkPjo6
dHlwZSBydW4oRXhwcmVzc2lvbk5vZGUmIGV4cHIpCisgICAgeworICAgICAgICAvLyBGSVhNRTog
ZmlsbCBpbgorICAgIH0KKworICAgIHZvaWQgcmVzZXRQZXJGdW5jdGlvbkRhdGEoKQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICB9CisKKyAgICBWZWN0b3I8RXJyb3I+JiBl
cnJvcnMoKSB7IHJldHVybiBtX2Vycm9yczsgfQorICAgIFZlY3RvcjxXYXJuaW5nPiYgd2Fybmlu
Z3MoKSB7IHJldHVybiBtX3dhcm5pbmdzOyB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEV4cHJl
c3Npb25WYWx1ZVJlc3VsdCB7CisgICAgICAgIFVuaWZvcm1pdHlOb2RlIHZhbHVlOworICAgICAg
ICBVbmlmb3JtaXR5Tm9kZSBjb250cm9sRmxvdzsKKyAgICB9CisKKyAgICBzdHJ1Y3QgRXhwcmVz
c2lvbkxvY2F0aW9uUmVzdWx0IHsKKyAgICAgICAgVW5pZm9ybWl0eU5vZGUgbG9jYXRpb247Cisg
ICAgICAgIFVuaWZvcm1pdHlOb2RlIGNvbnRyb2xGbG93OworICAgIH0KKworICAgIFVuaWZvcm1p
dHlOb2RlIGNvbXB1dGUoQVNUOjpBc3NpZ25tZW50U3RhdGVtZW50Jik7CisgICAgVW5pZm9ybWl0
eU5vZGUgY29tcHV0ZShBU1Q6OkNvbXBvdW5kU3RhdGVtZW50Jik7CisgICAgVW5pZm9ybWl0eU5v
ZGUgY29tcHV0ZShBU1Q6OlJldHVyblN0YXRlbWVudCYpOworCisgICAgRXhwcmVzc2lvblZhbHVl
UmVzdWx0IGNvbXB1dGVSSFMoQVNUOjpTdHJ1Y3R1cmVBY2Nlc3MmKTsKKyAgICBFeHByZXNzaW9u
VmFsdWVSZXN1bHQgY29tcHV0ZVJIUyhBU1Q6OlR5cGVDb252ZXJzaW9uJik7CisgICAgRXhwcmVz
c2lvblZhbHVlUmVzdWx0IGNvbXB1dGVSSFMoQVNUOjpJZGVudGlmaWVyRXhwcmVzc2lvbiYpOwor
ICAgIEV4cHJlc3Npb25WYWx1ZVJlc3VsdCBjb21wdXRlUkhTKEFTVDo6Qm9vbExpdGVyYWwmKTsK
KyAgICBFeHByZXNzaW9uVmFsdWVSZXN1bHQgY29tcHV0ZVJIUyhBU1Q6OkludDMyTGl0ZXJhbCYp
OworICAgIEV4cHJlc3Npb25WYWx1ZVJlc3VsdCBjb21wdXRlUkhTKEFTVDo6VWludDMyTGl0ZXJh
bCYpOworICAgIEV4cHJlc3Npb25WYWx1ZVJlc3VsdCBjb21wdXRlUkhTKEFTVDo6RmxvYXQzMkxp
dGVyYWwmKTsKKworICAgIEV4cHJlc3Npb25Mb2NhdGlvblJlc3VsdCBjb21wdXRlTEhTKEFTVDo6
U3RydWN0dXJlQWNjZXNzJikKKyAgICBFeHByZXNzaW9uTG9jYXRpb25SZXN1bHQgY29tcHV0ZUxI
UyhBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uJik7CisKKyAgICBWZWN0b3I8RXJyb3I+IG1fZXJy
b3JzOworICAgIFZlY3RvcjxXYXJuaW5nPiBtX3dhcm5pbmdzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1ZhbGlkYXRvci5jcHAgYi9T
b3VyY2UvV2ViR1BVL1dHU0wvVmFsaWRhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmE0MWNiNzNjZTFiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9WYWxpZGF0b3IuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhbGlkYXRvci5oIgorCisjaW5jbHVkZSAi
QVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNz
aW9ucy9UeXBlQ29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiQVNUL0Z1bmN0aW9uRGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL0Fzc2ln
bm1lbnRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9Db21wb3VuZFN0YXRl
bWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJCZWhhdmlvckFuYWx5c2lzLmgiCisK
K25hbWVzcGFjZSBXR1NMIHsKKworY2xhc3MgVmFsaWRhdG9yIHsKK3B1YmxpYzoKKyAgICB2b2lk
IHZhbGlkYXRlKEFTVDo6RnVuY3Rpb25EZWNsJik7CisgICAgdm9pZCB2YWxpZGF0ZShBU1Q6OlN0
YXRlbWVudCYsIEFTVDo6QVNUTm9kZSogcGFyZW50LCBBU1Q6OkFTVE5vZGUqIGxhc3RTaWJsaW5n
KTsKKyAgICB2b2lkIHZhbGlkYXRlKEFTVDo6RXhwcmVzc2lvbiYsIEFTVDo6QVNUTm9kZSogcGFy
ZW50LCBBU1Q6OkFTVE5vZGUqIGxhc3RTaWJsaW5nKTsKKworICAgIHZvaWQgcmVzZXRQZXJGdW5j
dGlvbkRhdGEoKTsKKworICAgIHZvaWQgdmlzaXRCZWZvcmVDaGlsZHJlbihBU1Q6OkZ1bmN0aW9u
RGVjbCYgZnVuYykKKyAgICB7CisgICAgICAgIG1fYmVoYXZpb3JBbmFseXNpcy52aXNpdEJlZm9y
ZUNoaWxkcmVuKGZ1bmMpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyaWNB
U1ROb2RlPgorICAgIHZvaWQgdmlzaXRCZWZvcmVDaGlsZHJlbihHZW5lcmljQVNUTm9kZSYgbm9k
ZSwgQVNUOjpBU1ROb2RlKiBwYXJlbnQsIEFTVDo6QVNUTm9kZSogbGFzdFNpYmxpbmcpCisgICAg
eworICAgICAgICBtX2JlaGF2aW9yQW5hbHlzaXMudmlzaXRCZWZvcmVDaGlsZHJlbihub2RlLCBw
YXJlbnQsIGxhc3RTaWJsaW5nKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5l
cmljQVNUTm9kZT4KKyAgICB2b2lkIHZpc2l0QWZ0ZXJDaGlsZHJlbihHZW5lcmljQVNUTm9kZSYg
bm9kZSkKKyAgICB7CisgICAgICAgIG1fYmVoYXZpb3JBbmFseXNpcy52aXNpdEFmdGVyQ2hpbGRy
ZW4obm9kZSk7CisgICAgfQorCisgICAgQmVoYXZpb3JzIGJlaGF2aW9ycyhBU1Q6OlN0YXRlbWVu
dCYgc3RtdCkgeyByZXR1cm4gbV9iZWhhdmlvckFuYWx5c2lzLmJlaGF2aW9ycyhzdG10KTsgfQor
CisgICAgVmVjdG9yPFdhcm5pbmc+IG1fd2FybmluZ3MgeyB9OworICAgIFZlY3RvcjxFcnJvcj4g
bV9lcnJvcnMgeyB9OworICAgIEFTVDo6QVNUTm9kZUluZGV4IG1fbmV4dEF2YWlsYWJsZUluZGV4
IHsgMCB9OworICAgIEJlaGF2aW9yQW5hbHlzaXMgbV9iZWhhdmlvckFuYWx5c2lzIHsgfTsKK307
CisKKy8vIEZJWE1FOiBjaGVjayBhdHRyaWJ1dGVzCitzdGQ6OnBhaXI8VmVjdG9yPEVycm9yPiwg
VmVjdG9yPFdhcm5pbmc+PiB2YWxpZGF0ZVNoYWRlcihBU1Q6OlNoYWRlck1vZHVsZSYgc2hhZGVy
KQoreworICAgIFZhbGlkYXRvciB2YWxpZGF0b3I7CisgICAgZm9yIChhdXRvJiBmdW5jIDogc2hh
ZGVyLmZ1bmN0aW9ucygpKSB7CisgICAgICAgIHZhbGlkYXRvci5yZXNldFBlckZ1bmN0aW9uRGF0
YSgpOworICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGUoZnVuYyk7CisgICAgfQorICAgIHJldHVy
biB7IFdURk1vdmUodmFsaWRhdG9yLm1fZXJyb3JzKSwgV1RGTW92ZSh2YWxpZGF0b3IubV93YXJu
aW5ncykgfTsKK30KKwordm9pZCBWYWxpZGF0b3I6OnJlc2V0UGVyRnVuY3Rpb25EYXRhKCkKK3sK
KyAgICBtX25leHRBdmFpbGFibGVJbmRleCA9IDA7CisgICAgbV9iZWhhdmlvckFuYWx5c2lzLnJl
c2V0UGVyRnVuY3Rpb25EYXRhKCk7Cit9CisKKy8vIEZJWE1FOiB2YWxpZGF0ZSBubyByZWN1cnNp
b24KKy8vIEZJWE1FOiBvdGhlciB2YXJpZWQgdmFsaWRhdGlvbiAoZS5nLiBhbGlhc2luZykKK3Zv
aWQgVmFsaWRhdG9yOjp2YWxpZGF0ZShBU1Q6OkZ1bmN0aW9uRGVjbCYgZnVuYykKK3sKKyAgICB2
aXNpdEJlZm9yZUNoaWxkcmVuKGZ1bmMpOworCisgICAgdmFsaWRhdGUoZnVuYy5ib2R5KCksIG51
bGxwdHIsIG51bGxwdHIpOworCisgICAgdmlzaXRBZnRlckNoaWxkcmVuKGZ1bmMpOworCisgICAg
bV9lcnJvcnMuYXBwZW5kUmFuZ2UobV9iZWhhdmlvckFuYWx5c2lzLmVycm9ycygpLmJlZ2luKCks
IG1fYmVoYXZpb3JBbmFseXNpcy5lcnJvcnMoKS5lbmQoKSk7CisgICAgbV93YXJuaW5ncy5hcHBl
bmRSYW5nZShtX2JlaGF2aW9yQW5hbHlzaXMud2FybmluZ3MoKS5iZWdpbigpLCBtX2JlaGF2aW9y
QW5hbHlzaXMud2FybmluZ3MoKS5lbmQoKSk7CisKKyAgICAvLyBGSVhNRTogdW5pZm9ybWl0eSBj
aGVjaworfQorCit2b2lkIFZhbGlkYXRvcjo6dmFsaWRhdGUoQVNUOjpTdGF0ZW1lbnQmIHN0bXQs
IEFTVDo6QVNUTm9kZSogcGFyZW50LCBBU1Q6OkFTVE5vZGUqIGxhc3RTaWJsaW5nKQoreworICAg
IHN0bXQuc2V0SW5kZXgobV9uZXh0QXZhaWxhYmxlSW5kZXgrKyk7CisgICAgc3dpdGNoIChzdG10
LmtpbmQoKSkgeworICAgIGNhc2UgQVNUOjpTdGF0ZW1lbnQ6OktpbmQ6OkNvbXBvdW5kOiB7Cisg
ICAgICAgIGF1dG8mIGNvbXBvdW5kU3RhdGVtZW50ID0gZG93bmNhc3Q8QVNUOjpDb21wb3VuZFN0
YXRlbWVudD4oc3RtdCk7CisgICAgICAgIHZpc2l0QmVmb3JlQ2hpbGRyZW4oY29tcG91bmRTdGF0
ZW1lbnQsIHBhcmVudCwgbGFzdFNpYmxpbmcpOworICAgICAgICBBU1Q6OkFTVE5vZGUqIGxhc3RD
aGlsZFNpYmxpbmcgPSBudWxscHRyOworICAgICAgICBmb3IgKEFTVDo6U3RhdGVtZW50JiBzdWJT
dG10IDogY29tcG91bmRTdGF0ZW1lbnQuc3RhdGVtZW50cygpKSB7CisgICAgICAgICAgICB2YWxp
ZGF0ZShzdWJTdG10LCAmc3RtdCwgbGFzdENoaWxkU2libGluZyk7CisgICAgICAgICAgICBsYXN0
Q2hpbGRTaWJsaW5nID0gJnN1YlN0bXQ7CisgICAgICAgIH0KKyAgICAgICAgdmlzaXRBZnRlckNo
aWxkcmVuKGNvbXBvdW5kU3RhdGVtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEFTVDo6U3RhdGVtZW50OjpLaW5kOjpBc3NpZ25tZW50OiB7CisgICAgICAgIEFTVDo6QXNz
aWdubWVudFN0YXRlbWVudCYgYXNzaWdubWVudCA9IGRvd25jYXN0PEFTVDo6QXNzaWdubWVudFN0
YXRlbWVudD4oc3RtdCk7CisgICAgICAgIHZpc2l0QmVmb3JlQ2hpbGRyZW4oYXNzaWdubWVudCwg
cGFyZW50LCBsYXN0U2libGluZyk7CisgICAgICAgIHZhbGlkYXRlKGFzc2lnbm1lbnQucmhzKCks
ICZhc3NpZ25tZW50LCBudWxscHRyKTsKKyAgICAgICAgaWYgKGFzc2lnbm1lbnQubWF5YmVMaHMo
KSkKKyAgICAgICAgICAgIHZhbGlkYXRlKCphc3NpZ25tZW50Lm1heWJlTGhzKCksICZhc3NpZ25t
ZW50LCAmYXNzaWdubWVudC5yaHMoKSk7CisgICAgICAgIHZpc2l0QWZ0ZXJDaGlsZHJlbihhc3Np
Z25tZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFTVDo6U3RhdGVtZW50
OjpLaW5kOjpSZXR1cm46IHsKKyAgICAgICAgQVNUOjpSZXR1cm5TdGF0ZW1lbnQmIHJldHVyblN0
bXQgPSBkb3duY2FzdDxBU1Q6OlJldHVyblN0YXRlbWVudD4oc3RtdCk7CisgICAgICAgIHZpc2l0
QmVmb3JlQ2hpbGRyZW4ocmV0dXJuU3RtdCwgcGFyZW50LCBsYXN0U2libGluZyk7CisgICAgICAg
IEFTVDo6RXhwcmVzc2lvbiogcmV0dXJuRXhwcmVzc2lvbiA9IHJldHVyblN0bXQubWF5YmVFeHBy
ZXNzaW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5FeHByZXNzaW9uKQorICAgICAgICAgICAgdmFs
aWRhdGUoKnJldHVybkV4cHJlc3Npb24sICZyZXR1cm5TdG10LCBudWxscHRyKTsKKyAgICAgICAg
dmlzaXRBZnRlckNoaWxkcmVuKHJldHVyblN0bXQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIH0KK30KKwordm9pZCBWYWxpZGF0b3I6OnZhbGlkYXRlKEFTVDo6RXhwcmVzc2lvbiYgZXhw
ciwgQVNUOjpBU1ROb2RlKiBwYXJlbnQsIEFTVDo6QVNUTm9kZSogbGFzdFNpYmxpbmcpCit7Cisg
ICAgZXhwci5zZXRJbmRleChtX25leHRBdmFpbGFibGVJbmRleCsrKTsKKyAgICBzd2l0Y2ggKGV4
cHIua2luZCgpKSB7CisgICAgY2FzZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6OlN0cnVjdHVyZUFj
Y2VzczogeworICAgICAgICBBU1Q6OlN0cnVjdHVyZUFjY2VzcyYgc3RydWN0QWNjZXNzID0gZG93
bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KGV4cHIpOworICAgICAgICB2aXNpdEJlZm9yZUNo
aWxkcmVuKHN0cnVjdEFjY2VzcywgcGFyZW50LCBsYXN0U2libGluZyk7CisgICAgICAgIHZhbGlk
YXRlKHN0cnVjdEFjY2Vzcy5iYXNlKCksICZzdHJ1Y3RBY2Nlc3MsIG51bGxwdHIpOworICAgICAg
ICB2aXNpdEFmdGVyQ2hpbGRyZW4oc3RydWN0QWNjZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEFTVDo6RXhwcmVzc2lvbjo6S2luZDo6VHlwZUNvbnZlcnNpb246IHsKKyAg
ICAgICAgQVNUOjpUeXBlQ29udmVyc2lvbiYgdHlwZUNvbnZlcnNpb24gPSBkb3duY2FzdDxBU1Q6
OlR5cGVDb252ZXJzaW9uPihleHByKTsKKyAgICAgICAgdmlzaXRCZWZvcmVDaGlsZHJlbih0eXBl
Q29udmVyc2lvbiwgcGFyZW50LCBsYXN0U2libGluZyk7CisgICAgICAgIEFTVDo6QVNUTm9kZSog
bGFzdENoaWxkU2libGluZyA9IG51bGxwdHI7CisgICAgICAgIGZvciAoYXV0byYgc3ViRXhwciA6
IHR5cGVDb252ZXJzaW9uLmFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICB2YWxpZGF0ZShzdWJF
eHByLCAmdHlwZUNvbnZlcnNpb24sIGxhc3RDaGlsZFNpYmxpbmcpOworICAgICAgICAgICAgbGFz
dENoaWxkU2libGluZyA9ICZzdWJFeHByOworICAgICAgICB9CisgICAgICAgIHZpc2l0QWZ0ZXJD
aGlsZHJlbih0eXBlQ29udmVyc2lvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6OklkZW50aWZpZXI6IHsKKyAgICAgICAgYXV0byYgaWRl
bnRpZmllckV4cHJlc3Npb24gPSBkb3duY2FzdDxBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uPihl
eHByKTsKKyAgICAgICAgdmlzaXRCZWZvcmVDaGlsZHJlbihpZGVudGlmaWVyRXhwcmVzc2lvbiwg
cGFyZW50LCBsYXN0U2libGluZyk7CisgICAgICAgIHZpc2l0QWZ0ZXJDaGlsZHJlbihpZGVudGlm
aWVyRXhwcmVzc2lvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBU1Q6OkV4
cHJlc3Npb246OktpbmQ6OkJvb2xMaXRlcmFsOiB7CisgICAgICAgIGF1dG8mIGxpdGVyYWxFeHBy
ZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpCb29sTGl0ZXJhbD4oZXhwcik7CisgICAgICAgIHZpc2l0
QmVmb3JlQ2hpbGRyZW4obGl0ZXJhbEV4cHJlc3Npb24sIHBhcmVudCwgbGFzdFNpYmxpbmcpOwor
ICAgICAgICB2aXNpdEFmdGVyQ2hpbGRyZW4obGl0ZXJhbEV4cHJlc3Npb24pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgQVNUOjpFeHByZXNzaW9uOjpLaW5kOjpJbnQzMkxpdGVy
YWw6IHsKKyAgICAgICAgYXV0byYgbGl0ZXJhbEV4cHJlc3Npb24gPSBkb3duY2FzdDxBU1Q6Oklu
dDMyTGl0ZXJhbD4oZXhwcik7CisgICAgICAgIHZpc2l0QmVmb3JlQ2hpbGRyZW4obGl0ZXJhbEV4
cHJlc3Npb24sIHBhcmVudCwgbGFzdFNpYmxpbmcpOworICAgICAgICB2aXNpdEFmdGVyQ2hpbGRy
ZW4obGl0ZXJhbEV4cHJlc3Npb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVNUOjpFeHByZXNzaW9uOjpLaW5kOjpVaW50MzJMaXRlcmFsOiB7CisgICAgICAgIGF1dG8mIGxp
dGVyYWxFeHByZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpVaW50MzJMaXRlcmFsPihleHByKTsKKyAg
ICAgICAgdmlzaXRCZWZvcmVDaGlsZHJlbihsaXRlcmFsRXhwcmVzc2lvbiwgcGFyZW50LCBsYXN0
U2libGluZyk7CisgICAgICAgIHZpc2l0QWZ0ZXJDaGlsZHJlbihsaXRlcmFsRXhwcmVzc2lvbik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBU1Q6OkV4cHJlc3Npb246OktpbmQ6
OkZsb2F0MzJMaXRlcmFsOiB7CisgICAgICAgIGF1dG8mIGxpdGVyYWxFeHByZXNzaW9uID0gZG93
bmNhc3Q8QVNUOjpGbG9hdDMyTGl0ZXJhbD4oZXhwcik7CisgICAgICAgIHZpc2l0QmVmb3JlQ2hp
bGRyZW4obGl0ZXJhbEV4cHJlc3Npb24sIHBhcmVudCwgbGFzdFNpYmxpbmcpOworICAgICAgICB2
aXNpdEFmdGVyQ2hpbGRyZW4obGl0ZXJhbEV4cHJlc3Npb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XR1NML1ZhbGlkYXRvci5oIGIvU291cmNlL1dlYkdQVS9XR1NML1ZhbGlkYXRvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTJiZmIzMDM1NmMyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1ZhbGlkYXRvci5oCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVC9TaGFk
ZXJNb2R1bGUuaCIKKyNpbmNsdWRlICJDb21waWxhdGlvbk1lc3NhZ2UuaCIKKworbmFtZXNwYWNl
IFdHU0wgeworCitzdGQ6OnBhaXI8VmVjdG9yPEVycm9yPiwgVmVjdG9yPFdhcm5pbmc+PiB2YWxp
ZGF0ZVNoYWRlcihBU1Q6OlNoYWRlck1vZHVsZSYpOworCit9IC8vIG5hbWVzcGFjZSBXR1NMCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvV0dTTC5jcHAKaW5kZXggNmU3ODQxMGY3OTlhLi40ZmU3NGVhZjIwM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dT
TC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXR1NMLmgiCiAKICNpbmNsdWRlICJQ
YXJzZXIuaCIKKyNpbmNsdWRlICJWYWxpZGF0b3IuaCIKIAogbmFtZXNwYWNlIFdHU0wgewogCkBA
IC0zOSw4ICs0MCwxMCBAQCBzdGQ6OnZhcmlhbnQ8U3VjY2Vzc2Z1bENoZWNrLCBGYWlsZWRDaGVj
az4gc3RhdGljQ2hlY2soY29uc3QgU3RyaW5nJiB3Z3NsLCBjb25zdAogICAgIH0KICAgICBVbmlx
dWVSZWY8QVNUOjpTaGFkZXJNb2R1bGU+IHNoYWRlciA9IG1ha2VVbmlxdWVSZWY8QVNUOjpTaGFk
ZXJNb2R1bGU+KFdURk1vdmUocGFyc2VyUmVzdWx0LnZhbHVlKCkpKTsKIAotICAgIFZlY3RvcjxX
YXJuaW5nPiB3YXJuaW5ncyB7IH07Ci0gICAgLy8gRklYTUU6IGFkZCB2YWxpZGF0aW9uCisgICAg
YXV0byBbZXJyb3JzLCB3YXJuaW5nc10gPSB2YWxpZGF0ZVNoYWRlcihzaGFkZXIpOworICAgIGlm
ICghZXJyb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEZhaWxlZENoZWNrIHsgV1RGTW92
ZShlcnJvcnMpLCBXVEZNb3ZlKHdhcm5pbmdzKSB9OworCiAgICAgcmV0dXJuIHN0ZDo6dmFyaWFu
dDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNrPihzdGQ6OmluX3BsYWNlX3R5cGU8U3VjY2Vz
c2Z1bENoZWNrPiwgV1RGTW92ZSh3YXJuaW5ncyksIFdURk1vdmUoc2hhZGVyKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0g
Yi9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFBhcnNlclRlc3RzLm1tCmluZGV4IGYw
Yjk5ZWUwYWU1NC4uZTIzMDk2MzViOWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0xV
bml0VGVzdHMvV0dTTFBhcnNlclRlc3RzLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRU
ZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0KQEAgLTExOCw4ICsxMTgsOCBAQCAtICh2b2lkKXRlc3RQ
YXJzaW5nRnVuY3Rpb25EZWNsIHsKICAgICBYQ1RBc3NlcnQoc3RtdC5tYXliZUxocygpKTsKICAg
ICBYQ1RBc3NlcnQoc3RtdC5tYXliZUxocygpLT5pc1N0cnVjdHVyZUFjY2VzcygpKTsKICAgICBX
R1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2VzcyYgc3RydWN0QWNjZXNzID0gZG93bmNhc3Q8V0dTTDo6
QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KCpzdG10Lm1heWJlTGhzKCkpOwotICAgIFhDVEFzc2VydChz
dHJ1Y3RBY2Nlc3MuYmFzZSgpLT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgV0dTTDo6QVNUOjpJZGVu
dGlmaWVyRXhwcmVzc2lvbiBiYXNlID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpJZGVudGlmaWVyRXhw
cmVzc2lvbj4oc3RydWN0QWNjZXNzLmJhc2UoKS5nZXQoKSk7CisgICAgWENUQXNzZXJ0KHN0cnVj
dEFjY2Vzcy5iYXNlKCkuaXNJZGVudGlmaWVyKCkpOworICAgIFdHU0w6OkFTVDo6SWRlbnRpZmll
ckV4cHJlc3Npb24gYmFzZSA9IGRvd25jYXN0PFdHU0w6OkFTVDo6SWRlbnRpZmllckV4cHJlc3Np
b24+KHN0cnVjdEFjY2Vzcy5iYXNlKCkpOwogICAgIFhDVEFzc2VydChiYXNlLmlkZW50aWZpZXIo
KSA9PSAieCIpOwogICAgIFhDVEFzc2VydChzdHJ1Y3RBY2Nlc3MuZmllbGROYW1lKCkgPT0gImEi
KTsKICAgICBYQ1RBc3NlcnQoc3RtdC5yaHMoKS5pc0ludDMyTGl0ZXJhbCgpKTsKQEAgLTE5MCw3
ICsxOTAsNyBAQCAtICh2b2lkKXRlc3RUcml2aWFsR3JhcGhpY3NTaGFkZXIgewogICAgICAgICBY
Q1RBc3NlcnQoc3RtdC5tYXliZUV4cHJlc3Npb24oKSk7CiAgICAgICAgIFhDVEFzc2VydChzdG10
Lm1heWJlRXhwcmVzc2lvbigpLT5pc1R5cGVDb252ZXJzaW9uKCkpOwogICAgICAgICBXR1NMOjpB
U1Q6OlR5cGVDb252ZXJzaW9uJiBleHByID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpUeXBlQ29udmVy
c2lvbj4oKnN0bXQubWF5YmVFeHByZXNzaW9uKCkpOwotICAgICAgICBYQ1RBc3NlcnQoZXhwci50
eXBlRGVjbCgpLT5pc1BhcmFtZXRlcml6ZWQoKSk7CisgICAgICAgIFhDVEFzc2VydChleHByLnR5
cGVEZWNsKCkuaXNQYXJhbWV0ZXJpemVkKCkpOwogICAgICAgICBYQ1RBc3NlcnQoZXhwci5hcmd1
bWVudHMoKS5zaXplKCkgPT0gNCk7CiAgICAgICAgIFhDVEFzc2VydChleHByLmFyZ3VtZW50cygp
WzBdLT5pc0Zsb2F0MzJMaXRlcmFsKCkpOwogICAgICAgICBYQ1RBc3NlcnQoZXhwci5hcmd1bWVu
dHMoKVsxXS0+aXNGbG9hdDMyTGl0ZXJhbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM0MjYwYWFkYmE2YS4uYzJkYTQ0MmExZDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQzLDYgKzQzLDcgQEAKIAkJMUNFQkQ3RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEN0Y3Mjcx
NkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDgwMjI3MTZC
RjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi87IH07CiAJCTFDRUJEODI2MjcxNkNBQ0MwMEE1MjU0
RCAvKiBsaWJ3Z3NsLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQ0VCRDdGMjI3MTZCMkNDMDBBNTI1NEQgLyogbGlid2dzbC5hICovOyB9OworCQkz
MzcxNkUwNjI3REZEREI1MDA1OTg0QUQgLyogVW5pZm9ybWl0eUFuYWx5c2lzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzcxNkUwNTI3REZEREI1MDA1
OTg0QUQgLyogVW5pZm9ybWl0eUFuYWx5c2lzLmggKi87IH07CiAJCTMzOEJCMkNFMjdCNkI2MDIw
MEUwNjZBQiAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzM4QkIyQ0QyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggKi87IH07CiAJCTMz
OEJCMkQwMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJDRjI3QjZCNjFCMDBFMDY2QUIgLyogVG9r
ZW4uY3BwICovOyB9OwogCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDEy
N0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLzsgfTsKQEAgLTUyLDYgKzUzLDEwIEBA
CiAJCTMzOUI3QjFCMjdEODAwMDkwMDcyQkY5QSAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5QjdCMUEyN0Q4MDAwOTAwNzJCRjlB
IC8qIFBhcnNlci5jcHAgKi87IH07CiAJCTMzOUI3QjFEMjdEODBBMUMwMDcyQkY5QSAvKiBXR1NM
UGFyc2VyVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMzlCN0IxQzI3RDgwQTFDMDA3MkJGOUEgLyogV0dTTFBhcnNlclRlc3RzLm1tICovOyB9
OwogCQkzMzlCN0IxRTI3RDgxNjI3MDA3MkJGOUEgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODY3MjdC
QzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwICovOyB9OworCQkzMzlCN0Iy
MDI3RDk2ODExMDA3MkJGOUEgLyogVmFsaWRhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzlCN0IxRjI3RDk2ODExMDA3MkJGOUEgLyogVmFsaWRh
dG9yLmggKi87IH07CisJCTMzOUI3QjIyMjdEOTY5NEEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5QjdCMjEy
N0Q5Njk0QTAwNzJCRjlBIC8qIFZhbGlkYXRvci5jcHAgKi87IH07CisJCTMzOUI3QjI0MjdEOTc1
ODQwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzlCN0IyMzI3RDk3NTg0MDA3MkJGOUEgLyogQmVoYXZp
b3JBbmFseXNpcy5oICovOyB9OworCQkzMzlCN0IyNjI3REFDQUNCMDA3MkJGOUEgLyogQmVoYXZp
b3JBbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMzlCN0IyNTI3REFDQUNCMDA3MkJGOUEgLyogQmVoYXZpb3JBbmFseXNpcy5jcHAgKi87
IH07CiAJCTMzRUExODVFMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg1RDI3QkMxOTRGMDBBMURE
NTIgLyogQVNUTm9kZS5oICovOyB9OwogCQkzM0VBMTg2MDI3QkMxOTgxMDBBMURENTIgLyogR2xv
YmFsRGlyZWN0aXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0VBMTg1RjI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi87IH07
CiAJCTMzRUExODYyMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2MTI3QkMxOUMxMDBBMURE
NTIgLyogR2xvYmFsRGVjbC5oICovOyB9OwpAQCAtMTk5LDYgKzIwNCw3IEBACiAJCTFDRUJEODJC
MjcxNkNBRkIwMEE1MjU0RCAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IENvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsg
fTsKIAkJMUNFQkQ4MkQyNzE2Q0IxNjAwQTUyNTREIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09U
OyB9OwogCQkxQ0VCRDgzMDI3MTZDQjM4MDBBNTI1NEQgLyogbGliaWN1Y29yZS50YmQgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS50
ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iOyBuYW1lID0gbGliaWN1Y29yZS50YmQ7IHBhdGgg
PSB1c3IvbGliL2xpYmljdWNvcmUudGJkOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMzM3
MTZFMDUyN0RGRERCNTAwNTk4NEFEIC8qIFVuaWZvcm1pdHlBbmFseXNpcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmlmb3JtaXR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzM4QkIyQ0QyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2Vu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzOEJCMkNGMjdCNkI2MUIwMEUwNjZB
QiAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMzOEJCMkQxMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVNwYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNyw2ICsyMTMsMTAgQEAKIAkJMzM5QjdCMTcyN0Q3RkZBNDAwNzJCRjlBIC8qIFBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzM5QjdCMUEyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzlCN0Ix
QzI3RDgwQTFDMDA3MkJGOUEgLyogV0dTTFBhcnNlclRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0dTTFBhcnNlclRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MzlCN0IxRjI3RDk2ODExMDA3MkJGOUEgLyogVmFsaWRhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bGlkYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzlCN0IyMTI3RDk2OTRB
MDA3MkJGOUEgLyogVmFsaWRhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOUI3QjIzMjdEOTc1ODQwMDcyQkY5
QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJlaGF2aW9yQW5hbHlzaXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5QjdCMjUyN0RBQ0FDQjAwNzJCRjlB
IC8qIEJlaGF2aW9yQW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmVoYXZpb3JBbmFs
eXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzRUExODVEMjdCQzE5NEYw
MEExREQ1MiAvKiBBU1ROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFTVE5vZGUuaDsgcGF0aCA9IFdH
U0wvQVNUTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTMzRUExODVGMjdC
QzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFs
RGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzRUExODYxMjdCQzE5
QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbERlY2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4Myw2ICszOTMsMTEgQEAKIAkJCQkzMzlC
N0IxQTI3RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCAqLywKIAkJCQkzMzhCQjJDRDI3QjZC
NjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLywKIAkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQg
LyogV0dTTC5jcHAgKi8sCisJCQkJMzM5QjdCMUYyN0Q5NjgxMTAwNzJCRjlBIC8qIFZhbGlkYXRv
ci5oICovLAorCQkJCTMzOUI3QjIxMjdEOTY5NEEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuY3BwICov
LAorCQkJCTMzOUI3QjIzMjdEOTc1ODQwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggKi8s
CisJCQkJMzM5QjdCMjUyN0RBQ0FDQjAwNzJCRjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuY3BwICov
LAorCQkJCTMzNzE2RTA1MjdERkREQjUwMDU5ODRBRCAvKiBVbmlmb3JtaXR5QW5hbHlzaXMuaCAq
LywKIAkJCQkxQ0VCRDdGNzI3MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBXR1NMOwpAQCAtNDUyLDkgKzQ2Nyw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTMzRUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVy
RXhwcmVzc2lvbi5oICovLAorCQkJCTMzRUExODg3MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFs
RXhwcmVzc2lvbnMuaCAqLywKIAkJCQkzM0VBMTg4MzI3QkMyNjg2MDBBMURENTIgLyogU3RydWN0
dXJlQWNjZXNzLmggKi8sCiAJCQkJMzNFQTE4ODUyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252
ZXJzaW9uLmggKi8sCi0JCQkJMzNFQTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHBy
ZXNzaW9ucy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBFeHByZXNzaW9uczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC00ODQsMTMgKzQ5OSwxNiBAQAogCQkJCTMzRUExODdCMjdCQzIz
MEUwMEExREQ1MiAvKiBDb21wb3VuZFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNF
QTE4NzYyN0JDMjE2QjAwQTFERDUyIC8qIEZ1bmN0aW9uRGVjbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICov
LAorCQkJCTMzNzE2RTA2MjdERkREQjUwMDU5ODRBRCAvKiBVbmlmb3JtaXR5QW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTMzRUExODY2MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlv
bk1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzRUExODcwMjdCQzFFOEEwMEExREQ1MiAv
KiBTaGFkZXJNb2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzOEJCMkQ0MjdCNkI2NkMwMEUw
NjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNFQTE4ODgyN0JDMzYxRTAwQTFE
RDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzM4QkIyQ0Uy
N0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzlCN0IyMDI3
RDk2ODExMDA3MkJGOUEgLyogVmFsaWRhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0VBMTg2
QzI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNF
QkQ3RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOUI3
QjI0MjdEOTc1ODQwMDcyQkY5QSAvKiBCZWhhdmlvckFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzM0VBMTg2MjI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFsRGVjbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzNFQTE4ODAyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMzRUExODg0MjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1
cmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLApAQCAtNzM2LDkgKzc1NCwxMSBAQAogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTMzOUI3QjFFMjdEODE2
MjcwMDcyQkY5QSAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzM5QjdCMjYyN0RBQ0FDQjAwNzJCRjlBIC8qIEJlaGF2aW9yQW5hbHlzaXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzM5QjdCMUIyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzM4QkIyRDAyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMzOUI3QjIyMjdEOTY5NEEwMDcyQkY5QSAvKiBWYWxpZGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFQkQ4MDMyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7Cg==
</data>
<flag name="review"
          id="486220"
          type_id="1"
          status="-"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="486221"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
      

    </bug>

</bugzilla>