<?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>120779</bug_id>
          
          <creation_ts>2013-09-05 10:24:58 -0700</creation_ts>
          <short_desc>Move Floats out of RenderBlock</short_desc>
          <delta_ts>2013-09-09 15:17:22 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120705</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bem Jones-Bey">bjonesbe</reporter>
          <assigned_to name="Bem Jones-Bey">bjonesbe</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>925107</commentid>
    <comment_count>0</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-09-05 10:24:58 -0700</bug_when>
    <thetext>Move Floats out of RenderBlock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925115</commentid>
    <comment_count>1</comment_count>
      <attachid>210634</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-09-05 10:38:16 -0700</bug_when>
    <thetext>Created attachment 210634
Patch

This will not apply until the patch in bug 120705 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926868</commentid>
    <comment_count>2</comment_count>
      <attachid>211073</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-09-09 13:22:39 -0700</bug_when>
    <thetext>Created attachment 211073
Patch

Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926875</commentid>
    <comment_count>3</comment_count>
      <attachid>211073</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-09-09 13:31:36 -0700</bug_when>
    <thetext>Comment on attachment 211073
Patch

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

r=me

&gt; Source/WebCore/rendering/FloatingObjects.cpp:51
&gt; +    : m_renderer(renderer)

nit: Fix indentation for the initializers.

&gt; Source/WebCore/rendering/FloatingObjects.cpp:84
&gt; +: m_placedFloatsTree(UninitializedTree)

Nit: ditto

&gt; Source/WebCore/rendering/FloatingObjects.h:45
&gt; +    : m_renderer(0)

nit: ditto

&gt; Source/WebCore/rendering/FloatingObjects.h:63
&gt; +    : m_renderer(0)

nit: ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926885</commentid>
    <comment_count>4</comment_count>
      <attachid>211080</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-09-09 13:55:46 -0700</bug_when>
    <thetext>Created attachment 211080
Patch

Rebase again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926887</commentid>
    <comment_count>5</comment_count>
      <attachid>211081</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-09-09 14:03:40 -0700</bug_when>
    <thetext>Created attachment 211081
Patch

This time with reviewer name!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926943</commentid>
    <comment_count>6</comment_count>
      <attachid>211081</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 15:17:19 -0700</bug_when>
    <thetext>Comment on attachment 211081
Patch

Clearing flags on attachment: 211081

Committed r155391: &lt;http://trac.webkit.org/changeset/155391&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926944</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 15:17:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210634</attachid>
            <date>2013-09-05 10:38:16 -0700</date>
            <delta_ts>2013-09-09 13:22:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120779-20130905103815.patch</filename>
            <type>text/plain</type>
            <size>66449</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1MDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FiY2Q4YjU5NDgwYjVk
YzlmNDg2MTZmYzBiZTNlMTYxYjFiMDFiZS4uZDM2OTQwOWIyNzBjYmRmYzg0YTg0MTQ1Mzk0YWMy
NDI5NDBiMDQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wOS0wNSAgQmVt
IEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KKworICAgICAgICBNb3ZlIEZsb2F0cyBv
dXQgb2YgUmVuZGVyQmxvY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDc3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgRmxvYXRpbmdPYmplY3QsIEZsb2F0aW5nT2JqZWN0cyBhbmQgcmVsYXRl
ZCBjb2RlIGludG8KKyAgICAgICAgRmxvYXRpbmdPYmplY3RzLntoLGNwcH0uIFRoaXMgbm90IG9u
bHkgbWFrZXMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZQorICAgICAgICBhbmQgbWFpbnRhaW5hYmxl
LCBpdCBhbHNvIHdpbGwgYWxsb3cgZm9yIG1vcmUgZGVjb3VwbGluZyBvZgorICAgICAgICBSZW5k
ZXJCbG9jayBhbmQgdGhlIEZsb2F0aW5nT2JqZWN0cywgaG9wZWZ1bGx5IG1ha2luZyBpdCBwb3Nz
aWJsZSBmb3IKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzIHRvIGJlIG1vcmUgY2VudHJhbCBhbmQg
bm90IG5lZWQgdG8gaGF2ZSBvbmUgZm9yIGVhY2gKKyAgICAgICAgUmVuZGVyQmxvY2sgdGhhdCBp
cyBhZmZlY3RlZCBieSBmbG9hdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjo6Q29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlcjo6b3V0ZXJtb3N0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmpl
Y3RzOjp+RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjppbmNy
ZWFzZU9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6
aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09i
amVjdHM6OmFkZFBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OnJlbW92ZVBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6bG9naWNhbExlZnRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VzSW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ojo6dXBkYXRlT2Zmc2V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb2xsZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRIZWlnaHRSZW1haW5pbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGluZ09iamVj
dHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNsb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0aW5nT2JqZWN0OjpyZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6aXNQbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzUGxh
Y2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp4KToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0Ojp5KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2Jq
ZWN0OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdGluZ09iamVjdDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
aW5nT2JqZWN0OjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnNldEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGFnaW5h
dGlvblN0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRQYWdpbmF0
aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmlzSW5QbGFjZWRU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRJc0luUGxhY2VkVHJl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2hvdWxkUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFNob3VsZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojppc0Rlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdGluZ09iamVjdDo6c2V0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3Q6Om9yaWdpbmF0aW5nTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6c2V0T3JpZ2luYXRpbmdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
Ojpsb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2Fs
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6bG9naWNhbFJpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxUb3ApOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRMb2dpY2FsUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9uczo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdHM6OnNldEhvcml6b250YWxXcml0aW5nTW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Omhhc0xlZnRPYmplY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0czo6aGFzUmlnaHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0aW5nT2JqZWN0czo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6cGxhY2VkRmxvYXRzVHJlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFp
bGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpsYXN0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRMYXN0RmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmludGVydmFsQXJlbmEpOgorCiAyMDEzLTA5LTA0
ICBCZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAgIE1vdmUgbG9n
aWNhbChMZWZ0fFJpZ2h0KUZsb2F0T2Zmc2V0Rm9yTGluZSBtZXRob2RzIGludG8gRmxvYXRpbmdP
YmplY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU5NGI3NDI1MzcwZjY5MzI5YWFiZmNmMDk1
NmUzNDQzM2Q5ZDc1NWYuLjg5MzQxYjA1M2E0YzY4MDM0YjliOTA2MWE4MzlkMDQ4YWE3YzY2YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMDk1LDYgKzIwOTUsNyBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAogICAgIHJlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAK
KyAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAogICAgIHJlbmRlcmluZy9GbG93VGhy
ZWFkQ29udHJvbGxlci5jcHAKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmNwcAogICAgIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCA1NjNiZGJkYTQ3MzIwOWI1NDY5NTE3MTM3MjRlMDM0YWQ2Mzc2ZGQx
Li5hMDg1NDZhMDk0YzNhM2QzZmY4NTczNzE2MmM1ZmM3NzQxN2EwMTg3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQzMzcsNiArNDMzNyw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GbG9hdGluZ09iamVjdHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJl
YWRDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRD
b250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IGIyOTFhMDc5YWM1NTYzODA2YjVmOWM1YThiY2MwYjczZmUwZGQ4ZjIuLmIz
N2Y0NDUxNjAzZGNkNjMwOTlkNjYxM2FmMDA2ZTE2ZWVhNTJiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
MTE0Miw2ICsxMTQyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcCBcCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBcCiAgICAgcmVu
ZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKKyAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmpl
Y3RzLmNwcCBcCiAgICAgcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBcCiAgICAg
cmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9I
aXRUZXN0TG9jYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCmluZGV4IDBiNDRkMGQzNzI1YWVmMGI4YzRlOGVjYWQwOGM2NTNjNWMz
MTlhNjYuLmZmOGJkN2VjODQyNjhjYjkxMGJkZDgxMzA4YTliNTQ0Nzc4OGI0NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtOTUwOCw2
ICs5NTA4LDcgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcRmxvYXRpbmdPYmplY3RzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCI+CiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTk5
NTQsNiArMTk5NTUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVs
bGlwc2lzQm94LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmls
dGVyRWZmZWN0UmVuZGVyZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xGaXhlZFRhYmxlTGF5b3V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcRmxvYXRpbmdPYmplY3RzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRmxvd1RocmVhZENvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xHYXBSZWN0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIiAvPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE4YzNi
MmVlZjFmOTIxZjdkOGI3ZGYwNWExZGExYjNhYTc1MTJlMGUuLjE3YTQ2ZWM3NzJjNzU3YjZhYTM1
YjYzN2Q5ODFjZmZiZWI3MjhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzNzYsNiArMzM3Niw4IEBACiAJCTk4Q0U0MzJB
MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xv
YWRlci5oICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIx
Rjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2Rjk3MTU4ODY5QzgwMDExQThD
NCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3Ry
aW5nTGlzdEN1c3RvbS5jcHAgKi87IH07CisJCTlBNTI4RTgzMTdEN0Y1MkYwMEFBOTUxOCAvKiBG
bG9hdGluZ09iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUE1MjhFODExN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAg
Ki87IH07CisJCTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBNTI4RTgyMTdE
N0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjFBQjA3QzE2NDhDN0M0MDA1MUYzRjIgLyog
SlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyog
SlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTlCMjRERThF
MTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhU
TUxCRElFbGVtZW50LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRv
U3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIy
RDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NTksNiArOTk2MSw4IEBACiAJCTk4Q0U0
MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJp
bmdMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUE1MjhFODEx
N0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdGluZ09iamVjdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3OTE2NDhDNjlEMDA1MUYzRjIgLyog
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxQUIwN0IxNjQ4QzdD
NDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMjRERThDMTUx
OTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MQkRJRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjAzNDcsNiArMjAzNTEsOCBAQAogCQkJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAogCQkJCUE4Q0ZGMDQ4MEExNTRGMDkwMDBBNDIzNCAv
KiBGaXhlZFRhYmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0QTBBMTU0RjA5MDAwQTQyMzQg
LyogRml4ZWRUYWJsZUxheW91dC5oICovLAorCQkJCTlBNTI4RTgxMTdEN0Y1MkYwMEFBOTUxOCAv
KiBGbG9hdGluZ09iamVjdHMuY3BwICovLAorCQkJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAv
KiBGbG9hdGluZ09iamVjdHMuaCAqLywKIAkJCQlENzJGNkQ3NzE1MzE1OUEzMDAxRUU0NEUgLyog
Rmxvd1RocmVhZENvbnRyb2xsZXIuY3BwICovLAogCQkJCUQ3MkY2RDc4MTUzMTU5QTMwMDFFRTQ0
RSAvKiBGbG93VGhyZWFkQ29udHJvbGxlci5oICovLAogCQkJCTkzNUM0Nzc0MDlBQzREOEQwMEE2
QUFCNCAvKiBHYXBSZWN0cy5oICovLApAQCAtMjEzMzIsNiArMjEzMzgsNyBAQAogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUZFMTE1RkFCMTY3OTg4
Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTRBQURFRTE2RDJDMzc0MDAwMjZGRkMgLyogQWJzdHJhY3RTUUxTdGF0ZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFODRFOUUxMTc2NjhCRjEwMDgxNUI2OCAvKiBSYXN0
ZXJTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFERUYxNkQyQzM3NDAwMDI2RkZDIC8q
IEFic3RyYWN0U1FMU3RhdGVtZW50QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDkxNyw2
ICsyNDkyNCw3IEBACiAJCQkJRkQzMTYwM0QxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2VyTm9k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTA3MDdFNjEyMTlDMDQzMDBEOTBFNTEgLyogQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEyQUEwRUZBQzkwNjAw
OUQwQ0FGIC8qIEFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QTUyOEU4MzE3RDdG
NTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
NkZFMTExMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxNkZFMTEzMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25Db250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RTkxMkFDMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRp
b25MaXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
YXRpbmdPYmplY3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2NhMjk4ZDQ3MjFkMTQzNzExZDkyMjU5ODE0
ZWEyM2EwZTgyMmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0Zsb2F0aW5nT2JqZWN0cy5jcHAKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAw
NyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgorCisjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgeworICAgIHZvaWQq
IHBvaW50ZXJzWzJdOworICAgIExheW91dFJlY3QgcmVjdDsKKyAgICBpbnQgcGFnaW5hdGlvblN0
cnV0OworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDg7Cit9OworCitDT01QSUxFX0FTU0VSVChz
aXplb2YoRmxvYXRpbmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3Qp
LCBGbG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9zbWFsbCk7CisKK3RlbXBsYXRlIDxGbG9hdGlu
Z09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KK2NsYXNzIENvbXB1dGVGbG9hdE9mZnNldEFk
YXB0ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBJbnRl
cnZhbFR5cGU7CisKKyAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiByZW5kZXJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tLCBMYXlvdXRVbml0JiBv
ZmZzZXQpCisgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICwgbV9saW5lVG9wKGxpbmVU
b3ApCisgICAgLCBtX2xpbmVCb3R0b20obGluZUJvdHRvbSkKKyAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICAsIG1fb3V0ZXJtb3N0RmxvYXQoMCkKKyAgICB7CisgICAgfQorCisgICAgaW50IGxv
d1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9CisgICAgaW50IGhpZ2hWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUJvdHRvbTsgfQorICAgIHZvaWQgY29sbGVjdElmTmVlZGVk
KGNvbnN0IEludGVydmFsVHlwZSYpOworCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgLy8g
V2hlbiBjb21wdXRpbmcgdGhlIG9mZnNldCBjYXVzZWQgYnkgdGhlIGZsb2F0cyBvbiBhIGdpdmVu
IGxpbmUsIGlmCisgICAgLy8gdGhlIG91dGVybW9zdCBmbG9hdCBvbiB0aGF0IGxpbmUgaGFzIGEg
c2hhcGUtb3V0c2lkZSwgdGhlIGlubGluZQorICAgIC8vIGNvbnRlbnQgdGhhdCBidXR0cyB1cCBh
Z2FpbnN0IHRoYXQgZmxvYXQgbXVzdCBiZSBwb3NpdGlvbmVkIHVzaW5nCisgICAgLy8gdGhlIGNv
bnRvdXJzIG9mIHRoZSBzaGFwZSwgbm90IHRoZSBtYXJnaW4gYm94IG9mIHRoZSBmbG9hdC4KKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQoKSBjb25zdCB7IHJldHVybiBt
X291dGVybW9zdEZsb2F0OyB9CisjZW5kaWYKKworICAgIExheW91dFVuaXQgZ2V0SGVpZ2h0UmVt
YWluaW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCB1cGRhdGVPZmZzZXRJZk5lZWRl
ZChjb25zdCBGbG9hdGluZ09iamVjdCopOworCisgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVu
ZGVyZXI7CisgICAgaW50IG1fbGluZVRvcDsKKyAgICBpbnQgbV9saW5lQm90dG9tOworICAgIExh
eW91dFVuaXQmIG1fb2Zmc2V0OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBtX291dGVybW9z
dEZsb2F0OworfTsKKworRmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMoY29uc3QgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKKzogbV9wbGFj
ZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQorLCBtX2xlZnRPYmplY3RzQ291bnQoMCkK
KywgbV9yaWdodE9iamVjdHNDb3VudCgwKQorLCBtX2hvcml6b250YWxXcml0aW5nTW9kZShob3Jp
em9udGFsV3JpdGluZ01vZGUpCissIG1fcmVuZGVyZXIocmVuZGVyZXIpCit7Cit9CisKK0Zsb2F0
aW5nT2JqZWN0czo6fkZsb2F0aW5nT2JqZWN0cygpCit7CisgICAgLy8gRklYTUU6IG1fc2V0IHNo
b3VsZCB1c2UgT3duUHRyIGluc3RlYWQuCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2V0KTsKK30K
Kwordm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQb2ludGVycygpCit7Cisg
ICAgLy8gQ2xlYXIgcmVmZXJlbmNlcyB0byBvcmlnaW5hdGluZyBsaW5lcywgc2luY2UgdGhlIGxp
bmVzIGFyZSBiZWluZyBkZWxldGVkCisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBtX3NldC5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBt
X3NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCEoKCppdCkt
Pm9yaWdpbmF0aW5nTGluZSgpKSB8fCAmKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVy
ZXIoKSkgPT0gbV9yZW5kZXJlcik7CisgICAgICAgICgqaXQpLT5zZXRPcmlnaW5hdGluZ0xpbmUo
MCk7CisgICAgfQorfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQoreworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIGRlbGV0ZUFsbFZhbHVlcywgZXhjZXB0IGNsZWFyRmxv
YXRzCisgICAgLy8gbGlrZSB0byBwbGF5IGZhc3QgYW5kIGxvb3NlIHdpdGggb3duZXJzaGlwIG9m
IHRoZXNlIHBvaW50ZXJzLgorICAgIC8vIElmIHdlIG1vdmUgdG8gT3duUHRyIHRoYXQgd2lsbCBm
aXggdGhpcyBvd25lcnNoaXAgb2RkbmVzcy4KKyAgICBtX3NldC5jbGVhcigpOworICAgIG1fcGxh
Y2VkRmxvYXRzVHJlZS5jbGVhcigpOworICAgIG1fbGVmdE9iamVjdHNDb3VudCA9IDA7CisgICAg
bV9yaWdodE9iamVjdHNDb3VudCA9IDA7Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjppbmNy
ZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSB0eXBlKQoreworICAgIGlmICh0
eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpCisgICAgICAgIG1fbGVmdE9iamVjdHND
b3VudCsrOworICAgIGVsc2UKKyAgICAgICAgbV9yaWdodE9iamVjdHNDb3VudCsrOworfQorCit2
b2lkIEZsb2F0aW5nT2JqZWN0czo6ZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6
OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0
KQorICAgICAgICBtX2xlZnRPYmplY3RzQ291bnQtLTsKKyAgICBlbHNlCisgICAgICAgIG1fcmln
aHRPYmplY3RzQ291bnQtLTsKK30KKworRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBGbG9hdGluZ09i
amVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0KQoreworICAgIGlmIChtX2hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnko
KSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFkoKSwgZmxvYXRpbmdPYmplY3QpOwor
ICAgIHJldHVybiBGbG9hdGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJl
Y3QoKS54KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCksIGZsb2F0aW5nT2Jq
ZWN0KTsKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVjdChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+
aXNJblBsYWNlZFRyZWUoKSk7CisKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1
ZSk7CisgICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCisgICAgICAg
IG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGlu
Z09iamVjdCkpOworCisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0lu
UGxhY2VkVHJlZSh0cnVlKTsKKyNlbmRpZgorfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6cmVt
b3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBB
U1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5Q
bGFjZWRUcmVlKCkpOworCisgICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVk
KCkpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9wbGFjZWRGbG9hdHNUcmVlLnJlbW92ZShp
bnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorCisgICAgZmxvYXRpbmdPYmplY3Qt
PnNldElzUGxhY2VkKGZhbHNlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3Qt
PnNldElzSW5QbGFjZWRUcmVlKGZhbHNlKTsKKyNlbmRpZgorfQorCit2b2lkIEZsb2F0aW5nT2Jq
ZWN0czo6YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBpbmNyZWFz
ZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5hZGQoZmxv
YXRpbmdPYmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAg
ICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBGbG9hdGluZ09i
amVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgZGVj
cmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQucmVt
b3ZlKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2Vk
KCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBpZiAoZmxvYXRp
bmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGlu
Z09iamVjdCk7Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRz
VHJlZSgpCit7CisgICAgQVNTRVJUKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgp
KTsKKyAgICBpZiAobV9zZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9wbGFj
ZWRGbG9hdHNUcmVlLmluaXRJZk5lZWRlZChtX3JlbmRlcmVyLT52aWV3KCkuaW50ZXJ2YWxBcmVu
YSgpKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsK
KyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0ID0gKml0OworICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisg
ICAgICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmpl
Y3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICB9Cit9CisKK0xheW91dFVuaXQgRmxvYXRpbmdPYmpl
Y3RzOjpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRP
ZmZzZXRNb2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKK3sKKyNp
ZiAhRU5BQkxFKENTU19TSEFQRVMpCisgICAgVU5VU0VEX1BBUkFNKG9mZnNldE1vZGUpOworI2Vu
ZGlmCisKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IGZpeGVkT2Zmc2V0OworICAgIENvbXB1dGVG
bG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRlcihtX3Jl
bmRlcmVyLCByb3VuZFRvSW50KGxvZ2ljYWxUb3ApLCByb3VuZFRvSW50KGxvZ2ljYWxUb3AgKyBs
b2dpY2FsSGVpZ2h0KSwgb2Zmc2V0KTsKKyAgICBwbGFjZWRGbG9hdHNUcmVlKCkuYWxsT3Zlcmxh
cHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKKworICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCisgICAg
ICAgICpoZWlnaHRSZW1haW5pbmcgPSBhZGFwdGVyLmdldEhlaWdodFJlbWFpbmluZygpOworCisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9z
dEZsb2F0ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgpOworICAgIGlmIChvZmZzZXRNb2RlID09
IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKKyAgICAg
ICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5y
ZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIHNoYXBlT3V0c2lk
ZS0+Y29tcHV0ZVNlZ21lbnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShsb2dpY2FsVG9wLCBvdXRl
cm1vc3RGbG9hdC0+bG9naWNhbFRvcChtX2hvcml6b250YWxXcml0aW5nTW9kZSksIGxvZ2ljYWxI
ZWlnaHQpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNoYXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50
TWFyZ2luQm94RGVsdGEoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJu
IG9mZnNldDsKK30KKworTGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9m
ZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1v
ZGUsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKK3sKKyNpZiAhRU5BQkxFKENTU19TSEFQ
RVMpCisgICAgVU5VU0VEX1BBUkFNKG9mZnNldE1vZGUpOworI2VuZGlmCisKKyAgICBMYXlvdXRV
bml0IG9mZnNldCA9IGZpeGVkT2Zmc2V0OworICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgcm91bmRUb0lu
dChsb2dpY2FsVG9wKSwgcm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIG9m
ZnNldCk7CisgICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRh
cHRlcik7CisKKyAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQorICAgICAgICAqaGVpZ2h0UmVtYWlu
aW5nID0gYWRhcHRlci5nZXRIZWlnaHRSZW1haW5pbmcoKTsKKworI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCA9IGFkYXB0ZXIu
b3V0ZXJtb3N0RmxvYXQoKTsKKyAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9h
dFNoYXBlT2Zmc2V0ICYmIG91dGVybW9zdEZsb2F0KSB7CisgICAgICAgIGlmIChTaGFwZU91dHNp
ZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvdXRlcm1vc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVP
dXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50
c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobG9naWNhbFRvcCwgb3V0ZXJtb3N0RmxvYXQtPmxvZ2lj
YWxUb3AobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAg
ICAgIG9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIAorICAgIHJldHVybiBtaW4oZml4ZWRPZmZz
ZXQsIG9mZnNldCk7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCByYW5nZXNJbnRlcnNlY3QoaW50
IGZsb2F0VG9wLCBpbnQgZmxvYXRCb3R0b20sIGludCBvYmplY3RUb3AsIGludCBvYmplY3RCb3R0
b20pCit7CisgICAgaWYgKG9iamVjdFRvcCA+PSBmbG9hdEJvdHRvbSB8fCBvYmplY3RCb3R0b20g
PCBmbG9hdFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIHRvcCBvZiB0
aGUgb2JqZWN0IG92ZXJsYXBzIHRoZSBmbG9hdAorICAgIGlmIChvYmplY3RUb3AgPj0gZmxvYXRU
b3ApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVGhlIG9iamVjdCBlbmNsb3NlcyB0
aGUgZmxvYXQKKyAgICBpZiAob2JqZWN0VG9wIDwgZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tID4g
ZmxvYXRCb3R0b20pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVGhlIGJvdHRvbSBv
ZiB0aGUgb2JqZWN0IG92ZXJsYXBzIHRoZSBmbG9hdAorICAgIGlmIChvYmplY3RCb3R0b20gPiBv
YmplY3RUb3AgJiYgb2JqZWN0Qm90dG9tID4gZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tIDw9IGZs
b2F0Qm90dG9tKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSk7CisgICAgaWYgKGxvZ2ljYWxSaWdodCA+IG1fb2Zmc2V0KSB7Cisg
ICAgICAgIG1fb2Zmc2V0ID0gbG9naWNhbFJpZ2h0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBDb21w
dXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0Pjo6dXBkYXRl
T2Zmc2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQorewor
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbExlZnQo
bV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgaWYgKGxvZ2ljYWxM
ZWZ0IDwgbV9vZmZzZXQpIHsKKyAgICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsTGVmdDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUg
PEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgoraW5saW5lIHZvaWQgQ29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNvbGxlY3RJZk5lZWRlZChjb25z
dCBJbnRlcnZhbFR5cGUmIGludGVydmFsKQoreworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3Qt
PnR5cGUoKSAhPSBGbG9hdFR5cGVWYWx1ZSB8fCAhcmFuZ2VzSW50ZXJzZWN0KGludGVydmFsLmxv
dygpLCBpbnRlcnZhbC5oaWdoKCksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gQWxsIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUg
c2hvdWxkIGJlIGFscmVhZHkgcGxhY2VkLgorICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSk7CisgICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChmbG9hdGluZ09iamVjdC0+cGl4
ZWxTbmFwcGVkTG9naWNhbFRvcChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSwgZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSk7CisK
KyAgICBib29sIGZsb2F0SXNOZXdFeHRyZW1lID0gdXBkYXRlT2Zmc2V0SWZOZWVkZWQoZmxvYXRp
bmdPYmplY3QpOworICAgIGlmIChmbG9hdElzTmV3RXh0cmVtZSkKKyAgICAgICAgbV9vdXRlcm1v
c3RGbG9hdCA9IGZsb2F0aW5nT2JqZWN0OworfQorCit0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6
OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitMYXlvdXRVbml0IENvbXB1dGVGbG9hdE9mZnNldEFkYXB0
ZXI8RmxvYXRUeXBlVmFsdWU+OjpnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX291dGVybW9zdEZsb2F0ID8gbV9vdXRlcm1vc3RGbG9hdC0+bG9naWNhbEJvdHRvbSht
X3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAtIG1fbGluZVRvcCA6IExheW91
dFVuaXQoMSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVzZSBoZWxwZXJzIGFyZSBvbmx5
IHVzZWQgYnkgdGhlIFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorU3Ry
aW5nIFZhbHVlVG9TdHJpbmc8aW50Pjo6c3RyaW5nKGNvbnN0IGludCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOworfQorCitTdHJpbmcgVmFsdWVUb1N0cmluZzxG
bG9hdGluZ09iamVjdCo+OjpzdHJpbmcoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0KQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVpeCVpICVpeCVpKSIsIGZs
b2F0aW5nT2JqZWN0LCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueCgpLnRvSW50KCksIGZs
b2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55KCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZy
YW1lUmVjdCgpLm1heFgoKS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4
WSgpLnRvSW50KCkpOworfQorI2VuZGlmCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNDY2
OWY3MzY5NTY4OGQ3NzU0ZWE2N2NiNDQyOTZkMTE3ZTQ2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKQEAgLTAsMCArMSwyNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29t
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBGbG9hdGluZ09iamVjdHNfaAorI2RlZmluZSBGbG9hdGluZ09iamVjdHNf
aAorCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiUm9vdElubGluZUJv
eC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyQm94OworCitlbnVtIFNoYXBlT3V0
c2lkZUZsb2F0T2Zmc2V0TW9kZSB7IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIFNoYXBl
T3V0c2lkZUZsb2F0TWFyZ2luQm94T2Zmc2V0IH07CisKK2NsYXNzIEZsb2F0aW5nT2JqZWN0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIE5vdGUgdGhhdCBUeXBlIHVzZXMgYml0cyBzbyB5
b3UgY2FuIHVzZSBGbG9hdExlZnRSaWdodCBhcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGJvdGggbGVm
dCBhbmQgcmlnaHQuCisgICAgZW51bSBUeXBlIHsgRmxvYXRMZWZ0ID0gMSwgRmxvYXRSaWdodCA9
IDIsIEZsb2F0TGVmdFJpZ2h0ID0gMyB9OworCisgICAgRmxvYXRpbmdPYmplY3QoRUZsb2F0IHR5
cGUpCisgICAgOiBtX3JlbmRlcmVyKDApCisgICAgLCBtX29yaWdpbmF0aW5nTGluZSgwKQorICAg
ICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAs
IG1faXNEZXNjZW5kYW50KGZhbHNlKQorICAgICwgbV9pc1BsYWNlZChmYWxzZSkKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCisgICAgeworICAg
ICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gTGVmdEZs
b2F0KQorICAgICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OworICAgICAgICBlbHNlIGlmICh0
eXBlID09IFJpZ2h0RmxvYXQpCisgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFJpZ2h0OworICAg
IH0KKworICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0UmVjdCYgZnJh
bWVSZWN0KQorICAgIDogbV9yZW5kZXJlcigwKQorICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkK
KyAgICAsIG1fZnJhbWVSZWN0KGZyYW1lUmVjdCkKKyAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDAp
CisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQorICAgICwgbV9pc1BsYWNlZCh0cnVlKQorI2lmbmRlZiBOREVC
VUcKKyAgICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgfQor
CisgICAgRmxvYXRpbmdPYmplY3QqIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBjbG9uZU9iamVjdCA9IG5ldyBGbG9hdGluZ09iamVjdCh0eXBlKCksIG1fZnJh
bWVSZWN0KTsKKyAgICAgICAgY2xvbmVPYmplY3QtPm1fcmVuZGVyZXIgPSBtX3JlbmRlcmVyOwor
ICAgICAgICBjbG9uZU9iamVjdC0+bV9vcmlnaW5hdGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGlu
ZTsKKyAgICAgICAgY2xvbmVPYmplY3QtPm1fcGFnaW5hdGlvblN0cnV0ID0gbV9wYWdpbmF0aW9u
U3RydXQ7CisgICAgICAgIGNsb25lT2JqZWN0LT5tX3Nob3VsZFBhaW50ID0gbV9zaG91bGRQYWlu
dDsKKyAgICAgICAgY2xvbmVPYmplY3QtPm1faXNEZXNjZW5kYW50ID0gbV9pc0Rlc2NlbmRhbnQ7
CisgICAgICAgIGNsb25lT2JqZWN0LT5tX2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKKyAgICAgICAg
cmV0dXJuIGNsb25lT2JqZWN0OworICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICBSZW5kZXJCb3gqIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorCisgICAgYm9vbCBpc1BsYWNlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNQbGFjZWQ7IH0KKyAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxh
Y2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9CisKKyAgICBMYXlvdXRVbml0IHgo
KSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQor
ICAgIExheW91dFVuaXQgbWF4WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3QubWF4WCgpOyB9CisgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBBU1NFUlQo
aXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IG1h
eFkoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFko
KTsgfQorICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53
aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
UmVjdC5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBBU1NFUlQo
IWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZ
KExheW91dFVuaXQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5z
ZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IEFTU0VSVCgh
aXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZv
aWQgc2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUo
KSk7IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBjb25zdCBMYXlvdXRS
ZWN0JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJh
bWVSZWN0OyB9CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVS
ZWN0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0
OyB9CisKKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0
aW9uU3RydXQ7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpIHsgbV9w
YWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsgfQorCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNJ
blBsYWNlZFRyZWUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9CisgICAgdm9p
ZCBzZXRJc0luUGxhY2VkVHJlZShib29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1
ZTsgfQorI2VuZGlmCisKKyAgICBib29sIHNob3VsZFBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRQYWludDsgfQorICAgIHZvaWQgc2V0U2hvdWxkUGFpbnQoYm9vbCBzaG91bGRQYWludCkg
eyBtX3Nob3VsZFBhaW50ID0gc2hvdWxkUGFpbnQ7IH0KKyAgICBib29sIGlzRGVzY2VuZGFudCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNEZXNjZW5kYW50OyB9CisgICAgdm9pZCBzZXRJc0Rlc2NlbmRh
bnQoYm9vbCBpc0Rlc2NlbmRhbnQpIHsgbV9pc0Rlc2NlbmRhbnQgPSBpc0Rlc2NlbmRhbnQ7IH0K
KworICAgIC8vIEZJWE1FOiBDYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGRhbmdlcm91cyBh
bmQgc2hvdWxkIGJlIHdoaXRlbGlzdGVkIGV4cGxpY2l0bHkgb3IgcmVtb3ZlZC4KKyAgICB2b2lk
IHNldFJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVy
OyB9CisgICAgUm9vdElubGluZUJveCogb3JpZ2luYXRpbmdMaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5hdGluZ0xpbmU7IH0KKyAgICB2b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5s
aW5lQm94KiBsaW5lKSB7IG1fb3JpZ2luYXRpbmdMaW5lID0gbGluZTsgfQorCisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geSgpIDogeCgpOyB9CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WSgpIDogbWF4WCgpOyB9CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHgoKSA6IHkoKTsgfQorICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WCgpIDogbWF4WSgpOyB9CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29u
c3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyB3aWR0aCgpIDogaGVpZ2h0KCk7
IH0KKworICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVS
ZWN0KCkucGl4ZWxTbmFwcGVkWSgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9Cisg
ICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3Qo
KS5waXhlbFNuYXBwZWRNYXhZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0K
KyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnQoYm9vbCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3Qo
KS5waXhlbFNuYXBwZWRYKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCk7IH0KKyAgICBp
bnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
IGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4
ZWxTbmFwcGVkTWF4WCgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9CisKKyAg
ICB2b2lkIHNldExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQorICAgICAgICAgICAgc2V0WShsb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc2V0WChsb2dpY2FsVG9wKTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAg
IHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0
WChsb2dpY2FsTGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFkobG9naWNhbExl
ZnQpOworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0SGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsSGVpZ2h0
KTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgeworICAgICAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOworICAgIFJvb3RJbmxp
bmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOworICAgIExheW91dFJlY3QgbV9mcmFtZVJlY3Q7Cisg
ICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBMYXlv
dXRVbml0LCBzaW5jZSBpdCdzIGEgdmVydGljYWwgb2Zmc2V0LgorCisgICAgdW5zaWduZWQgbV90
eXBlIDogMjsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQorICAgIHVuc2lnbmVkIG1f
c2hvdWxkUGFpbnQgOiAxOworICAgIHVuc2lnbmVkIG1faXNEZXNjZW5kYW50IDogMTsKKyAgICB1
bnNpZ25lZCBtX2lzUGxhY2VkIDogMTsKKyNpZm5kZWYgTkRFQlVHCisgICAgdW5zaWduZWQgbV9p
c0luUGxhY2VkVHJlZSA6IDE7CisjZW5kaWYKK307CisKK3N0cnVjdCBGbG9hdGluZ09iamVjdEhh
c2hGdW5jdGlvbnMgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5nT2JqZWN0KiBr
ZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleS0+cmVu
ZGVyZXIoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgRmxv
YXRpbmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPnJlbmRlcmVyKCkgPT0gYi0+cmVuZGVyZXIoKTsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CitzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvciB7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goUmVuZGVyQm94KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJl
bmRlckJveCo+OjpIYXNoOjpoYXNoKGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9h
dGluZ09iamVjdCogYSwgUmVuZGVyQm94KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7
IH0KK307Cit0eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdP
YmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKK3R5cGVkZWYgRmxvYXRpbmdP
YmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Cit0eXBl
ZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVy
dmFsOwordHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0
aW5nT2JqZWN0VHJlZTsKK3R5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8
RmxvYXRpbmdPYmplY3RJbnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7CisKKworY2xhc3Mg
RmxvYXRpbmdPYmplY3RzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVj
dHMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGbG9hdGluZ09iamVj
dHMoY29uc3QgUmVuZGVyQmxvY2sqLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSk7CisgICAg
fkZsb2F0aW5nT2JqZWN0cygpOworCisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgYWRkKEZs
b2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2
b2lkIGFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgIHZvaWQgcmVtb3ZlUGxh
Y2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGlu
Z01vZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KKwor
ICAgIGJvb2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291
bnQgPiAwOyB9CisgICAgYm9vbCBoYXNSaWdodE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Jp
Z2h0T2JqZWN0c0NvdW50ID4gMDsgfQorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQo
KSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorICAgIHZvaWQgY2xlYXJMaW5lQm94VHJlZVBvaW50
ZXJzKCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVk
T2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNl
dCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9k
ZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFp
bmluZyA9IDApOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7
CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAg
ICAgICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7CisgICAgICAgIHJldHVybiBtX3BsYWNl
ZEZsb2F0c1RyZWU7CisgICAgfQorICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRp
bmdPYmplY3Q6OlR5cGUpOworICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdP
YmplY3Q6OlR5cGUpOworICAgIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9h
dGluZ09iamVjdChGbG9hdGluZ09iamVjdCopOworCisgICAgRmxvYXRpbmdPYmplY3RTZXQgbV9z
ZXQ7CisgICAgRmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsKKyAgICB1bnNp
Z25lZCBtX2xlZnRPYmplY3RzQ291bnQ7CisgICAgdW5zaWduZWQgbV9yaWdodE9iamVjdHNDb3Vu
dDsKKyAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOworICAgIGNvbnN0IFJlbmRlckJs
b2NrKiBtX3JlbmRlcmVyOworfTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVzZSBzdHJ1
Y3R1cmVzIGFyZSB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2Vz
LgordGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8aW50PiB7CisgICAgc3RhdGljIFN0
cmluZyBzdHJpbmcoY29uc3QgaW50IHZhbHVlKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1
ZVRvU3RyaW5nPEZsb2F0aW5nT2JqZWN0Kj4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNv
bnN0IEZsb2F0aW5nT2JqZWN0Kik7Cit9OworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEZsb2F0aW5nT2JqZWN0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAppbmRleCAzZWVkZGFlY2RmMThhM2QzODM3ZGRmZDQ1ZDA2YTVjNzI5
OTlkMzRkLi45YTEyNGNkMjE0Y2EwNTBiNWY4MTNiYWU3N2NkZjhhOTgzMGZhZGUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTg3LDEzICs4Nyw2IEBAIHN0
cnVjdCBTYW1lU2l6ZUFzUmVuZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVyQm94IHsKIAogQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJsb2NrKSA9PSBzaXplb2YoU2FtZVNpemVBc1JlbmRlckJs
b2NrKSwgUmVuZGVyQmxvY2tfc2hvdWxkX3N0YXlfc21hbGwpOwogCi1zdHJ1Y3QgU2FtZVNpemVB
c0Zsb2F0aW5nT2JqZWN0IHsKLSAgICB2b2lkKiBwb2ludGVyc1syXTsKLSAgICBMYXlvdXRSZWN0
IHJlY3Q7Ci0gICAgaW50IHBhZ2luYXRpb25TdHJ1dDsKLSAgICB1aW50MzJfdCBiaXRmaWVsZHMg
OiA4OwotfTsKLQogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJsb2NrOjpNYXJnaW5WYWx1
ZXMpID09IHNpemVvZihMYXlvdXRVbml0WzRdKSwgTWFyZ2luVmFsdWVzX3Nob3VsZF9zdGF5X3Nt
YWxsKTsKIAogc3RydWN0IFNhbWVTaXplQXNNYXJnaW5JbmZvIHsKQEAgLTIwMyw3ICsxOTYsNiBA
QCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soQ29udGFpbmVyTm9kZSogbm9kZSkKICAgICAsIG1f
aGFzQm9yZGVyT3JQYWRkaW5nTG9naWNhbFdpZHRoQ2hhbmdlZChmYWxzZSkKIHsKICAgICBzZXRD
aGlsZHJlbklubGluZSh0cnVlKTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KSA9PSBzaXplb2YoU2FtZVNpemVBc0Zsb2F0aW5nT2JqZWN0KSwg
RmxvYXRpbmdPYmplY3Rfc2hvdWxkX3N0YXlfc21hbGwpOwogICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihSZW5kZXJCbG9jazo6TWFyZ2luSW5mbykgPT0gc2l6ZW9mKFNhbWVTaXplQXNNYXJnaW5J
bmZvKSwgTWFyZ2luSW5mb19zaG91bGRfc3RheV9zbWFsbCk7CiB9CiAKQEAgLTQwOTYsNyArNDA4
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpCiAgICAgbV9m
bG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CiB9CiAKLVJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKK0Zsb2F0
aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBv
KQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCkBAIC00NDYxLDcwICs0NDUzLDYg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNGcm9tKFJl
bmRlckJveCogcGFyZW50KQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBib29sIHJhbmdlc0lu
dGVyc2VjdChpbnQgZmxvYXRUb3AsIGludCBmbG9hdEJvdHRvbSwgaW50IG9iamVjdFRvcCwgaW50
IG9iamVjdEJvdHRvbSkKLXsKLSAgICBpZiAob2JqZWN0VG9wID49IGZsb2F0Qm90dG9tIHx8IG9i
amVjdEJvdHRvbSA8IGZsb2F0VG9wKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBU
aGUgdG9wIG9mIHRoZSBvYmplY3Qgb3ZlcmxhcHMgdGhlIGZsb2F0Ci0gICAgaWYgKG9iamVjdFRv
cCA+PSBmbG9hdFRvcCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGUgb2JqZWN0
IGVuY2xvc2VzIHRoZSBmbG9hdAotICAgIGlmIChvYmplY3RUb3AgPCBmbG9hdFRvcCAmJiBvYmpl
Y3RCb3R0b20gPiBmbG9hdEJvdHRvbSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBU
aGUgYm90dG9tIG9mIHRoZSBvYmplY3Qgb3ZlcmxhcHMgdGhlIGZsb2F0Ci0gICAgaWYgKG9iamVj
dEJvdHRvbSA+IG9iamVjdFRvcCAmJiBvYmplY3RCb3R0b20gPiBmbG9hdFRvcCAmJiBvYmplY3RC
b3R0b20gPD0gZmxvYXRCb3R0b20pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBSZW5kZXJCbG9jazo6Q29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcjxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09i
amVjdCkKLXsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IGZsb2F0aW5nT2JqZWN0LT5s
b2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAg
aWYgKGxvZ2ljYWxSaWdodCA+IG1fb2Zmc2V0KSB7Ci0gICAgICAgIG1fb2Zmc2V0ID0gbG9naWNh
bFJpZ2h0OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBSZW5kZXJCbG9jazo6Q29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlcjxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+Ojp1cGRh
dGVPZmZzZXRJZk5lZWRlZChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVm
dChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICBpZiAobG9naWNh
bExlZnQgPCBtX29mZnNldCkgewotICAgICAgICBtX29mZnNldCA9IGxvZ2ljYWxMZWZ0OwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0
ZSA8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgotaW5s
aW5lIHZvaWQgUmVuZGVyQmxvY2s6OkNvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRUeXBl
VmFsdWU+Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkKLXsK
LSAgICBjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpbnRlcnZhbC5kYXRh
KCk7Ci0gICAgaWYgKGZsb2F0aW5nT2JqZWN0LT50eXBlKCkgIT0gRmxvYXRUeXBlVmFsdWUgfHwg
IXJhbmdlc0ludGVyc2VjdChpbnRlcnZhbC5sb3coKSwgaW50ZXJ2YWwuaGlnaCgpLCBtX2xpbmVU
b3AsIG1fbGluZUJvdHRvbSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFsbCB0aGUgb2Jq
ZWN0cyByZXR1cm5lZCBmcm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNlZC4KLSAg
ICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpOwotICAgIEFTU0VSVChyYW5nZXNJ
bnRlcnNlY3QoZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxUb3AobV9yZW5kZXJl
ci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGZsb2F0aW5nT2JqZWN0LT5waXhlbFNuYXBw
ZWRMb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBt
X2xpbmVUb3AsIG1fbGluZUJvdHRvbSkpOwotCi0gICAgYm9vbCBmbG9hdElzTmV3RXh0cmVtZSA9
IHVwZGF0ZU9mZnNldElmTmVlZGVkKGZsb2F0aW5nT2JqZWN0KTsKLSAgICBpZiAoZmxvYXRJc05l
d0V4dHJlbWUpCi0gICAgICAgIG1fb3V0ZXJtb3N0RmxvYXQgPSBmbG9hdGluZ09iamVjdDsKLX0K
LQotdGVtcGxhdGUgPFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVW
YWx1ZT4KLUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OkNvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRUeXBlVmFsdWU+OjpnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdAotewotICAgIHJldHVy
biBtX291dGVybW9zdEZsb2F0ID8gbV9vdXRlcm1vc3RGbG9hdC0+bG9naWNhbEJvdHRvbShtX3Jl
bmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAtIG1fbGluZVRvcCA6IExheW91dFVu
aXQoMSk7Ci19Ci0KIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnRleHRJbmRlbnRPZmZzZXQoKSBj
b25zdAogewogICAgIExheW91dFVuaXQgY3cgPSAwOwpAQCAtODE3NiwxODIgKzgxMDQsMTEgQEAg
Y29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogICAgIHJldHVybiAi
UmVuZGVyQmxvY2siOwogfQogCi1pbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
RmxvYXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgYm9vbCBob3Jpem9u
dGFsV3JpdGluZ01vZGUpCi0gICAgOiBtX3BsYWNlZEZsb2F0c1RyZWUoVW5pbml0aWFsaXplZFRy
ZWUpCi0gICAgLCBtX2xlZnRPYmplY3RzQ291bnQoMCkKLSAgICAsIG1fcmlnaHRPYmplY3RzQ291
bnQoMCkKLSAgICAsIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKGhvcml6b250YWxXcml0aW5nTW9k
ZSkKLSAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCi17Ci19Ci0KLVJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdHM6On5GbG9hdGluZ09iamVjdHMoKQotewotICAgIC8vIEZJWE1FOiBtX3NldCBz
aG91bGQgdXNlIE93blB0ciBpbnN0ZWFkLgotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3NldCk7Ci19
Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94VHJlZVBv
aW50ZXJzKCkKLXsKLSAgICAvLyBDbGVhciByZWZlcmVuY2VzIHRvIG9yaWdpbmF0aW5nIGxpbmVz
LCBzaW5jZSB0aGUgbGluZXMgYXJlIGJlaW5nIGRlbGV0ZWQKLSAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBB
U1NFUlQoISgoKml0KS0+b3JpZ2luYXRpbmdMaW5lKCkpIHx8ICYoKCppdCktPm9yaWdpbmF0aW5n
TGluZSgpLT5yZW5kZXJlcigpKSA9PSBtX3JlbmRlcmVyKTsKLSAgICAgICAgKCppdCktPnNldE9y
aWdpbmF0aW5nTGluZSgwKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6OmNyZWF0ZUZs
b2F0aW5nT2JqZWN0cygpCiB7CiAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcg
RmxvYXRpbmdPYmplY3RzKHRoaXMsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKIH0KIAot
aW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQotewotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIGRlbGV0ZUFsbFZhbHVlcywgZXhjZXB0IFJlbmRl
ckJsb2NrOjpjbGVhckZsb2F0cwotICAgIC8vIGxpa2UgdG8gcGxheSBmYXN0IGFuZCBsb29zZSB3
aXRoIG93bmVyc2hpcCBvZiB0aGVzZSBwb2ludGVycy4KLSAgICAvLyBJZiB3ZSBtb3ZlIHRvIE93
blB0ciB0aGF0IHdpbGwgZml4IHRoaXMgb3duZXJzaGlwIG9kZG5lc3MuCi0gICAgbV9zZXQuY2xl
YXIoKTsKLSAgICBtX3BsYWNlZEZsb2F0c1RyZWUuY2xlYXIoKTsKLSAgICBtX2xlZnRPYmplY3Rz
Q291bnQgPSAwOwotICAgIG1fcmlnaHRPYmplY3RzQ291bnQgPSAwOwotfQotCi1pbmxpbmUgdm9p
ZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9iamVjdHNDb3VudChGbG9h
dGluZ09iamVjdDo6VHlwZSB0eXBlKQoteyAgICAKLSAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09i
amVjdDo6RmxvYXRMZWZ0KQotICAgICAgICBtX2xlZnRPYmplY3RzQ291bnQrKzsKLSAgICBlbHNl
IAotICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50Kys7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2Jq
ZWN0OjpUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0
TGVmdCkKLSAgICAgICAgbV9sZWZ0T2JqZWN0c0NvdW50LS07Ci0gICAgZWxzZQotICAgICAgICBt
X3JpZ2h0T2JqZWN0c0NvdW50LS07Ci19Ci0KLWlubGluZSBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RJbnRlcnZhbCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZs
b2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKLXsKLSAgICBpZiAo
bV9ob3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueSgpLCBmbG9h
dGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WSgpLCBmbG9hdGluZ09iamVjdCk7Ci0gICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5m
cmFtZVJlY3QoKS54KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCksIGZsb2F0
aW5nT2JqZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGRQ
bGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIEFTU0VS
VCghZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOwotCi0gICAgZmxvYXRpbmdPYmpl
Y3QtPnNldElzUGxhY2VkKHRydWUpOwotICAgIGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0
aWFsaXplZCgpKQotICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9yRmxv
YXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBmbG9h
dGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUodHJ1ZSk7ICAgICAgCi0jZW5kaWYKLX0KLQot
dm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmVQbGFjZWRPYmplY3QoRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIEFTU0VSVChmbG9hdGluZ09iamVj
dC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7Ci0KLSAg
ICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBib29s
IHJlbW92ZWQgPSBtX3BsYWNlZEZsb2F0c1RyZWUucmVtb3ZlKGludGVydmFsRm9yRmxvYXRpbmdP
YmplY3QoZmxvYXRpbmdPYmplY3QpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCBy
ZW1vdmVkKTsKLSAgICB9Ci0gICAgCi0gICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKGZh
bHNlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRU
cmVlKGZhbHNlKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3RzOjphZGQoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIGlu
Y3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqZWN0LT50eXBlKCkpOwotICAgIG1fc2V0LmFk
ZChmbG9hdGluZ09iamVjdCk7Ci0gICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQot
ICAgICAgICBhZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwotfQotCi1pbmxpbmUgdm9p
ZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0KQotewotICAgIGRlY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqZWN0
LT50eXBlKCkpOwotICAgIG1fc2V0LnJlbW92ZShmbG9hdGluZ09iamVjdCk7Ci0gICAgQVNTRVJU
KGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpIHx8ICFmbG9hdGluZ09iamVjdC0+aXNJblBsYWNl
ZFRyZWUoKSk7Ci0gICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQotICAgICAgICBy
ZW1vdmVQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwotfQotCi12b2lkIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCkKLXsKLSAgICBBU1NF
UlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpOwotICAgIGlmIChtX3NldC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5pdElm
TmVlZGVkKG1fcmVuZGVyZXItPnZpZXcoKS5pbnRlcnZhbEFyZW5hKCkpOwotICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOwotICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7Ci0gICAg
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKLSAgICAgICAgICAgIG1fcGxhY2Vk
RmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkp
OwotICAgIH0KLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjps
b2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRN
b2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKLXsKLSNpZiAhRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldE1vZGUpOwotI2VuZGlmCi0K
LSAgICBMYXlvdXRVbml0IG9mZnNldCA9IGZpeGVkT2Zmc2V0OwotICAgIENvbXB1dGVGbG9hdE9m
ZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRlcihtX3JlbmRlcmVy
LCByb3VuZFRvSW50KGxvZ2ljYWxUb3ApLCByb3VuZFRvSW50KGxvZ2ljYWxUb3AgKyBsb2dpY2Fs
SGVpZ2h0KSwgb2Zmc2V0KTsKLSAgICBwbGFjZWRGbG9hdHNUcmVlKCkuYWxsT3ZlcmxhcHNXaXRo
QWRhcHRlcihhZGFwdGVyKTsKLQotICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCi0gICAgICAgICpo
ZWlnaHRSZW1haW5pbmcgPSBhZGFwdGVyLmdldEhlaWdodFJlbWFpbmluZygpOwotCi0jaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0
ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgpOwotICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBl
T3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKLSAgICAgICAgaWYg
KFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJl
cigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKLSAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29t
cHV0ZVNlZ21lbnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShsb2dpY2FsVG9wLCBvdXRlcm1vc3RG
bG9hdC0+bG9naWNhbFRvcChtX2hvcml6b250YWxXcml0aW5nTW9kZSksIGxvZ2ljYWxIZWlnaHQp
OwotICAgICAgICAgICAgb2Zmc2V0ICs9IHNoYXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50TWFyZ2lu
Qm94RGVsdGEoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG9mZnNl
dDsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2Fs
UmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBv
ZmZzZXRNb2RlLCBMYXlvdXRVbml0ICpoZWlnaHRSZW1haW5pbmcpCi17Ci0jaWYgIUVOQUJMRShD
U1NfU0hBUEVTKQotICAgIFVOVVNFRF9QQVJBTShvZmZzZXRNb2RlKTsKLSNlbmRpZgotCi0gICAg
TGF5b3V0VW5pdCBvZmZzZXQgPSBmaXhlZE9mZnNldDsKLSAgICBDb21wdXRlRmxvYXRPZmZzZXRB
ZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIHJv
dW5kVG9JbnQobG9naWNhbFRvcCksIHJvdW5kVG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxIZWln
aHQpLCBvZmZzZXQpOwotICAgIHBsYWNlZEZsb2F0c1RyZWUoKS5hbGxPdmVybGFwc1dpdGhBZGFw
dGVyKGFkYXB0ZXIpOwotCi0gICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAgKmhlaWdo
dFJlbWFpbmluZyA9IGFkYXB0ZXIuZ2V0SGVpZ2h0UmVtYWluaW5nKCk7Ci0KLSNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLSAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBh
ZGFwdGVyLm91dGVybW9zdEZsb2F0KCk7Ci0gICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRz
aWRlRmxvYXRTaGFwZU9mZnNldCAmJiBvdXRlcm1vc3RGbG9hdCkgewotICAgICAgICBpZiAoU2hh
cGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCkt
PnNoYXBlT3V0c2lkZUluZm8oKSkgewotICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRl
U2VnbWVudHNGb3JDb250YWluaW5nQmxvY2tMaW5lKGxvZ2ljYWxUb3AsIG91dGVybW9zdEZsb2F0
LT5sb2dpY2FsVG9wKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKSwgbG9naWNhbEhlaWdodCk7Ci0g
ICAgICAgICAgICBvZmZzZXQgKz0gc2hhcGVPdXRzaWRlLT5sZWZ0U2VnbWVudE1hcmdpbkJveERl
bHRhKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBtaW4oZml4ZWRP
ZmZzZXQsIG9mZnNldCk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgog
c3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uKQogewpAQCAtODQ5OSwxNyArODI1Niw2IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5lQm94KiBtYXJrZWRCb3gxLCBj
b25zdCBjaGFyKiBtCiAgICAgICAgIHJvb3QtPnNob3dMaW5lVHJlZUFuZE1hcmsobWFya2VkQm94
MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJrZWRMYWJlbDIsIG9iaiwgMSk7CiB9CiAK
LS8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZv
ciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi1TdHJpbmcgVmFsdWVUb1N0cmluZzxpbnQ+OjpzdHJpbmco
Y29uc3QgaW50IHZhbHVlKQotewotICAgIHJldHVybiBTdHJpbmc6Om51bWJlcih2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBWYWx1ZVRvU3RyaW5nPFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCo+Ojpz
dHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglaXglaSAlaXglaSkiLCBmbG9hdGlu
Z09iamVjdCwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLngoKS50b0ludCgpLCBmbG9hdGlu
Z09iamVjdC0+ZnJhbWVSZWN0KCkueSgpLnRvSW50KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJl
Y3QoKS5tYXhYKCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFkoKS50
b0ludCgpKTsKLX0KLQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggMDU5NjgwMzQ2MzY3MWNmZjhlMjFlYmMy
MzhjOTczYzhjNjM2NDAwMS4uYzVmNzk1NTZjODAxN2FhMDkwNWI4ZmZmMWIxMjFkZTMxMGVhNzFm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTI0LDYgKzI0LDcg
QEAKICNkZWZpbmUgUmVuZGVyQmxvY2tfaAogCiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgorI2lu
Y2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCiAjaW5jbHVk
ZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBAIC02MDgsOCAr
NjA5LDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja0ZvclBhZ2luYXRpb25M
b2dpY2FsSGVpZ2h0Q2hhbmdlKExheW91dFVuaXQmIHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sJiBw
YWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGJvb2wmIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVp
Z2h0KTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSB7
IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIFNoYXBlT3V0c2lkZUZsb2F0TWFyZ2luQm94
T2Zmc2V0IH07Ci0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEZsb2F0T2Zmc2V0Rm9yTGlu
ZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVu
aXQqIGhlaWdodFJlbWFpbmluZywgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNp
ZGVGbG9hdE9mZnNldE1vZGUpIGNvbnN0OwogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGbG9h
dE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zm
c2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGFk
anVzdExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBvZmZzZXRGcm9tRmxvYXRz
LCBib29sIGFwcGx5VGV4dEluZGVudCkgY29uc3Q7CkBAIC02ODIsMTUxICs2ODEsNiBAQCBwcml2
YXRlOgogICAgICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAgICAgfTsKIAotICAgIGNsYXNzIEZs
b2F0aW5nT2JqZWN0IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmpl
Y3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIE5v
dGUgdGhhdCBUeXBlIHVzZXMgYml0cyBzbyB5b3UgY2FuIHVzZSBGbG9hdExlZnRSaWdodCBhcyBh
IG1hc2sgdG8gcXVlcnkgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQuCi0gICAgICAgIGVudW0gVHlw
ZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0UmlnaHQgPSAyLCBGbG9hdExlZnRSaWdodCA9IDMgfTsK
LQotICAgICAgICBGbG9hdGluZ09iamVjdChFRmxvYXQgdHlwZSkKLSAgICAgICAgICAgIDogbV9y
ZW5kZXJlcigwKQotICAgICAgICAgICAgLCBtX29yaWdpbmF0aW5nTGluZSgwKQotICAgICAgICAg
ICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRy
dWUpCi0gICAgICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQotICAgICAgICAgICAgLCBt
X2lzUGxhY2VkKGZhbHNlKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICwgbV9pc0luUGxh
Y2VkVHJlZShmYWxzZSkKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodHlw
ZSAhPSBOb0Zsb2F0KTsKLSAgICAgICAgICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKLSAgICAg
ICAgICAgICAgICBtX3R5cGUgPSBGbG9hdExlZnQ7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBl
ID09IFJpZ2h0RmxvYXQpCi0gICAgICAgICAgICAgICAgbV90eXBlID0gRmxvYXRSaWdodDsgIAot
ICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBlLCBjb25zdCBMYXlv
dXRSZWN0JiBmcmFtZVJlY3QpCi0gICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKLSAgICAgICAg
ICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKLSAgICAgICAgICAgICwgbV9mcmFtZVJlY3QoZnJh
bWVSZWN0KQotICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQotICAgICAgICAgICAg
LCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9zaG91bGRQYWludCh0cnVlKQotICAgICAg
ICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKLSAgICAgICAgICAgICwgbV9pc1BsYWNlZCh0
cnVlKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxz
ZSkKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdGluZ09iamVj
dCogY2xvbmUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
Y2xvbmVPYmplY3QgPSBuZXcgRmxvYXRpbmdPYmplY3QodHlwZSgpLCBtX2ZyYW1lUmVjdCk7Ci0g
ICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9yZW5kZXJlciA9IG1fcmVuZGVyZXI7Ci0gICAgICAg
ICAgICBjbG9uZU9iamVjdC0+bV9vcmlnaW5hdGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGluZTsK
LSAgICAgICAgICAgIGNsb25lT2JqZWN0LT5tX3BhZ2luYXRpb25TdHJ1dCA9IG1fcGFnaW5hdGlv
blN0cnV0OwotICAgICAgICAgICAgY2xvbmVPYmplY3QtPm1fc2hvdWxkUGFpbnQgPSBtX3Nob3Vs
ZFBhaW50OwotICAgICAgICAgICAgY2xvbmVPYmplY3QtPm1faXNEZXNjZW5kYW50ID0gbV9pc0Rl
c2NlbmRhbnQ7Ci0gICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9pc1BsYWNlZCA9IG1faXNQbGFj
ZWQ7Ci0gICAgICAgICAgICByZXR1cm4gY2xvbmVPYmplY3Q7Ci0gICAgICAgIH0KLQotICAgICAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9
Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVy
OyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGlzUGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1BsYWNlZDsgfQotICAgICAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkg
eyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9Ci0KLSAgICAgICAgTGF5b3V0VW5pdCB4KCkgY29uc3Qg
eyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC54KCk7IH0KLSAgICAgICAg
TGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2Zy
YW1lUmVjdC5tYXhYKCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBBU1NFUlQo
aXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KLSAgICAgICAgTGF5b3V0VW5p
dCBtYXhZKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5t
YXhZKCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVSZWN0LndpZHRoKCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0WChMYXlvdXRV
bml0IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsg
fQotICAgICAgICB2b2lkIHNldFkoTGF5b3V0VW5pdCB5KSB7IEFTU0VSVCghaXNJblBsYWNlZFRy
ZWUoKSk7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KLSAgICAgICAgdm9pZCBzZXRXaWR0aChMYXlv
dXRVbml0IHdpZHRoKSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNl
dFdpZHRoKHdpZHRoKTsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0IGhlaWdo
dCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVp
Z2h0KTsgfQotCi0gICAgICAgIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsg
QVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBz
ZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0KSB7IEFTU0VSVCghaXNJblBs
YWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9Ci0KLSAgICAgICAgaW50IHBh
Z2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnaW5hdGlvblN0cnV0OyB9Ci0gICAg
ICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkgeyBtX3BhZ2luYXRpb25TdHJ1
dCA9IHN0cnV0OyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGJvb2wgaXNJblBsYWNlZFRy
ZWUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9Ci0gICAgICAgIHZvaWQgc2V0
SXNJblBsYWNlZFRyZWUoYm9vbCB2YWx1ZSkgeyBtX2lzSW5QbGFjZWRUcmVlID0gdmFsdWU7IH0K
LSNlbmRpZgotCi0gICAgICAgIGJvb2wgc2hvdWxkUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFBhaW50OyB9Ci0gICAgICAgIHZvaWQgc2V0U2hvdWxkUGFpbnQoYm9vbCBzaG91bGRQYWlu
dCkgeyBtX3Nob3VsZFBhaW50ID0gc2hvdWxkUGFpbnQ7IH0KLSAgICAgICAgYm9vbCBpc0Rlc2Nl
bmRhbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVzY2VuZGFudDsgfQotICAgICAgICB2b2lkIHNl
dElzRGVzY2VuZGFudChib29sIGlzRGVzY2VuZGFudCkgeyBtX2lzRGVzY2VuZGFudCA9IGlzRGVz
Y2VuZGFudDsgfQotCi0gICAgICAgIC8vIEZJWE1FOiBDYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMg
YXJlIGRhbmdlcm91cyBhbmQgc2hvdWxkIGJlIHdoaXRlbGlzdGVkIGV4cGxpY2l0bHkgb3IgcmVt
b3ZlZC4KLSAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IG1f
cmVuZGVyZXIgPSByZW5kZXJlcjsgfQotICAgICAgICBSb290SW5saW5lQm94KiBvcmlnaW5hdGlu
Z0xpbmUoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmF0aW5nTGluZTsgfQotICAgICAgICB2b2lk
IHNldE9yaWdpbmF0aW5nTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fb3JpZ2luYXRpbmdM
aW5lID0gbGluZTsgfQotCi0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcChib29sIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSA/IHkoKSA6IHgoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oYm9vbCBp
c0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUgPyBtYXhZKCkgOiBtYXhYKCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSA/IHgoKSA6IHkoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSA/IG1heFgoKSA6IG1heFkoKTsgfQotICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQotCi0gICAg
ICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCku
cGl4ZWxTbmFwcGVkWSgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9Ci0gICAgICAg
IGludCBwaXhlbFNuYXBwZWRMb2dpY2FsQm90dG9tKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCku
cGl4ZWxTbmFwcGVkTWF4WSgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpOyB9Ci0g
ICAgICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVj
dCgpLnBpeGVsU25hcHBlZFgoKSA6IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQotICAg
ICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0
KCkucGl4ZWxTbmFwcGVkTWF4WCgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9
Ci0KLSAgICAgICAgdm9pZCBzZXRMb2dpY2FsVG9wKExheW91dFVuaXQgbG9naWNhbFRvcCwgYm9v
bCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgICAgIHNldFkobG9naWNhbFRvcCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0WChsb2dpY2FsVG9wKTsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExl
ZnQsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBzZXRYKGxvZ2lj
YWxMZWZ0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRZKGxvZ2ljYWxM
ZWZ0KTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICAg
ICAgc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHNldFdpZHRoKGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQg
c2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpCi0gICAgICAgICAgICAgICAgc2V0V2lkdGgobG9naWNhbFdpZHRoKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKLSAg
ICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwot
ICAgICAgICBSb290SW5saW5lQm94KiBtX29yaWdpbmF0aW5nTGluZTsKLSAgICAgICAgTGF5b3V0
UmVjdCBtX2ZyYW1lUmVjdDsKLSAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OyAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgYSBMYXlvdXRVbml0LCBzaW5jZSBpdCdzIGEgdmVydGljYWwgb2Zm
c2V0LgotCi0gICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDI7IC8vIFR5cGUgKGxlZnQgb3Igcmln
aHQgYWxpZ25lZCkKLSAgICAgICAgdW5zaWduZWQgbV9zaG91bGRQYWludCA6IDE7Ci0gICAgICAg
IHVuc2lnbmVkIG1faXNEZXNjZW5kYW50IDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9pc1BsYWNl
ZCA6IDE7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICB1bnNpZ25lZCBtX2lzSW5QbGFjZWRUcmVl
IDogMTsKLSNlbmRpZgotICAgIH07Ci0KICAgICBMYXlvdXRQb2ludCBmbGlwRmxvYXRGb3JXcml0
aW5nTW9kZUZvckNoaWxkKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQm
KSBjb25zdDsKIAogICAgIExheW91dFVuaXQgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdApAQCAtMTE5MSwxMDQgKzEwNDUs
OSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91
dFVuaXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFz
aEZ1bmN0aW9ucyB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5nT2JqZWN0
KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleS0+
cmVuZGVyZXIoKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdPYmplY3Qq
IGEsIEZsb2F0aW5nT2JqZWN0KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGItPnJlbmRl
cmVyKCk7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0gICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaFRy
YW5zbGF0b3IgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChSZW5kZXJCb3gqIGtleSkg
eyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5KTsgfQotICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgUmVuZGVyQm94KiBiKSB7
IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7IH0KLSAgICB9OwotICAgIHR5cGVkZWYgTGlzdEhh
c2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZs
b2F0aW5nT2JqZWN0U2V0OwotICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0
ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBQT0RJbnRlcnZh
bDxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKLSAgICB0eXBl
ZGVmIFBPREludGVydmFsVHJlZTxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RU
cmVlOwotICAgIHR5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8RmxvYXRp
bmdPYmplY3RJbnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7Ci0gICAgCi0gICAgdGVtcGxh
dGUgPEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgotICAgIGNsYXNzIENvbXB1
dGVGbG9hdE9mZnNldEFkYXB0ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBGbG9h
dGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlwZTsKLSAgICAgICAgCi0gICAgICAgIENvbXB1
dGVGbG9hdE9mZnNldEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBpbnQgbGlu
ZVRvcCwgaW50IGxpbmVCb3R0b20sIExheW91dFVuaXQmIG9mZnNldCkKLSAgICAgICAgICAgIDog
bV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAgICAgICAgICwgbV9saW5lVG9wKGxpbmVUb3ApCi0g
ICAgICAgICAgICAsIG1fbGluZUJvdHRvbShsaW5lQm90dG9tKQotICAgICAgICAgICAgLCBtX29m
ZnNldChvZmZzZXQpCi0gICAgICAgICAgICAsIG1fb3V0ZXJtb3N0RmxvYXQoMCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgbG93VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVUb3A7IH0KLSAgICAgICAgaW50IGhpZ2hWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZUJvdHRvbTsgfQotICAgICAgICB2b2lkIGNvbGxlY3RJZk5lZWRlZChjb25zdCBJbnRl
cnZhbFR5cGUmKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICAvLyBXaGVuIGNv
bXB1dGluZyB0aGUgb2Zmc2V0IGNhdXNlZCBieSB0aGUgZmxvYXRzIG9uIGEgZ2l2ZW4gbGluZSwg
aWYKLSAgICAgICAgLy8gdGhlIG91dGVybW9zdCBmbG9hdCBvbiB0aGF0IGxpbmUgaGFzIGEgc2hh
cGUtb3V0c2lkZSwgdGhlIGlubGluZQotICAgICAgICAvLyBjb250ZW50IHRoYXQgYnV0dHMgdXAg
YWdhaW5zdCB0aGF0IGZsb2F0IG11c3QgYmUgcG9zaXRpb25lZCB1c2luZwotICAgICAgICAvLyB0
aGUgY29udG91cnMgb2YgdGhlIHNoYXBlLCBub3QgdGhlIG1hcmdpbiBib3ggb2YgdGhlIGZsb2F0
LgotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQoKSBjb25zdCB7
IHJldHVybiBtX291dGVybW9zdEZsb2F0OyB9Ci0jZW5kaWYKLQotICAgICAgICBMYXlvdXRVbml0
IGdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9v
bCB1cGRhdGVPZmZzZXRJZk5lZWRlZChjb25zdCBGbG9hdGluZ09iamVjdCopOwotCi0gICAgICAg
IGNvbnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOwotICAgICAgICBpbnQgbV9saW5lVG9wOwot
ICAgICAgICBpbnQgbV9saW5lQm90dG9tOwotICAgICAgICBMYXlvdXRVbml0JiBtX29mZnNldDsK
LSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG1fb3V0ZXJtb3N0RmxvYXQ7Ci0gICAgfTsK
LQogICAgIHZvaWQgY3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7CiAKIHB1YmxpYzoKLQotICAgIGNs
YXNzIEZsb2F0aW5nT2JqZWN0cyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZsb2F0
aW5nT2JqZWN0cyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAg
ICAgfkZsb2F0aW5nT2JqZWN0cygpOwotCi0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAg
dm9pZCBhZGQoRmxvYXRpbmdPYmplY3QqKTsKLSAgICAgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdP
YmplY3QqKTsKLSAgICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsK
LSAgICAgICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKLSAgICAg
ICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6
b250YWxXcml0aW5nTW9kZSA9IGI7IH0KLQotICAgICAgICBib29sIGhhc0xlZnRPYmplY3RzKCkg
Y29uc3QgeyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQotICAgICAgICBib29sIGhh
c1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3RzQ291bnQgPiAwOyB9
Ci0gICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25zdCB7IHJldHVybiBt
X3NldDsgfQotICAgICAgICB2b2lkIGNsZWFyTGluZUJveFRyZWVQb2ludGVycygpOwotICAgICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNp
ZGVGbG9hdE9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0LCBMYXlvdXRV
bml0KiBoZWlnaHRSZW1haW5pbmcgPSAwKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSA9IFNo
YXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFpbmluZyA9
IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJC
bG9jayosIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKLSAgICAgICAgdm9pZCBjb21wdXRl
UGxhY2VkRmxvYXRzVHJlZSgpOwotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBs
YWNlZEZsb2F0c1RyZWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fcGxhY2VkRmxv
YXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgICAgICAgICAgY29tcHV0ZVBsYWNlZEZs
b2F0c1RyZWUoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6
VHlwZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6
OlR5cGUpOwotICAgICAgICBGbG9hdGluZ09iamVjdEludGVydmFsIGludGVydmFsRm9yRmxvYXRp
bmdPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKLQotICAgICAgICBGbG9hdGluZ09iamVjdFNldCBt
X3NldDsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsKLSAg
ICAgICAgdW5zaWduZWQgbV9sZWZ0T2JqZWN0c0NvdW50OwotICAgICAgICB1bnNpZ25lZCBtX3Jp
Z2h0T2JqZWN0c0NvdW50OwotICAgICAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOwot
ICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKLQotICAgICAgICBmcmllbmQg
dm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7Ci0gICAgfTsKLQogICAg
IC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBub24tZGVm
YXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0YSB7CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlckJsb2NrUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTEzOTAsMTYgKzExNDksNiBAQCBpbmxpbmUgY29uc3QgUmVuZGVyQmxvY2sq
IHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB2b2lkIHRvUmVuZGVy
QmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIHZvaWQgdG9SZW5kZXJCbG9jayhjb25zdCBSZW5k
ZXJCbG9jayYpOwogCi0jaWZuZGVmIE5ERUJVRwotLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNl
ZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLXRlbXBsYXRlIDw+
IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGludD4gewotICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNv
bnN0IGludCB2YWx1ZSk7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqPiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29u
c3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kik7Ci19OwotI2VuZGlmCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMmM1ZDY1
NGMyMzJiYmU1YjAxZjcxZDQ2MWM1ZjNhYjA4YzU3NWI3Yi4uNWZiMGFjYzQyNjFkMmUyYjBmNDhm
NTJkYmQ2Y2M0OTY0M2E1N2ExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgorI2luY2x1ZGUgIkZsb2F0aW5n
T2JqZWN0cy5oIgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC0xMzQsNyArMTM1LDcgQEAg
cHVibGljOgogICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFp
bGFibGVXaWR0aDsgfQogCiAgICAgdm9pZCB1cGRhdGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0
IG1pbmltdW1IZWlnaHQgPSAwKTsKLSAgICB2b2lkIHNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3
RmxvYXRJZk5lZWRlZChSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIHNo
cmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCopOwog
ICAgIHZvaWQgYWRkVW5jb21taXR0ZWRXaWR0aChmbG9hdCBkZWx0YSkgeyBtX3VuY29tbWl0dGVk
V2lkdGggKz0gZGVsdGE7IH0KICAgICB2b2lkIGNvbW1pdCgpCiAgICAgewpAQCAtMTg4LDcgKzE4
OSw3IEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0
VW5pdCByZXBsYWNlZEhlaWdodCkKICAgICBjb21wdXRlQXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFu
ZFJpZ2h0KCk7CiB9CiAKLWlubGluZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lk
dGhGb3JOZXdGbG9hdElmTmVlZGVkKFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogbmV3Rmxv
YXQpCitpbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3Rmxv
YXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCiB7CiAgICAgTGF5b3V0VW5pdCBo
ZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKGhlaWdodCA8IG5ld0Zs
b2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGhl
aWdodCA+PSBuZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSkKQEAgLTIwMSwxMSArMjAyLDExIEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6
c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKFJlbmRlckJsb2NrOjpGbG9h
CiAgICAgLy8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdl
IG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZp
bmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBz
aWRlIGFzIG91ciBuZXdGbG9hdC4KICAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBl
T3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
Ci0gICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKLSAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9ibG9jay0+bV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3IgKC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0
KSB7Ci0gICAgICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9
ICppdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHByZXZpb3VzRmxvYXQgPSAqaXQ7CiAgICAg
ICAgIGlmIChwcmV2aW91c0Zsb2F0ICE9IG5ld0Zsb2F0ICYmIHByZXZpb3VzRmxvYXQtPnR5cGUo
KSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7CiAgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lk
ZUluZm8gPSBwcmV2aW91c0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAg
ICAgICAgICAgICBpZiAocHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKSB7CkBAIC0yMjEsNyArMjIy
LDcgQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zs
b2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2EKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChu
ZXdGbG9hdC0+dHlwZSgpID09IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0
KSB7CisgICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dCkgewogICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Js
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
ICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKQEAgLTE1MDIsOCArMTUwMyw4
IEBAIHB1YmxpYzoKICAgICBSb290SW5saW5lQm94KiBlbmRMaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRMaW5lOyB9CiAgICAgdm9pZCBzZXRFbmRMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmUpIHsg
bV9lbmRMaW5lID0gbGluZTsgfQogCi0gICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RGbG9hdDsgfQotICAgIHZvaWQgc2V0TGFz
dEZsb2F0KFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0KSB7IG1fbGFzdEZs
b2F0ID0gbGFzdEZsb2F0OyB9CisgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdEZsb2F0OyB9CisgICAgdm9pZCBzZXRMYXN0RmxvYXQoRmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCkgeyBtX2xhc3RGbG9hdCA9IGxhc3RGbG9hdDsgfQogCiAgICAgVmVj
dG9yPFJlbmRlckJsb2NrOjpGbG9hdFdpdGhSZWN0PiYgZmxvYXRzKCkgeyByZXR1cm4gbV9mbG9h
dHM7IH0KICAgICAKQEAgLTE1MTgsNyArMTUxOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8UmVuZGVyQmxvY2s6OkZsb2F0V2l0aFJlY3Q+IG1fZmxvYXRzOwotICAgIFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdCogbV9sYXN0RmxvYXQ7CisgICAgRmxvYXRpbmdPYmplY3Qq
IG1fbGFzdEZsb2F0OwogICAgIFJvb3RJbmxpbmVCb3gqIG1fZW5kTGluZTsKICAgICBMaW5lSW5m
byBtX2xpbmVJbmZvOwogICAgIHVuc2lnbmVkIG1fZmxvYXRJbmRleDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA2OTJmMjNmYTdjYWJmOGNmZGEzOTNmNTc1OTUx
NGM0ZWY5MTAwYjRmLi4wMzE3OWJkMWRjNjM3MTE2MGI5MDAxNDEwYWNkMDhlYzk1MmM1Yjk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCiAjaW5jbHVkZSAiRmxv
d1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCkBAIC0xMjM1LDcgKzEyMzYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnBvcExh
eW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKQogICAgIGN1cnJlbnRGbG93VGhyZWFkLT5w
b3BGbG93VGhyZWFkTGF5b3V0U3RhdGUoKTsKIH0KIAotUmVuZGVyQmxvY2s6OkludGVydmFsQXJl
bmEqIFJlbmRlclZpZXc6OmludGVydmFsQXJlbmEoKQorSW50ZXJ2YWxBcmVuYSogUmVuZGVyVmll
dzo6aW50ZXJ2YWxBcmVuYSgpCiB7CiAgICAgaWYgKCFtX2ludGVydmFsQXJlbmEpCiAgICAgICAg
IG1faW50ZXJ2YWxBcmVuYSA9IEludGVydmFsQXJlbmE6OmNyZWF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211073</attachid>
            <date>2013-09-09 13:22:39 -0700</date>
            <delta_ts>2013-09-09 13:55:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120779-20130909132241.patch</filename>
            <type>text/plain</type>
            <size>66382</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M0ODIzNjk4MmMwZjJh
ZjY4Y2NmNmVhMTU1NDg3OTVkZTAxZTQ0ZS4uMGJmZjZiMmIxM2Q4NDNlYWFjOGEwZGZlNTllMzMx
NDY2YmU5ZThhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wOS0wOSAgQmVt
IEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KKworICAgICAgICBNb3ZlIEZsb2F0cyBv
dXQgb2YgUmVuZGVyQmxvY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDc3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgRmxvYXRpbmdPYmplY3QsIEZsb2F0aW5nT2JqZWN0cyBhbmQgcmVsYXRl
ZCBjb2RlIGludG8KKyAgICAgICAgRmxvYXRpbmdPYmplY3RzLntoLGNwcH0uIFRoaXMgbm90IG9u
bHkgbWFrZXMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZQorICAgICAgICBhbmQgbWFpbnRhaW5hYmxl
LCBpdCBhbHNvIHdpbGwgYWxsb3cgZm9yIG1vcmUgZGVjb3VwbGluZyBvZgorICAgICAgICBSZW5k
ZXJCbG9jayBhbmQgdGhlIEZsb2F0aW5nT2JqZWN0cywgaG9wZWZ1bGx5IG1ha2luZyBpdCBwb3Nz
aWJsZSBmb3IKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzIHRvIGJlIG1vcmUgY2VudHJhbCBhbmQg
bm90IG5lZWQgdG8gaGF2ZSBvbmUgZm9yIGVhY2gKKyAgICAgICAgUmVuZGVyQmxvY2sgdGhhdCBp
cyBhZmZlY3RlZCBieSBmbG9hdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjo6Q29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlcjo6b3V0ZXJtb3N0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmpl
Y3RzOjp+RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjppbmNy
ZWFzZU9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6
aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09i
amVjdHM6OmFkZFBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OnJlbW92ZVBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6bG9naWNhbExlZnRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VzSW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ojo6dXBkYXRlT2Zmc2V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb2xsZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRIZWlnaHRSZW1haW5pbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGluZ09iamVj
dHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNsb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0aW5nT2JqZWN0OjpyZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6aXNQbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzUGxh
Y2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp4KToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0Ojp5KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2Jq
ZWN0OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdGluZ09iamVjdDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
aW5nT2JqZWN0OjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnNldEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGFnaW5h
dGlvblN0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRQYWdpbmF0
aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmlzSW5QbGFjZWRU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRJc0luUGxhY2VkVHJl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2hvdWxkUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFNob3VsZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojppc0Rlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdGluZ09iamVjdDo6c2V0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3Q6Om9yaWdpbmF0aW5nTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6c2V0T3JpZ2luYXRpbmdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
Ojpsb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2Fs
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6bG9naWNhbFJpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxUb3ApOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRMb2dpY2FsUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9uczo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdHM6OnNldEhvcml6b250YWxXcml0aW5nTW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Omhhc0xlZnRPYmplY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0czo6aGFzUmlnaHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0aW5nT2JqZWN0czo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6cGxhY2VkRmxvYXRzVHJlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFp
bGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpsYXN0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRMYXN0RmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmludGVydmFsQXJlbmEpOgorCiAyMDEzLTA5LTA5
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4
IEdUSyBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2VmZGE2NTYyYWMyYzdiMmE3MDU2
Mjk0YjU3MDkzMjFhNDM0YWJhNy4uMTU4OTk4NmM0NjY1NmM3NjNhNjk4ZDBjODkwYzVjZWNlNmY1
MzVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwOTcsNiArMjA5Nyw3IEBAIHNldChXZWJD
b3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCiAgICAgcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0
LmNwcAorICAgIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCiAgICAgcmVuZGVyaW5nL0Zs
b3dUaHJlYWRDb250cm9sbGVyLmNwcAogICAgIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUuY3BwCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCmluZGV4IDUwNTI4NGEzZDYyZmRiNzU1ZDUwOGI3NDNkZDFkMzZmZTc3
ODQxZGEuLjVmYTcyMDcyOTBiNjlmMTk2MTBlMjRiYzZiNjU2MmRhYjI3OTNhZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDM0MCw2ICs0MzQwLDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1Ro
cmVhZENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKaW5kZXggYjgzMTQ1ODk3OWEwNjMyNDE0M2I3NDEyNjE2YmZmYmFhMTRkYjUy
Mi4uNmYzOGQ3ZDYwNzJiYzExOGUyMzA3MDZiMTJmNTBhNTlkMjE4ZDhhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC0xMTQwLDYgKzExNDAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvRWxsaXBz
aXNCb3guY3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwKICAg
ICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAorICAgIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwIFwKICAgICByZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIFwK
ICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCBcCiAgICAgcmVuZGVy
aW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggYjExNGZmMzAxOGIwYjVkMzA2MTcwMDBiYmM5ZGU2
NDI2MDI0NmVjNy4uMjc1NzQwZjM2YTdjNTZmNjIwYWVhNjJlMThkNzc4OWEyOGM0YjRmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC05
NTI4LDYgKzk1MjgsNyBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xGbG9hdGluZ09iamVjdHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXEZsb3dUaHJlYWRDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3Bw
Ij4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBA
IC0yMDAwMSw2ICsyMDAwMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcRWxsaXBzaXNCb3guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEZpeGVkVGFibGVMYXlvdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xGbG9hdGluZ09iamVjdHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEdhcFJlY3RzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgiIC8+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NDgzYjFiYWQ4OTJhODk4MzBkMzc2OWQ0MDY1MzE5YmVkMWM3OTc1OS4uNDY2NjYyZTE2OTRjY2Mx
YTg1ZWJjNjE5ZTg1YWNhYjg3ZDVlMTAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzM3NSw2ICszMzc1LDggQEAKIAkJOThD
RTQzMkExMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBM
aW5rTG9hZGVyLmggKi87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBs
ZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUExQjZGOTcxNTg4NjlDODAw
MTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTFCNkY5NjE1ODg2OUM4MDAxMUE4QzQgLyogSlNE
T01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJOUE1MjhFODMxN0Q3RjUyRjAwQUE5NTE4
IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QTUyOEU4MTE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3Rz
LmNwcCAqLzsgfTsKKwkJOUE1MjhFODQxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE1MjhF
ODIxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMUFCMDdDMTY0OEM3QzQwMDUxRjNG
MiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMUFCMDdCMTY0OEM3QzQwMDUxRjNG
MiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJOUIy
NERFOEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcg
LyogSFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJOUIyRDhBNzkxNDk5N0NDRjAwRUNFRjNFIC8q
IFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTk2MSw2ICs5OTYzLDggQEAKIAkJ
OThDRTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGlua0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5n
TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RP
TVN0cmluZ0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QTUy
OEU4MTE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09i
amVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNG
MiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3QjE2
NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyNERF
OEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhUTUxCRElFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDM1Niw2ICsyMDM2MCw4IEBACiAJCQkJMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJQThDRkYwNDgwQTE1NEYwOTAwMEE0
MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRBMEExNTRGMDkwMDBB
NDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggKi8sCisJCQkJOUE1MjhFODExN0Q3RjUyRjAwQUE5
NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi8sCisJCQkJOUE1MjhFODIxN0Q3RjUyRjAwQUE5
NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovLAogCQkJCUQ3MkY2RDc3MTUzMTU5QTMwMDFFRTQ0
RSAvKiBGbG93VGhyZWFkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJRDcyRjZENzgxNTMxNTlBMzAw
MUVFNDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmggKi8sCiAJCQkJOTM1QzQ3NzQwOUFDNEQ4
RDAwQTZBQUI0IC8qIEdhcFJlY3RzLmggKi8sCkBAIC0yMTM0Myw2ICsyMTM0OSw3IEBACiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJRkUxMTVGQUIx
Njc5ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFNEFBREVFMTZEMkMzNzQwMDAyNkZGQyAvKiBBYnN0cmFjdFNRTFN0
YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8q
IFJhc3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBQURFRjE2RDJDMzc0MDAwMjZG
RkMgLyogQWJzdHJhY3RTUUxTdGF0ZW1lbnRCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTI0
OTI5LDYgKzI0OTM2LDcgQEAKIAkJCQlGRDMxNjAzRDEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlz
ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5MDcwN0U2MTIxOUMwNDMwMEQ5MEU1MSAv
KiBBTkdMRVdlYktpdEJyaWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTJBQTBFRkFD
OTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlBNTI4RTgz
MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE2RkUxMTEwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzE2RkUxMTMwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEyQUMwRUZBQzkwNjAwOUQwQ0FGIC8qIEFu
aW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GbG9hdGluZ09iamVjdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExMTZkNmY5MjE3ZTIzZTA4YmExMjI2
ZTJmYjFkN2RlZDc2YTNlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcApAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCisKKyNpbmNsdWRlICJSZW5k
ZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNhbWVTaXplQXNGbG9hdGluZ09iamVjdCB7CisgICAg
dm9pZCogcG9pbnRlcnNbMl07CisgICAgTGF5b3V0UmVjdCByZWN0OworICAgIGludCBwYWdpbmF0
aW9uU3RydXQ7CisgICAgdWludDMyX3QgYml0ZmllbGRzIDogODsKK307CisKK0NPTVBJTEVfQVNT
RVJUKHNpemVvZihGbG9hdGluZ09iamVjdCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNGbG9hdGluZ09i
amVjdCksIEZsb2F0aW5nT2JqZWN0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKwordGVtcGxhdGUgPEZs
b2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgorY2xhc3MgQ29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFs
IEludGVydmFsVHlwZTsKKworICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXIoY29uc3QgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20sIExheW91dFVu
aXQmIG9mZnNldCkKKyAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgLCBtX2xpbmVUb3Ao
bGluZVRvcCkKKyAgICAsIG1fbGluZUJvdHRvbShsaW5lQm90dG9tKQorICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgICwgbV9vdXRlcm1vc3RGbG9hdCgwKQorICAgIHsKKyAgICB9CisKKyAgICBp
bnQgbG93VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xpbmVUb3A7IH0KKyAgICBpbnQgaGlnaFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm90dG9tOyB9CisgICAgdm9pZCBjb2xsZWN0SWZO
ZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJik7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAg
ICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgb2Zmc2V0IGNhdXNlZCBieSB0aGUgZmxvYXRzIG9uIGEg
Z2l2ZW4gbGluZSwgaWYKKyAgICAvLyB0aGUgb3V0ZXJtb3N0IGZsb2F0IG9uIHRoYXQgbGluZSBo
YXMgYSBzaGFwZS1vdXRzaWRlLCB0aGUgaW5saW5lCisgICAgLy8gY29udGVudCB0aGF0IGJ1dHRz
IHVwIGFnYWluc3QgdGhhdCBmbG9hdCBtdXN0IGJlIHBvc2l0aW9uZWQgdXNpbmcKKyAgICAvLyB0
aGUgY29udG91cnMgb2YgdGhlIHNoYXBlLCBub3QgdGhlIG1hcmdpbiBib3ggb2YgdGhlIGZsb2F0
LgorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3V0ZXJtb3N0RmxvYXQ7IH0KKyNlbmRpZgorCisgICAgTGF5b3V0VW5pdCBnZXRIZWln
aHRSZW1haW5pbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIHVwZGF0ZU9mZnNldElm
TmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0Kik7CisKKyAgICBjb25zdCBSZW5kZXJCbG9jayog
bV9yZW5kZXJlcjsKKyAgICBpbnQgbV9saW5lVG9wOworICAgIGludCBtX2xpbmVCb3R0b207Cisg
ICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG1fb3V0
ZXJtb3N0RmxvYXQ7Cit9OworCitGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyhjb25z
dCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorOiBt
X3BsYWNlZEZsb2F0c1RyZWUoVW5pbml0aWFsaXplZFRyZWUpCissIG1fbGVmdE9iamVjdHNDb3Vu
dCgwKQorLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCissIG1faG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KGhvcml6b250YWxXcml0aW5nTW9kZSkKKywgbV9yZW5kZXJlcihyZW5kZXJlcikKK3sKK30KKwor
RmxvYXRpbmdPYmplY3RzOjp+RmxvYXRpbmdPYmplY3RzKCkKK3sKKyAgICAvLyBGSVhNRTogbV9z
ZXQgc2hvdWxkIHVzZSBPd25QdHIgaW5zdGVhZC4KKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zZXQp
OworfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCkK
K3sKKyAgICAvLyBDbGVhciByZWZlcmVuY2VzIHRvIG9yaWdpbmF0aW5nIGxpbmVzLCBzaW5jZSB0
aGUgbGluZXMgYXJlIGJlaW5nIGRlbGV0ZWQKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IG1fc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBU1NFUlQoISgo
Kml0KS0+b3JpZ2luYXRpbmdMaW5lKCkpIHx8ICYoKCppdCktPm9yaWdpbmF0aW5nTGluZSgpLT5y
ZW5kZXJlcigpKSA9PSBtX3JlbmRlcmVyKTsKKyAgICAgICAgKCppdCktPnNldE9yaWdpbmF0aW5n
TGluZSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjpjbGVhcigpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNhbGwgZGVsZXRlQWxsVmFsdWVzLCBleGNlcHQgY2xl
YXJGbG9hdHMKKyAgICAvLyBsaWtlIHRvIHBsYXkgZmFzdCBhbmQgbG9vc2Ugd2l0aCBvd25lcnNo
aXAgb2YgdGhlc2UgcG9pbnRlcnMuCisgICAgLy8gSWYgd2UgbW92ZSB0byBPd25QdHIgdGhhdCB3
aWxsIGZpeCB0aGlzIG93bmVyc2hpcCBvZGRuZXNzLgorICAgIG1fc2V0LmNsZWFyKCk7CisgICAg
bV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7CisgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsK
KyAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6
OmluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUpCit7CisgICAg
aWYgKHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKKyAgICAgICAgbV9sZWZ0T2Jq
ZWN0c0NvdW50Kys7CisgICAgZWxzZQorICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50Kys7Cit9
CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjpkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09i
amVjdDo6VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9h
dExlZnQpCisgICAgICAgIG1fbGVmdE9iamVjdHNDb3VudC0tOworICAgIGVsc2UKKyAgICAgICAg
bV9yaWdodE9iamVjdHNDb3VudC0tOworfQorCitGbG9hdGluZ09iamVjdEludGVydmFsIEZsb2F0
aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAg
ICByZXR1cm4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0
KCkueSgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WSgpLCBmbG9hdGluZ09iamVj
dCk7CisgICAgcmV0dXJuIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPmZy
YW1lUmVjdCgpLngoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFgoKSwgZmxvYXRp
bmdPYmplY3QpOworfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoIWZsb2F0aW5nT2Jq
ZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1BsYWNl
ZCh0cnVlKTsKKyAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAg
ICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZs
b2F0aW5nT2JqZWN0KSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3QtPnNl
dElzSW5QbGFjZWRUcmVlKHRydWUpOworI2VuZGlmCit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3Rz
OjpyZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQorewor
ICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09iamVjdC0+
aXNJblBsYWNlZFRyZWUoKSk7CisKKyAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlh
bGl6ZWQoKSkgeworICAgICAgICBib29sIHJlbW92ZWQgPSBtX3BsYWNlZEZsb2F0c1RyZWUucmVt
b3ZlKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9CisKKyAgICBmbG9hdGluZ09i
amVjdC0+c2V0SXNQbGFjZWQoZmFsc2UpOworI2lmbmRlZiBOREVCVUcKKyAgICBmbG9hdGluZ09i
amVjdC0+c2V0SXNJblBsYWNlZFRyZWUoZmFsc2UpOworI2VuZGlmCit9CisKK3ZvaWQgRmxvYXRp
bmdPYmplY3RzOjphZGQoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIGlu
Y3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqZWN0LT50eXBlKCkpOworICAgIG1fc2V0LmFk
ZChmbG9hdGluZ09iamVjdCk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQor
ICAgICAgICBhZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOworfQorCit2b2lkIEZsb2F0
aW5nT2JqZWN0czo6cmVtb3ZlKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAg
ICBkZWNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3Nl
dC5yZW1vdmUoZmxvYXRpbmdPYmplY3QpOworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSB8fCAhZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOworICAgIGlmIChm
bG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZs
b2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRG
bG9hdHNUcmVlKCkKK3sKKyAgICBBU1NFUlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxp
emVkKCkpOworICAgIGlmIChtX3NldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3BsYWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKG1fcmVuZGVyZXItPnZpZXcoKS5pbnRlcnZh
bEFyZW5hKCkpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdp
bigpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7Cisg
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQo
KSkKKyAgICAgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIH0KK30KKworTGF5b3V0VW5pdCBGbG9hdGlu
Z09iamVjdHM6OmxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVG
bG9hdE9mZnNldE1vZGUgb2Zmc2V0TW9kZSwgTGF5b3V0VW5pdCAqaGVpZ2h0UmVtYWluaW5nKQor
eworI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0TW9kZSk7
CisjZW5kaWYKKworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gZml4ZWRPZmZzZXQ7CisgICAgQ29t
cHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0PiBhZGFwdGVy
KG1fcmVuZGVyZXIsIHJvdW5kVG9JbnQobG9naWNhbFRvcCksIHJvdW5kVG9JbnQobG9naWNhbFRv
cCArIGxvZ2ljYWxIZWlnaHQpLCBvZmZzZXQpOworICAgIHBsYWNlZEZsb2F0c1RyZWUoKS5hbGxP
dmVybGFwc1dpdGhBZGFwdGVyKGFkYXB0ZXIpOworCisgICAgaWYgKGhlaWdodFJlbWFpbmluZykK
KyAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGFkYXB0ZXIuZ2V0SGVpZ2h0UmVtYWluaW5nKCk7
CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0
ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91dGVybW9zdEZsb2F0KCk7CisgICAgaWYgKG9mZnNldE1v
ZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBvdXRlcm1vc3RGbG9hdCkgewor
ICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gb3V0ZXJtb3N0Rmxv
YXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAgICAgICAgc2hhcGVP
dXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JDb250YWluaW5nQmxvY2tMaW5lKGxvZ2ljYWxUb3As
IG91dGVybW9zdEZsb2F0LT5sb2dpY2FsVG9wKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKSwgbG9n
aWNhbEhlaWdodCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2hhcGVPdXRzaWRlLT5yaWdodFNl
Z21lbnRNYXJnaW5Cb3hEZWx0YSgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBy
ZXR1cm4gb2Zmc2V0OworfQorCitMYXlvdXRVbml0IEZsb2F0aW5nT2JqZWN0czo6bG9naWNhbFJp
Z2h0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRvcCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgb2Zm
c2V0TW9kZSwgTGF5b3V0VW5pdCAqaGVpZ2h0UmVtYWluaW5nKQoreworI2lmICFFTkFCTEUoQ1NT
X1NIQVBFUykKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0TW9kZSk7CisjZW5kaWYKKworICAgIExh
eW91dFVuaXQgb2Zmc2V0ID0gZml4ZWRPZmZzZXQ7CisgICAgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRh
cHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodD4gYWRhcHRlcihtX3JlbmRlcmVyLCByb3Vu
ZFRvSW50KGxvZ2ljYWxUb3ApLCByb3VuZFRvSW50KGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0
KSwgb2Zmc2V0KTsKKyAgICBwbGFjZWRGbG9hdHNUcmVlKCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRl
cihhZGFwdGVyKTsKKworICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICpoZWlnaHRS
ZW1haW5pbmcgPSBhZGFwdGVyLmdldEhlaWdodFJlbWFpbmluZygpOworCisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0ID0gYWRh
cHRlci5vdXRlcm1vc3RGbG9hdCgpOworICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lk
ZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKKyAgICAgICAgaWYgKFNoYXBl
T3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLT5z
aGFwZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNl
Z21lbnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShsb2dpY2FsVG9wLCBvdXRlcm1vc3RGbG9hdC0+
bG9naWNhbFRvcChtX2hvcml6b250YWxXcml0aW5nTW9kZSksIGxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICAgICAgb2Zmc2V0ICs9IHNoYXBlT3V0c2lkZS0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0
YSgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gbWluKGZpeGVkT2Zm
c2V0LCBvZmZzZXQpOworfQorCitpbmxpbmUgc3RhdGljIGJvb2wgcmFuZ2VzSW50ZXJzZWN0KGlu
dCBmbG9hdFRvcCwgaW50IGZsb2F0Qm90dG9tLCBpbnQgb2JqZWN0VG9wLCBpbnQgb2JqZWN0Qm90
dG9tKQoreworICAgIGlmIChvYmplY3RUb3AgPj0gZmxvYXRCb3R0b20gfHwgb2JqZWN0Qm90dG9t
IDwgZmxvYXRUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSB0b3Agb2Yg
dGhlIG9iamVjdCBvdmVybGFwcyB0aGUgZmxvYXQKKyAgICBpZiAob2JqZWN0VG9wID49IGZsb2F0
VG9wKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRoZSBvYmplY3QgZW5jbG9zZXMg
dGhlIGZsb2F0CisgICAgaWYgKG9iamVjdFRvcCA8IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA+
IGZsb2F0Qm90dG9tKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRoZSBib3R0b20g
b2YgdGhlIG9iamVjdCBvdmVybGFwcyB0aGUgZmxvYXQKKyAgICBpZiAob2JqZWN0Qm90dG9tID4g
b2JqZWN0VG9wICYmIG9iamVjdEJvdHRvbSA+IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA8PSBm
bG9hdEJvdHRvbSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8Rmxv
YXRpbmdPYmplY3Q6OkZsb2F0TGVmdD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdo
dCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSk7CisgICAgaWYgKGxvZ2ljYWxSaWdodCA+IG1fb2Zmc2V0KSB7CisgICAg
ICAgIG1fb2Zmc2V0ID0gbG9naWNhbFJpZ2h0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBDb21wdXRl
RmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0Pjo6dXBkYXRlT2Zm
c2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAg
IExheW91dFVuaXQgbG9naWNhbExlZnQgPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbExlZnQobV9y
ZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgaWYgKGxvZ2ljYWxMZWZ0
IDwgbV9vZmZzZXQpIHsKKyAgICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsTGVmdDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPEZs
b2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgoraW5saW5lIHZvaWQgQ29tcHV0ZUZs
b2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNvbGxlY3RJZk5lZWRlZChjb25zdCBJ
bnRlcnZhbFR5cGUmIGludGVydmFsKQoreworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnR5
cGUoKSAhPSBGbG9hdFR5cGVWYWx1ZSB8fCAhcmFuZ2VzSW50ZXJzZWN0KGludGVydmFsLmxvdygp
LCBpbnRlcnZhbC5oaWdoKCksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gQWxsIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUgc2hv
dWxkIGJlIGFscmVhZHkgcGxhY2VkLgorICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFj
ZWQoKSk7CisgICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChmbG9hdGluZ09iamVjdC0+cGl4ZWxT
bmFwcGVkTG9naWNhbFRvcChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwg
ZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSk7CisKKyAg
ICBib29sIGZsb2F0SXNOZXdFeHRyZW1lID0gdXBkYXRlT2Zmc2V0SWZOZWVkZWQoZmxvYXRpbmdP
YmplY3QpOworICAgIGlmIChmbG9hdElzTmV3RXh0cmVtZSkKKyAgICAgICAgbV9vdXRlcm1vc3RG
bG9hdCA9IGZsb2F0aW5nT2JqZWN0OworfQorCit0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5
cGUgRmxvYXRUeXBlVmFsdWU+CitMYXlvdXRVbml0IENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRUeXBlVmFsdWU+OjpnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdAoreworICAgIHJldHVy
biBtX291dGVybW9zdEZsb2F0ID8gbV9vdXRlcm1vc3RGbG9hdC0+bG9naWNhbEJvdHRvbShtX3Jl
bmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAtIG1fbGluZVRvcCA6IExheW91dFVu
aXQoMSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVzZSBoZWxwZXJzIGFyZSBvbmx5IHVz
ZWQgYnkgdGhlIFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorU3RyaW5n
IFZhbHVlVG9TdHJpbmc8aW50Pjo6c3RyaW5nKGNvbnN0IGludCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOworfQorCitTdHJpbmcgVmFsdWVUb1N0cmluZzxGbG9h
dGluZ09iamVjdCo+OjpzdHJpbmcoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVpeCVpICVpeCVpKSIsIGZsb2F0
aW5nT2JqZWN0LCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueCgpLnRvSW50KCksIGZsb2F0
aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55KCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1l
UmVjdCgpLm1heFgoKS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WSgp
LnRvSW50KCkpOworfQorI2VuZGlmCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNDY0MDQx
ZjZiNDA3OTcwYjgyN2EzMDc2ODNjOWRkM2IwMjkxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKQEAgLTAsMCArMSwyNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBGbG9hdGluZ09iamVjdHNfaAorI2RlZmluZSBGbG9hdGluZ09iamVjdHNfaAor
CisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5o
IgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyQm94OworCitlbnVtIFNoYXBlT3V0c2lk
ZUZsb2F0T2Zmc2V0TW9kZSB7IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIFNoYXBlT3V0
c2lkZUZsb2F0TWFyZ2luQm94T2Zmc2V0IH07CisKK2NsYXNzIEZsb2F0aW5nT2JqZWN0IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIC8vIE5vdGUgdGhhdCBUeXBlIHVzZXMgYml0cyBzbyB5b3Ug
Y2FuIHVzZSBGbG9hdExlZnRSaWdodCBhcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGJvdGggbGVmdCBh
bmQgcmlnaHQuCisgICAgZW51bSBUeXBlIHsgRmxvYXRMZWZ0ID0gMSwgRmxvYXRSaWdodCA9IDIs
IEZsb2F0TGVmdFJpZ2h0ID0gMyB9OworCisgICAgRmxvYXRpbmdPYmplY3QoRUZsb2F0IHR5cGUp
CisgICAgOiBtX3JlbmRlcmVyKDApCisgICAgLCBtX29yaWdpbmF0aW5nTGluZSgwKQorICAgICwg
bV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQorICAgICwgbV9pc1BsYWNlZChmYWxzZSkKKyNpZm5kZWYgTkRF
QlVHCisgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCisgICAgeworICAgICAg
ICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gTGVmdEZsb2F0
KQorICAgICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OworICAgICAgICBlbHNlIGlmICh0eXBl
ID09IFJpZ2h0RmxvYXQpCisgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFJpZ2h0OworICAgIH0K
KworICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVS
ZWN0KQorICAgIDogbV9yZW5kZXJlcigwKQorICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAg
ICAsIG1fZnJhbWVSZWN0KGZyYW1lUmVjdCkKKyAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCisg
ICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAsIG1faXNE
ZXNjZW5kYW50KGZhbHNlKQorICAgICwgbV9pc1BsYWNlZCh0cnVlKQorI2lmbmRlZiBOREVCVUcK
KyAgICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgfQorCisg
ICAgRmxvYXRpbmdPYmplY3QqIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBjbG9uZU9iamVjdCA9IG5ldyBGbG9hdGluZ09iamVjdCh0eXBlKCksIG1fZnJhbWVS
ZWN0KTsKKyAgICAgICAgY2xvbmVPYmplY3QtPm1fcmVuZGVyZXIgPSBtX3JlbmRlcmVyOworICAg
ICAgICBjbG9uZU9iamVjdC0+bV9vcmlnaW5hdGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGluZTsK
KyAgICAgICAgY2xvbmVPYmplY3QtPm1fcGFnaW5hdGlvblN0cnV0ID0gbV9wYWdpbmF0aW9uU3Ry
dXQ7CisgICAgICAgIGNsb25lT2JqZWN0LT5tX3Nob3VsZFBhaW50ID0gbV9zaG91bGRQYWludDsK
KyAgICAgICAgY2xvbmVPYmplY3QtPm1faXNEZXNjZW5kYW50ID0gbV9pc0Rlc2NlbmRhbnQ7Cisg
ICAgICAgIGNsb25lT2JqZWN0LT5tX2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKKyAgICAgICAgcmV0
dXJuIGNsb25lT2JqZWN0OworICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICBSZW5kZXJCb3gqIHJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorCisgICAgYm9vbCBpc1BsYWNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNQbGFjZWQ7IH0KKyAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2Vk
ID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9CisKKyAgICBMYXlvdXRVbml0IHgoKSBj
b25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQorICAg
IExheW91dFVuaXQgbWF4WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9m
cmFtZVJlY3QubWF4WCgpOyB9CisgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQ
bGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IG1heFko
KSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsg
fQorICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0
aCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVj
dC5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBBU1NFUlQoIWlz
SW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZKExh
eW91dFVuaXQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZ
KHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IEFTU0VSVCghaXNJ
blBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQg
c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7
IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBjb25zdCBMYXlvdXRSZWN0
JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVS
ZWN0OyB9CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0
KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9
CisKKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9u
U3RydXQ7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpIHsgbV9wYWdp
bmF0aW9uU3RydXQgPSBzdHJ1dDsgfQorCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNJblBs
YWNlZFRyZWUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9CisgICAgdm9pZCBz
ZXRJc0luUGxhY2VkVHJlZShib29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1ZTsg
fQorI2VuZGlmCisKKyAgICBib29sIHNob3VsZFBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRQYWludDsgfQorICAgIHZvaWQgc2V0U2hvdWxkUGFpbnQoYm9vbCBzaG91bGRQYWludCkgeyBt
X3Nob3VsZFBhaW50ID0gc2hvdWxkUGFpbnQ7IH0KKyAgICBib29sIGlzRGVzY2VuZGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZXNjZW5kYW50OyB9CisgICAgdm9pZCBzZXRJc0Rlc2NlbmRhbnQo
Ym9vbCBpc0Rlc2NlbmRhbnQpIHsgbV9pc0Rlc2NlbmRhbnQgPSBpc0Rlc2NlbmRhbnQ7IH0KKwor
ICAgIC8vIEZJWE1FOiBDYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGRhbmdlcm91cyBhbmQg
c2hvdWxkIGJlIHdoaXRlbGlzdGVkIGV4cGxpY2l0bHkgb3IgcmVtb3ZlZC4KKyAgICB2b2lkIHNl
dFJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9
CisgICAgUm9vdElubGluZUJveCogb3JpZ2luYXRpbmdMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5hdGluZ0xpbmU7IH0KKyAgICB2b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5saW5l
Qm94KiBsaW5lKSB7IG1fb3JpZ2luYXRpbmdMaW5lID0gbGluZTsgfQorCisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geSgpIDogeCgpOyB9CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsQm90dG9tKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WSgpIDogbWF4WCgpOyB9CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHgoKSA6IHkoKTsgfQorICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WCgpIDogbWF4WSgpOyB9CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0K
KworICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0
KCkucGl4ZWxTbmFwcGVkWSgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9CisgICAg
aW50IHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5w
aXhlbFNuYXBwZWRNYXhZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KKyAg
ICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5w
aXhlbFNuYXBwZWRYKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCk7IH0KKyAgICBpbnQg
cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxT
bmFwcGVkTWF4WCgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9CisKKyAgICB2
b2lkIHNldExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KQorICAgICAgICAgICAgc2V0WShsb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0WChsb2dpY2FsVG9wKTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgIHsK
KyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0WChs
b2dpY2FsTGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFkobG9naWNhbExlZnQp
OworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0SGVpZ2h0KGxvZ2ljYWxIZWln
aHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsK
KyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgs
IGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgeworICAgICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOworICAgIFJvb3RJbmxpbmVC
b3gqIG1fb3JpZ2luYXRpbmdMaW5lOworICAgIExheW91dFJlY3QgbV9mcmFtZVJlY3Q7CisgICAg
aW50IG1fcGFnaW5hdGlvblN0cnV0OyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBMYXlvdXRV
bml0LCBzaW5jZSBpdCdzIGEgdmVydGljYWwgb2Zmc2V0LgorCisgICAgdW5zaWduZWQgbV90eXBl
IDogMjsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQorICAgIHVuc2lnbmVkIG1fc2hv
dWxkUGFpbnQgOiAxOworICAgIHVuc2lnbmVkIG1faXNEZXNjZW5kYW50IDogMTsKKyAgICB1bnNp
Z25lZCBtX2lzUGxhY2VkIDogMTsKKyNpZm5kZWYgTkRFQlVHCisgICAgdW5zaWduZWQgbV9pc0lu
UGxhY2VkVHJlZSA6IDE7CisjZW5kaWYKK307CisKK3N0cnVjdCBGbG9hdGluZ09iamVjdEhhc2hG
dW5jdGlvbnMgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5nT2JqZWN0KiBrZXkp
IHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleS0+cmVuZGVy
ZXIoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgRmxvYXRp
bmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPnJlbmRlcmVyKCkgPT0gYi0+cmVuZGVyZXIoKTsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CitzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvciB7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goUmVuZGVyQm94KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRl
ckJveCo+OjpIYXNoOjpoYXNoKGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGlu
Z09iamVjdCogYSwgUmVuZGVyQm94KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7IH0K
K307Cit0eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmpl
Y3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKK3R5cGVkZWYgRmxvYXRpbmdPYmpl
Y3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Cit0eXBlZGVm
IFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFs
OwordHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5n
T2JqZWN0VHJlZTsKK3R5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8Rmxv
YXRpbmdPYmplY3RJbnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7CisKKworY2xhc3MgRmxv
YXRpbmdPYmplY3RzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdHMp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGbG9hdGluZ09iamVjdHMo
Y29uc3QgUmVuZGVyQmxvY2sqLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSk7CisgICAgfkZs
b2F0aW5nT2JqZWN0cygpOworCisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgYWRkKEZsb2F0
aW5nT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lk
IGFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgIHZvaWQgcmVtb3ZlUGxhY2Vk
T2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01v
ZGUoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KKworICAg
IGJvb2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQg
PiAwOyB9CisgICAgYm9vbCBoYXNSaWdodE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0
T2JqZWN0c0NvdW50ID4gMDsgfQorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBj
b25zdCB7IHJldHVybiBtX3NldDsgfQorICAgIHZvaWQgY2xlYXJMaW5lQm94VHJlZVBvaW50ZXJz
KCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zm
c2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hh
cGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCwg
TGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSA9
IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFpbmlu
ZyA9IDApOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7Cisg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAg
ICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7CisgICAgICAgIHJldHVybiBtX3BsYWNlZEZs
b2F0c1RyZWU7CisgICAgfQorICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdP
YmplY3Q6OlR5cGUpOworICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmpl
Y3Q6OlR5cGUpOworICAgIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGlu
Z09iamVjdChGbG9hdGluZ09iamVjdCopOworCisgICAgRmxvYXRpbmdPYmplY3RTZXQgbV9zZXQ7
CisgICAgRmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsKKyAgICB1bnNpZ25l
ZCBtX2xlZnRPYmplY3RzQ291bnQ7CisgICAgdW5zaWduZWQgbV9yaWdodE9iamVjdHNDb3VudDsK
KyAgICBib29sIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlOworICAgIGNvbnN0IFJlbmRlckJsb2Nr
KiBtX3JlbmRlcmVyOworfTsKKworI2lmbmRlZiBOREVCVUcKKy8vIFRoZXNlIHN0cnVjdHVyZXMg
YXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxpbnQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0
cmluZyhjb25zdCBpbnQgdmFsdWUpOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9TdHJp
bmc8RmxvYXRpbmdPYmplY3QqPiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgRmxv
YXRpbmdPYmplY3QqKTsKK307CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRmxvYXRpbmdPYmplY3RzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCmluZGV4IGMzNzJjODE3Mjg1ODk5ZTgwMGEwODc2M2IxNmE0YTA3YzI4MGQ2OWIu
LjNjMzlhY2NkN2VmMzIzNGE1NmYzOTI1MzBhNGZiMGI1N2E5M2VjNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtODcsMTMgKzg3LDYgQEAgc3RydWN0IFNh
bWVTaXplQXNSZW5kZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCb3ggewogCiBDT01QSUxFX0FTU0VS
VChzaXplb2YoUmVuZGVyQmxvY2spID09IHNpemVvZihTYW1lU2l6ZUFzUmVuZGVyQmxvY2spLCBS
ZW5kZXJCbG9ja19zaG91bGRfc3RheV9zbWFsbCk7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzRmxvYXRp
bmdPYmplY3QgewotICAgIHZvaWQqIHBvaW50ZXJzWzJdOwotICAgIExheW91dFJlY3QgcmVjdDsK
LSAgICBpbnQgcGFnaW5hdGlvblN0cnV0OwotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDg7Ci19
OwotCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyQmxvY2s6Ok1hcmdpblZhbHVlcykgPT0g
c2l6ZW9mKExheW91dFVuaXRbNF0pLCBNYXJnaW5WYWx1ZXNfc2hvdWxkX3N0YXlfc21hbGwpOwog
CiBzdHJ1Y3QgU2FtZVNpemVBc01hcmdpbkluZm8gewpAQCAtMjAzLDcgKzE5Niw2IEBAIFJlbmRl
ckJsb2NrOjpSZW5kZXJCbG9jayhFbGVtZW50KiBlbGVtZW50KQogICAgICwgbV9oYXNCb3JkZXJP
clBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkKGZhbHNlKQogewogICAgIHNldENoaWxkcmVuSW5s
aW5lKHRydWUpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QpLCBGbG9hdGluZ09i
amVjdF9zaG91bGRfc3RheV9zbWFsbCk7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRl
ckJsb2NrOjpNYXJnaW5JbmZvKSA9PSBzaXplb2YoU2FtZVNpemVBc01hcmdpbkluZm8pLCBNYXJn
aW5JbmZvX3Nob3VsZF9zdGF5X3NtYWxsKTsKIH0KIApAQCAtNDA5NCw3ICs0MDg2LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzKCkKICAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+Y2xlYXIoKTsKIH0KIAotUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJC
bG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQorRmxvYXRpbmdPYmplY3Qq
IFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAg
QVNTRVJUKG8tPmlzRmxvYXRpbmcoKSk7CiAKQEAgLTQ0NTksNzAgKzQ0NTEsNiBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjbGVhclBlcmNlbnRIZWlnaHREZXNjZW5kYW50c0Zyb20oUmVuZGVyQm94KiBw
YXJlbnQpCiAgICAgfQogfQogCi1pbmxpbmUgc3RhdGljIGJvb2wgcmFuZ2VzSW50ZXJzZWN0KGlu
dCBmbG9hdFRvcCwgaW50IGZsb2F0Qm90dG9tLCBpbnQgb2JqZWN0VG9wLCBpbnQgb2JqZWN0Qm90
dG9tKQotewotICAgIGlmIChvYmplY3RUb3AgPj0gZmxvYXRCb3R0b20gfHwgb2JqZWN0Qm90dG9t
IDwgZmxvYXRUb3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSB0b3Agb2Yg
dGhlIG9iamVjdCBvdmVybGFwcyB0aGUgZmxvYXQKLSAgICBpZiAob2JqZWN0VG9wID49IGZsb2F0
VG9wKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoZSBvYmplY3QgZW5jbG9zZXMg
dGhlIGZsb2F0Ci0gICAgaWYgKG9iamVjdFRvcCA8IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA+
IGZsb2F0Qm90dG9tKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoZSBib3R0b20g
b2YgdGhlIG9iamVjdCBvdmVybGFwcyB0aGUgZmxvYXQKLSAgICBpZiAob2JqZWN0Qm90dG9tID4g
b2JqZWN0VG9wICYmIG9iamVjdEJvdHRvbSA+IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA8PSBm
bG9hdEJvdHRvbSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBib29sIFJlbmRlckJsb2NrOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyPFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Pjo6dXBkYXRl
T2Zmc2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewot
ICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxSaWdo
dChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICBpZiAobG9naWNh
bFJpZ2h0ID4gbV9vZmZzZXQpIHsKLSAgICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsUmlnaHQ7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBib29sIFJlbmRlckJsb2NrOjpDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVy
PFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodD46OnVwZGF0ZU9mZnNldElm
TmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKLXsKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KG1fcmVuZGVy
ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgIGlmIChsb2dpY2FsTGVmdCA8IG1f
b2Zmc2V0KSB7Ci0gICAgICAgIG1fb2Zmc2V0ID0gbG9naWNhbExlZnQ7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+Ci1pbmxpbmUgdm9pZCBS
ZW5kZXJCbG9jazo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNv
bGxlY3RJZk5lZWRlZChjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFsKQotewotICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGludGVydmFsLmRhdGEoKTsKLSAgICBp
ZiAoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSAhPSBGbG9hdFR5cGVWYWx1ZSB8fCAhcmFuZ2VzSW50
ZXJzZWN0KGludGVydmFsLmxvdygpLCBpbnRlcnZhbC5oaWdoKCksIG1fbGluZVRvcCwgbV9saW5l
Qm90dG9tKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQWxsIHRoZSBvYmplY3RzIHJldHVy
bmVkIGZyb20gdGhlIHRyZWUgc2hvdWxkIGJlIGFscmVhZHkgcGxhY2VkLgotICAgIEFTU0VSVChm
bG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChm
bG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTG9naWNhbFRvcChtX3JlbmRlcmVyLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSwgZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxC
b3R0b20obV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIG1fbGluZVRvcCwg
bV9saW5lQm90dG9tKSk7Ci0KLSAgICBib29sIGZsb2F0SXNOZXdFeHRyZW1lID0gdXBkYXRlT2Zm
c2V0SWZOZWVkZWQoZmxvYXRpbmdPYmplY3QpOwotICAgIGlmIChmbG9hdElzTmV3RXh0cmVtZSkK
LSAgICAgICAgbV9vdXRlcm1vc3RGbG9hdCA9IGZsb2F0aW5nT2JqZWN0OwotfQotCi10ZW1wbGF0
ZSA8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgotTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVW
YWx1ZT46OmdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fb3V0ZXJt
b3N0RmxvYXQgPyBtX291dGVybW9zdEZsb2F0LT5sb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIC0gbV9saW5lVG9wIDogTGF5b3V0VW5pdCgxKTsKLX0K
LQogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6dGV4dEluZGVudE9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgTGF5b3V0VW5pdCBjdyA9IDA7CkBAIC04MTcyLDE4MiArODEwMCwxMSBAQCBjb25zdCBjaGFy
KiBSZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJSZW5kZXJCbG9j
ayI7CiB9CiAKLWlubGluZSBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09i
amVjdHMoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5n
TW9kZSkKLSAgICA6IG1fcGxhY2VkRmxvYXRzVHJlZShVbmluaXRpYWxpemVkVHJlZSkKLSAgICAs
IG1fbGVmdE9iamVjdHNDb3VudCgwKQotICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQotICAg
ICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICwg
bV9yZW5kZXJlcihyZW5kZXJlcikKLXsKLX0KLQotUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6fkZsb2F0aW5nT2JqZWN0cygpCi17Ci0gICAgLy8gRklYTUU6IG1fc2V0IHNob3VsZCB1c2Ug
T3duUHRyIGluc3RlYWQuCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fc2V0KTsKLX0KLQotdm9pZCBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKQot
ewotICAgIC8vIENsZWFyIHJlZmVyZW5jZXMgdG8gb3JpZ2luYXRpbmcgbGluZXMsIHNpbmNlIHRo
ZSBsaW5lcyBhcmUgYmVpbmcgZGVsZXRlZAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gbV9zZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghKCgq
aXQpLT5vcmlnaW5hdGluZ0xpbmUoKSkgfHwgJigoKml0KS0+b3JpZ2luYXRpbmdMaW5lKCktPnJl
bmRlcmVyKCkpID09IG1fcmVuZGVyZXIpOwotICAgICAgICAoKml0KS0+c2V0T3JpZ2luYXRpbmdM
aW5lKDApOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmxvYXRpbmdPYmpl
Y3RzKCkKIHsKICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09i
amVjdHModGhpcywgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogfQogCi1pbmxpbmUgdm9p
ZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcigpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGNhbGwgZGVsZXRlQWxsVmFsdWVzLCBleGNlcHQgUmVuZGVyQmxvY2s6OmNs
ZWFyRmxvYXRzCi0gICAgLy8gbGlrZSB0byBwbGF5IGZhc3QgYW5kIGxvb3NlIHdpdGggb3duZXJz
aGlwIG9mIHRoZXNlIHBvaW50ZXJzLgotICAgIC8vIElmIHdlIG1vdmUgdG8gT3duUHRyIHRoYXQg
d2lsbCBmaXggdGhpcyBvd25lcnNoaXAgb2RkbmVzcy4KLSAgICBtX3NldC5jbGVhcigpOwotICAg
IG1fcGxhY2VkRmxvYXRzVHJlZS5jbGVhcigpOwotICAgIG1fbGVmdE9iamVjdHNDb3VudCA9IDA7
Ci0gICAgbV9yaWdodE9iamVjdHNDb3VudCA9IDA7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0
OjpUeXBlIHR5cGUpCi17ICAgIAotICAgIGlmICh0eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9h
dExlZnQpCi0gICAgICAgIG1fbGVmdE9iamVjdHNDb3VudCsrOwotICAgIGVsc2UgCi0gICAgICAg
IG1fcmlnaHRPYmplY3RzQ291bnQrKzsKLX0KLQotaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0czo6ZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUg
dHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQotICAg
ICAgICBtX2xlZnRPYmplY3RzQ291bnQtLTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmlnaHRPYmpl
Y3RzQ291bnQtLTsKLX0KLQotaW5saW5lIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVy
dmFsIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmpl
Y3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIGlmIChtX2hvcml6b250
YWxXcml0aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55KCksIGZsb2F0aW5nT2JqZWN0
LT5mcmFtZVJlY3QoKS5tYXhZKCksIGZsb2F0aW5nT2JqZWN0KTsKLSAgICByZXR1cm4gUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgp
LngoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFgoKSwgZmxvYXRpbmdPYmplY3Qp
OwotfQotCi12b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVj
dChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgQVNTRVJUKCFmbG9hdGlu
Z09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7Ci0KLSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQ
bGFjZWQodHJ1ZSk7Ci0gICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkp
Ci0gICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVj
dChmbG9hdGluZ09iamVjdCkpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGZsb2F0aW5nT2JqZWN0
LT5zZXRJc0luUGxhY2VkVHJlZSh0cnVlKTsgICAgICAKLSNlbmRpZgotfQotCi12b2lkIFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVj
dCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNl
ZCgpICYmIGZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKLQotICAgIGlmIChtX3Bs
YWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9
IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9h
dGluZ09iamVjdCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwot
ICAgIH0KLSAgICAKLSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQoZmFsc2UpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUoZmFsc2Up
OwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6
OmFkZChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgaW5jcmVhc2VPYmpl
Y3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQuYWRkKGZsb2F0aW5n
T2JqZWN0KTsKLSAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCi0gICAgICAgIGFk
ZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QpCi17Ci0gICAgZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7
Ci0gICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKLSAgICBBU1NFUlQoZmxvYXRpbmdP
YmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsK
LSAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCi0gICAgICAgIHJlbW92ZVBsYWNl
ZE9iamVjdChmbG9hdGluZ09iamVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQotewotICAgIEFTU0VSVCghbV9wbGFj
ZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQobV9y
ZW5kZXJlci0+dmlldygpLmludGVydmFsQXJlbmEoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBlbmQgPSBtX3NldC5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKLSAgICAgICAgaWYgKGZs
b2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQotICAgICAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVl
LmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7Ci0gICAgfQot
fQotCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxMZWZ0
T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgb2Zmc2V0
TW9kZSwgTGF5b3V0VW5pdCAqaGVpZ2h0UmVtYWluaW5nKQotewotI2lmICFFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0TW9kZSk7Ci0jZW5kaWYKLQotICAgIExheW91
dFVuaXQgb2Zmc2V0ID0gZml4ZWRPZmZzZXQ7Ci0gICAgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRl
cjxGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIHJvdW5kVG9J
bnQobG9naWNhbFRvcCksIHJvdW5kVG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpLCBv
ZmZzZXQpOwotICAgIHBsYWNlZEZsb2F0c1RyZWUoKS5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFk
YXB0ZXIpOwotCi0gICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAgKmhlaWdodFJlbWFp
bmluZyA9IGFkYXB0ZXIuZ2V0SGVpZ2h0UmVtYWluaW5nKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVy
Lm91dGVybW9zdEZsb2F0KCk7Ci0gICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxv
YXRTaGFwZU9mZnNldCAmJiBvdXRlcm1vc3RGbG9hdCkgewotICAgICAgICBpZiAoU2hhcGVPdXRz
aWRlSW5mbyogc2hhcGVPdXRzaWRlID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBl
T3V0c2lkZUluZm8oKSkgewotICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVu
dHNGb3JDb250YWluaW5nQmxvY2tMaW5lKGxvZ2ljYWxUb3AsIG91dGVybW9zdEZsb2F0LT5sb2dp
Y2FsVG9wKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKSwgbG9naWNhbEhlaWdodCk7Ci0gICAgICAg
ICAgICBvZmZzZXQgKz0gc2hhcGVPdXRzaWRlLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgp
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1M
YXlvdXRVbml0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9mZnNl
dChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUs
IExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKLXsKLSNpZiAhRU5BQkxFKENTU19TSEFQRVMp
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldE1vZGUpOwotI2VuZGlmCi0KLSAgICBMYXlvdXRVbml0
IG9mZnNldCA9IGZpeGVkT2Zmc2V0OwotICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8Rmxv
YXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgcm91bmRUb0ludChs
b2dpY2FsVG9wKSwgcm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIG9mZnNl
dCk7Ci0gICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRl
cik7Ci0KLSAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAqaGVpZ2h0UmVtYWluaW5n
ID0gYWRhcHRlci5nZXRIZWlnaHRSZW1haW5pbmcoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCA9IGFkYXB0ZXIub3V0
ZXJtb3N0RmxvYXQoKTsKLSAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNo
YXBlT2Zmc2V0ICYmIG91dGVybW9zdEZsb2F0KSB7Ci0gICAgICAgIGlmIChTaGFwZU91dHNpZGVJ
bmZvKiBzaGFwZU91dHNpZGUgPSBvdXRlcm1vc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRz
aWRlSW5mbygpKSB7Ci0gICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0Zv
ckNvbnRhaW5pbmdCbG9ja0xpbmUobG9naWNhbFRvcCwgb3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxU
b3AobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAg
IG9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG1pbihmaXhlZE9mZnNldCwgb2Zm
c2V0KTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50
IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24pCiB7CkBAIC04NDk1LDE3ICs4MjUyLDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2hv
d0xpbmVUcmVlQW5kTWFyayhjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDEsIGNvbnN0IGNoYXIq
IG0KICAgICAgICAgcm9vdC0+c2hvd0xpbmVUcmVlQW5kTWFyayhtYXJrZWRCb3gxLCBtYXJrZWRM
YWJlbDEsIG1hcmtlZEJveDIsIG1hcmtlZExhYmVsMiwgb2JqLCAxKTsKIH0KIAotLy8gVGhlc2Ug
aGVscGVycyBhcmUgb25seSB1c2VkIGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2lu
ZyBwdXJwb3Nlcy4KLVN0cmluZyBWYWx1ZVRvU3RyaW5nPGludD46OnN0cmluZyhjb25zdCBpbnQg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKLX0KLQotU3RyaW5n
IFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhjb25z
dCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVpeCVpICVpeCVpKSIsIGZsb2F0aW5nT2JqZWN0LCBm
bG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueCgpLnRvSW50KCksIGZsb2F0aW5nT2JqZWN0LT5m
cmFtZVJlY3QoKS55KCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFgo
KS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WSgpLnRvSW50KCkpOwot
fQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAppbmRleCBkMzg4MGNhZWMwMGJjOGE3NTlmYmYyODM3Y2VlYzE3NjMx
Njg5NDNlLi4yYWNmZGQwZDllYjBjZDg0NDI5NGQ4ODdkYjY3NzdlYjVjNGZkNjgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmlu
ZSBSZW5kZXJCbG9ja19oCiAKICNpbmNsdWRlICJDb2x1bW5JbmZvLmgiCisjaW5jbHVkZSAiRmxv
YXRpbmdPYmplY3RzLmgiCiAjaW5jbHVkZSAiR2FwUmVjdHMuaCIKICNpbmNsdWRlICJQT0RJbnRl
cnZhbFRyZWUuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAgLTYxMCw4ICs2MTEsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWln
aHRDaGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2Fs
SGVpZ2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOwogCiBw
cml2YXRlOgotICAgIGVudW0gU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIHsgU2hhcGVPdXRz
aWRlRmxvYXRTaGFwZU9mZnNldCwgU2hhcGVPdXRzaWRlRmxvYXRNYXJnaW5Cb3hPZmZzZXQgfTsK
LQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0RmxvYXRPZmZzZXRGb3JMaW5lKExheW91dFVu
aXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0
UmVtYWluaW5nLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zm
c2V0TW9kZSkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEZsb2F0T2Zmc2V0Rm9y
TGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91
dFVuaXQqIGhlaWdodFJlbWFpbmluZywgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91
dHNpZGVGbG9hdE9mZnNldE1vZGUpIGNvbnN0OwogICAgIExheW91dFVuaXQgYWRqdXN0TG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IG9mZnNldEZyb21GbG9hdHMsIGJvb2wgYXBw
bHlUZXh0SW5kZW50KSBjb25zdDsKQEAgLTY4MywxNTEgKzY4Miw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgZXZlckhhZExheW91dDsKICAgICB9OwogCi0gICAgY2xhc3MgRmxvYXRpbmdPYmpl
Y3QgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gTm90ZSB0aGF0IFR5
cGUgdXNlcyBiaXRzIHNvIHlvdSBjYW4gdXNlIEZsb2F0TGVmdFJpZ2h0IGFzIGEgbWFzayB0byBx
dWVyeSBmb3IgYm90aCBsZWZ0IGFuZCByaWdodC4KLSAgICAgICAgZW51bSBUeXBlIHsgRmxvYXRM
ZWZ0ID0gMSwgRmxvYXRSaWdodCA9IDIsIEZsb2F0TGVmdFJpZ2h0ID0gMyB9OwotCi0gICAgICAg
IEZsb2F0aW5nT2JqZWN0KEVGbG9hdCB0eXBlKQotICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDAp
Ci0gICAgICAgICAgICAsIG1fb3JpZ2luYXRpbmdMaW5lKDApCi0gICAgICAgICAgICAsIG1fcGFn
aW5hdGlvblN0cnV0KDApCi0gICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKLSAgICAg
ICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCi0gICAgICAgICAgICAsIG1faXNQbGFjZWQo
ZmFsc2UpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZh
bHNlKQotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IE5vRmxv
YXQpOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gTGVmdEZsb2F0KQotICAgICAgICAgICAgICAg
IG1fdHlwZSA9IEZsb2F0TGVmdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUmlnaHRG
bG9hdCkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFJpZ2h0OyAgCi0gICAgICAgIH0K
LQotICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZy
YW1lUmVjdCkKLSAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQotICAgICAgICAgICAgLCBtX29y
aWdpbmF0aW5nTGluZSgwKQotICAgICAgICAgICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCi0g
ICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCi0gICAgICAgICAgICAsIG1fdHlwZSh0
eXBlKQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQotICAgICAgICAgICAgLCBtX2lzUGxhY2VkKHRydWUpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQotI2VuZGlm
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBjbG9uZSgp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBjbG9uZU9iamVj
dCA9IG5ldyBGbG9hdGluZ09iamVjdCh0eXBlKCksIG1fZnJhbWVSZWN0KTsKLSAgICAgICAgICAg
IGNsb25lT2JqZWN0LT5tX3JlbmRlcmVyID0gbV9yZW5kZXJlcjsKLSAgICAgICAgICAgIGNsb25l
T2JqZWN0LT5tX29yaWdpbmF0aW5nTGluZSA9IG1fb3JpZ2luYXRpbmdMaW5lOwotICAgICAgICAg
ICAgY2xvbmVPYmplY3QtPm1fcGFnaW5hdGlvblN0cnV0ID0gbV9wYWdpbmF0aW9uU3RydXQ7Ci0g
ICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9zaG91bGRQYWludCA9IG1fc2hvdWxkUGFpbnQ7Ci0g
ICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9pc0Rlc2NlbmRhbnQgPSBtX2lzRGVzY2VuZGFudDsK
LSAgICAgICAgICAgIGNsb25lT2JqZWN0LT5tX2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKLSAgICAg
ICAgICAgIHJldHVybiBjbG9uZU9iamVjdDsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KLSAgICAgICAg
UmVuZGVyQm94KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgaXNQbGFjZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGxhY2VkOyB9
Ci0gICAgICAgIHZvaWQgc2V0SXNQbGFjZWQoYm9vbCBwbGFjZWQgPSB0cnVlKSB7IG1faXNQbGFj
ZWQgPSBwbGFjZWQ7IH0KLQotICAgICAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IEFTU0VSVChp
c1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgICAgICBMYXlvdXRVbml0
IG1heFgoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1h
eFgoKTsgfQotICAgICAgICBMYXlvdXRVbml0IHkoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgp
KTsgcmV0dXJuIG1fZnJhbWVSZWN0LnkoKTsgfQotICAgICAgICBMYXlvdXRVbml0IG1heFkoKSBj
b25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsgfQot
ICAgICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qud2lk
dGgoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVSZWN0LmhlaWdodCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9Ci0gICAgICAg
IHZvaWQgc2V0WShMYXlvdXRVbml0IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9m
cmFtZVJlY3Quc2V0WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQgd2lk
dGgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lk
dGgpOyB9Ci0gICAgICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IEFTU0VS
VCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9Ci0K
LSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0KCkgY29uc3QgeyBBU1NFUlQoaXNQ
bGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdDsgfQotICAgICAgICB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgp
KTsgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KLQotICAgICAgICBpbnQgcGFnaW5hdGlvblN0
cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KLSAgICAgICAgdm9pZCBz
ZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KSB7IG1fcGFnaW5hdGlvblN0cnV0ID0gc3RydXQ7
IH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBpc0luUGxhY2VkVHJlZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNJblBsYWNlZFRyZWU7IH0KLSAgICAgICAgdm9pZCBzZXRJc0luUGxhY2Vk
VHJlZShib29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1ZTsgfQotI2VuZGlmCi0K
LSAgICAgICAgYm9vbCBzaG91bGRQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUGFpbnQ7
IH0KLSAgICAgICAgdm9pZCBzZXRTaG91bGRQYWludChib29sIHNob3VsZFBhaW50KSB7IG1fc2hv
dWxkUGFpbnQgPSBzaG91bGRQYWludDsgfQotICAgICAgICBib29sIGlzRGVzY2VuZGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEZXNjZW5kYW50OyB9Ci0gICAgICAgIHZvaWQgc2V0SXNEZXNjZW5k
YW50KGJvb2wgaXNEZXNjZW5kYW50KSB7IG1faXNEZXNjZW5kYW50ID0gaXNEZXNjZW5kYW50OyB9
Ci0KLSAgICAgICAgLy8gRklYTUU6IENhbGxlcnMgb2YgdGhlc2UgbWV0aG9kcyBhcmUgZGFuZ2Vy
b3VzIGFuZCBzaG91bGQgYmUgd2hpdGVsaXN0ZWQgZXhwbGljaXRseSBvciByZW1vdmVkLgotICAg
ICAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9
IHJlbmRlcmVyOyB9Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIG9yaWdpbmF0aW5nTGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luYXRpbmdMaW5lOyB9Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2lu
YXRpbmdMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9vcmlnaW5hdGluZ0xpbmUgPSBsaW5l
OyB9Ci0KLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geSgpIDog
eCgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbShib29sIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IG1h
eFkoKSA6IG1heFgoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlID8geCgpIDogeSgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KGJvb2wg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlID8gbWF4WCgpIDogbWF4WSgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFdp
ZHRoKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8gd2lkdGgoKSA6IGhlaWdodCgpOyB9Ci0KLSAgICAgICAgaW50IHBp
eGVsU25hcHBlZExvZ2ljYWxUb3AoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBw
ZWRZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCk7IH0KLSAgICAgICAgaW50IHBpeGVs
U25hcHBlZExvZ2ljYWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBw
ZWRNYXhZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KLSAgICAgICAgaW50
IHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxT
bmFwcGVkWCgpIDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWSgpOyB9Ci0gICAgICAgIGludCBw
aXhlbFNuYXBwZWRMb2dpY2FsUmlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29u
c3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNu
YXBwZWRNYXhYKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KLQotICAgICAg
ICB2b2lkIHNldExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpCi0gICAgICAgICAgICAgICAgc2V0WShsb2dpY2FsVG9wKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRYKGxvZ2ljYWxUb3ApOwotICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgYm9vbCBp
c0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgICAgIHNldFgobG9naWNhbExlZnQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldFkobG9naWNhbExlZnQpOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBzZXRIZWln
aHQobG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0
V2lkdGgobG9naWNhbEhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRMb2dpY2Fs
V2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkK
LSAgICAgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNldEhlaWdodChsb2dpY2FsV2lkdGgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7Ci0gICAgICAgIFJv
b3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwotICAgICAgICBMYXlvdXRSZWN0IG1fZnJh
bWVSZWN0OwotICAgICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7IC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBhIExheW91dFVuaXQsIHNpbmNlIGl0J3MgYSB2ZXJ0aWNhbCBvZmZzZXQuCi0KLSAg
ICAgICAgdW5zaWduZWQgbV90eXBlIDogMjsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVk
KQotICAgICAgICB1bnNpZ25lZCBtX3Nob3VsZFBhaW50IDogMTsKLSAgICAgICAgdW5zaWduZWQg
bV9pc0Rlc2NlbmRhbnQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2lzUGxhY2VkIDogMTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIHVuc2lnbmVkIG1faXNJblBsYWNlZFRyZWUgOiAxOwotI2Vu
ZGlmCi0gICAgfTsKLQogICAgIExheW91dFBvaW50IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlRm9y
Q2hpbGQoY29uc3QgRmxvYXRpbmdPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBG
bG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CkBAIC0xMTkyLDEwNCArMTA0Niw5IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29u
c3Q7CiAKIHByb3RlY3RlZDoKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25z
IHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmplY3QqIGtleSkgeyBy
ZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5LT5yZW5kZXJlcigp
KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgRmxvYXRp
bmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPnJlbmRlcmVyKCkgPT0gYi0+cmVuZGVyZXIoKTsgfQot
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvciB7
Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFJlbmRlckJveCoga2V5KSB7IHJldHVybiBE
ZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBSZW5kZXJCb3gqIGIpIHsgcmV0dXJuIGEt
PnJlbmRlcmVyKCkgPT0gYjsgfQotICAgIH07Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9h
dGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmpl
Y3RTZXQ7Ci0gICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKLSAgICB0eXBlZGVmIFBPREludGVydmFsPGludCwgRmxv
YXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOwotICAgIHR5cGVkZWYgUE9ESW50
ZXJ2YWxUcmVlPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7Ci0gICAg
dHlwZWRlZiBQT0RGcmVlTGlzdEFyZW5hPFBPRFJlZEJsYWNrVHJlZTxGbG9hdGluZ09iamVjdElu
dGVydmFsPjo6Tm9kZT4gSW50ZXJ2YWxBcmVuYTsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8RmxvYXRp
bmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+Ci0gICAgY2xhc3MgQ29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlciB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0
SW50ZXJ2YWwgSW50ZXJ2YWxUeXBlOwotICAgICAgICAKLSAgICAgICAgQ29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGludCBsaW5lVG9wLCBpbnQg
bGluZUJvdHRvbSwgTGF5b3V0VW5pdCYgb2Zmc2V0KQotICAgICAgICAgICAgOiBtX3JlbmRlcmVy
KHJlbmRlcmVyKQotICAgICAgICAgICAgLCBtX2xpbmVUb3AobGluZVRvcCkKLSAgICAgICAgICAg
ICwgbV9saW5lQm90dG9tKGxpbmVCb3R0b20pCi0gICAgICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKLSAgICAgICAgICAgICwgbV9vdXRlcm1vc3RGbG9hdCgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGludCBsb3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZVRvcDsgfQotICAgICAgICBpbnQgaGlnaFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm90
dG9tOyB9Ci0gICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYp
OwotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIC8vIFdoZW4gY29tcHV0aW5nIHRo
ZSBvZmZzZXQgY2F1c2VkIGJ5IHRoZSBmbG9hdHMgb24gYSBnaXZlbiBsaW5lLCBpZgotICAgICAg
ICAvLyB0aGUgb3V0ZXJtb3N0IGZsb2F0IG9uIHRoYXQgbGluZSBoYXMgYSBzaGFwZS1vdXRzaWRl
LCB0aGUgaW5saW5lCi0gICAgICAgIC8vIGNvbnRlbnQgdGhhdCBidXR0cyB1cCBhZ2FpbnN0IHRo
YXQgZmxvYXQgbXVzdCBiZSBwb3NpdGlvbmVkIHVzaW5nCi0gICAgICAgIC8vIHRoZSBjb250b3Vy
cyBvZiB0aGUgc2hhcGUsIG5vdCB0aGUgbWFyZ2luIGJveCBvZiB0aGUgZmxvYXQuCi0gICAgICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3V0ZXJtb3N0RmxvYXQ7IH0KLSNlbmRpZgotCi0gICAgICAgIExheW91dFVuaXQgZ2V0SGVpZ2h0
UmVtYWluaW5nKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIHVwZGF0ZU9m
ZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0Kik7Ci0KLSAgICAgICAgY29uc3QgUmVu
ZGVyQmxvY2sqIG1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBtX2xpbmVUb3A7Ci0gICAgICAgIGlu
dCBtX2xpbmVCb3R0b207Ci0gICAgICAgIExheW91dFVuaXQmIG1fb2Zmc2V0OwotICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdCogbV9vdXRlcm1vc3RGbG9hdDsKLSAgICB9OwotCiAgICAgdm9p
ZCBjcmVhdGVGbG9hdGluZ09iamVjdHMoKTsKIAogcHVibGljOgotCi0gICAgY2xhc3MgRmxvYXRp
bmdPYmplY3RzIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmplY3Rz
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB+RmxvYXRp
bmdPYmplY3RzKCk7Ci0KLSAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICB2b2lkIGFkZChG
bG9hdGluZ09iamVjdCopOwotICAgICAgICB2b2lkIHJlbW92ZShGbG9hdGluZ09iamVjdCopOwot
ICAgICAgICB2b2lkIGFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOwotICAgICAgICB2
b2lkIHJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOwotICAgICAgICB2b2lkIHNl
dEhvcml6b250YWxXcml0aW5nTW9kZShib29sIGIgPSB0cnVlKSB7IG1faG9yaXpvbnRhbFdyaXRp
bmdNb2RlID0gYjsgfQotCi0gICAgICAgIGJvb2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJl
dHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAwOyB9Ci0gICAgICAgIGJvb2wgaGFzUmlnaHRPYmpl
Y3RzKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9iamVjdHNDb3VudCA+IDA7IH0KLSAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9Ci0g
ICAgICAgIHZvaWQgY2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCk7Ci0gICAgICAgIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zm
c2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdo
dFJlbWFpbmluZyA9IDApOwotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldChM
YXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRl
RmxvYXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgRmxvYXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrKiwgYm9v
bCBob3Jpem9udGFsV3JpdGluZ01vZGUpOwotICAgICAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9h
dHNUcmVlKCk7Ci0gICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSYgcGxhY2VkRmxvYXRz
VHJlZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVlLmlz
SW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgp
OwotICAgICAgICAgICAgcmV0dXJuIG1fcGxhY2VkRmxvYXRzVHJlZTsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKLSAg
ICAgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7Ci0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChG
bG9hdGluZ09iamVjdCopOwotCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1fc2V0OwotICAg
ICAgICBGbG9hdGluZ09iamVjdFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOwotICAgICAgICB1bnNp
Z25lZCBtX2xlZnRPYmplY3RzQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3Rz
Q291bnQ7Ci0gICAgICAgIGJvb2wgbV9ob3Jpem9udGFsV3JpdGluZ01vZGU7Ci0gICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOwotCi0gICAgICAgIGZyaWVuZCB2b2lkIFJlbmRl
ckJsb2NrOjpjcmVhdGVGbG9hdGluZ09iamVjdHMoKTsKLSAgICB9OwotCiAgICAgLy8gQWxsb2Nh
dGVkIG9ubHkgd2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0IHZhbHVl
cwogICAgIHN0cnVjdCBSZW5kZXJCbG9ja1JhcmVEYXRhIHsKICAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUmVuZGVyQmxvY2tSYXJlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtMTM5MSwxNiArMTE1MCw2IEBAIGlubGluZSBjb25zdCBSZW5kZXJCbG9jayogdG9SZW5kZXJC
bG9jayhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHZvaWQgdG9SZW5kZXJCbG9jayhjb25z
dCBSZW5kZXJCbG9jayopOwogdm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrJik7
CiAKLSNpZm5kZWYgTkRFQlVHCi0vLyBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGJ5IFBPRElu
dGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotdGVtcGxhdGUgPD4gc3RydWN0IFZh
bHVlVG9TdHJpbmc8aW50PiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgaW50IHZh
bHVlKTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdCo+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3QqKTsKLX07Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gUmVuZGVyQmxvY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBiZmNiOTNjYjdhZDI1Mzlk
Y2YzZGVkNTBiOWZhYjE4NzgwYzRlMzgzLi42MWZhODAxYjAyM2MwNmFlMDYwMDAyNmU1MWJkZGNh
YzAzMjE0NWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgi
CiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTEzNCw3ICsxMzUsNyBAQCBwdWJsaWM6CiAg
ICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRo
OyB9CiAKICAgICB2b2lkIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKExheW91dFVuaXQgbWluaW11bUhl
aWdodCA9IDApOwotICAgIHZvaWQgc2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVl
ZGVkKFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCopOworICAgIHZvaWQgc2hyaW5rQXZhaWxh
YmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKEZsb2F0aW5nT2JqZWN0Kik7CiAgICAgdm9pZCBh
ZGRVbmNvbW1pdHRlZFdpZHRoKGZsb2F0IGRlbHRhKSB7IG1fdW5jb21taXR0ZWRXaWR0aCArPSBk
ZWx0YTsgfQogICAgIHZvaWQgY29tbWl0KCkKICAgICB7CkBAIC0xODgsNyArMTg5LDcgQEAgaW5s
aW5lIHZvaWQgTGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0IHJlcGxh
Y2VkSGVpZ2h0KQogICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsK
IH0KIAotaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zs
b2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCkKK2lubGlu
ZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVk
KEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCkKIHsKICAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1f
YmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoaGVpZ2h0IDwgbmV3RmxvYXQtPmxvZ2lj
YWxUb3AobV9ibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgaGVpZ2h0ID49IG5l
d0Zsb2F0LT5sb2dpY2FsQm90dG9tKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
KQpAQCAtMjAxLDExICsyMDIsMTEgQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFp
bGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2EKICAgICAvLyBi
YXNlZCBvbiB0aGUgbWFyZ2luIGJveC4gSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVlZCB0byB3
YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdG8gZmluZAogICAgIC8v
IHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0IGlzIG9uIHRoZSBzYW1lIHNpZGUgYXMgb3Vy
IG5ld0Zsb2F0LgogICAgIFNoYXBlT3V0c2lkZUluZm8qIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5m
byA9IDA7Ci0gICAgY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOwotICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2lu
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOwogICAgIGZvciAoLS1pdDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAg
ICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBwcmV2aW91c0Zsb2F0ID0gKml0OworICAg
ICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKHBy
ZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zs
b2F0LT50eXBlKCkpIHsKICAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHBy
ZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAg
IGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKQEAgLTIyMSw3ICsyMjIsNyBAQCBpbmxp
bmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRl
ZChSZW5kZXJCbG9jazo6RmxvYQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG5ld0Zsb2F0LT50
eXBlKCkgPT0gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpIHsKKyAgICBp
ZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSB7CiAgICAg
ICAgIGZsb2F0IG5ld0xlZnQgPSBuZXdGbG9hdC0+bG9naWNhbFJpZ2h0KG1fYmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBp
ZiAocHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKQpAQCAtMTUwMiw4ICsxNTAzLDggQEAgcHVibGlj
OgogICAgIFJvb3RJbmxpbmVCb3gqIGVuZExpbmUoKSBjb25zdCB7IHJldHVybiBtX2VuZExpbmU7
IH0KICAgICB2b2lkIHNldEVuZExpbmUoUm9vdElubGluZUJveCogbGluZSkgeyBtX2VuZExpbmUg
PSBsaW5lOyB9CiAKLSAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZsb2F0OyB9Ci0gICAgdm9pZCBzZXRMYXN0RmxvYXQoUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQpIHsgbV9sYXN0RmxvYXQgPSBsYXN0
RmxvYXQ7IH0KKyAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0RmxvYXQ7IH0KKyAgICB2b2lkIHNldExhc3RGbG9hdChGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9CiAKICAgICBWZWN0b3I8UmVuZGVy
QmxvY2s6OkZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0czsgfQogICAg
IApAQCAtMTUxOCw3ICsxNTE5LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZW5kZXJCbG9jazo6RmxvYXRXaXRoUmVjdD4gbV9mbG9hdHM7Ci0gICAgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0KiBtX2xhc3RGbG9hdDsKKyAgICBGbG9hdGluZ09iamVjdCogbV9sYXN0Rmxv
YXQ7CiAgICAgUm9vdElubGluZUJveCogbV9lbmRMaW5lOwogICAgIExpbmVJbmZvIG1fbGluZUlu
Zm87CiAgICAgdW5zaWduZWQgbV9mbG9hdEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCmluZGV4IGRjMjlmNzdhYzY2NWQ5NTI3YTI1YTUxOTc0MmUxOTM3YTc3MDNk
YmMuLmE0YjE0NDNkOTIyMzJhN2EyYzMxY2RkMDg0MWI0OTkyYzhlMzAzMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKICNpbmNsdWRlICJGbG93VGhyZWFkQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKQEAgLTEyNDIsNyArMTI0Myw3IEBAIHZvaWQgUmVuZGVyVmlldzo6cG9wTGF5b3V0U3RhdGVG
b3JDdXJyZW50Rmxvd1RocmVhZCgpCiAgICAgY3VycmVudEZsb3dUaHJlYWQtPnBvcEZsb3dUaHJl
YWRMYXlvdXRTdGF0ZSgpOwogfQogCi1SZW5kZXJCbG9jazo6SW50ZXJ2YWxBcmVuYSogUmVuZGVy
Vmlldzo6aW50ZXJ2YWxBcmVuYSgpCitJbnRlcnZhbEFyZW5hKiBSZW5kZXJWaWV3OjppbnRlcnZh
bEFyZW5hKCkKIHsKICAgICBpZiAoIW1faW50ZXJ2YWxBcmVuYSkKICAgICAgICAgbV9pbnRlcnZh
bEFyZW5hID0gSW50ZXJ2YWxBcmVuYTo6Y3JlYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211080</attachid>
            <date>2013-09-09 13:55:46 -0700</date>
            <delta_ts>2013-09-09 14:03:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120779-20130909135548.patch</filename>
            <type>text/plain</type>
            <size>67061</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY4ZjM4ODFkYjAxYzAw
YzlkZmQxMDhlYWY3YTVlZWEzNmY1NjE3Ny4uZmQxZmYyMjg5YTM1M2MwNTU5NTJlMjc5YzU5Y2Q2
N2YxMWJkMzllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wOS0wOSAgQmVt
IEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KKworICAgICAgICBNb3ZlIEZsb2F0cyBv
dXQgb2YgUmVuZGVyQmxvY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDc3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgRmxvYXRpbmdPYmplY3QsIEZsb2F0aW5nT2JqZWN0cyBhbmQgcmVsYXRl
ZCBjb2RlIGludG8KKyAgICAgICAgRmxvYXRpbmdPYmplY3RzLntoLGNwcH0uIFRoaXMgbm90IG9u
bHkgbWFrZXMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZQorICAgICAgICBhbmQgbWFpbnRhaW5hYmxl
LCBpdCBhbHNvIHdpbGwgYWxsb3cgZm9yIG1vcmUgZGVjb3VwbGluZyBvZgorICAgICAgICBSZW5k
ZXJCbG9jayBhbmQgdGhlIEZsb2F0aW5nT2JqZWN0cywgaG9wZWZ1bGx5IG1ha2luZyBpdCBwb3Nz
aWJsZSBmb3IKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzIHRvIGJlIG1vcmUgY2VudHJhbCBhbmQg
bm90IG5lZWQgdG8gaGF2ZSBvbmUgZm9yIGVhY2gKKyAgICAgICAgUmVuZGVyQmxvY2sgdGhhdCBp
cyBhZmZlY3RlZCBieSBmbG9hdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjo6Q29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpsb3dWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zm
c2V0QWRhcHRlcjo6b3V0ZXJtb3N0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmpl
Y3RzOjp+RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjppbmNy
ZWFzZU9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6
aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09i
amVjdHM6OmFkZFBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OnJlbW92ZVBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dHM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6bG9naWNhbExlZnRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VzSW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ojo6dXBkYXRlT2Zmc2V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb2xsZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRIZWlnaHRSZW1haW5pbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6OjpzdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGluZ09iamVj
dHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNsb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0aW5nT2JqZWN0OjpyZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6aXNQbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzUGxh
Y2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp4KToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0Ojp5KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjptYXhZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2Jq
ZWN0OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdGluZ09iamVjdDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
aW5nT2JqZWN0OjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnNldEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGFnaW5h
dGlvblN0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRQYWdpbmF0
aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmlzSW5QbGFjZWRU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRJc0luUGxhY2VkVHJl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2hvdWxkUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFNob3VsZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojppc0Rlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdGluZ09iamVjdDo6c2V0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3Q6Om9yaWdpbmF0aW5nTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVj
dDo6c2V0T3JpZ2luYXRpbmdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
Ojpsb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2Fs
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6bG9naWNhbFJpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxUb3ApOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRMb2dpY2FsUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9uczo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdHM6OnNldEhvcml6b250YWxXcml0aW5nTW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Omhhc0xlZnRPYmplY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0czo6aGFzUmlnaHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0aW5nT2JqZWN0czo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6cGxhY2VkRmxvYXRzVHJlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFp
bGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpsYXN0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRMYXN0RmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmludGVydmFsQXJlbmEpOgorCiAyMDEzLTA5LTA2
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEludGVybmFscyBz
aG91bGQgYWx3YXlzIGNhdXNlIGEgbGF5b3V0IGJlZm9yZSBjYWxsaW5nIGludG8gVGV4dEl0ZXJh
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNlZmRhNjU2MmFjMmM3YjJhNzA1NjI5NGI1NzA5
MzIxYTQzNGFiYTcuLjE1ODk5ODZjNDY2NTZjNzYzYTY5OGQwYzg5MGM1Y2VjZTZmNTM1ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMDk3LDYgKzIwOTcsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAogICAgIHJlbmRlcmluZy9GaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKKyAg
ICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAogICAgIHJlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHAKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNw
cAogICAgIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCA1MDUyODRhM2Q2MmZkYjc1NWQ1MDhiNzQzZGQxZDM2ZmU3Nzg0MWRhLi41
ZmE3MjA3MjkwYjY5ZjE5NjEwZTI0YmM2YjY1NjJkYWIyNzkzYWZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KQEAgLTQzNDAsNiArNDM0MCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
bG9hdGluZ09iamVjdHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRD
b250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250
cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IGI4MzE0NTg5NzlhMDYzMjQxNDNiNzQxMjYxNmJmZmJhYTE0ZGI1MjIuLjZmMzhk
N2Q2MDcyYmMxMThlMjMwNzA2YjEyZjUwYTU5ZDIxOGQ4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE0
MCw2ICsxMTQwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cCBcCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBcCiAgICAgcmVuZGVy
aW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKKyAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3Rz
LmNwcCBcCiAgICAgcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBcCiAgICAgcmVu
ZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9IaXRU
ZXN0TG9jYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCmluZGV4IGIxMTRmZjMwMThiMGI1ZDMwNjE3MDAwYmJjOWRlNjQyNjAyNDZl
YzcuLjI3NTc0MGYzNmE3YzU2ZjYyMGFlYTYyZTE4ZDc3ODlhMjhjNGI0ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtOTUyOCw2ICs5
NTI4LDcgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRmxvYXRpbmdPYmplY3RzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCI+CiAgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMjAwMDEs
NiArMjAwMDIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlw
c2lzQm94LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xGaXhlZFRhYmxlTGF5b3V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRmxvYXRpbmdPYmplY3RzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcRmxvd1RocmVhZENvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xHYXBSZWN0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIiAvPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ4M2IxYmFk
ODkyYTg5ODMwZDM3NjlkNDA2NTMxOWJlZDFjNzk3NTkuLjQ2NjY2MmUxNjk0Y2NjMWE4NWViYzYx
OWU4NWFjYWI4N2Q1ZTEwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzNzUsNiArMzM3NSw4IEBACiAJCTk4Q0U0MzJBMTI5
RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRl
ci5oICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0
MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2Rjk3MTU4ODY5QzgwMDExQThDNCAv
KiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5n
TGlzdEN1c3RvbS5jcHAgKi87IH07CisJCTlBNTI4RTgzMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9h
dGluZ09iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUE1MjhFODExN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi87
IH07CisJCTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBNTI4RTgyMTdEN0Y1
MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjFBQjA3QzE2NDhDN0M0MDA1MUYzRjIgLyogSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTlCMjRERThFMTUx
OTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxC
RElFbGVtZW50LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3Rl
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhB
NzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NjEsNiArOTk2Myw4IEBACiAJCTk4Q0U0MzI5
MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOThF
QjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJpbmdM
aXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUE1MjhFODExN0Q3
RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdGluZ09iamVjdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3OTE2NDhDNjlEMDA1MUYzRjIgLyogSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxQUIwN0IxNjQ4QzdDNDAw
NTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMjRERThDMTUxOTRC
OTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MQkRJRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjAzNTYsNiArMjAzNjAsOCBAQAogCQkJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oICovLAogCQkJCUE4Q0ZGMDQ4MEExNTRGMDkwMDBBNDIzNCAvKiBG
aXhlZFRhYmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0QTBBMTU0RjA5MDAwQTQyMzQgLyog
Rml4ZWRUYWJsZUxheW91dC5oICovLAorCQkJCTlBNTI4RTgxMTdEN0Y1MkYwMEFBOTUxOCAvKiBG
bG9hdGluZ09iamVjdHMuY3BwICovLAorCQkJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBG
bG9hdGluZ09iamVjdHMuaCAqLywKIAkJCQlENzJGNkQ3NzE1MzE1OUEzMDAxRUU0NEUgLyogRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwICovLAogCQkJCUQ3MkY2RDc4MTUzMTU5QTMwMDFFRTQ0RSAv
KiBGbG93VGhyZWFkQ29udHJvbGxlci5oICovLAogCQkJCTkzNUM0Nzc0MDlBQzREOEQwMEE2QUFC
NCAvKiBHYXBSZWN0cy5oICovLApAQCAtMjEzNDMsNiArMjEzNDksNyBAQAogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUZFMTE1RkFCMTY3OTg4Q0Qw
MDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTRBQURFRTE2RDJDMzc0MDAwMjZGRkMgLyogQWJzdHJhY3RTUUxTdGF0ZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTZFODRFOUUxMTc2NjhCRjEwMDgxNUI2OCAvKiBSYXN0ZXJT
aGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFERUYxNkQyQzM3NDAwMDI2RkZDIC8qIEFi
c3RyYWN0U1FMU3RhdGVtZW50QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDkyOSw2ICsy
NDkzNiw3IEBACiAJCQkJRkQzMTYwM0QxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2VyTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTA3MDdFNjEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEyQUEwRUZBQzkwNjAwOUQw
Q0FGIC8qIEFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QTUyOEU4MzE3RDdGNTJG
MDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNkZF
MTExMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxNkZFMTEzMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQ5RTkxMkFDMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb25M
aXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRp
bmdPYmplY3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzlhOTk2OTAyYjA1ZDJjMTE3ZmYxMzI3Yjg2ZmM1
M2M1MjQ5N2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zs
b2F0aW5nT2JqZWN0cy5jcHAKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNyBE
YXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgeworICAgIHZvaWQqIHBv
aW50ZXJzWzJdOworICAgIExheW91dFJlY3QgcmVjdDsKKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0
OworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDg7Cit9OworCitDT01QSUxFX0FTU0VSVChzaXpl
b2YoRmxvYXRpbmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QpLCBG
bG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9zbWFsbCk7CisKK3RlbXBsYXRlIDxGbG9hdGluZ09i
amVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KK2NsYXNzIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0
ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBJbnRlcnZh
bFR5cGU7CisKKyAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tLCBMYXlvdXRVbml0JiBvZmZz
ZXQpCisgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKKyAgICAgICAgLCBtX2xpbmVUb3Ao
bGluZVRvcCkKKyAgICAgICAgLCBtX2xpbmVCb3R0b20obGluZUJvdHRvbSkKKyAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9vdXRlcm1vc3RGbG9hdCgwKQorICAgIHsKKyAg
ICB9CisKKyAgICBpbnQgbG93VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xpbmVUb3A7IH0KKyAg
ICBpbnQgaGlnaFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm90dG9tOyB9CisgICAgdm9p
ZCBjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJik7CisKKyNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKKyAgICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgb2Zmc2V0IGNhdXNlZCBieSB0aGUg
ZmxvYXRzIG9uIGEgZ2l2ZW4gbGluZSwgaWYKKyAgICAvLyB0aGUgb3V0ZXJtb3N0IGZsb2F0IG9u
IHRoYXQgbGluZSBoYXMgYSBzaGFwZS1vdXRzaWRlLCB0aGUgaW5saW5lCisgICAgLy8gY29udGVu
dCB0aGF0IGJ1dHRzIHVwIGFnYWluc3QgdGhhdCBmbG9hdCBtdXN0IGJlIHBvc2l0aW9uZWQgdXNp
bmcKKyAgICAvLyB0aGUgY29udG91cnMgb2YgdGhlIHNoYXBlLCBub3QgdGhlIG1hcmdpbiBib3gg
b2YgdGhlIGZsb2F0LgorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJtb3N0RmxvYXQ7IH0KKyNlbmRpZgorCisgICAgTGF5b3V0
VW5pdCBnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIHVw
ZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0Kik7CisKKyAgICBjb25zdCBS
ZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKKyAgICBpbnQgbV9saW5lVG9wOworICAgIGludCBtX2xp
bmVCb3R0b207CisgICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7CisgICAgY29uc3QgRmxvYXRpbmdP
YmplY3QqIG1fb3V0ZXJtb3N0RmxvYXQ7Cit9OworCitGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5n
T2JqZWN0cyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRp
bmdNb2RlKQorICAgIDogbV9wbGFjZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQorICAg
ICwgbV9sZWZ0T2JqZWN0c0NvdW50KDApCisgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCisg
ICAgLCBtX2hvcml6b250YWxXcml0aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAg
LCBtX3JlbmRlcmVyKHJlbmRlcmVyKQoreworfQorCitGbG9hdGluZ09iamVjdHM6On5GbG9hdGlu
Z09iamVjdHMoKQoreworICAgIC8vIEZJWE1FOiBtX3NldCBzaG91bGQgdXNlIE93blB0ciBpbnN0
ZWFkLgorICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3NldCk7Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmpl
Y3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKQoreworICAgIC8vIENsZWFyIHJlZmVyZW5j
ZXMgdG8gb3JpZ2luYXRpbmcgbGluZXMsIHNpbmNlIHRoZSBsaW5lcyBhcmUgYmVpbmcgZGVsZXRl
ZAorICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEFTU0VSVCghKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKSkg
fHwgJigoKml0KS0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkpID09IG1fcmVuZGVyZXIp
OworICAgICAgICAoKml0KS0+c2V0T3JpZ2luYXRpbmdMaW5lKDApOworICAgIH0KK30KKwordm9p
ZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
Y2FsbCBkZWxldGVBbGxWYWx1ZXMsIGV4Y2VwdCBjbGVhckZsb2F0cworICAgIC8vIGxpa2UgdG8g
cGxheSBmYXN0IGFuZCBsb29zZSB3aXRoIG93bmVyc2hpcCBvZiB0aGVzZSBwb2ludGVycy4KKyAg
ICAvLyBJZiB3ZSBtb3ZlIHRvIE93blB0ciB0aGF0IHdpbGwgZml4IHRoaXMgb3duZXJzaGlwIG9k
ZG5lc3MuCisgICAgbV9zZXQuY2xlYXIoKTsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUuY2xlYXIo
KTsKKyAgICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOworICAgIG1fcmlnaHRPYmplY3RzQ291bnQg
PSAwOworfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6aW5jcmVhc2VPYmplY3RzQ291bnQoRmxv
YXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVj
dDo6RmxvYXRMZWZ0KQorICAgICAgICBtX2xlZnRPYmplY3RzQ291bnQrKzsKKyAgICBlbHNlCisg
ICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQrKzsKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6
OmRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUpCit7CisgICAg
aWYgKHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKKyAgICAgICAgbV9sZWZ0T2Jq
ZWN0c0NvdW50LS07CisgICAgZWxzZQorICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50LS07Cit9
CisKK0Zsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgRmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZs
b2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBpZiAo
bV9ob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgIHJldHVybiBGbG9hdGluZ09iamVjdElu
dGVydmFsKGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55KCksIGZsb2F0aW5nT2JqZWN0LT5m
cmFtZVJlY3QoKS5tYXhZKCksIGZsb2F0aW5nT2JqZWN0KTsKKyAgICByZXR1cm4gRmxvYXRpbmdP
YmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueCgpLCBmbG9hdGluZ09i
amVjdC0+ZnJhbWVSZWN0KCkubWF4WCgpLCBmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgRmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0KQoreworICAgIEFTU0VSVCghZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOwor
CisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKHRydWUpOworICAgIGlmIChtX3BsYWNl
ZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQorICAgICAgICBtX3BsYWNlZEZsb2F0c1RyZWUu
YWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUodHJ1ZSk7Cisj
ZW5kaWYKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0
LT5pc1BsYWNlZCgpICYmIGZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKworICAg
IGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGJvb2wg
cmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JGbG9hdGluZ09i
amVjdChmbG9hdGluZ09iamVjdCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJl
bW92ZWQpOworICAgIH0KKworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1BsYWNlZChmYWxzZSk7
CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZShm
YWxzZSk7CisjZW5kaWYKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6OmFkZChGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRp
bmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQuYWRkKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBp
ZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgIGFkZFBsYWNlZE9iamVjdChm
bG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAgIGRlY3JlYXNlT2JqZWN0c0NvdW50KGZs
b2F0aW5nT2JqZWN0LT50eXBlKCkpOworICAgIG1fc2V0LnJlbW92ZShmbG9hdGluZ09iamVjdCk7
CisgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpIHx8ICFmbG9hdGluZ09iamVj
dC0+aXNJblBsYWNlZFRyZWUoKSk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgp
KQorICAgICAgICByZW1vdmVQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOworfQorCit2b2lk
IEZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQoreworICAgIEFTU0VS
VCghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgaWYgKG1fc2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZO
ZWVkZWQobV9yZW5kZXJlci0+dmlldygpLmludGVydmFsQXJlbmEoKSk7CisgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7CisgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKKyAgICAg
ICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQorICAgICAgICAgICAgbV9wbGFjZWRG
bG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7
CisgICAgfQorfQorCitMYXlvdXRVbml0IEZsb2F0aW5nT2JqZWN0czo6bG9naWNhbExlZnRPZmZz
ZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2Rl
LCBMYXlvdXRVbml0ICpoZWlnaHRSZW1haW5pbmcpCit7CisjaWYgIUVOQUJMRShDU1NfU0hBUEVT
KQorICAgIFVOVVNFRF9QQVJBTShvZmZzZXRNb2RlKTsKKyNlbmRpZgorCisgICAgTGF5b3V0VW5p
dCBvZmZzZXQgPSBmaXhlZE9mZnNldDsKKyAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZs
b2F0aW5nT2JqZWN0OjpGbG9hdExlZnQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgcm91bmRUb0ludChs
b2dpY2FsVG9wKSwgcm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIG9mZnNl
dCk7CisgICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRl
cik7CisKKyAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQorICAgICAgICAqaGVpZ2h0UmVtYWluaW5n
ID0gYWRhcHRlci5nZXRIZWlnaHRSZW1haW5pbmcoKTsKKworI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCA9IGFkYXB0ZXIub3V0
ZXJtb3N0RmxvYXQoKTsKKyAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNo
YXBlT2Zmc2V0ICYmIG91dGVybW9zdEZsb2F0KSB7CisgICAgICAgIGlmIChTaGFwZU91dHNpZGVJ
bmZvKiBzaGFwZU91dHNpZGUgPSBvdXRlcm1vc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRz
aWRlSW5mbygpKSB7CisgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0Zv
ckNvbnRhaW5pbmdCbG9ja0xpbmUobG9naWNhbFRvcCwgb3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxU
b3AobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAg
IG9mZnNldCArPSBzaGFwZU91dHNpZGUtPnJpZ2h0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK0xheW91
dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhl
ZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlLCBMYXlvdXRVbml0ICpoZWln
aHRSZW1haW5pbmcpCit7CisjaWYgIUVOQUJMRShDU1NfU0hBUEVTKQorICAgIFVOVVNFRF9QQVJB
TShvZmZzZXRNb2RlKTsKKyNlbmRpZgorCisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBmaXhlZE9m
ZnNldDsKKyAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9h
dFJpZ2h0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIHJvdW5kVG9JbnQobG9naWNhbFRvcCksIHJvdW5k
VG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpLCBvZmZzZXQpOworICAgIHBsYWNlZEZs
b2F0c1RyZWUoKS5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFkYXB0ZXIpOworCisgICAgaWYgKGhl
aWdodFJlbWFpbmluZykKKyAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGFkYXB0ZXIuZ2V0SGVp
Z2h0UmVtYWluaW5nKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91dGVybW9zdEZsb2F0KCk7Cisg
ICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBvdXRl
cm1vc3RGbG9hdCkgeworICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgeworICAg
ICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JDb250YWluaW5nQmxvY2tM
aW5lKGxvZ2ljYWxUb3AsIG91dGVybW9zdEZsb2F0LT5sb2dpY2FsVG9wKG1faG9yaXpvbnRhbFdy
aXRpbmdNb2RlKSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2hhcGVP
dXRzaWRlLT5sZWZ0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKworICAgIHJldHVybiBtaW4oZml4ZWRPZmZzZXQsIG9mZnNldCk7Cit9CisKK2lubGlu
ZSBzdGF0aWMgYm9vbCByYW5nZXNJbnRlcnNlY3QoaW50IGZsb2F0VG9wLCBpbnQgZmxvYXRCb3R0
b20sIGludCBvYmplY3RUb3AsIGludCBvYmplY3RCb3R0b20pCit7CisgICAgaWYgKG9iamVjdFRv
cCA+PSBmbG9hdEJvdHRvbSB8fCBvYmplY3RCb3R0b20gPCBmbG9hdFRvcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gVGhlIHRvcCBvZiB0aGUgb2JqZWN0IG92ZXJsYXBzIHRoZSBm
bG9hdAorICAgIGlmIChvYmplY3RUb3AgPj0gZmxvYXRUb3ApCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gVGhlIG9iamVjdCBlbmNsb3NlcyB0aGUgZmxvYXQKKyAgICBpZiAob2JqZWN0
VG9wIDwgZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tID4gZmxvYXRCb3R0b20pCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gVGhlIGJvdHRvbSBvZiB0aGUgb2JqZWN0IG92ZXJsYXBzIHRo
ZSBmbG9hdAorICAgIGlmIChvYmplY3RCb3R0b20gPiBvYmplY3RUb3AgJiYgb2JqZWN0Qm90dG9t
ID4gZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tIDw9IGZsb2F0Qm90dG9tKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJv
b2wgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Pjo6
dXBkYXRlT2Zmc2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0
KQoreworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2lj
YWxSaWdodChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBpZiAo
bG9naWNhbFJpZ2h0ID4gbV9vZmZzZXQpIHsKKyAgICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsUmln
aHQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRp
bmdPYmplY3Q6OkZsb2F0UmlnaHQ+Ojp1cGRhdGVPZmZzZXRJZk5lZWRlZChjb25zdCBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9
IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVmdChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKTsKKyAgICBpZiAobG9naWNhbExlZnQgPCBtX29mZnNldCkgeworICAgICAgICBt
X29mZnNldCA9IGxvZ2ljYWxMZWZ0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRU
eXBlVmFsdWU+CitpbmxpbmUgdm9pZCBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0VHlw
ZVZhbHVlPjo6Y29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYgaW50ZXJ2YWwpCit7
CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaW50ZXJ2YWwuZGF0
YSgpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+dHlwZSgpICE9IEZsb2F0VHlwZVZhbHVlIHx8
ICFyYW5nZXNJbnRlcnNlY3QoaW50ZXJ2YWwubG93KCksIGludGVydmFsLmhpZ2goKSwgbV9saW5l
VG9wLCBtX2xpbmVCb3R0b20pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbGwgdGhlIG9i
amVjdHMgcmV0dXJuZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisg
ICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKTsKKyAgICBBU1NFUlQocmFuZ2Vz
SW50ZXJzZWN0KGZsb2F0aW5nT2JqZWN0LT5waXhlbFNuYXBwZWRMb2dpY2FsVG9wKG1fcmVuZGVy
ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFw
cGVkTG9naWNhbEJvdHRvbShtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwg
bV9saW5lVG9wLCBtX2xpbmVCb3R0b20pKTsKKworICAgIGJvb2wgZmxvYXRJc05ld0V4dHJlbWUg
PSB1cGRhdGVPZmZzZXRJZk5lZWRlZChmbG9hdGluZ09iamVjdCk7CisgICAgaWYgKGZsb2F0SXNO
ZXdFeHRyZW1lKQorICAgICAgICBtX291dGVybW9zdEZsb2F0ID0gZmxvYXRpbmdPYmplY3Q7Cit9
CisKK3RlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KK0xheW91
dFVuaXQgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmdldEhlaWdo
dFJlbWFpbmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3V0ZXJtb3N0RmxvYXQgPyBtX291
dGVybW9zdEZsb2F0LT5sb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpIC0gbV9saW5lVG9wIDogTGF5b3V0VW5pdCgxKTsKK30KKworI2lmbmRlZiBOREVC
VUcKKy8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVl
IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCitTdHJpbmcgVmFsdWVUb1N0cmluZzxpbnQ+OjpzdHJp
bmcoY29uc3QgaW50IHZhbHVlKQoreworICAgIHJldHVybiBTdHJpbmc6Om51bWJlcih2YWx1ZSk7
Cit9CisKK1N0cmluZyBWYWx1ZVRvU3RyaW5nPEZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhjb25z
dCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCIlcCAoJWl4JWkgJWl4JWkpIiwgZmxvYXRpbmdPYmplY3QsIGZsb2F0aW5nT2JqZWN0
LT5mcmFtZVJlY3QoKS54KCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnko
KS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WCgpLnRvSW50KCksIGZs
b2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhZKCkudG9JbnQoKSk7Cit9CisjZW5kaWYKKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmxvYXRpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRp
bmdPYmplY3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZlZGUwN2YxYTI3Yjc3MDI4ZjExMDc1ZjJlN2JmZjQ1
NjM1YzU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9h
dGluZ09iamVjdHMuaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA3IERhdmlk
IFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEZsb2F0aW5nT2JqZWN0
c19oCisjZGVmaW5lIEZsb2F0aW5nT2JqZWN0c19oCisKKyNpbmNsdWRlICJQT0RJbnRlcnZhbFRy
ZWUuaCIKKyNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2s7CitjbGFz
cyBSZW5kZXJCb3g7CisKK2VudW0gU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIHsgU2hhcGVP
dXRzaWRlRmxvYXRTaGFwZU9mZnNldCwgU2hhcGVPdXRzaWRlRmxvYXRNYXJnaW5Cb3hPZmZzZXQg
fTsKKworY2xhc3MgRmxvYXRpbmdPYmplY3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZs
b2F0aW5nT2JqZWN0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8g
Tm90ZSB0aGF0IFR5cGUgdXNlcyBiaXRzIHNvIHlvdSBjYW4gdXNlIEZsb2F0TGVmdFJpZ2h0IGFz
IGEgbWFzayB0byBxdWVyeSBmb3IgYm90aCBsZWZ0IGFuZCByaWdodC4KKyAgICBlbnVtIFR5cGUg
eyBGbG9hdExlZnQgPSAxLCBGbG9hdFJpZ2h0ID0gMiwgRmxvYXRMZWZ0UmlnaHQgPSAzIH07CisK
KyAgICBGbG9hdGluZ09iamVjdChFRmxvYXQgdHlwZSkKKyAgICAgICAgOiBtX3JlbmRlcmVyKDAp
CisgICAgICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAgICAgLCBtX3BhZ2luYXRpb25T
dHJ1dCgwKQorICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAgICAgLCBtX2lzRGVz
Y2VuZGFudChmYWxzZSkKKyAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCisgICAgeworICAg
ICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gTGVmdEZs
b2F0KQorICAgICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OworICAgICAgICBlbHNlIGlmICh0
eXBlID09IFJpZ2h0RmxvYXQpCisgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFJpZ2h0OworICAg
IH0KKworICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0UmVjdCYgZnJh
bWVSZWN0KQorICAgICAgICA6IG1fcmVuZGVyZXIoMCkKKyAgICAgICAgLCBtX29yaWdpbmF0aW5n
TGluZSgwKQorICAgICAgICAsIG1fZnJhbWVSZWN0KGZyYW1lUmVjdCkKKyAgICAgICAgLCBtX3Bh
Z2luYXRpb25TdHJ1dCgwKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc2hv
dWxkUGFpbnQodHJ1ZSkKKyAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKKyAgICAgICAg
LCBtX2lzUGxhY2VkKHRydWUpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1faXNJblBsYWNl
ZFRyZWUoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRpbmdPYmplY3Qq
IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBjbG9uZU9iamVj
dCA9IG5ldyBGbG9hdGluZ09iamVjdCh0eXBlKCksIG1fZnJhbWVSZWN0KTsKKyAgICAgICAgY2xv
bmVPYmplY3QtPm1fcmVuZGVyZXIgPSBtX3JlbmRlcmVyOworICAgICAgICBjbG9uZU9iamVjdC0+
bV9vcmlnaW5hdGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGluZTsKKyAgICAgICAgY2xvbmVPYmpl
Y3QtPm1fcGFnaW5hdGlvblN0cnV0ID0gbV9wYWdpbmF0aW9uU3RydXQ7CisgICAgICAgIGNsb25l
T2JqZWN0LT5tX3Nob3VsZFBhaW50ID0gbV9zaG91bGRQYWludDsKKyAgICAgICAgY2xvbmVPYmpl
Y3QtPm1faXNEZXNjZW5kYW50ID0gbV9pc0Rlc2NlbmRhbnQ7CisgICAgICAgIGNsb25lT2JqZWN0
LT5tX2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKKyAgICAgICAgcmV0dXJuIGNsb25lT2JqZWN0Owor
ICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+
KG1fdHlwZSk7IH0KKyAgICBSZW5kZXJCb3gqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlcjsgfQorCisgICAgYm9vbCBpc1BsYWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGFj
ZWQ7IH0KKyAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxh
Y2VkID0gcGxhY2VkOyB9CisKKyAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IEFTU0VSVChpc1Bs
YWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQorICAgIExheW91dFVuaXQgbWF4WCgp
IGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WCgpOyB9
CisgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBt
X2ZyYW1lUmVjdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IEFTU0VSVChp
c1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsgfQorICAgIExheW91dFVuaXQg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CisgICAgTGF5b3V0
VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQorCisg
ICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBt
X2ZyYW1lUmVjdC5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZKExheW91dFVuaXQgeSkgeyBBU1NF
UlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CisgICAgdm9pZCBz
ZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1f
ZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVu
aXQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhl
aWdodChoZWlnaHQpOyB9CisKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QoKSBjb25z
dCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisgICAgdm9pZCBz
ZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0KSB7IEFTU0VSVCghaXNJblBs
YWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisKKyAgICBpbnQgcGFnaW5h
dGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KKyAgICB2b2lk
IHNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpIHsgbV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1
dDsgfQorCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNJblBsYWNlZFRyZWUoKSBjb25zdCB7
IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9CisgICAgdm9pZCBzZXRJc0luUGxhY2VkVHJlZShi
b29sIHZhbHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1ZTsgfQorI2VuZGlmCisKKyAgICBi
b29sIHNob3VsZFBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYWludDsgfQorICAgIHZv
aWQgc2V0U2hvdWxkUGFpbnQoYm9vbCBzaG91bGRQYWludCkgeyBtX3Nob3VsZFBhaW50ID0gc2hv
dWxkUGFpbnQ7IH0KKyAgICBib29sIGlzRGVzY2VuZGFudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNE
ZXNjZW5kYW50OyB9CisgICAgdm9pZCBzZXRJc0Rlc2NlbmRhbnQoYm9vbCBpc0Rlc2NlbmRhbnQp
IHsgbV9pc0Rlc2NlbmRhbnQgPSBpc0Rlc2NlbmRhbnQ7IH0KKworICAgIC8vIEZJWE1FOiBDYWxs
ZXJzIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGRhbmdlcm91cyBhbmQgc2hvdWxkIGJlIHdoaXRlbGlz
dGVkIGV4cGxpY2l0bHkgb3IgcmVtb3ZlZC4KKyAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlckJv
eCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CisgICAgUm9vdElubGluZUJv
eCogb3JpZ2luYXRpbmdMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hdGluZ0xpbmU7IH0K
KyAgICB2b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fb3Jp
Z2luYXRpbmdMaW5lID0gbGluZTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKGJvb2wg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlID8geSgpIDogeCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKGJvb2wg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlID8gbWF4WSgpIDogbWF4WCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdChi
b29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSA/IHgoKSA6IHkoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KGJv
b2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlID8gbWF4WCgpIDogbWF4WSgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KKworICAgIGludCBwaXhlbFNu
YXBwZWRMb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWSgp
IDogZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExv
Z2ljYWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCkg
OiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVk
TG9naWNhbExlZnQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCkgOiBm
cmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNh
bFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpIDogZnJh
bWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9CisKKyAgICB2b2lkIHNldExvZ2ljYWxUb3Ao
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAg
IHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0
WShsb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0WChsb2dpY2FsVG9w
KTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
LCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgc2V0WChsb2dpY2FsTGVmdCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNldFkobG9naWNhbExlZnQpOworICAgIH0KKyAgICB2b2lk
IHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBib29sIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQorICAgICAgICAgICAgc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsKKyAgICB9CisgICAgdm9pZCBz
ZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpCisgICAgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
CisgICAgICAgICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
UmVuZGVyQm94KiBtX3JlbmRlcmVyOworICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdM
aW5lOworICAgIExheW91dFJlY3QgbV9mcmFtZVJlY3Q7CisgICAgaW50IG1fcGFnaW5hdGlvblN0
cnV0OyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBMYXlvdXRVbml0LCBzaW5jZSBpdCdzIGEg
dmVydGljYWwgb2Zmc2V0LgorCisgICAgdW5zaWduZWQgbV90eXBlIDogMjsgLy8gVHlwZSAobGVm
dCBvciByaWdodCBhbGlnbmVkKQorICAgIHVuc2lnbmVkIG1fc2hvdWxkUGFpbnQgOiAxOworICAg
IHVuc2lnbmVkIG1faXNEZXNjZW5kYW50IDogMTsKKyAgICB1bnNpZ25lZCBtX2lzUGxhY2VkIDog
MTsKKyNpZm5kZWYgTkRFQlVHCisgICAgdW5zaWduZWQgbV9pc0luUGxhY2VkVHJlZSA6IDE7Cisj
ZW5kaWYKK307CisKK3N0cnVjdCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5nT2JqZWN0KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRI
YXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleS0+cmVuZGVyZXIoKSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgRmxvYXRpbmdPYmplY3QqIGIpIHsgcmV0
dXJuIGEtPnJlbmRlcmVyKCkgPT0gYi0+cmVuZGVyZXIoKTsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CitzdHJ1Y3QgRmxv
YXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goUmVu
ZGVyQm94KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNo
KGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgUmVuZGVy
Qm94KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7IH0KK307Cit0eXBlZGVmIExpc3RI
YXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zPiBG
bG9hdGluZ09iamVjdFNldDsKK3R5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJh
dG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Cit0eXBlZGVmIFBPREludGVydmFsPGludCwg
RmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOwordHlwZWRlZiBQT0RJbnRl
cnZhbFRyZWU8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0VHJlZTsKK3R5cGVk
ZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8RmxvYXRpbmdPYmplY3RJbnRlcnZh
bD46Ok5vZGU+IEludGVydmFsQXJlbmE7CisKKworY2xhc3MgRmxvYXRpbmdPYmplY3RzIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdHMpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sq
LCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSk7CisgICAgfkZsb2F0aW5nT2JqZWN0cygpOwor
CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgYWRkKEZsb2F0aW5nT2JqZWN0Kik7CisgICAg
dm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIGFkZFBsYWNlZE9iamVjdChG
bG9hdGluZ09iamVjdCopOworICAgIHZvaWQgcmVtb3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2Jq
ZWN0Kik7CisgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1ZSkg
eyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KKworICAgIGJvb2wgaGFzTGVmdE9iamVj
dHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAwOyB9CisgICAgYm9vbCBo
YXNSaWdodE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0T2JqZWN0c0NvdW50ID4gMDsg
fQorICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25zdCB7IHJldHVybiBtX3Nl
dDsgfQorICAgIHZvaWQgY2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCk7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZz
ZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0
UmVtYWluaW5nID0gMCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0
VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0
U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFpbmluZyA9IDApOworcHJpdmF0ZToK
KyAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7CisgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wbGFj
ZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgICAgIGNvbXB1dGVQbGFjZWRG
bG9hdHNUcmVlKCk7CisgICAgICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7CisgICAgfQor
ICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAg
IHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAgIEZs
b2F0aW5nT2JqZWN0SW50ZXJ2YWwgaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09i
amVjdCopOworCisgICAgRmxvYXRpbmdPYmplY3RTZXQgbV9zZXQ7CisgICAgRmxvYXRpbmdPYmpl
Y3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsKKyAgICB1bnNpZ25lZCBtX2xlZnRPYmplY3RzQ291
bnQ7CisgICAgdW5zaWduZWQgbV9yaWdodE9iamVjdHNDb3VudDsKKyAgICBib29sIG1faG9yaXpv
bnRhbFdyaXRpbmdNb2RlOworICAgIGNvbnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOworfTsK
KworI2lmbmRlZiBOREVCVUcKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50
ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFs
dWVUb1N0cmluZzxpbnQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBpbnQgdmFs
dWUpOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8RmxvYXRpbmdPYmplY3Qq
PiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgRmxvYXRpbmdPYmplY3QqKTsKK307
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRmxvYXRpbmdP
YmplY3RzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDE2
YmY3Y2VlZDA5NjlhZDA0MDY0ODlhNWY1NTUyOGYzNmU4OThmOGQuLjlkYzM2OGFkMDliYzM2MjBj
MDlmNzE2YjhiNzdlM2E3Y2M1NjRkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcApAQCAtODcsMTMgKzg3LDYgQEAgc3RydWN0IFNhbWVTaXplQXNSZW5kZXJCbG9j
ayA6IHB1YmxpYyBSZW5kZXJCb3ggewogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyQmxv
Y2spID09IHNpemVvZihTYW1lU2l6ZUFzUmVuZGVyQmxvY2spLCBSZW5kZXJCbG9ja19zaG91bGRf
c3RheV9zbWFsbCk7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgewotICAgIHZv
aWQqIHBvaW50ZXJzWzJdOwotICAgIExheW91dFJlY3QgcmVjdDsKLSAgICBpbnQgcGFnaW5hdGlv
blN0cnV0OwotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDg7Ci19OwotCiBDT01QSUxFX0FTU0VS
VChzaXplb2YoUmVuZGVyQmxvY2s6Ok1hcmdpblZhbHVlcykgPT0gc2l6ZW9mKExheW91dFVuaXRb
NF0pLCBNYXJnaW5WYWx1ZXNfc2hvdWxkX3N0YXlfc21hbGwpOwogCiBzdHJ1Y3QgU2FtZVNpemVB
c01hcmdpbkluZm8gewpAQCAtMjAzLDcgKzE5Niw2IEBAIFJlbmRlckJsb2NrOjpSZW5kZXJCbG9j
ayhFbGVtZW50KiBlbGVtZW50KQogICAgICwgbV9oYXNCb3JkZXJPclBhZGRpbmdMb2dpY2FsV2lk
dGhDaGFuZ2VkKGZhbHNlKQogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwotICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QpID09IHNpemVv
ZihTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QpLCBGbG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9z
bWFsbCk7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJsb2NrOjpNYXJnaW5JbmZv
KSA9PSBzaXplb2YoU2FtZVNpemVBc01hcmdpbkluZm8pLCBNYXJnaW5JbmZvX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIH0KIApAQCAtMzg3Niw3ICszODY4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVt
b3ZlRmxvYXRpbmdPYmplY3RzKCkKICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKIH0K
IAotUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRp
bmdPYmplY3QoUmVuZGVyQm94KiBvKQorRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNl
cnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgQVNTRVJUKG8tPmlzRmxvYXRp
bmcoKSk7CiAKQEAgLTQyNDEsNzAgKzQyMzMsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhclBl
cmNlbnRIZWlnaHREZXNjZW5kYW50c0Zyb20oUmVuZGVyQm94KiBwYXJlbnQpCiAgICAgfQogfQog
Ci1pbmxpbmUgc3RhdGljIGJvb2wgcmFuZ2VzSW50ZXJzZWN0KGludCBmbG9hdFRvcCwgaW50IGZs
b2F0Qm90dG9tLCBpbnQgb2JqZWN0VG9wLCBpbnQgb2JqZWN0Qm90dG9tKQotewotICAgIGlmIChv
YmplY3RUb3AgPj0gZmxvYXRCb3R0b20gfHwgb2JqZWN0Qm90dG9tIDwgZmxvYXRUb3ApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSB0b3Agb2YgdGhlIG9iamVjdCBvdmVybGFw
cyB0aGUgZmxvYXQKLSAgICBpZiAob2JqZWN0VG9wID49IGZsb2F0VG9wKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFRoZSBvYmplY3QgZW5jbG9zZXMgdGhlIGZsb2F0Ci0gICAgaWYg
KG9iamVjdFRvcCA8IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA+IGZsb2F0Qm90dG9tKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoZSBib3R0b20gb2YgdGhlIG9iamVjdCBvdmVy
bGFwcyB0aGUgZmxvYXQKLSAgICBpZiAob2JqZWN0Qm90dG9tID4gb2JqZWN0VG9wICYmIG9iamVj
dEJvdHRvbSA+IGZsb2F0VG9wICYmIG9iamVjdEJvdHRvbSA8PSBmbG9hdEJvdHRvbSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBib29sIFJlbmRlckJsb2NrOjpDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Pjo6dXBkYXRlT2Zmc2V0SWZOZWVkZWQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxSaWdodChtX3JlbmRlcmVyLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICBpZiAobG9naWNhbFJpZ2h0ID4gbV9vZmZzZXQp
IHsKLSAgICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsUmlnaHQ7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBib29s
IFJlbmRlckJsb2NrOjpDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdDo6RmxvYXRSaWdodD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKLXsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpOwotICAgIGlmIChsb2dpY2FsTGVmdCA8IG1fb2Zmc2V0KSB7Ci0gICAgICAg
IG1fb2Zmc2V0ID0gbG9naWNhbExlZnQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+Ci1pbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6Q29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNvbGxlY3RJZk5lZWRlZChjb25z
dCBJbnRlcnZhbFR5cGUmIGludGVydmFsKQotewotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9IGludGVydmFsLmRhdGEoKTsKLSAgICBpZiAoZmxvYXRpbmdPYmplY3Qt
PnR5cGUoKSAhPSBGbG9hdFR5cGVWYWx1ZSB8fCAhcmFuZ2VzSW50ZXJzZWN0KGludGVydmFsLmxv
dygpLCBpbnRlcnZhbC5oaWdoKCksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gQWxsIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUg
c2hvdWxkIGJlIGFscmVhZHkgcGxhY2VkLgotICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChmbG9hdGluZ09iamVjdC0+cGl4
ZWxTbmFwcGVkTG9naWNhbFRvcChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSwgZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSk7Ci0K
LSAgICBib29sIGZsb2F0SXNOZXdFeHRyZW1lID0gdXBkYXRlT2Zmc2V0SWZOZWVkZWQoZmxvYXRp
bmdPYmplY3QpOwotICAgIGlmIChmbG9hdElzTmV3RXh0cmVtZSkKLSAgICAgICAgbV9vdXRlcm1v
c3RGbG9hdCA9IGZsb2F0aW5nT2JqZWN0OwotfQotCi10ZW1wbGF0ZSA8UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgotTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmdldEhlaWdodFJl
bWFpbmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fb3V0ZXJtb3N0RmxvYXQgPyBtX291dGVy
bW9zdEZsb2F0LT5sb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpIC0gbV9saW5lVG9wIDogTGF5b3V0VW5pdCgxKTsKLX0KLQogTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6dGV4dEluZGVudE9mZnNldCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBjdyA9
IDA7CkBAIC03ODA3LDE4MyArNzczNSwxMSBAQCBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVu
ZGVyTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJSZW5kZXJCbG9jayI7CiB9CiAKLWlubGluZSBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVy
QmxvY2sqIHJlbmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICA6IG1fcGxh
Y2VkRmxvYXRzVHJlZShVbmluaXRpYWxpemVkVHJlZSkKLSAgICAsIG1fbGVmdE9iamVjdHNDb3Vu
dCgwKQotICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQotICAgICwgbV9ob3Jpem9udGFsV3Jp
dGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICwgbV9yZW5kZXJlcihyZW5kZXJl
cikKLXsKLX0KLQotUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6fkZsb2F0aW5nT2JqZWN0
cygpCi17Ci0gICAgLy8gRklYTUU6IG1fc2V0IHNob3VsZCB1c2UgT3duUHRyIGluc3RlYWQuCi0g
ICAgZGVsZXRlQWxsVmFsdWVzKG1fc2V0KTsKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKQotewotICAgIC8vIENsZWFyIHJl
ZmVyZW5jZXMgdG8gb3JpZ2luYXRpbmcgbGluZXMsIHNpbmNlIHRoZSBsaW5lcyBhcmUgYmVpbmcg
ZGVsZXRlZAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7
Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghKCgqaXQpLT5vcmlnaW5hdGluZ0xp
bmUoKSkgfHwgJigoKml0KS0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkpID09IG1fcmVu
ZGVyZXIpOwotICAgICAgICAoKml0KS0+c2V0T3JpZ2luYXRpbmdMaW5lKDApOwotICAgIH0KLX0K
LQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmxvYXRpbmdPYmplY3RzKCkKIHsKICAgICBtX2Zs
b2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhpcywgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkpOwogfQogCi0vLyBGSVhNRTogUmUtaW5saW5lIHRoaXMgb25j
ZSBmbG9hdHMgbW92ZSBpbnRvIFJlbmRlckJsb2NrRmxvdy4KLXZvaWQgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0czo6Y2xlYXIoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxs
IGRlbGV0ZUFsbFZhbHVlcywgZXhjZXB0IFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cwotICAgIC8v
IGxpa2UgdG8gcGxheSBmYXN0IGFuZCBsb29zZSB3aXRoIG93bmVyc2hpcCBvZiB0aGVzZSBwb2lu
dGVycy4KLSAgICAvLyBJZiB3ZSBtb3ZlIHRvIE93blB0ciB0aGF0IHdpbGwgZml4IHRoaXMgb3du
ZXJzaGlwIG9kZG5lc3MuCi0gICAgbV9zZXQuY2xlYXIoKTsKLSAgICBtX3BsYWNlZEZsb2F0c1Ry
ZWUuY2xlYXIoKTsKLSAgICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOwotICAgIG1fcmlnaHRPYmpl
Y3RzQ291bnQgPSAwOwotfQotCi1pbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjppbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSB0eXBlKQoteyAg
ICAKLSAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQotICAgICAgICBt
X2xlZnRPYmplY3RzQ291bnQrKzsKLSAgICBlbHNlIAotICAgICAgICBtX3JpZ2h0T2JqZWN0c0Nv
dW50Kys7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUpCi17Ci0gICAgaWYg
KHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKLSAgICAgICAgbV9sZWZ0T2JqZWN0
c0NvdW50LS07Ci0gICAgZWxzZQotICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50LS07Ci19Ci0K
LWlubGluZSBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbCBSZW5kZXJCbG9jazo6
RmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCkKLXsKLSAgICBpZiAobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpCi0g
ICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGlu
Z09iamVjdC0+ZnJhbWVSZWN0KCkueSgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4
WSgpLCBmbG9hdGluZ09iamVjdCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS54KCksIGZsb2F0aW5nT2Jq
ZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCksIGZsb2F0aW5nT2JqZWN0KTsKLX0KLQotdm9pZCBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0KQotewotICAgIEFTU0VSVCghZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFj
ZWRUcmVlKCkpOwotCi0gICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKHRydWUpOwotICAg
IGlmIChtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQotICAgICAgICBtX3BsYWNl
ZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3Qp
KTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRy
ZWUodHJ1ZSk7ICAgICAgCi0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RzOjpyZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0
KQotewotICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09i
amVjdC0+aXNJblBsYWNlZFRyZWUoKSk7Ci0KLSAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlz
SW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBib29sIHJlbW92ZWQgPSBtX3BsYWNlZEZsb2F0c1Ry
ZWUucmVtb3ZlKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0gICAgCi0gICAg
ZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKGZhbHNlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRUcmVlKGZhbHNlKTsKLSNlbmRpZgotfQotCi1p
bmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGQoRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIGluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5n
T2JqZWN0LT50eXBlKCkpOwotICAgIG1fc2V0LmFkZChmbG9hdGluZ09iamVjdCk7Ci0gICAgaWYg
KGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQotICAgICAgICBhZGRQbGFjZWRPYmplY3QoZmxv
YXRpbmdPYmplY3QpOwotfQotCi1pbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjpyZW1vdmUoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIGRlY3Jl
YXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqZWN0LT50eXBlKCkpOwotICAgIG1fc2V0LnJlbW92
ZShmbG9hdGluZ09iamVjdCk7Ci0gICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgp
IHx8ICFmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7Ci0gICAgaWYgKGZsb2F0aW5n
T2JqZWN0LT5pc1BsYWNlZCgpKQotICAgICAgICByZW1vdmVQbGFjZWRPYmplY3QoZmxvYXRpbmdP
YmplY3QpOwotfQotCi12b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQ
bGFjZWRGbG9hdHNUcmVlKCkKLXsKLSAgICBBU1NFUlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0lu
aXRpYWxpemVkKCkpOwotICAgIGlmIChtX3NldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKG1fcmVuZGVyZXItPnZpZXcoKS5p
bnRlcnZhbEFyZW5hKCkpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3Nl
dC5iZWdpbigpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5k
KCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9hdGluZ09iamVj
dCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7Ci0gICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSkKLSAgICAgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JG
bG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOwotICAgIH0KLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0
IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQg
KmhlaWdodFJlbWFpbmluZykKLXsKLSNpZiAhRU5BQkxFKENTU19TSEFQRVMpCi0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldE1vZGUpOwotI2VuZGlmCi0KLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IGZp
eGVkT2Zmc2V0OwotICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6
OkZsb2F0TGVmdD4gYWRhcHRlcihtX3JlbmRlcmVyLCByb3VuZFRvSW50KGxvZ2ljYWxUb3ApLCBy
b3VuZFRvSW50KGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSwgb2Zmc2V0KTsKLSAgICBwbGFj
ZWRGbG9hdHNUcmVlKCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKLQotICAgIGlm
IChoZWlnaHRSZW1haW5pbmcpCi0gICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSBhZGFwdGVyLmdl
dEhlaWdodFJlbWFpbmluZygpOwotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgY29uc3Qg
RmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgp
OwotICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYg
b3V0ZXJtb3N0RmxvYXQpIHsKLSAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0
c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsK
LSAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yQ29udGFpbmluZ0Js
b2NrTGluZShsb2dpY2FsVG9wLCBvdXRlcm1vc3RGbG9hdC0+bG9naWNhbFRvcChtX2hvcml6b250
YWxXcml0aW5nTW9kZSksIGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IHNo
YXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhl
ZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlLCBMYXlvdXRVbml0ICpoZWln
aHRSZW1haW5pbmcpCi17Ci0jaWYgIUVOQUJMRShDU1NfU0hBUEVTKQotICAgIFVOVVNFRF9QQVJB
TShvZmZzZXRNb2RlKTsKLSNlbmRpZgotCi0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBmaXhlZE9m
ZnNldDsKLSAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9h
dFJpZ2h0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIHJvdW5kVG9JbnQobG9naWNhbFRvcCksIHJvdW5k
VG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpLCBvZmZzZXQpOwotICAgIHBsYWNlZEZs
b2F0c1RyZWUoKS5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFkYXB0ZXIpOwotCi0gICAgaWYgKGhl
aWdodFJlbWFpbmluZykKLSAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGFkYXB0ZXIuZ2V0SGVp
Z2h0UmVtYWluaW5nKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91dGVybW9zdEZsb2F0KCk7Ci0g
ICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBvdXRl
cm1vc3RGbG9hdCkgewotICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewotICAg
ICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JDb250YWluaW5nQmxvY2tM
aW5lKGxvZ2ljYWxUb3AsIG91dGVybW9zdEZsb2F0LT5sb2dpY2FsVG9wKG1faG9yaXpvbnRhbFdy
aXRpbmdNb2RlKSwgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gc2hhcGVP
dXRzaWRlLT5sZWZ0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBtaW4oZml4ZWRPZmZzZXQsIG9mZnNldCk7Ci19Ci0KIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0
eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewpAQCAt
ODEzMSwxNyArNzg4Nyw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNob3dMaW5lVHJlZUFuZE1hcmso
Y29uc3QgSW5saW5lQm94KiBtYXJrZWRCb3gxLCBjb25zdCBjaGFyKiBtCiAgICAgICAgIHJvb3Qt
PnNob3dMaW5lVHJlZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gy
LCBtYXJrZWRMYWJlbDIsIG9iaiwgMSk7CiB9CiAKLS8vIFRoZXNlIGhlbHBlcnMgYXJlIG9ubHkg
dXNlZCBieSB0aGUgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi1TdHJp
bmcgVmFsdWVUb1N0cmluZzxpbnQ+OjpzdHJpbmcoY29uc3QgaW50IHZhbHVlKQotewotICAgIHJl
dHVybiBTdHJpbmc6Om51bWJlcih2YWx1ZSk7Ci19Ci0KLVN0cmluZyBWYWx1ZVRvU3RyaW5nPFJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCo+OjpzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIiVwICglaXglaSAlaXglaSkiLCBmbG9hdGluZ09iamVjdCwgZmxvYXRpbmdPYmplY3QtPmZy
YW1lUmVjdCgpLngoKS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkueSgpLnRv
SW50KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCkudG9JbnQoKSwgZmxvYXRp
bmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFkoKS50b0ludCgpKTsKLX0KLQogI2VuZGlmCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
aW5kZXggYzNhMDkzZjBlYzI3MmU3ZDhkMGRhMWZhN2I4MDliNTFjMjM1ZGE4OC4uYmNmYjNjZDJm
NjA0OTk5YWI0MjRiMDFhOWEwZWU4OWY3ZDNjODEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUmVuZGVyQmxvY2tfaAog
CiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgorI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgog
I2luY2x1ZGUgIkdhcFJlY3RzLmgiCiAjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQm94LmgiCkBAIC01OTksOCArNjAwLDYgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKExheW91dFVu
aXQmIHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sJiBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGJv
b2wmIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBlbnVt
IFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSB7IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZz
ZXQsIFNoYXBlT3V0c2lkZUZsb2F0TWFyZ2luQm94T2Zmc2V0IH07Ci0KICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodEZsb2F0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFpbmluZywgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUpIGNvbnN0Owog
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGbG9hdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1h
aW5pbmcsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRN
b2RlKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGFkanVzdExvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUoTGF5b3V0VW5pdCBvZmZzZXRGcm9tRmxvYXRzLCBib29sIGFwcGx5VGV4dEluZGVudCkgY29u
c3Q7CkBAIC02NzAsMTUxICs2NjksNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGV2ZXJIYWRM
YXlvdXQ7CiAgICAgfTsKIAotICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0IHsKLSAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmplY3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBUeXBlIHVzZXMgYml0cyBzbyB5
b3UgY2FuIHVzZSBGbG9hdExlZnRSaWdodCBhcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGJvdGggbGVm
dCBhbmQgcmlnaHQuCi0gICAgICAgIGVudW0gVHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0Umln
aHQgPSAyLCBGbG9hdExlZnRSaWdodCA9IDMgfTsKLQotICAgICAgICBGbG9hdGluZ09iamVjdChF
RmxvYXQgdHlwZSkKLSAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQotICAgICAgICAgICAgLCBt
X29yaWdpbmF0aW5nTGluZSgwKQotICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQot
ICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1faXNEZXNj
ZW5kYW50KGZhbHNlKQotICAgICAgICAgICAgLCBtX2lzUGxhY2VkKGZhbHNlKQotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKLSNlbmRpZgotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBOb0Zsb2F0KTsKLSAgICAgICAgICAg
IGlmICh0eXBlID09IExlZnRGbG9hdCkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdExl
ZnQ7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFJpZ2h0RmxvYXQpCi0gICAgICAgICAg
ICAgICAgbV90eXBlID0gRmxvYXRSaWdodDsgIAotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRp
bmdPYmplY3QoVHlwZSB0eXBlLCBjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QpCi0gICAgICAg
ICAgICA6IG1fcmVuZGVyZXIoMCkKLSAgICAgICAgICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkK
LSAgICAgICAgICAgICwgbV9mcmFtZVJlY3QoZnJhbWVSZWN0KQotICAgICAgICAgICAgLCBtX3Bh
Z2luYXRpb25TdHJ1dCgwKQotICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAg
ICwgbV9zaG91bGRQYWludCh0cnVlKQotICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxz
ZSkKLSAgICAgICAgICAgICwgbV9pc1BsYWNlZCh0cnVlKQotI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKLSNlbmRpZgotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBGbG9hdGluZ09iamVjdCogY2xvbmUoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogY2xvbmVPYmplY3QgPSBuZXcgRmxvYXRpbmdP
YmplY3QodHlwZSgpLCBtX2ZyYW1lUmVjdCk7Ci0gICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9y
ZW5kZXJlciA9IG1fcmVuZGVyZXI7Ci0gICAgICAgICAgICBjbG9uZU9iamVjdC0+bV9vcmlnaW5h
dGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGluZTsKLSAgICAgICAgICAgIGNsb25lT2JqZWN0LT5t
X3BhZ2luYXRpb25TdHJ1dCA9IG1fcGFnaW5hdGlvblN0cnV0OwotICAgICAgICAgICAgY2xvbmVP
YmplY3QtPm1fc2hvdWxkUGFpbnQgPSBtX3Nob3VsZFBhaW50OwotICAgICAgICAgICAgY2xvbmVP
YmplY3QtPm1faXNEZXNjZW5kYW50ID0gbV9pc0Rlc2NlbmRhbnQ7Ci0gICAgICAgICAgICBjbG9u
ZU9iamVjdC0+bV9pc1BsYWNlZCA9IG1faXNQbGFjZWQ7Ci0gICAgICAgICAgICByZXR1cm4gY2xv
bmVPYmplY3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVy
ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9Ci0gICAgICAgIAotICAgICAgICBib29s
IGlzUGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsYWNlZDsgfQotICAgICAgICB2b2lkIHNl
dElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9Ci0K
LSAgICAgICAgTGF5b3V0VW5pdCB4KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVy
biBtX2ZyYW1lUmVjdC54KCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyBB
U1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5tYXhYKCk7IH0KLSAgICAgICAg
TGF5b3V0VW5pdCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1l
UmVjdC55KCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCBtYXhZKCkgY29uc3QgeyBBU1NFUlQoaXNQ
bGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5tYXhZKCk7IH0KLSAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KLSAgICAgICAg
TGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsg
fQotCi0gICAgICAgIHZvaWQgc2V0WChMYXlvdXRVbml0IHgpIHsgQVNTRVJUKCFpc0luUGxhY2Vk
VHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQotICAgICAgICB2b2lkIHNldFkoTGF5b3V0
VW5pdCB5KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFkoeSk7
IH0KLSAgICAgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IEFTU0VSVCghaXNJ
blBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAgICAgICB2
b2lkIHNldEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVl
KCkpOyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQotCi0gICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3Q7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgZnJhbWVSZWN0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0g
ZnJhbWVSZWN0OyB9Ci0KLSAgICAgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnaW5hdGlvblN0cnV0OyB9Ci0gICAgICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0
KGludCBzdHJ1dCkgeyBtX3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0OyB9Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgICAgIGJvb2wgaXNJblBsYWNlZFRyZWUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5Q
bGFjZWRUcmVlOyB9Ci0gICAgICAgIHZvaWQgc2V0SXNJblBsYWNlZFRyZWUoYm9vbCB2YWx1ZSkg
eyBtX2lzSW5QbGFjZWRUcmVlID0gdmFsdWU7IH0KLSNlbmRpZgotCi0gICAgICAgIGJvb2wgc2hv
dWxkUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhaW50OyB9Ci0gICAgICAgIHZvaWQg
c2V0U2hvdWxkUGFpbnQoYm9vbCBzaG91bGRQYWludCkgeyBtX3Nob3VsZFBhaW50ID0gc2hvdWxk
UGFpbnQ7IH0KLSAgICAgICAgYm9vbCBpc0Rlc2NlbmRhbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
RGVzY2VuZGFudDsgfQotICAgICAgICB2b2lkIHNldElzRGVzY2VuZGFudChib29sIGlzRGVzY2Vu
ZGFudCkgeyBtX2lzRGVzY2VuZGFudCA9IGlzRGVzY2VuZGFudDsgfQotCi0gICAgICAgIC8vIEZJ
WE1FOiBDYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGRhbmdlcm91cyBhbmQgc2hvdWxkIGJl
IHdoaXRlbGlzdGVkIGV4cGxpY2l0bHkgb3IgcmVtb3ZlZC4KLSAgICAgICAgdm9pZCBzZXRSZW5k
ZXJlcihSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQotICAg
ICAgICBSb290SW5saW5lQm94KiBvcmlnaW5hdGluZ0xpbmUoKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbmF0aW5nTGluZTsgfQotICAgICAgICB2b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5s
aW5lQm94KiBsaW5lKSB7IG1fb3JpZ2luYXRpbmdMaW5lID0gbGluZTsgfQotCi0gICAgICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHkoKSA6IHgoKTsgfQotICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29u
c3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBtYXhZKCkgOiBtYXhYKCk7IH0K
LSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHgoKSA6IHkoKTsg
fQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChib29sIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IG1heFgoKSA6
IG1heFkoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aChib29sIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/
IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQotCi0gICAgICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2Fs
VG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWSgpIDogZnJhbWVSZWN0
KCkucGl4ZWxTbmFwcGVkWCgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsQm90
dG9tKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpIDogZnJhbWVS
ZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRMb2dp
Y2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFgoKSA6IGZyYW1l
UmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQotICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNh
bFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpIDogZnJh
bWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRMb2dpY2Fs
VG9wKExheW91dFVuaXQgbG9naWNhbFRvcCwgYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAg
ICAgICAgICAgICAgIHNldFkobG9naWNhbFRvcCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc2V0WChsb2dpY2FsVG9wKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHNldExv
Z2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExlZnQsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSkKLSAgICAgICAgICAgICAgICBzZXRYKGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBzZXRZKGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgfQotICAgICAgICB2
b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBib29sIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICAgICAgc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxIZWln
aHQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQg
bG9naWNhbFdpZHRoLCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICAgICAg
c2V0V2lkdGgobG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwotICAgICAgICBSb290SW5saW5lQm94KiBtX29y
aWdpbmF0aW5nTGluZTsKLSAgICAgICAgTGF5b3V0UmVjdCBtX2ZyYW1lUmVjdDsKLSAgICAgICAg
aW50IG1fcGFnaW5hdGlvblN0cnV0OyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBMYXlvdXRV
bml0LCBzaW5jZSBpdCdzIGEgdmVydGljYWwgb2Zmc2V0LgotCi0gICAgICAgIHVuc2lnbmVkIG1f
dHlwZSA6IDI7IC8vIFR5cGUgKGxlZnQgb3IgcmlnaHQgYWxpZ25lZCkKLSAgICAgICAgdW5zaWdu
ZWQgbV9zaG91bGRQYWludCA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1faXNEZXNjZW5kYW50IDog
MTsKLSAgICAgICAgdW5zaWduZWQgbV9pc1BsYWNlZCA6IDE7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICB1bnNpZ25lZCBtX2lzSW5QbGFjZWRUcmVlIDogMTsKLSNlbmRpZgotICAgIH07Ci0KICAg
ICBMYXlvdXRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIExheW91dFVuaXQg
eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNo
aWxkKSBjb25zdApAQCAtMTE4MSwxMDQgKzEwMzUsOSBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckJsb2NrRmxvdzsKIAogcHJvdGVjdGVkOgotICAgIHN0cnVjdCBGbG9hdGluZ09i
amVjdEhhc2hGdW5jdGlvbnMgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChGbG9hdGlu
Z09iamVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFz
aChrZXktPnJlbmRlcmVyKCkpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5n
T2JqZWN0KiBhLCBGbG9hdGluZ09iamVjdCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBi
LT5yZW5kZXJlcigpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9OwotICAgIHN0cnVjdCBGbG9hdGluZ09iamVj
dEhhc2hUcmFuc2xhdG9yIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goUmVuZGVyQm94
KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleSk7
IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdPYmplY3QqIGEsIFJlbmRlckJv
eCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiOyB9Ci0gICAgfTsKLSAgICB0eXBlZGVm
IExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rp
b25zPiBGbG9hdGluZ09iamVjdFNldDsKLSAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0U2V0Ojpj
b25zdF9pdGVyYXRvciBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yOwotICAgIHR5cGVkZWYgUE9E
SW50ZXJ2YWw8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7Ci0g
ICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5n
T2JqZWN0VHJlZTsKLSAgICB0eXBlZGVmIFBPREZyZWVMaXN0QXJlbmE8UE9EUmVkQmxhY2tUcmVl
PEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw+OjpOb2RlPiBJbnRlcnZhbEFyZW5hOwotICAgIAotICAg
IHRlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KLSAgICBjbGFz
cyBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVk
ZWYgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBJbnRlcnZhbFR5cGU7Ci0gICAgICAgIAotICAgICAg
ICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwg
aW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tLCBMYXlvdXRVbml0JiBvZmZzZXQpCi0gICAgICAg
ICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCi0gICAgICAgICAgICAsIG1fbGluZVRvcChsaW5l
VG9wKQotICAgICAgICAgICAgLCBtX2xpbmVCb3R0b20obGluZUJvdHRvbSkKLSAgICAgICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAgICAgLCBtX291dGVybW9zdEZsb2F0KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50IGxvd1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lVG9wOyB9Ci0gICAgICAgIGludCBoaWdoVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVCb3R0b207IH0KLSAgICAgICAgdm9pZCBjb2xsZWN0SWZOZWVkZWQoY29u
c3QgSW50ZXJ2YWxUeXBlJik7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgLy8g
V2hlbiBjb21wdXRpbmcgdGhlIG9mZnNldCBjYXVzZWQgYnkgdGhlIGZsb2F0cyBvbiBhIGdpdmVu
IGxpbmUsIGlmCi0gICAgICAgIC8vIHRoZSBvdXRlcm1vc3QgZmxvYXQgb24gdGhhdCBsaW5lIGhh
cyBhIHNoYXBlLW91dHNpZGUsIHRoZSBpbmxpbmUKLSAgICAgICAgLy8gY29udGVudCB0aGF0IGJ1
dHRzIHVwIGFnYWluc3QgdGhhdCBmbG9hdCBtdXN0IGJlIHBvc2l0aW9uZWQgdXNpbmcKLSAgICAg
ICAgLy8gdGhlIGNvbnRvdXJzIG9mIHRoZSBzaGFwZSwgbm90IHRoZSBtYXJnaW4gYm94IG9mIHRo
ZSBmbG9hdC4KLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0KCkg
Y29uc3QgeyByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdDsgfQotI2VuZGlmCi0KLSAgICAgICAgTGF5
b3V0VW5pdCBnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGJvb2wgdXBkYXRlT2Zmc2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqKTsKLQot
ICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKLSAgICAgICAgaW50IG1fbGlu
ZVRvcDsKLSAgICAgICAgaW50IG1fbGluZUJvdHRvbTsKLSAgICAgICAgTGF5b3V0VW5pdCYgbV9v
ZmZzZXQ7Ci0gICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBtX291dGVybW9zdEZsb2F0Owot
ICAgIH07Ci0KICAgICB2b2lkIGNyZWF0ZUZsb2F0aW5nT2JqZWN0cygpOwogCiBwdWJsaWM6Ci0K
LSAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShGbG9hdGluZ09iamVjdHMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIH5GbG9hdGluZ09iamVjdHMoKTsKLQotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0g
ICAgICAgIHZvaWQgYWRkKEZsb2F0aW5nT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKEZs
b2F0aW5nT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgYWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2Jq
ZWN0Kik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7
Ci0gICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGJvb2wgYiA9IHRydWUpIHsg
bV9ob3Jpem9udGFsV3JpdGluZ01vZGUgPSBiOyB9Ci0KLSAgICAgICAgYm9vbCBoYXNMZWZ0T2Jq
ZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9iamVjdHNDb3VudCA+IDA7IH0KLSAgICAgICAg
Ym9vbCBoYXNSaWdodE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0T2JqZWN0c0NvdW50
ID4gMDsgfQotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXQ7IH0KLSAgICAgICAgdm9pZCBjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zm
c2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hh
cGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCwg
TGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7Ci0gICAgICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1v
ZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1h
aW5pbmcgPSAwKTsKLSAgICBwcml2YXRlOgotICAgICAgICBGbG9hdGluZ09iamVjdHMoY29uc3Qg
UmVuZGVyQmxvY2sqLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSk7Ci0gICAgICAgIHZvaWQg
Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RU
cmVlJiBwbGFjZWRGbG9hdHNUcmVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3Bs
YWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQotICAgICAgICAgICAgICAgIGNvbXB1dGVQ
bGFjZWRGbG9hdHNUcmVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9wbGFjZWRGbG9hdHNUcmVl
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdP
YmplY3Q6OlR5cGUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5n
T2JqZWN0OjpUeXBlKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZhbEZv
ckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7Ci0KLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXQgbV9zZXQ7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0VHJlZSBtX3BsYWNlZEZsb2F0c1Ry
ZWU7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVmdE9iamVjdHNDb3VudDsKLSAgICAgICAgdW5zaWdu
ZWQgbV9yaWdodE9iamVjdHNDb3VudDsKLSAgICAgICAgYm9vbCBtX2hvcml6b250YWxXcml0aW5n
TW9kZTsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7Ci0KLSAgICAgICAg
ZnJpZW5kIHZvaWQgUmVuZGVyQmxvY2s6OmNyZWF0ZUZsb2F0aW5nT2JqZWN0cygpOwotICAgIH07
Ci0KICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUg
bm9uLWRlZmF1bHQgdmFsdWVzCiAgICAgc3RydWN0IFJlbmRlckJsb2NrUmFyZURhdGEgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJCbG9ja1JhcmVEYXRhKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC0xMzgwLDE2ICsxMTM5LDYgQEAgaW5saW5lIGNvbnN0IFJlbmRl
ckJsb2NrKiB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogdm9pZCB0
b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiB2b2lkIHRvUmVuZGVyQmxvY2soY29u
c3QgUmVuZGVyQmxvY2smKTsKIAotI2lmbmRlZiBOREVCVUcKLS8vIFRoZXNlIHN0cnVjdHVyZXMg
YXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxpbnQ+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHN0
cmluZyhjb25zdCBpbnQgdmFsdWUpOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9TdHJp
bmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj4gewotICAgIHN0YXRpYyBTdHJpbmcgc3Ry
aW5nKGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCopOwotfTsKLSNlbmRpZgotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJCbG9ja19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGU1M2Q3YjFlNzU4
NDE4NjU2MmFhMjVhODZiYzc3MTI1ZTQ1OTY0NzQuLjU2NzA3MDc5NGJjMmEzMWRjYzQ3Mjg2ZTI5
ZGExMDBkNjE4YjdkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKICNp
bmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggYmY4MGFjZjQwNTg2ZWE2ZTM1YjIw
ZGRlNTQ2N2E0ZDU1NzcxMWU4Zi4uMGE1NWJjY2RmZDVjMjUyMWUxNzE4NTQ5NGUwYzUwNzU4MTYx
MWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgIkJpZGlSZXNvbHZlci5oIgorI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgIkh5cGhlbmF0aW9uLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC0xMzQsNyArMTM1LDcgQEAgcHVibGljOgogICAgIGZs
b2F0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQog
CiAgICAgdm9pZCB1cGRhdGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0IG1pbmltdW1IZWlnaHQg
PSAwKTsKLSAgICB2b2lkIHNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIHNocmlua0F2YWlsYWJsZVdp
ZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCopOwogICAgIHZvaWQgYWRkVW5j
b21taXR0ZWRXaWR0aChmbG9hdCBkZWx0YSkgeyBtX3VuY29tbWl0dGVkV2lkdGggKz0gZGVsdGE7
IH0KICAgICB2b2lkIGNvbW1pdCgpCiAgICAgewpAQCAtMTg4LDcgKzE4OSw3IEBAIGlubGluZSB2
b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCByZXBsYWNlZEhl
aWdodCkKICAgICBjb21wdXRlQXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCk7CiB9CiAK
LWlubGluZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElm
TmVlZGVkKFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCitpbmxpbmUgdm9p
ZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9h
dGluZ09iamVjdCogbmV3RmxvYXQpCiB7CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2Nr
LT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9w
KG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBuZXdGbG9h
dC0+bG9naWNhbEJvdHRvbShtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkKQEAg
LTIwMSwxMSArMjAyLDExIEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxl
V2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKFJlbmRlckJsb2NrOjpGbG9hCiAgICAgLy8gYmFzZWQg
b24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBi
YWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKICAgICAvLyB0aGUg
Zmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdG
bG9hdC4KICAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAw
OwotICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKLSAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9ibG9jay0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsKICAgICBmb3IgKC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgIFJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKKyAgICAgICAg
RmxvYXRpbmdPYmplY3QqIHByZXZpb3VzRmxvYXQgPSAqaXQ7CiAgICAgICAgIGlmIChwcmV2aW91
c0Zsb2F0ICE9IG5ld0Zsb2F0ICYmIHByZXZpb3VzRmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+
dHlwZSgpKSB7CiAgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSBwcmV2aW91
c0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgICAgICAgICBpZiAo
cHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKSB7CkBAIC0yMjEsNyArMjIyLDcgQEAgaW5saW5lIHZv
aWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVu
ZGVyQmxvY2s6OkZsb2EKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChuZXdGbG9hdC0+dHlwZSgp
ID09IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSB7CisgICAgaWYgKG5l
d0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkgewogICAgICAgICBm
bG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Jsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgaWYgKHBy
ZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKQEAgLTE1MDIsOCArMTUwMyw4IEBAIHB1YmxpYzoKICAg
ICBSb290SW5saW5lQm94KiBlbmRMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lOyB9CiAg
ICAgdm9pZCBzZXRFbmRMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9lbmRMaW5lID0gbGlu
ZTsgfQogCi0gICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RGbG9hdDsgfQotICAgIHZvaWQgc2V0TGFzdEZsb2F0KFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0
OyB9CisgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dEZsb2F0OyB9CisgICAgdm9pZCBzZXRMYXN0RmxvYXQoRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dCkgeyBtX2xhc3RGbG9hdCA9IGxhc3RGbG9hdDsgfQogCiAgICAgVmVjdG9yPFJlbmRlckJsb2Nr
OjpGbG9hdFdpdGhSZWN0PiYgZmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdHM7IH0KICAgICAKQEAg
LTE1MTgsNyArMTUxOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVuZGVy
QmxvY2s6OkZsb2F0V2l0aFJlY3Q+IG1fZmxvYXRzOwotICAgIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogbV9sYXN0RmxvYXQ7CisgICAgRmxvYXRpbmdPYmplY3QqIG1fbGFzdEZsb2F0Owog
ICAgIFJvb3RJbmxpbmVCb3gqIG1fZW5kTGluZTsKICAgICBMaW5lSW5mbyBtX2xpbmVJbmZvOwog
ICAgIHVuc2lnbmVkIG1fZmxvYXRJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAppbmRleCBkYzI5Zjc3YWM2NjVkOTUyN2EyNWE1MTk3NDJlMTkzN2E3NzAzZGJjLi5h
NGIxNDQzZDkyMjMyYTdhMmMzMWNkZDA4NDFiNDk5MmM4ZTMwMzA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisj
aW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCiAjaW5jbHVkZSAiRmxvd1RocmVhZENvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBA
IC0xMjQyLDcgKzEyNDMsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQoKQogICAgIGN1cnJlbnRGbG93VGhyZWFkLT5wb3BGbG93VGhyZWFkTGF5
b3V0U3RhdGUoKTsKIH0KIAotUmVuZGVyQmxvY2s6OkludGVydmFsQXJlbmEqIFJlbmRlclZpZXc6
OmludGVydmFsQXJlbmEoKQorSW50ZXJ2YWxBcmVuYSogUmVuZGVyVmlldzo6aW50ZXJ2YWxBcmVu
YSgpCiB7CiAgICAgaWYgKCFtX2ludGVydmFsQXJlbmEpCiAgICAgICAgIG1faW50ZXJ2YWxBcmVu
YSA9IEludGVydmFsQXJlbmE6OmNyZWF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211081</attachid>
            <date>2013-09-09 14:03:40 -0700</date>
            <delta_ts>2013-09-09 15:17:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120779-20130909140340.patch</filename>
            <type>text/plain</type>
            <size>67066</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY4ZjM4ODFkYjAxYzAw
YzlkZmQxMDhlYWY3YTVlZWEzNmY1NjE3Ny4uNTg1NTJkMWNkNWI0OTNmMGYxNGZhMGJhNmNiM2Fj
M2U4ZGNjZTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wOS0wOSAgQmVt
IEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KKworICAgICAgICBNb3ZlIEZsb2F0cyBv
dXQgb2YgUmVuZGVyQmxvY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDc3OQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhhbmRydSBDaGljdWxp
dGEuCisKKyAgICAgICAgTW92ZSBGbG9hdGluZ09iamVjdCwgRmxvYXRpbmdPYmplY3RzIGFuZCBy
ZWxhdGVkIGNvZGUgaW50bworICAgICAgICBGbG9hdGluZ09iamVjdHMue2gsY3BwfS4gVGhpcyBu
b3Qgb25seSBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlCisgICAgICAgIGFuZCBtYWludGFp
bmFibGUsIGl0IGFsc28gd2lsbCBhbGxvdyBmb3IgbW9yZSBkZWNvdXBsaW5nIG9mCisgICAgICAg
IFJlbmRlckJsb2NrIGFuZCB0aGUgRmxvYXRpbmdPYmplY3RzLCBob3BlZnVsbHkgbWFraW5nIGl0
IHBvc3NpYmxlIGZvcgorICAgICAgICBGbG9hdGluZ09iamVjdHMgdG8gYmUgbW9yZSBjZW50cmFs
IGFuZCBub3QgbmVlZCB0byBoYXZlIG9uZSBmb3IgZWFjaAorICAgICAgICBSZW5kZXJCbG9jayB0
aGF0IGlzIGFmZmVjdGVkIGJ5IGZsb2F0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyOjpD
b21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVGbG9h
dE9mZnNldEFkYXB0ZXI6Omxvd1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVGbG9h
dE9mZnNldEFkYXB0ZXI6OmhpZ2hWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlRmxv
YXRPZmZzZXRBZGFwdGVyOjpvdXRlcm1vc3RGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGlu
Z09iamVjdHM6On5GbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRpbmdPYmplY3RzOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6
OmluY3JlYXNlT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0
czo6ZGVjcmVhc2VPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmpl
Y3RzOjppbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0czo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0ZVBsYWNlZEZsb2F0
c1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZXNJbnRlcnNlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Ojp1cGRhdGVPZmZzZXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbGxl
Y3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6OmdldEhlaWdodFJlbWFpbmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjo6OnN0cmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5n
T2JqZWN0cy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6Y2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRpbmdPYmplY3Q6OnJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0Ojppc1BsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2V0
SXNQbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OngpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRpbmdPYmplY3Q6OnkpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6Om1heFkp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OndpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRp
bmdPYmplY3Q6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFkp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRpbmdPYmplY3Q6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09i
amVjdDo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpw
YWdpbmF0aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldFBh
Z2luYXRpb25TdHJ1dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6aXNJblBs
YWNlZFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldElzSW5QbGFj
ZWRUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0OjpzaG91bGRQYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2V0U2hvdWxkUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmlzRGVzY2VuZGFudCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2V0SXNEZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0aW5nT2JqZWN0OjpzZXRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dGluZ09iamVjdDo6b3JpZ2luYXRpbmdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5n
T2JqZWN0OjpzZXRPcmlnaW5hdGluZ0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3Q6OmxvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6Omxv
Z2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmxvZ2ljYWxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0Ojpsb2dpY2FsUmlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmxvZ2ljYWxXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkTG9naWNhbFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbSk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkTG9naWNhbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZExvZ2lj
YWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2V0TG9naWNhbFRv
cCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdDo6c2V0TG9naWNhbExlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OnNldExvZ2ljYWxXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM6Omhhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjplcXVhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6aGFzTGVmdE9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpoYXNSaWdodE9iamVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRpbmdPYmplY3RzOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdP
YmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlu
a0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6Omxhc3RGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
U3RhdGU6OnNldExhc3RGbG9hdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6aW50ZXJ2YWxBcmVuYSk6CisKIDIwMTMt
MDktMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW50ZXJu
YWxzIHNob3VsZCBhbHdheXMgY2F1c2UgYSBsYXlvdXQgYmVmb3JlIGNhbGxpbmcgaW50byBUZXh0
SXRlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2VmZGE2NTYyYWMyYzdiMmE3MDU2Mjk0
YjU3MDkzMjFhNDM0YWJhNy4uMTU4OTk4NmM0NjY1NmM3NjNhNjk4ZDBjODkwYzVjZWNlNmY1MzVm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwOTcsNiArMjA5Nyw3IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCiAgICAgcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNw
cAorICAgIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCiAgICAgcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmNwcAogICAgIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDUwNTI4NGEzZDYyZmRiNzU1ZDUwOGI3NDNkZDFkMzZmZTc3ODQx
ZGEuLjVmYTcyMDcyOTBiNjlmMTk2MTBlMjRiYzZiNjU2MmRhYjI3OTNhZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDM0MCw2ICs0MzQwLDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0Zsb2F0aW5nT2JqZWN0cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1Ro
cmVhZENvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVh
ZENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKaW5kZXggYjgzMTQ1ODk3OWEwNjMyNDE0M2I3NDEyNjE2YmZmYmFhMTRkYjUyMi4u
NmYzOGQ3ZDYwNzJiYzExOGUyMzA3MDZiMTJmNTBhNTlkMjE4ZDhhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0xMTQwLDYgKzExNDAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwKICAgICBy
ZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAorICAgIHJlbmRlcmluZy9GbG9hdGluZ09i
amVjdHMuY3BwIFwKICAgICByZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIFwKICAg
ICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCBcCiAgICAgcmVuZGVyaW5n
L0hpdFRlc3RMb2NhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKaW5kZXggYjExNGZmMzAxOGIwYjVkMzA2MTcwMDBiYmM5ZGU2NDI2
MDI0NmVjNy4uMjc1NzQwZjM2YTdjNTZmNjIwYWVhNjJlMThkNzc4OWEyOGM0YjRmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC05NTI4
LDYgKzk1MjgsNyBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xGbG9hdGluZ09iamVjdHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEZsb3dUaHJlYWRDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwIj4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0y
MDAwMSw2ICsyMDAwMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RWxsaXBzaXNCb3guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xG
aWx0ZXJFZmZlY3RSZW5kZXJlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEZpeGVkVGFibGVMYXlvdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xGbG9hdGluZ09iamVjdHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEdhcFJlY3RzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgiIC8+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDgz
YjFiYWQ4OTJhODk4MzBkMzc2OWQ0MDY1MzE5YmVkMWM3OTc1OS4uNDY2NjYyZTE2OTRjY2MxYTg1
ZWJjNjE5ZTg1YWNhYjg3ZDVlMTAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzM3NSw2ICszMzc1LDggQEAKIAkJOThDRTQz
MkExMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5r
TG9hZGVyLmggKi87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1l
bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThF
QjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUExQjZGOTcxNTg4NjlDODAwMTFB
OEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTFCNkY5NjE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01T
dHJpbmdMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJOUE1MjhFODMxN0Q3RjUyRjAwQUE5NTE4IC8q
IEZsb2F0aW5nT2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QTUyOEU4MTE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNw
cCAqLzsgfTsKKwkJOUE1MjhFODQxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE1MjhFODIx
N0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMUFCMDdDMTY0OEM3QzQwMDUxRjNGMiAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMUFCMDdCMTY0OEM3QzQwMDUxRjNGMiAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJOUIyNERF
OEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyog
SFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJOUIyRDhBNzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVu
ZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTk2MSw2ICs5OTYzLDggQEAKIAkJOThD
RTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGlua0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlz
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0
cmluZ0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QTUyOEU4
MTE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVj
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRpbmdPYmplY3RzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNGMiAv
KiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3QjE2NDhD
N0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyNERFOEMx
NTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhUTUxCRElFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMDM1Niw2ICsyMDM2MCw4IEBACiAJCQkJMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkwIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJQThDRkYwNDgwQTE1NEYwOTAwMEE0MjM0
IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRBMEExNTRGMDkwMDBBNDIz
NCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggKi8sCisJCQkJOUE1MjhFODExN0Q3RjUyRjAwQUE5NTE4
IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi8sCisJCQkJOUE1MjhFODIxN0Q3RjUyRjAwQUE5NTE4
IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovLAogCQkJCUQ3MkY2RDc3MTUzMTU5QTMwMDFFRTQ0RSAv
KiBGbG93VGhyZWFkQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJRDcyRjZENzgxNTMxNTlBMzAwMUVF
NDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmggKi8sCiAJCQkJOTM1QzQ3NzQwOUFDNEQ4RDAw
QTZBQUI0IC8qIEdhcFJlY3RzLmggKi8sCkBAIC0yMTM0Myw2ICsyMTM0OSw3IEBACiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJRkUxMTVGQUIxNjc5
ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFNEFBREVFMTZEMkMzNzQwMDAyNkZGQyAvKiBBYnN0cmFjdFNRTFN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBQURFRjE2RDJDMzc0MDAwMjZGRkMg
LyogQWJzdHJhY3RTUUxTdGF0ZW1lbnRCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTI5
LDYgKzI0OTM2LDcgQEAKIAkJCQlGRDMxNjAzRDEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlzZXJO
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5MDcwN0U2MTIxOUMwNDMwMEQ5MEU1MSAvKiBB
TkdMRVdlYktpdEJyaWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTJBQTBFRkFDOTA2
MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlBNTI4RTgzMTdE
N0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzE2RkUxMTEwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzE2RkUxMTMwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEyQUMwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1h
dGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
bG9hdGluZ09iamVjdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3OWE5OTY5MDJiMDVkMmMxMTdmZjEzMjdi
ODZmYzUzYzUyNDk3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmxvYXRpbmdPYmplY3RzLmNwcApAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAy
MDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCisKKyNpbmNsdWRlICJSZW5kZXJC
bG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IFNhbWVTaXplQXNGbG9hdGluZ09iamVjdCB7CisgICAgdm9p
ZCogcG9pbnRlcnNbMl07CisgICAgTGF5b3V0UmVjdCByZWN0OworICAgIGludCBwYWdpbmF0aW9u
U3RydXQ7CisgICAgdWludDMyX3QgYml0ZmllbGRzIDogODsKK307CisKK0NPTVBJTEVfQVNTRVJU
KHNpemVvZihGbG9hdGluZ09iamVjdCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNGbG9hdGluZ09iamVj
dCksIEZsb2F0aW5nT2JqZWN0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKwordGVtcGxhdGUgPEZsb2F0
aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgorY2xhc3MgQ29tcHV0ZUZsb2F0T2Zmc2V0
QWRhcHRlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIElu
dGVydmFsVHlwZTsKKworICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXIoY29uc3QgUmVuZGVy
QmxvY2sqIHJlbmRlcmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20sIExheW91dFVuaXQm
IG9mZnNldCkKKyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICAgICAsIG1fbGlu
ZVRvcChsaW5lVG9wKQorICAgICAgICAsIG1fbGluZUJvdHRvbShsaW5lQm90dG9tKQorICAgICAg
ICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX291dGVybW9zdEZsb2F0KDApCisgICAg
eworICAgIH0KKworICAgIGludCBsb3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVRvcDsg
fQorICAgIGludCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3R0b207IH0KKyAg
ICB2b2lkIGNvbGxlY3RJZk5lZWRlZChjb25zdCBJbnRlcnZhbFR5cGUmKTsKKworI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQorICAgIC8vIFdoZW4gY29tcHV0aW5nIHRoZSBvZmZzZXQgY2F1c2VkIGJ5
IHRoZSBmbG9hdHMgb24gYSBnaXZlbiBsaW5lLCBpZgorICAgIC8vIHRoZSBvdXRlcm1vc3QgZmxv
YXQgb24gdGhhdCBsaW5lIGhhcyBhIHNoYXBlLW91dHNpZGUsIHRoZSBpbmxpbmUKKyAgICAvLyBj
b250ZW50IHRoYXQgYnV0dHMgdXAgYWdhaW5zdCB0aGF0IGZsb2F0IG11c3QgYmUgcG9zaXRpb25l
ZCB1c2luZworICAgIC8vIHRoZSBjb250b3VycyBvZiB0aGUgc2hhcGUsIG5vdCB0aGUgbWFyZ2lu
IGJveCBvZiB0aGUgZmxvYXQuCisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZs
b2F0KCkgY29uc3QgeyByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdDsgfQorI2VuZGlmCisKKyAgICBM
YXlvdXRVbml0IGdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJv
b2wgdXBkYXRlT2Zmc2V0SWZOZWVkZWQoY29uc3QgRmxvYXRpbmdPYmplY3QqKTsKKworICAgIGNv
bnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOworICAgIGludCBtX2xpbmVUb3A7CisgICAgaW50
IG1fbGluZUJvdHRvbTsKKyAgICBMYXlvdXRVbml0JiBtX29mZnNldDsKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogbV9vdXRlcm1vc3RGbG9hdDsKK307CisKK0Zsb2F0aW5nT2JqZWN0czo6Rmxv
YXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgYm9vbCBob3Jpem9udGFs
V3JpdGluZ01vZGUpCisgICAgOiBtX3BsYWNlZEZsb2F0c1RyZWUoVW5pbml0aWFsaXplZFRyZWUp
CisgICAgLCBtX2xlZnRPYmplY3RzQ291bnQoMCkKKyAgICAsIG1fcmlnaHRPYmplY3RzQ291bnQo
MCkKKyAgICAsIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKGhvcml6b250YWxXcml0aW5nTW9kZSkK
KyAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCit7Cit9CisKK0Zsb2F0aW5nT2JqZWN0czo6fkZs
b2F0aW5nT2JqZWN0cygpCit7CisgICAgLy8gRklYTUU6IG1fc2V0IHNob3VsZCB1c2UgT3duUHRy
IGluc3RlYWQuCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2V0KTsKK30KKwordm9pZCBGbG9hdGlu
Z09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQb2ludGVycygpCit7CisgICAgLy8gQ2xlYXIgcmVm
ZXJlbmNlcyB0byBvcmlnaW5hdGluZyBsaW5lcywgc2luY2UgdGhlIGxpbmVzIGFyZSBiZWluZyBk
ZWxldGVkCisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsK
KyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCEoKCppdCktPm9yaWdpbmF0aW5nTGlu
ZSgpKSB8fCAmKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSkgPT0gbV9yZW5k
ZXJlcik7CisgICAgICAgICgqaXQpLT5zZXRPcmlnaW5hdGluZ0xpbmUoMCk7CisgICAgfQorfQor
Cit2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBjYWxsIGRlbGV0ZUFsbFZhbHVlcywgZXhjZXB0IGNsZWFyRmxvYXRzCisgICAgLy8gbGlr
ZSB0byBwbGF5IGZhc3QgYW5kIGxvb3NlIHdpdGggb3duZXJzaGlwIG9mIHRoZXNlIHBvaW50ZXJz
LgorICAgIC8vIElmIHdlIG1vdmUgdG8gT3duUHRyIHRoYXQgd2lsbCBmaXggdGhpcyBvd25lcnNo
aXAgb2RkbmVzcy4KKyAgICBtX3NldC5jbGVhcigpOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5j
bGVhcigpOworICAgIG1fbGVmdE9iamVjdHNDb3VudCA9IDA7CisgICAgbV9yaWdodE9iamVjdHND
b3VudCA9IDA7Cit9CisKK3ZvaWQgRmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9iamVjdHNDb3Vu
dChGbG9hdGluZ09iamVjdDo6VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEZsb2F0aW5n
T2JqZWN0OjpGbG9hdExlZnQpCisgICAgICAgIG1fbGVmdE9iamVjdHNDb3VudCsrOworICAgIGVs
c2UKKyAgICAgICAgbV9yaWdodE9iamVjdHNDb3VudCsrOworfQorCit2b2lkIEZsb2F0aW5nT2Jq
ZWN0czo6ZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKK3sK
KyAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQorICAgICAgICBtX2xl
ZnRPYmplY3RzQ291bnQtLTsKKyAgICBlbHNlCisgICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQt
LTsKK30KKworRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBGbG9hdGluZ09iamVjdHM6OmludGVydmFs
Rm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAg
IGlmIChtX2hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgcmV0dXJuIEZsb2F0aW5nT2Jq
ZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnkoKSwgZmxvYXRpbmdPYmpl
Y3QtPmZyYW1lUmVjdCgpLm1heFkoKSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBGbG9h
dGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS54KCksIGZsb2F0
aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCksIGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9p
ZCBGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRp
bmdPYmplY3QpCit7CisgICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUo
KSk7CisKKyAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisgICAgaWYgKG1f
cGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCisgICAgICAgIG1fcGxhY2VkRmxvYXRz
VHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworCisj
aWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZSh0cnVl
KTsKKyNlbmRpZgorfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0
KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxvYXRpbmdP
YmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOwor
CisgICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAg
Ym9vbCByZW1vdmVkID0gbV9wbGFjZWRGbG9hdHNUcmVlLnJlbW92ZShpbnRlcnZhbEZvckZsb2F0
aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3Zl
ZCwgcmVtb3ZlZCk7CisgICAgfQorCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKGZh
bHNlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRU
cmVlKGZhbHNlKTsKKyNlbmRpZgorfQorCit2b2lkIEZsb2F0aW5nT2JqZWN0czo6YWRkKEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChm
bG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5hZGQoZmxvYXRpbmdPYmplY3QpOwor
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAgICAgYWRkUGxhY2VkT2Jq
ZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBGbG9hdGluZ09iamVjdHM6OnJlbW92ZShG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgZGVjcmVhc2VPYmplY3RzQ291
bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7CisgICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5nT2Jq
ZWN0KTsKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0aW5n
T2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxh
Y2VkKCkpCisgICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cit9CisK
K3ZvaWQgRmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpCit7CisgICAg
QVNTRVJUKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKTsKKyAgICBpZiAobV9z
ZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmlu
aXRJZk5lZWRlZChtX3JlbmRlcmVyLT52aWV3KCkuaW50ZXJ2YWxBcmVuYSgpKTsKKyAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsKKyAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0Owor
ICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgICAgICBtX3Bs
YWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmpl
Y3QpKTsKKyAgICB9Cit9CisKK0xheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVm
dE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNl
dE1vZGUsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKK3sKKyNpZiAhRU5BQkxFKENTU19T
SEFQRVMpCisgICAgVU5VU0VEX1BBUkFNKG9mZnNldE1vZGUpOworI2VuZGlmCisKKyAgICBMYXlv
dXRVbml0IG9mZnNldCA9IGZpeGVkT2Zmc2V0OworICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0
ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRlcihtX3JlbmRlcmVyLCByb3VuZFRv
SW50KGxvZ2ljYWxUb3ApLCByb3VuZFRvSW50KGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSwg
b2Zmc2V0KTsKKyAgICBwbGFjZWRGbG9hdHNUcmVlKCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihh
ZGFwdGVyKTsKKworICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICpoZWlnaHRSZW1h
aW5pbmcgPSBhZGFwdGVyLmdldEhlaWdodFJlbWFpbmluZygpOworCisjaWYgRU5BQkxFKENTU19T
SEFQRVMpCisgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0ID0gYWRhcHRl
ci5vdXRlcm1vc3RGbG9hdCgpOworICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZs
b2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKKyAgICAgICAgaWYgKFNoYXBlT3V0
c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFw
ZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21l
bnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShsb2dpY2FsVG9wLCBvdXRlcm1vc3RGbG9hdC0+bG9n
aWNhbFRvcChtX2hvcml6b250YWxXcml0aW5nTW9kZSksIGxvZ2ljYWxIZWlnaHQpOworICAgICAg
ICAgICAgb2Zmc2V0ICs9IHNoYXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEo
KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKwor
TGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9mZnNldChMYXlvdXRVbml0
IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQg
KmhlaWdodFJlbWFpbmluZykKK3sKKyNpZiAhRU5BQkxFKENTU19TSEFQRVMpCisgICAgVU5VU0VE
X1BBUkFNKG9mZnNldE1vZGUpOworI2VuZGlmCisKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IGZp
eGVkT2Zmc2V0OworICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6
OkZsb2F0UmlnaHQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgcm91bmRUb0ludChsb2dpY2FsVG9wKSwg
cm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIG9mZnNldCk7CisgICAgcGxh
Y2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CisKKyAgICBp
ZiAoaGVpZ2h0UmVtYWluaW5nKQorICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gYWRhcHRlci5n
ZXRIZWlnaHRSZW1haW5pbmcoKTsKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCA9IGFkYXB0ZXIub3V0ZXJtb3N0RmxvYXQo
KTsKKyAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYm
IG91dGVybW9zdEZsb2F0KSB7CisgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91
dHNpZGUgPSBvdXRlcm1vc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7
CisgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdC
bG9ja0xpbmUobG9naWNhbFRvcCwgb3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxUb3AobV9ob3Jpem9u
dGFsV3JpdGluZ01vZGUpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBz
aGFwZU91dHNpZGUtPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKKyAgICAgICAgfQorICAg
IH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG1pbihmaXhlZE9mZnNldCwgb2Zmc2V0KTsKK30KKwor
aW5saW5lIHN0YXRpYyBib29sIHJhbmdlc0ludGVyc2VjdChpbnQgZmxvYXRUb3AsIGludCBmbG9h
dEJvdHRvbSwgaW50IG9iamVjdFRvcCwgaW50IG9iamVjdEJvdHRvbSkKK3sKKyAgICBpZiAob2Jq
ZWN0VG9wID49IGZsb2F0Qm90dG9tIHx8IG9iamVjdEJvdHRvbSA8IGZsb2F0VG9wKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgdG9wIG9mIHRoZSBvYmplY3Qgb3ZlcmxhcHMg
dGhlIGZsb2F0CisgICAgaWYgKG9iamVjdFRvcCA+PSBmbG9hdFRvcCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBUaGUgb2JqZWN0IGVuY2xvc2VzIHRoZSBmbG9hdAorICAgIGlmIChv
YmplY3RUb3AgPCBmbG9hdFRvcCAmJiBvYmplY3RCb3R0b20gPiBmbG9hdEJvdHRvbSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGUgYm90dG9tIG9mIHRoZSBvYmplY3Qgb3Zlcmxh
cHMgdGhlIGZsb2F0CisgICAgaWYgKG9iamVjdEJvdHRvbSA+IG9iamVjdFRvcCAmJiBvYmplY3RC
b3R0b20gPiBmbG9hdFRvcCAmJiBvYmplY3RCb3R0b20gPD0gZmxvYXRCb3R0b20pCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgYm9vbCBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQ+Ojp1cGRhdGVPZmZzZXRJZk5lZWRlZChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QpCit7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQgPSBmbG9hdGluZ09iamVjdC0+
bG9naWNhbFJpZ2h0KG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAg
IGlmIChsb2dpY2FsUmlnaHQgPiBtX29mZnNldCkgeworICAgICAgICBtX29mZnNldCA9IGxvZ2lj
YWxSaWdodDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxG
bG9hdGluZ09iamVjdDo6RmxvYXRSaWdodD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KG1fcmVuZGVyZXItPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpOworICAgIGlmIChsb2dpY2FsTGVmdCA8IG1fb2Zmc2V0KSB7CisgICAg
ICAgIG1fb2Zmc2V0ID0gbG9naWNhbExlZnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBG
bG9hdFR5cGVWYWx1ZT4KK2lubGluZSB2b2lkIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8Rmxv
YXRUeXBlVmFsdWU+Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZh
bCkKK3sKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpbnRlcnZh
bC5kYXRhKCk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT50eXBlKCkgIT0gRmxvYXRUeXBlVmFs
dWUgfHwgIXJhbmdlc0ludGVyc2VjdChpbnRlcnZhbC5sb3coKSwgaW50ZXJ2YWwuaGlnaCgpLCBt
X2xpbmVUb3AsIG1fbGluZUJvdHRvbSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFsbCB0
aGUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNl
ZC4KKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpOworICAgIEFTU0VSVChy
YW5nZXNJbnRlcnNlY3QoZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxUb3AobV9y
ZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGZsb2F0aW5nT2JqZWN0LT5waXhl
bFNuYXBwZWRMb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpLCBtX2xpbmVUb3AsIG1fbGluZUJvdHRvbSkpOworCisgICAgYm9vbCBmbG9hdElzTmV3RXh0
cmVtZSA9IHVwZGF0ZU9mZnNldElmTmVlZGVkKGZsb2F0aW5nT2JqZWN0KTsKKyAgICBpZiAoZmxv
YXRJc05ld0V4dHJlbWUpCisgICAgICAgIG1fb3V0ZXJtb3N0RmxvYXQgPSBmbG9hdGluZ09iamVj
dDsKK30KKwordGVtcGxhdGUgPEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgor
TGF5b3V0VW5pdCBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0VHlwZVZhbHVlPjo6Z2V0
SGVpZ2h0UmVtYWluaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdCA/
IG1fb3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgLSBtX2xpbmVUb3AgOiBMYXlvdXRVbml0KDEpOworfQorCisjaWZuZGVm
IE5ERUJVRworLy8gVGhlc2UgaGVscGVycyBhcmUgb25seSB1c2VkIGJ5IHRoZSBQT0RJbnRlcnZh
bFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK1N0cmluZyBWYWx1ZVRvU3RyaW5nPGludD46
OnN0cmluZyhjb25zdCBpbnQgdmFsdWUpCit7CisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZh
bHVlKTsKK30KKworU3RyaW5nIFZhbHVlVG9TdHJpbmc8RmxvYXRpbmdPYmplY3QqPjo6c3RyaW5n
KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIiVwICglaXglaSAlaXglaSkiLCBmbG9hdGluZ09iamVjdCwgZmxvYXRpbmdP
YmplY3QtPmZyYW1lUmVjdCgpLngoKS50b0ludCgpLCBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0
KCkueSgpLnRvSW50KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5tYXhYKCkudG9JbnQo
KSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFkoKS50b0ludCgpKTsKK30KKyNlbmRp
ZgorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
bG9hdGluZ09iamVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmVkZTA3ZjFhMjdiNzcwMjhmMTEwNzVmMmU3
YmZmNDU2MzVjNTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0Zsb2F0aW5nT2JqZWN0cy5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDcg
RGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRmxvYXRpbmdP
YmplY3RzX2gKKyNkZWZpbmUgRmxvYXRpbmdPYmplY3RzX2gKKworI2luY2x1ZGUgIlBPREludGVy
dmFsVHJlZS5oIgorI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJCbG9jazsK
K2NsYXNzIFJlbmRlckJveDsKKworZW51bSBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgeyBT
aGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0LCBTaGFwZU91dHNpZGVGbG9hdE1hcmdpbkJveE9m
ZnNldCB9OworCitjbGFzcyBGbG9hdGluZ09iamVjdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRmxvYXRpbmdPYmplY3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICAvLyBOb3RlIHRoYXQgVHlwZSB1c2VzIGJpdHMgc28geW91IGNhbiB1c2UgRmxvYXRMZWZ0Umln
aHQgYXMgYSBtYXNrIHRvIHF1ZXJ5IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0LgorICAgIGVudW0g
VHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0UmlnaHQgPSAyLCBGbG9hdExlZnRSaWdodCA9IDMg
fTsKKworICAgIEZsb2F0aW5nT2JqZWN0KEVGbG9hdCB0eXBlKQorICAgICAgICA6IG1fcmVuZGVy
ZXIoMCkKKyAgICAgICAgLCBtX29yaWdpbmF0aW5nTGluZSgwKQorICAgICAgICAsIG1fcGFnaW5h
dGlvblN0cnV0KDApCisgICAgICAgICwgbV9zaG91bGRQYWludCh0cnVlKQorICAgICAgICAsIG1f
aXNEZXNjZW5kYW50KGZhbHNlKQorICAgICAgICAsIG1faXNQbGFjZWQoZmFsc2UpCisjaWZuZGVm
IE5ERUJVRworICAgICAgICAsIG1faXNJblBsYWNlZFRyZWUoZmFsc2UpCisjZW5kaWYKKyAgICB7
CisgICAgICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOworICAgICAgICBpZiAodHlwZSA9PSBM
ZWZ0RmxvYXQpCisgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdExlZnQ7CisgICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gUmlnaHRGbG9hdCkKKyAgICAgICAgICAgIG1fdHlwZSA9IEZsb2F0UmlnaHQ7
CisgICAgfQorCisgICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBlLCBjb25zdCBMYXlvdXRSZWN0
JiBmcmFtZVJlY3QpCisgICAgICAgIDogbV9yZW5kZXJlcigwKQorICAgICAgICAsIG1fb3JpZ2lu
YXRpbmdMaW5lKDApCisgICAgICAgICwgbV9mcmFtZVJlY3QoZnJhbWVSZWN0KQorICAgICAgICAs
IG1fcGFnaW5hdGlvblN0cnV0KDApCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwg
bV9zaG91bGRQYWludCh0cnVlKQorICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQorICAg
ICAgICAsIG1faXNQbGFjZWQodHJ1ZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9pc0lu
UGxhY2VkVHJlZShmYWxzZSkKKyNlbmRpZgorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdGluZ09i
amVjdCogY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGNsb25l
T2JqZWN0ID0gbmV3IEZsb2F0aW5nT2JqZWN0KHR5cGUoKSwgbV9mcmFtZVJlY3QpOworICAgICAg
ICBjbG9uZU9iamVjdC0+bV9yZW5kZXJlciA9IG1fcmVuZGVyZXI7CisgICAgICAgIGNsb25lT2Jq
ZWN0LT5tX29yaWdpbmF0aW5nTGluZSA9IG1fb3JpZ2luYXRpbmdMaW5lOworICAgICAgICBjbG9u
ZU9iamVjdC0+bV9wYWdpbmF0aW9uU3RydXQgPSBtX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAg
Y2xvbmVPYmplY3QtPm1fc2hvdWxkUGFpbnQgPSBtX3Nob3VsZFBhaW50OworICAgICAgICBjbG9u
ZU9iamVjdC0+bV9pc0Rlc2NlbmRhbnQgPSBtX2lzRGVzY2VuZGFudDsKKyAgICAgICAgY2xvbmVP
YmplY3QtPm1faXNQbGFjZWQgPSBtX2lzUGxhY2VkOworICAgICAgICByZXR1cm4gY2xvbmVPYmpl
Y3Q7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZT4obV90eXBlKTsgfQorICAgIFJlbmRlckJveCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyOyB9CisKKyAgICBib29sIGlzUGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1BsYWNlZDsgfQorICAgIHZvaWQgc2V0SXNQbGFjZWQoYm9vbCBwbGFjZWQgPSB0cnVlKSB7IG1f
aXNQbGFjZWQgPSBwbGFjZWQ7IH0KKworICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgQVNTRVJU
KGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9CisgICAgTGF5b3V0VW5pdCBt
YXhYKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5tYXhY
KCk7IH0KKyAgICBMYXlvdXRVbml0IHkoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0
dXJuIG1fZnJhbWVSZWN0LnkoKTsgfQorICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgQVNT
RVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CisgICAgTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KKyAgICBM
YXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9
CisKKyAgICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUo
KSk7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KKyAgICB2b2lkIHNldFkoTGF5b3V0VW5pdCB5KSB7
IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KKyAgICB2
b2lkIHNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgp
KTsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoTGF5
b3V0VW5pdCBoZWlnaHQpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Qu
c2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCgp
IGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKyAgICB2
b2lkIHNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QpIHsgQVNTRVJUKCFp
c0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KKworICAgIGludCBw
YWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25TdHJ1dDsgfQorICAg
IHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkgeyBtX3BhZ2luYXRpb25TdHJ1dCA9
IHN0cnV0OyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBpc0luUGxhY2VkVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblBsYWNlZFRyZWU7IH0KKyAgICB2b2lkIHNldElzSW5QbGFjZWRU
cmVlKGJvb2wgdmFsdWUpIHsgbV9pc0luUGxhY2VkVHJlZSA9IHZhbHVlOyB9CisjZW5kaWYKKwor
ICAgIGJvb2wgc2hvdWxkUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhaW50OyB9Cisg
ICAgdm9pZCBzZXRTaG91bGRQYWludChib29sIHNob3VsZFBhaW50KSB7IG1fc2hvdWxkUGFpbnQg
PSBzaG91bGRQYWludDsgfQorICAgIGJvb2wgaXNEZXNjZW5kYW50KCkgY29uc3QgeyByZXR1cm4g
bV9pc0Rlc2NlbmRhbnQ7IH0KKyAgICB2b2lkIHNldElzRGVzY2VuZGFudChib29sIGlzRGVzY2Vu
ZGFudCkgeyBtX2lzRGVzY2VuZGFudCA9IGlzRGVzY2VuZGFudDsgfQorCisgICAgLy8gRklYTUU6
IENhbGxlcnMgb2YgdGhlc2UgbWV0aG9kcyBhcmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQgYmUgd2hp
dGVsaXN0ZWQgZXhwbGljaXRseSBvciByZW1vdmVkLgorICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVu
ZGVyQm94KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KKyAgICBSb290SW5s
aW5lQm94KiBvcmlnaW5hdGluZ0xpbmUoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmF0aW5nTGlu
ZTsgfQorICAgIHZvaWQgc2V0T3JpZ2luYXRpbmdMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmUpIHsg
bV9vcmlnaW5hdGluZ0xpbmUgPSBsaW5lOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3Ao
Ym9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUgPyB5KCkgOiB4KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20o
Ym9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUgPyBtYXhZKCkgOiBtYXhYKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8geCgpIDogeSgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUgPyBtYXhYKCkgOiBtYXhZKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQorCisgICAgaW50IHBp
eGVsU25hcHBlZExvZ2ljYWxUb3AoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBw
ZWRZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFw
cGVkTG9naWNhbEJvdHRvbShib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1h
eFkoKSA6IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFgoKTsgfQorICAgIGludCBwaXhlbFNu
YXBwZWRMb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFgo
KSA6IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRM
b2dpY2FsUmlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCkg
OiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KKworICAgIHZvaWQgc2V0TG9naWNh
bFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
CisgICAgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAg
ICBzZXRZKGxvZ2ljYWxUb3ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRYKGxvZ2lj
YWxUb3ApOworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNh
bExlZnQsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgeworICAgICAgICBpZiAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICBzZXRYKGxvZ2ljYWxMZWZ0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0WShsb2dpY2FsTGVmdCk7CisgICAgfQorICAg
IHZvaWQgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpCisgICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbEhlaWdodCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxIZWlnaHQpOworICAgIH0KKyAgICB2
b2lkIHNldExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc0hvcml6
b250YWxXcml0aW5nTW9kZSkKKyAgICB7CisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5n
TW9kZSkKKyAgICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNldEhlaWdodChsb2dpY2FsV2lkdGgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7CisgICAgUm9vdElubGluZUJveCogbV9vcmlnaW5h
dGluZ0xpbmU7CisgICAgTGF5b3V0UmVjdCBtX2ZyYW1lUmVjdDsKKyAgICBpbnQgbV9wYWdpbmF0
aW9uU3RydXQ7IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIExheW91dFVuaXQsIHNpbmNlIGl0
J3MgYSB2ZXJ0aWNhbCBvZmZzZXQuCisKKyAgICB1bnNpZ25lZCBtX3R5cGUgOiAyOyAvLyBUeXBl
IChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgdW5zaWduZWQgbV9zaG91bGRQYWludCA6IDE7
CisgICAgdW5zaWduZWQgbV9pc0Rlc2NlbmRhbnQgOiAxOworICAgIHVuc2lnbmVkIG1faXNQbGFj
ZWQgOiAxOworI2lmbmRlZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX2lzSW5QbGFjZWRUcmVlIDog
MTsKKyNlbmRpZgorfTsKKworc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucyB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmplY3QqIGtleSkgeyByZXR1cm4gRGVm
YXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5LT5yZW5kZXJlcigpKTsgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBGbG9hdGluZ09iamVjdCogYikg
eyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiLT5yZW5kZXJlcigpOyB9CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKK3N0cnVj
dCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChSZW5kZXJCb3gqIGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6
Omhhc2goa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBS
ZW5kZXJCb3gqIGIpIHsgcmV0dXJuIGEtPnJlbmRlcmVyKCkgPT0gYjsgfQorfTsKK3R5cGVkZWYg
TGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlv
bnM+IEZsb2F0aW5nT2JqZWN0U2V0OwordHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3Rf
aXRlcmF0b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKK3R5cGVkZWYgUE9ESW50ZXJ2YWw8
aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7Cit0eXBlZGVmIFBP
REludGVydmFsVHJlZTxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RUcmVlOwor
dHlwZWRlZiBQT0RGcmVlTGlzdEFyZW5hPFBPRFJlZEJsYWNrVHJlZTxGbG9hdGluZ09iamVjdElu
dGVydmFsPjo6Tm9kZT4gSW50ZXJ2YWxBcmVuYTsKKworCitjbGFzcyBGbG9hdGluZ09iamVjdHMg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZsb2F0aW5nT2JqZWN0cyk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJC
bG9jayosIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKKyAgICB+RmxvYXRpbmdPYmplY3Rz
KCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBhZGQoRmxvYXRpbmdPYmplY3QqKTsK
KyAgICB2b2lkIHJlbW92ZShGbG9hdGluZ09iamVjdCopOworICAgIHZvaWQgYWRkUGxhY2VkT2Jq
ZWN0KEZsb2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRp
bmdPYmplY3QqKTsKKyAgICB2b2lkIHNldEhvcml6b250YWxXcml0aW5nTW9kZShib29sIGIgPSB0
cnVlKSB7IG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gYjsgfQorCisgICAgYm9vbCBoYXNMZWZ0
T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9iamVjdHNDb3VudCA+IDA7IH0KKyAgICBi
b29sIGhhc1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3RzQ291bnQg
PiAwOyB9CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0OyB9CisgICAgdm9pZCBjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKTsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVu
aXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9h
dE9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0LCBMYXlvdXRVbml0KiBo
ZWlnaHRSZW1haW5pbmcgPSAwKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldChM
YXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRl
RmxvYXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7Citwcml2
YXRlOgorICAgIHZvaWQgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKKyAgICBjb25zdCBGbG9h
dGluZ09iamVjdFRyZWUmIHBsYWNlZEZsb2F0c1RyZWUoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQorICAgICAgICAgICAgY29tcHV0ZVBs
YWNlZEZsb2F0c1RyZWUoKTsKKyAgICAgICAgcmV0dXJuIG1fcGxhY2VkRmxvYXRzVHJlZTsKKyAg
ICB9CisgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7
CisgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7Cisg
ICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0
aW5nT2JqZWN0Kik7CisKKyAgICBGbG9hdGluZ09iamVjdFNldCBtX3NldDsKKyAgICBGbG9hdGlu
Z09iamVjdFRyZWUgbV9wbGFjZWRGbG9hdHNUcmVlOworICAgIHVuc2lnbmVkIG1fbGVmdE9iamVj
dHNDb3VudDsKKyAgICB1bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50OworICAgIGJvb2wgbV9o
b3Jpem9udGFsV3JpdGluZ01vZGU7CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7
Cit9OworCisjaWZuZGVmIE5ERUJVRworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQ
T0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3RlbXBsYXRlIDw+IHN0cnVj
dCBWYWx1ZVRvU3RyaW5nPGludD4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IGlu
dCB2YWx1ZSk7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxGbG9hdGluZ09i
amVjdCo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBGbG9hdGluZ09iamVjdCop
OworfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGbG9h
dGluZ09iamVjdHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5k
ZXggMTZiZjdjZWVkMDk2OWFkMDQwNjQ4OWE1ZjU1NTI4ZjM2ZTg5OGY4ZC4uOWRjMzY4YWQwOWJj
MzYyMGMwOWY3MTZiOGI3N2UzYTdjYzU2NGQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCkBAIC04NywxMyArODcsNiBAQCBzdHJ1Y3QgU2FtZVNpemVBc1JlbmRl
ckJsb2NrIDogcHVibGljIFJlbmRlckJveCB7CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZW5k
ZXJCbG9jaykgPT0gc2l6ZW9mKFNhbWVTaXplQXNSZW5kZXJCbG9jayksIFJlbmRlckJsb2NrX3No
b3VsZF9zdGF5X3NtYWxsKTsKIAotc3RydWN0IFNhbWVTaXplQXNGbG9hdGluZ09iamVjdCB7Ci0g
ICAgdm9pZCogcG9pbnRlcnNbMl07Ci0gICAgTGF5b3V0UmVjdCByZWN0OwotICAgIGludCBwYWdp
bmF0aW9uU3RydXQ7Ci0gICAgdWludDMyX3QgYml0ZmllbGRzIDogODsKLX07Ci0KIENPTVBJTEVf
QVNTRVJUKHNpemVvZihSZW5kZXJCbG9jazo6TWFyZ2luVmFsdWVzKSA9PSBzaXplb2YoTGF5b3V0
VW5pdFs0XSksIE1hcmdpblZhbHVlc19zaG91bGRfc3RheV9zbWFsbCk7CiAKIHN0cnVjdCBTYW1l
U2l6ZUFzTWFyZ2luSW5mbyB7CkBAIC0yMDMsNyArMTk2LDYgQEAgUmVuZGVyQmxvY2s6OlJlbmRl
ckJsb2NrKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgLCBtX2hhc0JvcmRlck9yUGFkZGluZ0xvZ2lj
YWxXaWR0aENoYW5nZWQoZmFsc2UpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7Ci0g
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCkgPT0g
c2l6ZW9mKFNhbWVTaXplQXNGbG9hdGluZ09iamVjdCksIEZsb2F0aW5nT2JqZWN0X3Nob3VsZF9z
dGF5X3NtYWxsKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyQmxvY2s6Ok1hcmdp
bkluZm8pID09IHNpemVvZihTYW1lU2l6ZUFzTWFyZ2luSW5mbyksIE1hcmdpbkluZm9fc2hvdWxk
X3N0YXlfc21hbGwpOwogfQogCkBAIC0zODc2LDcgKzM4NjgsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVGbG9hdGluZ09iamVjdHMoKQogICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigp
OwogfQogCi1SZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRG
bG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCitGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6
Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBBU1NFUlQoby0+aXNG
bG9hdGluZygpKTsKIApAQCAtNDI0MSw3MCArNDIzMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNs
ZWFyUGVyY2VudEhlaWdodERlc2NlbmRhbnRzRnJvbShSZW5kZXJCb3gqIHBhcmVudCkKICAgICB9
CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCByYW5nZXNJbnRlcnNlY3QoaW50IGZsb2F0VG9wLCBp
bnQgZmxvYXRCb3R0b20sIGludCBvYmplY3RUb3AsIGludCBvYmplY3RCb3R0b20pCi17Ci0gICAg
aWYgKG9iamVjdFRvcCA+PSBmbG9hdEJvdHRvbSB8fCBvYmplY3RCb3R0b20gPCBmbG9hdFRvcCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHRvcCBvZiB0aGUgb2JqZWN0IG92
ZXJsYXBzIHRoZSBmbG9hdAotICAgIGlmIChvYmplY3RUb3AgPj0gZmxvYXRUb3ApCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhlIG9iamVjdCBlbmNsb3NlcyB0aGUgZmxvYXQKLSAg
ICBpZiAob2JqZWN0VG9wIDwgZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tID4gZmxvYXRCb3R0b20p
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhlIGJvdHRvbSBvZiB0aGUgb2JqZWN0
IG92ZXJsYXBzIHRoZSBmbG9hdAotICAgIGlmIChvYmplY3RCb3R0b20gPiBvYmplY3RUb3AgJiYg
b2JqZWN0Qm90dG9tID4gZmxvYXRUb3AgJiYgb2JqZWN0Qm90dG9tIDw9IGZsb2F0Qm90dG9tKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIGJvb2wgUmVuZGVyQmxvY2s6OkNvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQ+Ojp1cGRhdGVPZmZzZXRJZk5lZWRl
ZChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHQgPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbFJpZ2h0KG1fcmVuZGVyZXIt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgIGlmIChsb2dpY2FsUmlnaHQgPiBtX29m
ZnNldCkgewotICAgICAgICBtX29mZnNldCA9IGxvZ2ljYWxSaWdodDsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IGJvb2wgUmVuZGVyQmxvY2s6OkNvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8UmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0Pjo6dXBkYXRlT2Zmc2V0SWZOZWVkZWQoY29uc3Qg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIExheW91dFVuaXQgbG9naWNh
bExlZnQgPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbExlZnQobV9yZW5kZXJlci0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgaWYgKGxvZ2ljYWxMZWZ0IDwgbV9vZmZzZXQpIHsKLSAg
ICAgICAgbV9vZmZzZXQgPSBsb2dpY2FsTGVmdDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpD
b21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0VHlwZVZhbHVlPjo6Y29sbGVjdElmTmVlZGVk
KGNvbnN0IEludGVydmFsVHlwZSYgaW50ZXJ2YWwpCi17Ci0gICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0ID0gaW50ZXJ2YWwuZGF0YSgpOwotICAgIGlmIChmbG9hdGluZ09i
amVjdC0+dHlwZSgpICE9IEZsb2F0VHlwZVZhbHVlIHx8ICFyYW5nZXNJbnRlcnNlY3QoaW50ZXJ2
YWwubG93KCksIGludGVydmFsLmhpZ2goKSwgbV9saW5lVG9wLCBtX2xpbmVCb3R0b20pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB0aGUg
dHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCi0gICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0
LT5pc1BsYWNlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2VzSW50ZXJzZWN0KGZsb2F0aW5nT2JqZWN0
LT5waXhlbFNuYXBwZWRMb2dpY2FsVG9wKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpLCBmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbShtX3JlbmRl
cmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbV9saW5lVG9wLCBtX2xpbmVCb3R0b20p
KTsKLQotICAgIGJvb2wgZmxvYXRJc05ld0V4dHJlbWUgPSB1cGRhdGVPZmZzZXRJZk5lZWRlZChm
bG9hdGluZ09iamVjdCk7Ci0gICAgaWYgKGZsb2F0SXNOZXdFeHRyZW1lKQotICAgICAgICBtX291
dGVybW9zdEZsb2F0ID0gZmxvYXRpbmdPYmplY3Q7Ci19Ci0KLXRlbXBsYXRlIDxSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+Ci1MYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0VHlwZVZhbHVlPjo6Z2V0SGVp
Z2h0UmVtYWluaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdCA/IG1f
b3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgLSBtX2xpbmVUb3AgOiBMYXlvdXRVbml0KDEpOwotfQotCiBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjp0ZXh0SW5kZW50T2Zmc2V0KCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0
IGN3ID0gMDsKQEAgLTc4MDcsMTgzICs3NzM1LDExIEBAIGNvbnN0IGNoYXIqIFJlbmRlckJsb2Nr
OjpyZW5kZXJOYW1lKCkgY29uc3QKICAgICByZXR1cm4gIlJlbmRlckJsb2NrIjsKIH0KIAotaW5s
aW5lIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyhjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgIDog
bV9wbGFjZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQotICAgICwgbV9sZWZ0T2JqZWN0
c0NvdW50KDApCi0gICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCi0gICAgLCBtX2hvcml6b250
YWxXcml0aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgLCBtX3JlbmRlcmVyKHJl
bmRlcmVyKQotewotfQotCi1SZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjp+RmxvYXRpbmdP
YmplY3RzKCkKLXsKLSAgICAvLyBGSVhNRTogbV9zZXQgc2hvdWxkIHVzZSBPd25QdHIgaW5zdGVh
ZC4KLSAgICBkZWxldGVBbGxWYWx1ZXMobV9zZXQpOwotfQotCi12b2lkIFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQb2ludGVycygpCi17Ci0gICAgLy8gQ2xl
YXIgcmVmZXJlbmNlcyB0byBvcmlnaW5hdGluZyBsaW5lcywgc2luY2UgdGhlIGxpbmVzIGFyZSBi
ZWluZyBkZWxldGVkCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5l
bmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCEoKCppdCktPm9yaWdpbmF0
aW5nTGluZSgpKSB8fCAmKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSkgPT0g
bV9yZW5kZXJlcik7Ci0gICAgICAgICgqaXQpLT5zZXRPcmlnaW5hdGluZ0xpbmUoMCk7Ci0gICAg
fQotfQotCiB2b2lkIFJlbmRlckJsb2NrOjpjcmVhdGVGbG9hdGluZ09iamVjdHMoKQogewogICAg
IG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyh0aGlzLCBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiB9CiAKLS8vIEZJWE1FOiBSZS1pbmxpbmUgdGhp
cyBvbmNlIGZsb2F0cyBtb3ZlIGludG8gUmVuZGVyQmxvY2tGbG93Lgotdm9pZCBSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGNhbGwgZGVsZXRlQWxsVmFsdWVzLCBleGNlcHQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzCi0g
ICAgLy8gbGlrZSB0byBwbGF5IGZhc3QgYW5kIGxvb3NlIHdpdGggb3duZXJzaGlwIG9mIHRoZXNl
IHBvaW50ZXJzLgotICAgIC8vIElmIHdlIG1vdmUgdG8gT3duUHRyIHRoYXQgd2lsbCBmaXggdGhp
cyBvd25lcnNoaXAgb2RkbmVzcy4KLSAgICBtX3NldC5jbGVhcigpOwotICAgIG1fcGxhY2VkRmxv
YXRzVHJlZS5jbGVhcigpOwotICAgIG1fbGVmdE9iamVjdHNDb3VudCA9IDA7Ci0gICAgbV9yaWdo
dE9iamVjdHNDb3VudCA9IDA7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OmluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUp
Ci17ICAgIAotICAgIGlmICh0eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpCi0gICAg
ICAgIG1fbGVmdE9iamVjdHNDb3VudCsrOwotICAgIGVsc2UgCi0gICAgICAgIG1fcmlnaHRPYmpl
Y3RzQ291bnQrKzsKLX0KLQotaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6ZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKLXsKLSAg
ICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQotICAgICAgICBtX2xlZnRP
YmplY3RzQ291bnQtLTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQtLTsK
LX0KLQotaW5saW5lIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIGlmIChtX2hvcml6b250YWxXcml0aW5nTW9k
ZSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsKGZs
b2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3Qo
KS5tYXhZKCksIGZsb2F0aW5nT2JqZWN0KTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLngoKSwgZmxvYXRp
bmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFgoKSwgZmxvYXRpbmdPYmplY3QpOwotfQotCi12b2lk
IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+aXNJ
blBsYWNlZFRyZWUoKSk7Ci0KLSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7
Ci0gICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgIG1f
cGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09i
amVjdCkpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxh
Y2VkVHJlZSh0cnVlKTsgICAgICAKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QpCi17Ci0gICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpICYmIGZsb2F0
aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKLQotICAgIGlmIChtX3BsYWNlZEZsb2F0c1Ry
ZWUuaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxv
YXRzVHJlZS5yZW1vdmUoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkp
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAgIH0KLSAgICAK
LSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQoZmFsc2UpOwotI2lmbmRlZiBOREVCVUcK
LSAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUoZmFsc2UpOwotI2VuZGlmCi19
Ci0KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmFkZChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAgaW5jcmVhc2VPYmplY3RzQ291bnQoZmxv
YXRpbmdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQuYWRkKGZsb2F0aW5nT2JqZWN0KTsKLSAg
ICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCi0gICAgICAgIGFkZFBsYWNlZE9iamVj
dChmbG9hdGluZ09iamVjdCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCi17Ci0gICAg
ZGVjcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQu
cmVtb3ZlKGZsb2F0aW5nT2JqZWN0KTsKLSAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxh
Y2VkKCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKLSAgICBpZiAoZmxv
YXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCi0gICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9h
dGluZ09iamVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29t
cHV0ZVBsYWNlZEZsb2F0c1RyZWUoKQotewotICAgIEFTU0VSVCghbV9wbGFjZWRGbG9hdHNUcmVl
LmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQobV9yZW5kZXJlci0+dmll
dygpLmludGVydmFsQXJlbmEoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IG1fc2V0LmJlZ2luKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3Nl
dC5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKLSAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0
LT5pc1BsYWNlZCgpKQotICAgICAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZh
bEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7Ci0gICAgfQotfQotCi1MYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91
dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgb2Zmc2V0TW9kZSwgTGF5b3V0
VW5pdCAqaGVpZ2h0UmVtYWluaW5nKQotewotI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBV
TlVTRURfUEFSQU0ob2Zmc2V0TW9kZSk7Ci0jZW5kaWYKLQotICAgIExheW91dFVuaXQgb2Zmc2V0
ID0gZml4ZWRPZmZzZXQ7Ci0gICAgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdGluZ09i
amVjdDo6RmxvYXRMZWZ0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIHJvdW5kVG9JbnQobG9naWNhbFRv
cCksIHJvdW5kVG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpLCBvZmZzZXQpOwotICAg
IHBsYWNlZEZsb2F0c1RyZWUoKS5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFkYXB0ZXIpOwotCi0g
ICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGFkYXB0
ZXIuZ2V0SGVpZ2h0UmVtYWluaW5nKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBj
b25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91dGVybW9zdEZs
b2F0KCk7Ci0gICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNl
dCAmJiBvdXRlcm1vc3RGbG9hdCkgewotICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hh
cGVPdXRzaWRlID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8o
KSkgewotICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JDb250YWlu
aW5nQmxvY2tMaW5lKGxvZ2ljYWxUb3AsIG91dGVybW9zdEZsb2F0LT5sb2dpY2FsVG9wKG1faG9y
aXpvbnRhbFdyaXRpbmdNb2RlKSwgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBvZmZzZXQg
Kz0gc2hhcGVPdXRzaWRlLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1MYXlvdXRVbml0IFJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9mZnNldChMYXlvdXRVbml0
IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQg
KmhlaWdodFJlbWFpbmluZykKLXsKLSNpZiAhRU5BQkxFKENTU19TSEFQRVMpCi0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldE1vZGUpOwotI2VuZGlmCi0KLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IGZp
eGVkT2Zmc2V0OwotICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6
OkZsb2F0UmlnaHQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgcm91bmRUb0ludChsb2dpY2FsVG9wKSwg
cm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIG9mZnNldCk7Ci0gICAgcGxh
Y2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7Ci0KLSAgICBp
ZiAoaGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gYWRhcHRlci5n
ZXRIZWlnaHRSZW1haW5pbmcoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBvdXRlcm1vc3RGbG9hdCA9IGFkYXB0ZXIub3V0ZXJtb3N0RmxvYXQo
KTsKLSAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYm
IG91dGVybW9zdEZsb2F0KSB7Ci0gICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91
dHNpZGUgPSBvdXRlcm1vc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7
Ci0gICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdC
bG9ja0xpbmUobG9naWNhbFRvcCwgb3V0ZXJtb3N0RmxvYXQtPmxvZ2ljYWxUb3AobV9ob3Jpem9u
dGFsV3JpdGluZ01vZGUpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAgIG9mZnNldCArPSBz
aGFwZU91dHNpZGUtPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG1pbihmaXhlZE9mZnNldCwgb2Zmc2V0KTsKLX0KLQog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5saW5lIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7
CkBAIC04MTMxLDE3ICs3ODg3LDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2hvd0xpbmVUcmVlQW5k
TWFyayhjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDEsIGNvbnN0IGNoYXIqIG0KICAgICAgICAg
cm9vdC0+c2hvd0xpbmVUcmVlQW5kTWFyayhtYXJrZWRCb3gxLCBtYXJrZWRMYWJlbDEsIG1hcmtl
ZEJveDIsIG1hcmtlZExhYmVsMiwgb2JqLCAxKTsKIH0KIAotLy8gVGhlc2UgaGVscGVycyBhcmUg
b25seSB1c2VkIGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4K
LVN0cmluZyBWYWx1ZVRvU3RyaW5nPGludD46OnN0cmluZyhjb25zdCBpbnQgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKLX0KLQotU3RyaW5nIFZhbHVlVG9TdHJp
bmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhjb25zdCBSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQotewotICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiJXAgKCVpeCVpICVpeCVpKSIsIGZsb2F0aW5nT2JqZWN0LCBmbG9hdGluZ09iamVj
dC0+ZnJhbWVSZWN0KCkueCgpLnRvSW50KCksIGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS55
KCkudG9JbnQoKSwgZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLm1heFgoKS50b0ludCgpLCBm
bG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkubWF4WSgpLnRvSW50KCkpOwotfQotCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAppbmRleCBjM2EwOTNmMGVjMjcyZTdkOGQwZGExZmE3YjgwOWI1MWMyMzVkYTg4Li5iY2Zi
M2NkMmY2MDQ5OTlhYjQyNGIwMWE5YTBlZTg5ZjdkM2M4MTI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBSZW5kZXJCbG9j
a19oCiAKICNpbmNsdWRlICJDb2x1bW5JbmZvLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3Rz
LmgiCiAjaW5jbHVkZSAiR2FwUmVjdHMuaCIKICNpbmNsdWRlICJQT0RJbnRlcnZhbFRyZWUuaCIK
ICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAgLTU5OSw4ICs2MDAsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5
b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdl
ZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOwogCiBwcml2YXRlOgotICAg
IGVudW0gU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIHsgU2hhcGVPdXRzaWRlRmxvYXRTaGFw
ZU9mZnNldCwgU2hhcGVPdXRzaWRlRmxvYXRNYXJnaW5Cb3hPZmZzZXQgfTsKLQogICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0RmxvYXRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nLCBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSkgY29u
c3Q7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEZsb2F0T2Zmc2V0Rm9yTGluZShMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQqIGhlaWdo
dFJlbWFpbmluZywgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9m
ZnNldE1vZGUpIGNvbnN0OwogICAgIExheW91dFVuaXQgYWRqdXN0TG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yTGluZShMYXlvdXRVbml0IG9mZnNldEZyb21GbG9hdHMsIGJvb2wgYXBwbHlUZXh0SW5kZW50
KSBjb25zdDsKQEAgLTY3MCwxNTEgKzY2OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgZXZl
ckhhZExheW91dDsKICAgICB9OwogCi0gICAgY2xhc3MgRmxvYXRpbmdPYmplY3QgewotICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gTm90ZSB0aGF0IFR5cGUgdXNlcyBiaXRz
IHNvIHlvdSBjYW4gdXNlIEZsb2F0TGVmdFJpZ2h0IGFzIGEgbWFzayB0byBxdWVyeSBmb3IgYm90
aCBsZWZ0IGFuZCByaWdodC4KLSAgICAgICAgZW51bSBUeXBlIHsgRmxvYXRMZWZ0ID0gMSwgRmxv
YXRSaWdodCA9IDIsIEZsb2F0TGVmdFJpZ2h0ID0gMyB9OwotCi0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KEVGbG9hdCB0eXBlKQotICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDApCi0gICAgICAgICAg
ICAsIG1fb3JpZ2luYXRpbmdMaW5lKDApCi0gICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0
KDApCi0gICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKLSAgICAgICAgICAgICwgbV9p
c0Rlc2NlbmRhbnQoZmFsc2UpCi0gICAgICAgICAgICAsIG1faXNQbGFjZWQoZmFsc2UpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQotI2VuZGlm
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwotICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gTGVmdEZsb2F0KQotICAgICAgICAgICAgICAgIG1fdHlwZSA9IEZs
b2F0TGVmdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUmlnaHRGbG9hdCkKLSAgICAg
ICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFJpZ2h0OyAgCi0gICAgICAgIH0KLQotICAgICAgICBG
bG9hdGluZ09iamVjdChUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCkKLSAg
ICAgICAgICAgIDogbV9yZW5kZXJlcigwKQotICAgICAgICAgICAgLCBtX29yaWdpbmF0aW5nTGlu
ZSgwKQotICAgICAgICAgICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCi0gICAgICAgICAgICAs
IG1fcGFnaW5hdGlvblN0cnV0KDApCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAg
ICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1faXNEZXNjZW5kYW50
KGZhbHNlKQotICAgICAgICAgICAgLCBtX2lzUGxhY2VkKHRydWUpCi0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQotI2VuZGlmCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBjbG9uZSgpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBjbG9uZU9iamVjdCA9IG5ldyBGbG9h
dGluZ09iamVjdCh0eXBlKCksIG1fZnJhbWVSZWN0KTsKLSAgICAgICAgICAgIGNsb25lT2JqZWN0
LT5tX3JlbmRlcmVyID0gbV9yZW5kZXJlcjsKLSAgICAgICAgICAgIGNsb25lT2JqZWN0LT5tX29y
aWdpbmF0aW5nTGluZSA9IG1fb3JpZ2luYXRpbmdMaW5lOwotICAgICAgICAgICAgY2xvbmVPYmpl
Y3QtPm1fcGFnaW5hdGlvblN0cnV0ID0gbV9wYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAgICAgICBj
bG9uZU9iamVjdC0+bV9zaG91bGRQYWludCA9IG1fc2hvdWxkUGFpbnQ7Ci0gICAgICAgICAgICBj
bG9uZU9iamVjdC0+bV9pc0Rlc2NlbmRhbnQgPSBtX2lzRGVzY2VuZGFudDsKLSAgICAgICAgICAg
IGNsb25lT2JqZWN0LT5tX2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKLSAgICAgICAgICAgIHJldHVy
biBjbG9uZU9iamVjdDsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KLSAgICAgICAgUmVuZGVyQm94KiBy
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICAgICAgCi0gICAgICAg
IGJvb2wgaXNQbGFjZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGxhY2VkOyB9Ci0gICAgICAgIHZv
aWQgc2V0SXNQbGFjZWQoYm9vbCBwbGFjZWQgPSB0cnVlKSB7IG1faXNQbGFjZWQgPSBwbGFjZWQ7
IH0KLQotICAgICAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsg
cmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgICAgICBMYXlvdXRVbml0IG1heFgoKSBjb25z
dCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFgoKTsgfQotICAg
ICAgICBMYXlvdXRVbml0IHkoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1f
ZnJhbWVSZWN0LnkoKTsgfQotICAgICAgICBMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IEFTU0VS
VChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsgfQotICAgICAgICBMYXlv
dXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQotICAg
ICAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdo
dCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBBU1NFUlQoIWlzSW5Q
bGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9Ci0gICAgICAgIHZvaWQgc2V0WShM
YXlvdXRVbml0IHkpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0
WSh5KTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgQVNTRVJU
KCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAg
ICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNl
ZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9Ci0KLSAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJl
dHVybiBtX2ZyYW1lUmVjdDsgfQotICAgICAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBMYXlv
dXRSZWN0JiBmcmFtZVJlY3QpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJl
Y3QgPSBmcmFtZVJlY3Q7IH0KLQotICAgICAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3Qg
eyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KLSAgICAgICAgdm9pZCBzZXRQYWdpbmF0aW9u
U3RydXQoaW50IHN0cnV0KSB7IG1fcGFnaW5hdGlvblN0cnV0ID0gc3RydXQ7IH0KLQotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgYm9vbCBpc0luUGxhY2VkVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNJblBsYWNlZFRyZWU7IH0KLSAgICAgICAgdm9pZCBzZXRJc0luUGxhY2VkVHJlZShib29sIHZh
bHVlKSB7IG1faXNJblBsYWNlZFRyZWUgPSB2YWx1ZTsgfQotI2VuZGlmCi0KLSAgICAgICAgYm9v
bCBzaG91bGRQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUGFpbnQ7IH0KLSAgICAgICAg
dm9pZCBzZXRTaG91bGRQYWludChib29sIHNob3VsZFBhaW50KSB7IG1fc2hvdWxkUGFpbnQgPSBz
aG91bGRQYWludDsgfQotICAgICAgICBib29sIGlzRGVzY2VuZGFudCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNEZXNjZW5kYW50OyB9Ci0gICAgICAgIHZvaWQgc2V0SXNEZXNjZW5kYW50KGJvb2wgaXNE
ZXNjZW5kYW50KSB7IG1faXNEZXNjZW5kYW50ID0gaXNEZXNjZW5kYW50OyB9Ci0KLSAgICAgICAg
Ly8gRklYTUU6IENhbGxlcnMgb2YgdGhlc2UgbWV0aG9kcyBhcmUgZGFuZ2Vyb3VzIGFuZCBzaG91
bGQgYmUgd2hpdGVsaXN0ZWQgZXhwbGljaXRseSBvciByZW1vdmVkLgotICAgICAgICB2b2lkIHNl
dFJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9
Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIG9yaWdpbmF0aW5nTGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luYXRpbmdMaW5lOyB9Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYXRpbmdMaW5lKFJv
b3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9vcmlnaW5hdGluZ0xpbmUgPSBsaW5lOyB9Ci0KLSAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geSgpIDogeCgpOyB9Ci0gICAg
ICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbShib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IG1heFkoKSA6IG1heFgo
KTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KGJvb2wgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geCgpIDog
eSgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4
WCgpIDogbWF4WSgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlID8gd2lkdGgoKSA6IGhlaWdodCgpOyB9Ci0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZExv
Z2ljYWxUb3AoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCkgOiBmcmFt
ZVJlY3QoKS5waXhlbFNuYXBwZWRYKCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZExvZ2lj
YWxCb3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCkgOiBm
cmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBl
ZExvZ2ljYWxMZWZ0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpIDog
ZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWSgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRM
b2dpY2FsUmlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCkg
OiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KLQotICAgICAgICB2b2lkIHNldExv
Z2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
Ci0gICAgICAgICAgICAgICAgc2V0WShsb2dpY2FsVG9wKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXRYKGxvZ2ljYWxUb3ApOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQg
c2V0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgYm9vbCBpc0hvcml6b250YWxX
cml0aW5nTW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKQotICAgICAgICAgICAgICAgIHNldFgobG9naWNhbExlZnQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHNldFkobG9naWNhbExlZnQpOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGJvb2wg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbEhl
aWdodCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0V2lkdGgobG9naWNh
bEhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgICAg
ICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHNldEhlaWdodChsb2dpY2FsV2lkdGgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gq
IG1fb3JpZ2luYXRpbmdMaW5lOwotICAgICAgICBMYXlvdXRSZWN0IG1fZnJhbWVSZWN0OwotICAg
ICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIExh
eW91dFVuaXQsIHNpbmNlIGl0J3MgYSB2ZXJ0aWNhbCBvZmZzZXQuCi0KLSAgICAgICAgdW5zaWdu
ZWQgbV90eXBlIDogMjsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQotICAgICAgICB1
bnNpZ25lZCBtX3Nob3VsZFBhaW50IDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9pc0Rlc2NlbmRh
bnQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2lzUGxhY2VkIDogMTsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIHVuc2lnbmVkIG1faXNJblBsYWNlZFRyZWUgOiAxOwotI2VuZGlmCi0gICAgfTsK
LQogICAgIExheW91dFBvaW50IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY29uc3Qg
RmxvYXRpbmdPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgTGF5b3V0
VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVj
dCogY2hpbGQpIGNvbnN0CkBAIC0xMTgxLDEwNCArMTAzNSw5IEBAIHB1YmxpYzoKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IEZsb2F0
aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucyB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZs
b2F0aW5nT2JqZWN0KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNo
OjpoYXNoKGtleS0+cmVuZGVyZXIoKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmxv
YXRpbmdPYmplY3QqIGEsIEZsb2F0aW5nT2JqZWN0KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigp
ID09IGItPnJlbmRlcmVyKCk7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0gICAgc3RydWN0IEZsb2F0aW5n
T2JqZWN0SGFzaFRyYW5zbGF0b3IgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChSZW5k
ZXJCb3gqIGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2go
a2V5KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgUmVu
ZGVyQm94KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7IH0KLSAgICB9OwotICAgIHR5
cGVkZWYgTGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hG
dW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OwotICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Ci0gICAgdHlwZWRl
ZiBQT0RJbnRlcnZhbDxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZh
bDsKLSAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxv
YXRpbmdPYmplY3RUcmVlOwotICAgIHR5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFj
a1RyZWU8RmxvYXRpbmdPYmplY3RJbnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7Ci0gICAg
Ci0gICAgdGVtcGxhdGUgPEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgotICAg
IGNsYXNzIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBGbG9hdGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlwZTsKLSAgICAgICAgCi0g
ICAgICAgIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRl
cmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20sIExheW91dFVuaXQmIG9mZnNldCkKLSAg
ICAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAgICAgICAgICwgbV9saW5lVG9w
KGxpbmVUb3ApCi0gICAgICAgICAgICAsIG1fbGluZUJvdHRvbShsaW5lQm90dG9tKQotICAgICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAsIG1fb3V0ZXJtb3N0RmxvYXQo
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgbG93VmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVUb3A7IH0KLSAgICAgICAgaW50IGhpZ2hWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUJvdHRvbTsgfQotICAgICAgICB2b2lkIGNvbGxlY3RJZk5lZWRl
ZChjb25zdCBJbnRlcnZhbFR5cGUmKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAg
ICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgb2Zmc2V0IGNhdXNlZCBieSB0aGUgZmxvYXRzIG9uIGEg
Z2l2ZW4gbGluZSwgaWYKLSAgICAgICAgLy8gdGhlIG91dGVybW9zdCBmbG9hdCBvbiB0aGF0IGxp
bmUgaGFzIGEgc2hhcGUtb3V0c2lkZSwgdGhlIGlubGluZQotICAgICAgICAvLyBjb250ZW50IHRo
YXQgYnV0dHMgdXAgYWdhaW5zdCB0aGF0IGZsb2F0IG11c3QgYmUgcG9zaXRpb25lZCB1c2luZwot
ICAgICAgICAvLyB0aGUgY29udG91cnMgb2YgdGhlIHNoYXBlLCBub3QgdGhlIG1hcmdpbiBib3gg
b2YgdGhlIGZsb2F0LgotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0Rmxv
YXQoKSBjb25zdCB7IHJldHVybiBtX291dGVybW9zdEZsb2F0OyB9Ci0jZW5kaWYKLQotICAgICAg
ICBMYXlvdXRVbml0IGdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgYm9vbCB1cGRhdGVPZmZzZXRJZk5lZWRlZChjb25zdCBGbG9hdGluZ09iamVjdCop
OwotCi0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVyOwotICAgICAgICBpbnQg
bV9saW5lVG9wOwotICAgICAgICBpbnQgbV9saW5lQm90dG9tOwotICAgICAgICBMYXlvdXRVbml0
JiBtX29mZnNldDsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG1fb3V0ZXJtb3N0Rmxv
YXQ7Ci0gICAgfTsKLQogICAgIHZvaWQgY3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7CiAKIHB1Ymxp
YzoKLQotICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEZsb2F0aW5nT2JqZWN0cyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKLSAgICAgICAgfkZsb2F0aW5nT2JqZWN0cygpOwotCi0gICAgICAgIHZvaWQgY2xlYXIo
KTsKLSAgICAgICAgdm9pZCBhZGQoRmxvYXRpbmdPYmplY3QqKTsKLSAgICAgICAgdm9pZCByZW1v
dmUoRmxvYXRpbmdPYmplY3QqKTsKLSAgICAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3QoRmxvYXRp
bmdPYmplY3QqKTsKLSAgICAgICAgdm9pZCByZW1vdmVQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmpl
Y3QqKTsKLSAgICAgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYm9vbCBiID0gdHJ1
ZSkgeyBtX2hvcml6b250YWxXcml0aW5nTW9kZSA9IGI7IH0KLQotICAgICAgICBib29sIGhhc0xl
ZnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T2JqZWN0c0NvdW50ID4gMDsgfQotICAg
ICAgICBib29sIGhhc1JpZ2h0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPYmplY3Rz
Q291bnQgPiAwOyB9Ci0gICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBzZXQoKSBjb25z
dCB7IHJldHVybiBtX3NldDsgfQotICAgICAgICB2b2lkIGNsZWFyTGluZUJveFRyZWVQb2ludGVy
cygpOwotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4
ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zm
c2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5pbmcgPSAwKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zm
c2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQqIGhlaWdo
dFJlbWFpbmluZyA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0cyhj
b25zdCBSZW5kZXJCbG9jayosIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKLSAgICAgICAg
dm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpOwotICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFRyZWUmIHBsYWNlZEZsb2F0c1RyZWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgICAgICAgICAgY29t
cHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3BsYWNlZEZsb2F0
c1RyZWU7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9h
dGluZ09iamVjdDo6VHlwZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxv
YXRpbmdPYmplY3Q6OlR5cGUpOwotICAgICAgICBGbG9hdGluZ09iamVjdEludGVydmFsIGludGVy
dmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKLQotICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCBtX3NldDsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxv
YXRzVHJlZTsKLSAgICAgICAgdW5zaWduZWQgbV9sZWZ0T2JqZWN0c0NvdW50OwotICAgICAgICB1
bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50OwotICAgICAgICBib29sIG1faG9yaXpvbnRhbFdy
aXRpbmdNb2RlOwotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKLQotICAg
ICAgICBmcmllbmQgdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7Ci0g
ICAgfTsKLQogICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMg
aGF2ZSBub24tZGVmYXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0YSB7
CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlckJsb2NrUmFyZURhdGEpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTEzODAsMTYgKzExMzksNiBAQCBpbmxpbmUgY29uc3Qg
UmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB2
b2lkIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIHZvaWQgdG9SZW5kZXJCbG9j
ayhjb25zdCBSZW5kZXJCbG9jayYpOwogCi0jaWZuZGVmIE5ERUJVRwotLy8gVGhlc2Ugc3RydWN0
dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4K
LXRlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGludD4gewotICAgIHN0YXRpYyBTdHJp
bmcgc3RyaW5nKGNvbnN0IGludCB2YWx1ZSk7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVU
b1N0cmluZzxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBzdHJpbmcoY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kik7Ci19OwotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZTUzZDdi
MWU3NTg0MTg2NTYyYWEyNWE4NmJjNzcxMjVlNDU5NjQ3NC4uNTY3MDcwNzk0YmMyYTMxZGNjNDcy
ODZlMjlkYTEwMGQ2MThiN2QwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKIAorI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5o
IgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJl
YWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBiZjgwYWNmNDA1ODZlYTZl
MzViMjBkZGU1NDY3YTRkNTU3NzExZThmLi4wYTU1YmNjZGZkNWMyNTIxZTE3MTg1NDk0ZTBjNTA3
NTgxNjExZGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgi
CiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTEzNCw3ICsxMzUsNyBAQCBwdWJsaWM6CiAg
ICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRo
OyB9CiAKICAgICB2b2lkIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKExheW91dFVuaXQgbWluaW11bUhl
aWdodCA9IDApOwotICAgIHZvaWQgc2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVl
ZGVkKFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCopOworICAgIHZvaWQgc2hyaW5rQXZhaWxh
YmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKEZsb2F0aW5nT2JqZWN0Kik7CiAgICAgdm9pZCBh
ZGRVbmNvbW1pdHRlZFdpZHRoKGZsb2F0IGRlbHRhKSB7IG1fdW5jb21taXR0ZWRXaWR0aCArPSBk
ZWx0YTsgfQogICAgIHZvaWQgY29tbWl0KCkKICAgICB7CkBAIC0xODgsNyArMTg5LDcgQEAgaW5s
aW5lIHZvaWQgTGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0IHJlcGxh
Y2VkSGVpZ2h0KQogICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsK
IH0KIAotaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zs
b2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCkKK2lubGlu
ZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVk
KEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCkKIHsKICAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1f
YmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoaGVpZ2h0IDwgbmV3RmxvYXQtPmxvZ2lj
YWxUb3AobV9ibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgaGVpZ2h0ID49IG5l
d0Zsb2F0LT5sb2dpY2FsQm90dG9tKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
KQpAQCAtMjAxLDExICsyMDIsMTEgQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFp
bGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2EKICAgICAvLyBi
YXNlZCBvbiB0aGUgbWFyZ2luIGJveC4gSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVlZCB0byB3
YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdG8gZmluZAogICAgIC8v
IHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0IGlzIG9uIHRoZSBzYW1lIHNpZGUgYXMgb3Vy
IG5ld0Zsb2F0LgogICAgIFNoYXBlT3V0c2lkZUluZm8qIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5m
byA9IDA7Ci0gICAgY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOwotICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2lu
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOwogICAgIGZvciAoLS1pdDsgaXQgIT0gYmVnaW47IC0taXQpIHsKLSAgICAg
ICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBwcmV2aW91c0Zsb2F0ID0gKml0OworICAg
ICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKHBy
ZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zs
b2F0LT50eXBlKCkpIHsKICAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHBy
ZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAg
IGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKQEAgLTIyMSw3ICsyMjIsNyBAQCBpbmxp
bmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRl
ZChSZW5kZXJCbG9jazo6RmxvYQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG5ld0Zsb2F0LT50
eXBlKCkgPT0gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpIHsKKyAgICBp
ZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSB7CiAgICAg
ICAgIGZsb2F0IG5ld0xlZnQgPSBuZXdGbG9hdC0+bG9naWNhbFJpZ2h0KG1fYmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBp
ZiAocHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKQpAQCAtMTUwMiw4ICsxNTAzLDggQEAgcHVibGlj
OgogICAgIFJvb3RJbmxpbmVCb3gqIGVuZExpbmUoKSBjb25zdCB7IHJldHVybiBtX2VuZExpbmU7
IH0KICAgICB2b2lkIHNldEVuZExpbmUoUm9vdElubGluZUJveCogbGluZSkgeyBtX2VuZExpbmUg
PSBsaW5lOyB9CiAKLSAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZsb2F0OyB9Ci0gICAgdm9pZCBzZXRMYXN0RmxvYXQoUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQpIHsgbV9sYXN0RmxvYXQgPSBsYXN0
RmxvYXQ7IH0KKyAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0RmxvYXQ7IH0KKyAgICB2b2lkIHNldExhc3RGbG9hdChGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9CiAKICAgICBWZWN0b3I8UmVuZGVy
QmxvY2s6OkZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0czsgfQogICAg
IApAQCAtMTUxOCw3ICsxNTE5LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZW5kZXJCbG9jazo6RmxvYXRXaXRoUmVjdD4gbV9mbG9hdHM7Ci0gICAgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0KiBtX2xhc3RGbG9hdDsKKyAgICBGbG9hdGluZ09iamVjdCogbV9sYXN0Rmxv
YXQ7CiAgICAgUm9vdElubGluZUJveCogbV9lbmRMaW5lOwogICAgIExpbmVJbmZvIG1fbGluZUlu
Zm87CiAgICAgdW5zaWduZWQgbV9mbG9hdEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCmluZGV4IGRjMjlmNzdhYzY2NWQ5NTI3YTI1YTUxOTc0MmUxOTM3YTc3MDNk
YmMuLmE0YjE0NDNkOTIyMzJhN2EyYzMxY2RkMDg0MWI0OTkyYzhlMzAzMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKICNpbmNsdWRlICJGbG93VGhyZWFkQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKQEAgLTEyNDIsNyArMTI0Myw3IEBAIHZvaWQgUmVuZGVyVmlldzo6cG9wTGF5b3V0U3RhdGVG
b3JDdXJyZW50Rmxvd1RocmVhZCgpCiAgICAgY3VycmVudEZsb3dUaHJlYWQtPnBvcEZsb3dUaHJl
YWRMYXlvdXRTdGF0ZSgpOwogfQogCi1SZW5kZXJCbG9jazo6SW50ZXJ2YWxBcmVuYSogUmVuZGVy
Vmlldzo6aW50ZXJ2YWxBcmVuYSgpCitJbnRlcnZhbEFyZW5hKiBSZW5kZXJWaWV3OjppbnRlcnZh
bEFyZW5hKCkKIHsKICAgICBpZiAoIW1faW50ZXJ2YWxBcmVuYSkKICAgICAgICAgbV9pbnRlcnZh
bEFyZW5hID0gSW50ZXJ2YWxBcmVuYTo6Y3JlYXRlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>