<?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>184440</bug_id>
          
          <creation_ts>2018-04-09 22:24:15 -0700</creation_ts>
          <short_desc>DFG AI and clobberize should agree with each other</short_desc>
          <delta_ts>2018-04-10 14:16:30 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1413193</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 22:24:15 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413194</commentid>
    <comment_count>1</comment_count>
      <attachid>337589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 22:24:43 -0700</bug_when>
    <thetext>Created attachment 337589
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413203</commentid>
    <comment_count>2</comment_count>
      <attachid>337592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 22:50:00 -0700</bug_when>
    <thetext>Created attachment 337592
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413205</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-09 22:52:15 -0700</bug_when>
    <thetext>Attachment 337592 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3077:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413210</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-09 23:12:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/39306180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413212</commentid>
    <comment_count>5</comment_count>
      <attachid>337592</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-09 23:24:30 -0700</bug_when>
    <thetext>Comment on attachment 337592
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:979
&gt; +            read(Butterfly_publicLength);
&gt; +            read(Butterfly_vectorLength);
&gt; +            read(ArrayStorageProperties);
&gt; +            write(ArrayStorageProperties);

For setters, are they always !mayStoreToHole?

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:1331
&gt; +        case UntypedUse:
&gt; +            read(World);
&gt; +            write(Heap);
&gt; +            return;

Seems like this would be a good test to add since we don&apos;t have one.

&gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:96
&gt; +    // Would have the last executed node clobbered the world had we not found a way to fold it?

clobbering the world seems like the wrong comment to have here, since doing a transition doesn&apos;t necessarily entail clobbering the world, but would return true here. Maybe make the comment say something that allows for both clobbering the world and transitions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413214</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 23:27:30 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 337592 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=337592&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGClobberize.h:979
&gt; &gt; +            read(Butterfly_publicLength);
&gt; &gt; +            read(Butterfly_vectorLength);
&gt; &gt; +            read(ArrayStorageProperties);
&gt; &gt; +            write(ArrayStorageProperties);
&gt; 
&gt; For setters, are they always !mayStoreToHole?

SlowPutArrayStorage means you may have accessors. So, storing to a hole means possibly calling an accessor.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGClobberize.h:1331
&gt; &gt; +        case UntypedUse:
&gt; &gt; +            read(World);
&gt; &gt; +            write(Heap);
&gt; &gt; +            return;
&gt; 
&gt; Seems like this would be a good test to add since we don&apos;t have one.

This is already covered by a test thanks to the new assertion!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:96
&gt; &gt; +    // Would have the last executed node clobbered the world had we not found a way to fold it?
&gt; 
&gt; clobbering the world seems like the wrong comment to have here, since doing
&gt; a transition doesn&apos;t necessarily entail clobbering the world, but would
&gt; return true here. Maybe make the comment say something that allows for both
&gt; clobbering the world and transitions?

I made it say &quot;clobbered things&quot;.  This returns true if the node clobbers anything that the AI knows about how to clobber, which currently just means structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413270</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-10 08:26:39 -0700</bug_when>
    <thetext>I think that it would be best if I wrote a test case for all of the cases that I found even though the new assertion gives us such cases for free.  I&apos;ll do that and then land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413329</commentid>
    <comment_count>8</comment_count>
      <attachid>337621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-10 10:59:52 -0700</bug_when>
    <thetext>Created attachment 337621
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413334</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-10 11:06:35 -0700</bug_when>
    <thetext>Attachment 337621 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3075:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413353</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-10 12:46:34 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/230488/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413390</commentid>
    <comment_count>11</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-04-10 14:11:19 -0700</bug_when>
    <thetext>This change broke the CLoop build: https://build.webkit.org/builders/Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/5032

./dfg/DFGAbstractInterpreterClobberState.cpp:33:38: error: use of undeclared identifier &apos;JSC&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413397</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-10 14:15:08 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #11)
&gt; This change broke the CLoop build:
&gt; https://build.webkit.org/builders/
&gt; Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/5032
&gt; 
&gt; ./dfg/DFGAbstractInterpreterClobberState.cpp:33:38: error: use of undeclared
&gt; identifier &apos;JSC&apos;

Fixing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413399</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-10 14:16:30 -0700</bug_when>
    <thetext>Fixed in r230494.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337589</attachid>
            <date>2018-04-09 22:24:43 -0700</date>
            <delta_ts>2018-04-09 22:50:00 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34841</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMDQ2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYg
KzI3NCw3IEBAIGRlYnVnZ2VyL0RlYnVnZ2VyUGFyc2VEYXRhLmNwcAogZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAKIAogZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKK2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCiBkZmcv
REZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQy
LDYgKzM0Miw3IEBACiAJCTBGNUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgwMUU5
NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLzsgfTsKIAkJMEY1Q0Y5ODQxRTlENTM3NzAw
QzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJT
dGFja0FyZ3MuaCAqLzsgfTsKIAkJMEY1Q0Y5ODkxRTlFRDY1MjAwQzE4NjkyIC8qIEFpclN0YWNr
QWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1Q0Y5ODcxRTlFRDY0RTAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2NhdGlvbi5oICovOyB9
OworCQkwRjVFMEZEODIwN0M3MjczMDA5N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlckNs
b2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1RTBGRDYyMDdDNzI3MTAwOTdGMERFIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9i
YmVyU3RhdGUuaCAqLzsgfTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5r
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5
MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBV
bmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZp
bmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjBGRTkwMUZGQzM3MDIwMDAzMzIwQSAvKiBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwRkU4
RTFGRkMzNkZEMDAwMzMyMEEgLyogRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzQ2LDYgKzIzNDcs
OCBAQAogCQkwRjVDRjk4NjFFOUVENjRFMDBDMTg2OTIgLyogQWlyU3RhY2tBbGxvY2F0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrQWxsb2NhdGlv
bi5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tBbGxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODcxRTlFRDY0RTAwQzE4NjkyIC8qIEFpclN0YWNrQWxs
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja0FsbG9j
YXRpb24uaDsgcGF0aCA9IGIzL2Fpci9BaXJTdGFja0FsbG9jYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmln
aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZU9yaWdp
bi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUUwRkQ2MjA3QzcyNzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVyQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NUUwRkQ3MjA3QzcyNzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVF
RjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcwOTEsNiArNzA5NCw4IEBA
CiAJCQkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8s
CiAJCQkJQTc3QTQyMzcxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAog
CQkJCUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmgg
Ki8sCisJCQkJMEY1RTBGRDcyMDdDNzI3MTAwOTdGMERFIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJDbG9iYmVyU3RhdGUuY3BwICovLAorCQkJCTBGNUUwRkQ2MjA3QzcyNzEwMDk3RjBERSAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmggKi8sCiAJCQkJQTcwNEQ4RkYxN0Ew
QkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJ
MEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJ
CTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCkBAIC04
MjE1LDYgKzgyMjAsNyBAQAogCQkJCThCQzA2NDkyMUUxQURDQzQwMEIyQjhDQSAvKiBBc3luY0dl
bmVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIzQkY1RTQxRTNEMzY4QjAw
NzZBODdBIC8qIEFzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOEJDMDY0OTYxRTFEODQ1QzAwQjJCOENBIC8qIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFF
MzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjdDRjk1NzFEQzEyNTkwMDA5OENDMTIgLyogQXRvbWljc09iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDE0
ICsxNTAsMTYgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3Js
ZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGRp
ZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYp
OwogICAgIAogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICB2b2lkIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOworICAgIAogICAgIHZvaWQg
b2JzZXJ2ZVRyYW5zaXRpb24odW5zaWduZWQgaW5kZXhJbkJsb2NrLCBSZWdpc3RlcmVkU3RydWN0
dXJlIGZyb20sIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgdG8pOwogICAgIHZvaWQgb2JzZXJ2ZVRyYW5z
aXRpb25zKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgVHJhbnNpdGlvblZlY3RvciYpOwot
ICAgIHZvaWQgc2V0RGlkQ2xvYmJlcigpOwogICAgIAogICAgIGVudW0gQm9vbGVhblJlc3VsdCB7
CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVzdWx0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9i
YmVyU3RhdGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRl
ckNsb2JiZXJTdGF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAg
IHN3aXRjaCAoY2xvYmJlclN0YXRlKSB7CisgICAgY2FzZSBKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlckNsb2JiZXJTdGF0ZTo6Tm90Q2xvYmJlcmVkOgorICAgICAgICBvdXQucHJpbnQoIk5v
dENsb2JiZXJlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkRGRzo6QWJzdHJh
Y3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZTo6Rm9sZGVkQ2xvYmJlcjoKKyAgICAgICAgb3V0LnBy
aW50KCJGb2xkZWRDbG9iYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZH
OjpBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpPYnNlcnZlZFRyYW5zaXRpb25zOgor
ICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVHJhbnNpdGlvbnMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNs
b2JiZXJlZFN0cnVjdHVyZXM6CisgICAgICAgIG91dC5wcmludCgiQ2xvYmJlcmVkU3RydWN0dXJl
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9i
YmVyU3RhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdGRpbnQ+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitlbnVtIGNsYXNzIEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgOiB1aW50OF90
IHsKKyAgICBOb3RDbG9iYmVyZWQsCisgICAgRm9sZGVkQ2xvYmJlciwKKyAgICBPYnNlcnZlZFRy
YW5zaXRpb25zLAorICAgIENsb2JiZXJlZFN0cnVjdHVyZXMKK307CisKK2lubGluZSBBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlIG1lcmdlQ2xvYmJlclN0YXRlcyhBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlIGEsIEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgYikK
K3sKKyAgICB1aW50OF90IGFJbnQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhKTsKKyAgICB1aW50
OF90IGJJbnQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihiKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZT4oc3RkOjptYXgoYUludCwgYkludCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJERkdBYnN0cmFj
dEludGVycHJldGVyLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJT
dGF0ZS5oIgogI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRPTUpJ
VFNpZ25hdHVyZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTk3LDcgKzk4LDcg
QEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIEFTU0VSVCht
X3N0YXRlLmJsb2NrKCkpOwogICAgIEFTU0VSVChtX3N0YXRlLmlzVmFsaWQoKSk7CiAgICAgCi0g
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKGZhbHNlKTsKKyAgICBtX3N0YXRlLnNldENsb2JiZXJT
dGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpOb3RDbG9iYmVyZWQpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTMyOSw3ICszMzAsMTYg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBG
SVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtu
b3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1cm4KICAgICAgICAgLy8gaXRzZWxmIGlu
dG8gYSBzdHJhaWdodC1saW5lIHNlcXVlbmNlIG9mIEdldFN0YWNrL1B1dFN0YWNrLgogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDcxCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgor
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbm9kZSwgIkJhZCBvcGNvZGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQp
LnNldFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0IC0gMTsgaS0tOykKQEAgLTYwOSw2ICs2MTksMTQgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQXJpdGhDbHozMjogewogICAgICAgICBK
U1ZhbHVlIG9wZXJhbmQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAg
ICBpZiAoc3RkOjpvcHRpb25hbDxkb3VibGU+IG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXJGcm9t
UHJpbWl0aXZlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgY2FzZSBLbm93
bkludDMyVXNlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IHRvVUlu
dDMyKCpudW1iZXIpOwogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoY2x6
MzIodmFsdWUpKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMTYsNiArMTAzNCw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEFyaXRoVHJ1
bmM6IHsKICAgICAgICAgSlNWYWx1ZSBvcGVyYW5kID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBudW1iZXIgPSBvcGVy
YW5kLnRvTnVtYmVyRnJvbVByaW1pdGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICBkaWRGb2xk
Q2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGRvdWJsZSByb3VuZGVk
VmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhSb3VuZCkKICAg
ICAgICAgICAgICAgICByb3VuZGVkVmFsdWUgPSBqc1JvdW5kKCpudW1iZXIpOwpAQCAtMTUxNSw2
ICsxNTM2LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICBj
YXNlIENvbXBhcmVFcTogeworICAgICAgICBib29sIGlzQ2xvYmJlcmluZyA9ICEobm9kZS0+b3Ao
KSA9PSBDb21wYXJlRXEgJiYgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCisgICAg
ICAgICAgICAmJiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZQorICAgICAgICAgICAgICAgIHx8IG5v
ZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2xvYmJlcmlu
ZykKKyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgCiAgICAgICAg
IEpTVmFsdWUgbGVmdENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAg
ICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUo
KTsKICAgICAgICAgaWYgKGxlZnRDb25zdCAmJiByaWdodENvbnN0KSB7CkBAIC0xNjM2LDcgKzE2
NjQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
CisgICAgICAgIGlmIChpc0Nsb2JiZXJpbmcpCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKQEAgLTE3MjMsNiArMTc1MSwx
NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICAgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcp
OwogICAgICAgICBicmVhazsKIApAQCAtMTc4Myw2ICsxODIxLDggQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjA2OSw2
ICsyMTA5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
IGNhc2UgVG9QcmltaXRpdmU6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hp
bGRDb25zdC5pc051bWJlcigpKSB7CisgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7
CiAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0yMDc3LDYgKzIxMTgsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgICAgICBpZiAoIShmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNGdWxsTnVtYmVyIHwgU3BlY0Jvb2xlYW4g
fCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwOTAsNiArMjEzMiw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFRvTnVtYmVyOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSkgewor
ICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwgY2hpbGRDb25zdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MjA5OCw2ICsyMTQxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogCiAgICAgICAgIGlmICghKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVj
Qnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTIxNDEsNiArMjE4NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGludDMyX3QgcmFkaXggPSByYWRpeFZh
bHVlLmFzSW50MzIoKTsKICAgICAgICAgICAgIGlmICgyIDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2
KSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTg0LDggKzIy
MjksMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgU3ByZWFkOgotICAgICAgICBpZiAoIW1fZ3JhcGguY2FuRG9G
YXN0U3ByZWFkKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKLSAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCktPm9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3
QXJyYXlCdWZmZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghbV9ncmFwaC5jYW5E
b0Zhc3RTcHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dCgKICAgICAgICAgICAgIG1fZ3JhcGgsIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7
CkBAIC0yMjY3LDYgKzIzMjEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mcmVlemUocmFyZURh
dGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5h
ZGRMYXppbHkocmFyZURhdGEtPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMjI5MSw2ICsyMzQ2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgICAgIGlmICghKHNvdXJjZS5tX3R5cGUgJiB+U3Bl
Y09iamVjdCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb09iamVjdCkKKyAgICAgICAgICAgICAg
ICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJj
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzE1LDcgKzIzNzIsNiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9t
TmV3QXJyYXlCdWZmZXI6CiAgICAgY2FzZSBQaGFudG9tTmV3UmVnZXhwOgogICAgIGNhc2UgQm90
dG9tVmFsdWU6Ci0gICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldmVu
dCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byByZXR1cm4gYm90
dG9tLgogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0yNTIwLDExICsyNTc2LDYgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgR2V0QnlJZERp
cmVjdEZsdXNoOgogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewot
ICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRJc1ZhbGlkKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAg
JiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBl
ICYgflNwZWNDZWxsKSkpIHsKQEAgLTI1NDQsNiArMjU5NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI2NzMsOSArMjcyNSwxMCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJl
LmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
c3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpCisg
ICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkgeworICAgICAgICAgICAgICAg
IGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCiAgICAgICAgICAgICAg
ICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsK
QEAgLTI2ODgsNiArMjc0MSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBkb24ndCBtb2RlbCB0aGUgZmFjdCB0aGF0IHRoZSBzdHJ1Y3R1cmVJRCBpcyBu
dWtlZCwgc2ltcGx5IGJlY2F1c2UgY3VycmVudGx5CiAgICAgICAgIC8vIG5vYm9keSB3b3VsZCBj
dXJyZW50bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0IGluZm9ybWF0aW9uLiBCdXQgaXQncyBh
IGJ1ZyBub25ldGhlbGVzcy4KKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTnVrZVN0cnVjdHVy
ZUFuZFNldEJ1dHRlcmZseSkKKyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygp
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEg
SlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tTdWJDbGFzczogewpAQCAt
Mjc4Nyw2ICsyODQyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KSkpIHsKKyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0yODc4LDYgKzI5MzQsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChwcm90
b3R5cGUgJiYgY2FuRm9sZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheVVzZToKKyAgICAgICAg
ICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgRmluYWxPYmpl
Y3RVc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShwcm90b3R5cGUpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMwMDksNiArMzA3NCw5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBv
cmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEFic3RyYWN0
VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICBkaWRGb2xk
Q2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xk
U3RydWN0dXJlKCkpOwpAQCAtMzEzOSw2ICszMjA3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFu
dHMoKSA9PSAxIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQogICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgICAgICBv
YnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgICAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBo
LCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0SXNWYWxpZChmYWxzZSk7CkBAIC0zMzY2LDYgKzM0MzUsOCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAocmFkaXguaXNOdW1iZXIo
KQogICAgICAgICAgICAgICAgICYmIChyYWRpeC5hc051bWJlcigpID09IDAgfHwgcmFkaXguYXNO
dW1iZXIoKSA9PSAxMCkpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM0NjksNiArMzU0MCwx
MiBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZGlkRm9sZENsb2JiZXJXb3JsZCgpCit7CisgICAgZGlkRm9s
ZENsb2JiZXJTdHJ1Y3R1cmVzKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVlcygKICAgICB1bnNpZ25lZCBjbG9i
YmVyTGltaXQsIEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0zNTAxLDcgKzM1NzgsMTQgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGlt
aXQpCiB7CiAgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xv
YmJlclN0cnVjdHVyZXNGb3IpOwotICAgIHNldERpZENsb2JiZXIoKTsKKyAgICBtX3N0YXRlLm1l
cmdlQ2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJl
ZFN0cnVjdHVyZXMpOworICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVj
dHVyZXNBcmVDbG9iYmVyZWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRl
VHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmRpZEZv
bGRDbG9iYmVyU3RydWN0dXJlcygpCit7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShB
YnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpGb2xkZWRDbG9iYmVyKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTEyLDEyICszNTk2LDE3IEBA
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBmb3JBbGxWYWx1
ZXMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9uT2JzZXJ2ZXIpOwogICAgIAogICAgIEFTU0VSVCgh
ZnJvbS0+ZGZnU2hvdWxkV2F0Y2goKSk7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2xhaW0gdG8gYmUg
aW4gYSBjbG9iYmVyZWQgc3RhdGUgYmVjYXVzZSAnZnJvbScgd2FzIG5ldmVyIHdhdGNoYWJsZSAo
ZHVyaW5nIHRoZSB0aW1lIHdlIHdlcmUgY29tcGlsaW5nKSwgaGVuY2Ugbm8gY29uc3RhbnRzIGV2
ZXIgaW50cm9kdWNlZCBpbnRvIHRoZSBERkcgSVIgdGhhdCBldmVyIGhhZCBhIHdhdGNoYWJsZSBz
dHJ1Y3R1cmUgd291bGQgZXZlciBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBmcm9tLgorICAg
IAorICAgIG1fc3RhdGUubWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZTo6T2JzZXJ2ZWRUcmFuc2l0aW9ucyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFi
c3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb25zKAogICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgY29u
c3QgVHJhbnNpdGlvblZlY3RvciYgdmVjdG9yKQogeworICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNP
YnNlcnZlciB0cmFuc2l0aW9uc09ic2VydmVyKHZlY3Rvcik7CiAgICAgZm9yQWxsVmFsdWVzKGNs
b2JiZXJMaW1pdCwgdHJhbnNpdGlvbnNPYnNlcnZlcik7CiAgICAgCkBAIC0zNTI2LDEzICszNjE1
LDggQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgQVNTRVJU
KCF2ZWN0b3JbaV0ucHJldmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgIH0KLX0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzZXREaWRDbG9iYmVyKCkKLXsKLSAgICBtX3N0YXRlLnNl
dERpZENsb2JiZXIodHJ1ZSk7Ci0gICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
U3RydWN0dXJlc0FyZUNsb2JiZXJlZCk7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShB
YnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpPYnNlcnZlZFRyYW5zaXRpb25zKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNp
b24gMjMwNDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRl
LmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2suaCIKICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgpAQCAtNTksNyArNjAsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbDsg
fQogICAgIAotICAgIHZvaWQgc2V0RGlkQ2xvYmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldENs
b2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlKSB7IH0KKyAgICB2b2lk
IG1lcmdlQ2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUpIHsgfQog
ICAgIHZvaWQgc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBz
dGF0ZSkgeyBSRUxFQVNFX0FTU0VSVChzdGF0ZSA9PSBtX2Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGVBdFRhaWwpOyB9CiAgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBt
X2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBpc1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRCcmFuY2hEaXJl
Y3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKICNpbmNs
dWRlICJERkdQaGFzZS5oIgpAQCAtMTYzLDggKzE2NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgICAgaGVhZCByZWdzOiAiLCBub2RlVmFsdWVQYWlyTGlzdER1bXAo
YmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpIHsK
LSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSks
IG5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgh
c2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlKSkKQEAgLTE3OSw2ICsxODAsOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgRXhwZWN0
IE9TUiBleGl0LlxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLmRpZENsb2JiZXJPckZvbGRlZCgp
ICE9IHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSlNDZWxsX3N0cnVjdHVyZUlEKSkKKyAg
ICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgdG9DU3RyaW5nKCJBSS1jbG9i
YmVyaXplIGRpc2FncmVlbWVudDsgQUkgc2F5cyAiLCBtX3N0YXRlLmNsb2JiZXJTdGF0ZSgpLCAi
IHdoaWxlIGNsb2JiZXJpemUgc2F5cyAiLCB3cml0ZVNldChtX2dyYXBoLCBub2RlKSkuZGF0YSgp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAobV92ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgdGFpbCByZWdzOiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24gMjMwNDY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTgs
NiArMTU4LDEzIEBAIHZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2QKICAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSwgbm9PcCk7CiB9CiAK
K0Nsb2JiZXJTZXQgd3JpdGVTZXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIENs
b2JiZXJTZXQgcmVzdWx0OworICAgIGFkZFdyaXRlcyhncmFwaCwgbm9kZSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIHJlYWRzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBz
IGFkZFJlYWQocmVhZFNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuaAkocmV2aXNpb24gMjMwNDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDYgKzExMyw4IEBAIHZvaWQgYWRk
UmVhZHMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYKIHZvaWQgYWRkV3JpdGVzKEdyYXBoJiwg
Tm9kZSosIENsb2JiZXJTZXQmKTsKIHZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmLCBOb2Rl
KiwgQ2xvYmJlclNldCYgcmVhZHMsIENsb2JiZXJTZXQmIHdyaXRlcyk7CiAKK0Nsb2JiZXJTZXQg
d3JpdGVTZXQoR3JhcGgmLCBOb2RlKik7CisKIGJvb2wgcmVhZHNPdmVybGFwKEdyYXBoJiwgTm9k
ZSosIENsb2JiZXJTZXQmKTsKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBDbG9i
YmVyU2V0Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5NiwxMSArMTI5NiwyNSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKLSAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgICAg
IHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsK
ICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgor
ICAgICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShIZWFwKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19D
UkFTSChncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKICAgICAgICAgLy8gVGhpcyBh
bHNvIHJlYWRzIGZyb20gSlNGaXhlZEFycmF5J3MgZGF0YSBzdG9yZSwgYnV0IHdlIGRvbid0IGhh
dmUgYW55IHdheSBvZiBkZXNjcmliaW5nIHRoYXQgeWV0LgogICAgICAgICByZWFkKEhlYXBPYmpl
Y3RDb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjMwNDY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4Myw2ICs3ODMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRv
bU5ld09iamVjdDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgorICAgICAg
ICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CisgICAgICAgICAgICBjYXNl
IFBoYW50b21OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uOgorICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3QXN5bmNGdW5jdGlvbjoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2
YXRpb246CisgICAgICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgICAgICAgICBjYXNlIFBoYW50
b21DcmVhdGVSZXN0OgorICAgICAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICAg
ICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlCdWZmZXI6CisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdSZWdleHA6Cisg
ICAgICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIGFscmVhZHlIYW5k
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJl
dmlzaW9uIDIzMDQ2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVy
U3RhdGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHQnJh
bmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmxvd01hcC5oIgpAQCAtOTAsOCArOTEsMTMg
QEAgcHVibGljOgogICAgIC8vIHlvdSBjYW4gc2FmZWx5IGNhbGwgYmVnaW5CYXNpY0Jsb2NrKCkg
b24gYW55IGJhc2ljIGJsb2NrLgogICAgIHZvaWQgcmVzZXQoKTsKICAgICAKKyAgICBBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xvYmJlclN0YXRlOyB9CisgICAgCisgICAgLy8gV291bGQgaGF2ZSB0aGUgbGFzdCBleGVjdXRl
ZCBub2RlIGNsb2JiZXJlZCB0aGUgd29ybGQgaGFkIHdlIG5vdCBmb3VuZCBhIHdheSB0byBmb2xk
IGl0PworICAgIGJvb2wgZGlkQ2xvYmJlck9yRm9sZGVkKCkgY29uc3QgeyByZXR1cm4gY2xvYmJl
clN0YXRlKCkgIT0gQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZTo6Tm90Q2xvYmJlcmVk
OyB9CisgICAgCiAgICAgLy8gRGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUg
d29ybGQ/Ci0gICAgYm9vbCBkaWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVy
OyB9CisgICAgYm9vbCBkaWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gY2xvYmJlclN0YXRlKCkg
PT0gQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZTo6Q2xvYmJlcmVkU3RydWN0dXJlczsg
fQogICAgIAogICAgIC8vIEFyZSBzdHJ1Y3R1cmVzIGN1cnJlbnRseSBjbG9iYmVyZWQ/CiAgICAg
U3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlOyB9CkBAIC0xMTQsNyArMTIwLDggQEAgcHVibGlj
OgogICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayopOwogICAgIAogICAgIC8v
IE1ldGhvZHMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gQWJzdHJhY3RJbnRlcnByZXRlci4K
LSAgICB2b2lkIHNldERpZENsb2JiZXIoYm9vbCBkaWRDbG9iYmVyKSB7IG1fZGlkQ2xvYmJlciA9
IGRpZENsb2JiZXI7IH0KKyAgICB2b2lkIHNldENsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJl
dGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJlclN0YXRlID0gc3RhdGU7IH0KKyAgICB2
b2lkIG1lcmdlQ2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgc3Rh
dGUpIHsgbV9jbG9iYmVyU3RhdGUgPSBtZXJnZUNsb2JiZXJTdGF0ZXMobV9jbG9iYmVyU3RhdGUs
IHN0YXRlKTsgfQogICAgIHZvaWQgc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZUNs
b2JiZXJTdGF0ZSB2YWx1ZSkgeyBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IHZhbHVlOyB9CiAg
ICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2lzVmFsaWQgPSBpc1ZhbGlkOyB9
CiAgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uIGJyYW5jaERpcmVj
dGlvbikgeyBtX2JyYW5jaERpcmVjdGlvbiA9IGJyYW5jaERpcmVjdGlvbjsgfQpAQCAtMTQ1LDcg
KzE1Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvdW5kQ29uc3RhbnRzOwogICAgIAogICAg
IGJvb2wgbV9pc1ZhbGlkOwotICAgIGJvb2wgbV9kaWRDbG9iYmVyOworICAgIEFic3RyYWN0SW50
ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgbV9jbG9iYmVyU3RhdGU7CiAgICAgU3RydWN0dXJlQ2xvYmJl
clN0YXRlIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlOwogICAgIAogICAgIEJyYW5jaERpcmVjdGlv
biBtX2JyYW5jaERpcmVjdGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBmb3IgYmxvY2tzIHRoYXQg
ZW5kIGluIEJyYW5jaCBhbmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRpb24gKGkuZS4gbV9pc1Zh
bGlkID09IHRydWUpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337592</attachid>
            <date>2018-04-09 22:50:00 -0700</date>
            <delta_ts>2018-04-10 10:59:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39669</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNDcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE4LTA0LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEFJIGFuZCBjbG9iYmVyaXplIHNob3VsZCBhZ3JlZSB3aXRoIGVhY2ggb3RoZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDQ0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIHdh
eSB0byBmaXggYnVncyBpbnZvbHZpbmcgdW5kZXJhcHByb3hpbWF0aW9uIGluIEFJIG9yIGNsb2Ji
ZXJpemUgaXMgdG8gYXNzZXJ0IHRoYXQgdGhleQorICAgICAgICBhZ3JlZSB3aXRoIGVhY2ggb3Ro
ZXIuIFRoYXQncyB3aGF0IHRoaXMgcGF0Y2ggZG9lczogaXQgYWRkcyBhbiBhc3NlcnRpb24gdGhh
dCBBSSdzIHN0cnVjdHVyZQorICAgICAgICBzdGF0ZSB0cmFja2luZyBtdXN0IGJlIGVxdWl2YWxl
bnQgdG8gSlNDZWxsX3N0cnVjdHVyZUlEIGJlaW5nIGNsb2JiZXJlZC4KKyAgICAgICAgCisgICAg
ICAgIE9uZSBzdWJ0bGV0eSBpcyB0aGF0IEFJIHNvbWV0aW1lcyBmb2xkcyBhd2F5IHN0cnVjdHVy
ZSBjbG9iYmVyaW5nIHVzaW5nIGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgY2xvYmJlcml6ZSBk
b2Vzbid0IGhhdmUuIFNvLCB3ZSB0cmFjayB0aGlzIGFzIGEgc3BlY2lhbCBraW5kIG9mIEFJIHN0
YXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhlcyBhIGJ1bmNoIG9mIGNhc2VzIG9mIEFJ
IG1pc3NpbmcgY2xvYmJlclN0cnVjdHVyZXMvY2xvYmJlcldvcmxkIGFuZCBvbmUgY2FzZSBvZgor
ICAgICAgICBjbG9iYmVyaXplIG1pc3NpbmcgYSB3cml0ZShIZWFwKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWxzbyBtYWtlcyBzb21lIGNhc2VzIG1vcmUgcHJlY2lzZSBpbiBvcmRlciB0byBh
cHBlYXNlIHRoZSBhc3NlcnRpb24uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRl
cm5hbCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VDbG9iYmVyU3RhdGVzKToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVjdXRp
bmcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmRpZEZvbGRDbG9iYmVyV29ybGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9i
YmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46Om9ic2VydmVU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6c2V0RGlkQ2xvYmJlcik6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRDbG9iYmVyU3RhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6Om1lcmdlQ2xvYmJlclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXREaWRDbG9iYmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp3cml0ZVNldCk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJTZXQuaDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlND
OjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RhdGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpkaWRDbG9iYmVyT3JGb2xk
ZWQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpkaWRD
bG9iYmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
c2V0Q2xvYmJlclN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VDbG9iYmVyU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjpzZXREaWRDbG9iYmVyKTogRGVsZXRlZC4KKwogMjAxOC0wNC0wOSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEV4ZWN1dGluZyBrbm93biBlZGdlIHR5
cGVzIG1heSByZXZlYWwgYSBjb250cmFkaWN0aW9uIGNhdXNpbmcgdXMgdG8gZW1pdCBhbiBleGl0
IGF0IGEgbm9kZSB0aGF0IGlzIG5vdCBhbGxvd2VkIHRvIGV4aXQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMDQ2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw3IEBAIGRlYnVnZ2Vy
L0RlYnVnZ2VyUGFyc2VEYXRhLmNwcAogZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKIAogZGZn
L0RGR0Fic3RyYWN0SGVhcC5jcHAKK2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0
YXRlLmNwcAogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCiBkZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQyLDYgKzM0Miw3IEBACiAJCTBG
NUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBB
aXJUbXBNYXAuaCAqLzsgfTsKIAkJMEY1Q0Y5ODQxRTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2Vy
U3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLzsgfTsK
IAkJMEY1Q0Y5ODkxRTlFRDY1MjAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODcxRTlFRDY0
RTAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2NhdGlvbi5oICovOyB9OworCQkwRjVFMEZEODIwN0M3
MjczMDA5N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTBGRDYyMDdDNzI3
MTAwOTdGMERFIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaCAqLzsgfTsK
IAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1
IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVG
MDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjBGRTkwMUZGQzM3
MDIwMDAzMzIwQSAvKiBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwRkU4RTFGRkMzNkZEMDAwMzMyMEEg
LyogRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzQ2LDYgKzIzNDcsOCBAQAogCQkwRjVDRjk4NjFF
OUVENjRFMDBDMTg2OTIgLyogQWlyU3RhY2tBbGxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrQWxsb2NhdGlvbi5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyU3RhY2tBbGxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODcxRTlFRDY0RTAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2NhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja0FsbG9jYXRpb24uaDsgcGF0aCA9IGIz
L2Fpci9BaXJTdGFja0FsbG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZU9yaWdpbi5jcHA7IHBhdGggPSBkZmcv
REZHTm9kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUUwRkQ2
MjA3QzcyNzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJD
bG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUUwRkQ3MjA3QzcyNzEwMDk3
RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVy
U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVD
MjUgLyogSklUVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4
NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSklUVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUYwOENF
MTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcwOTEsNiArNzA5NCw4IEBACiAJCQkJQTc3QTQyMzYxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJQTc3QTQyMzcxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJCUE3MDREOEZFMTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8sCisJCQkJMEY1RTBGRDcy
MDdDNzI3MTAwOTdGMERFIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3Bw
ICovLAorCQkJCTBGNUUwRkQ2MjA3QzcyNzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVyQ2xvYmJlclN0YXRlLmggKi8sCiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZGMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCkBAIC04MjE1LDYgKzgyMjAsNyBAQAog
CQkJCThCQzA2NDkyMUUxQURDQzQwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOEIzQkY1RTQxRTNEMzY4QjAwNzZBODdBIC8qIEFzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEJDMDY0OTYxRTFEODQ1
QzAwQjJCOENBIC8qIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyog
QXN5bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDRjk1NzFEQzEyNTkwMDA5
OENDMTIgLyogQXRvbWljc09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDY3N0YxRkRE
QTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShy
ZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDE0ICsxNTAsMTYgQEAgcHVibGlj
OgogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2lu
JiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQo
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxs
VmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYpOwogICAgIAogICAgIHZvaWQg
Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGRpZEZv
bGRDbG9iYmVyU3RydWN0dXJlcygpOworICAgIAogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24o
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBSZWdpc3RlcmVkU3RydWN0dXJlIGZyb20sIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgdG8pOwogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb25zKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaywgY29uc3QgVHJhbnNpdGlvblZlY3RvciYpOwotICAgIHZvaWQgc2V0RGlkQ2xv
YmJlcigpOwogICAgIAogICAgIGVudW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25C
b29sZWFuUmVzdWx0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlckNsb2JiZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5oIgor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHN3aXRjaCAoY2xvYmJlclN0
YXRlKSB7CisgICAgY2FzZSBKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0
ZTo6Tm90Q2xvYmJlcmVkOgorICAgICAgICBvdXQucHJpbnQoIk5vdENsb2JiZXJlZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZTo6Rm9sZGVkQ2xvYmJlcjoKKyAgICAgICAgb3V0LnByaW50KCJGb2xkZWRDbG9iYmVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyQ2xvYmJlclN0YXRlOjpPYnNlcnZlZFRyYW5zaXRpb25zOgorICAgICAgICBvdXQucHJpbnQo
Ik9ic2VydmVkVHJhbnNpdGlvbnMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXM6
CisgICAgICAgIG91dC5wcmludCgiQ2xvYmJlcmVkU3RydWN0dXJlcyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJDbG9iYmVyU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIGNsYXNzIEFi
c3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgOiB1aW50OF90IHsKKyAgICBOb3RDbG9iYmVy
ZWQsCisgICAgRm9sZGVkQ2xvYmJlciwKKyAgICBPYnNlcnZlZFRyYW5zaXRpb25zLAorICAgIENs
b2JiZXJlZFN0cnVjdHVyZXMKK307CisKK2lubGluZSBBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlIG1lcmdlQ2xvYmJlclN0YXRlcyhBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRl
IGEsIEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgYikKK3sKKyAgICB1aW50OF90IGFJ
bnQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhKTsKKyAgICB1aW50OF90IGJJbnQgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihiKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWJzdHJhY3RJbnRlcnBy
ZXRlckNsb2JiZXJTdGF0ZT4oc3RkOjptYXgoYUludCwgYkludCkpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXJDbG9iYmVyU3RhdGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzA0
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgiCisj
aW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5oIgogI2luY2x1ZGUg
IkRPTUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRPTUpJVFNpZ25hdHVyZS5oIgogI2lu
Y2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTk3LDcgKzk4LDcgQEAgdm9pZCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIEFTU0VSVChtX3N0YXRlLmJsb2NrKCkpOwog
ICAgIEFTU0VSVChtX3N0YXRlLmlzVmFsaWQoKSk7CiAgICAgCi0gICAgbV9zdGF0ZS5zZXREaWRD
bG9iYmVyKGZhbHNlKTsKKyAgICBtX3N0YXRlLnNldENsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlOjpOb3RDbG9iYmVyZWQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTMyOSw3ICszMzAsMTYgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFy
Z3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9l
cywgaXQgc2hvdWxkIHR1cm4KICAgICAgICAgLy8gaXRzZWxmIGludG8gYSBzdHJhaWdodC1saW5l
IHNlcXVlbmNlIG9mIEdldFN0YWNrL1B1dFN0YWNrLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDcxCi0gICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwg
IkJhZCBvcGNvZGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykK
QEAgLTYwOSw2ICs2MTksMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIGNhc2UgQXJpdGhDbHozMjogewogICAgICAgICBKU1ZhbHVlIG9wZXJhbmQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDxkb3VibGU+IG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXJGcm9tUHJpbWl0aXZlKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBk
aWRGb2xkQ2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IHRvVUludDMyKCpudW1iZXIpOwogICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoY2x6MzIodmFsdWUpKSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEwMTYsNiArMTAzNCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEFyaXRoVHJ1bmM6IHsKICAgICAgICAgSlNW
YWx1ZSBvcGVyYW5kID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBudW1iZXIgPSBvcGVyYW5kLnRvTnVtYmVyRnJvbVBy
aW1pdGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9
IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIGRvdWJsZSByb3VuZGVkVmFsdWUgPSAwOwogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhSb3VuZCkKICAgICAgICAgICAgICAgICByb3Vu
ZGVkVmFsdWUgPSBqc1JvdW5kKCpudW1iZXIpOwpAQCAtMTUxNSw2ICsxNTM2LDEzIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICBjYXNlIENvbXBhcmVFcTogewor
ICAgICAgICBib29sIGlzQ2xvYmJlcmluZyA9ICEobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEgJiYg
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCisgICAgICAgICAgICAmJiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE9iamVjdFVzZQorICAgICAgICAgICAgICAgIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RV
c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2xvYmJlcmluZykKKyAgICAgICAgICAgIGRp
ZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgbGVmdENvbnN0
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSByaWdo
dENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxl
ZnRDb25zdCAmJiByaWdodENvbnN0KSB7CkBAIC0xNjM2LDcgKzE2NjQsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwg
bm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlmIChpc0Ns
b2JiZXJpbmcpCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOwogICAgICAgICBicmVhazsKQEAgLTE3MjMsNiArMTc1MSwxNiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsK
IApAQCAtMTc4Myw2ICsxODIxLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFy
Z3VtZW50czoKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjA2OSw2ICsyMTA5LDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgVG9QcmltaXRpdmU6
IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigp
KSB7CisgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBjaGlsZENvbnN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0yMDc3LDYgKzIxMTgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgICAgICBpZiAoIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUgJiB+KFNwZWNGdWxsTnVtYmVyIHwgU3BlY0Jvb2xlYW4gfCBTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCkpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTIwOTAsNiArMjEzMiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgIEpTVmFsdWUgY2hp
bGRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgZGlkRm9s
ZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25z
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA5OCw2ICsyMTQxLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgICAgIGlmICgh
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQnl0ZWNvZGVOdW1iZXIpKSB7
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAg
ICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTIxNDEsNiArMjE4NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIGludDMyX3QgcmFkaXggPSByYWRpeFZhbHVlLmFzSW50MzIoKTsKICAg
ICAgICAgICAgIGlmICgyIDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2KSB7CiAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkaWRG
b2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTg0LDggKzIyMjksMTcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgU3ByZWFkOgotICAgICAgICBpZiAoIW1fZ3JhcGguY2FuRG9GYXN0U3ByZWFkKG5vZGUsIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hp
bGQxKCktPm9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlCdWZmZXI6CisgICAg
ICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghbV9ncmFwaC5jYW5Eb0Zhc3RTcHJlYWQobm9kZSwg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAgIG1f
Z3JhcGgsIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7CkBAIC0yMjY3LDYgKzIzMjEs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mcmVlemUocmFyZURhdGEpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkocmFyZURhdGEt
PmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjI5MSw2ICsyMzQ2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogCiAgICAgICAgIGlmICghKHNvdXJjZS5tX3R5cGUgJiB+U3BlY09iamVjdCkpIHsKICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUb09iamVjdCkKKyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldv
cmxkKCk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0yMzE1LDcgKzIzNzIsNiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlCdWZmZXI6CiAg
ICAgY2FzZSBQaGFudG9tTmV3UmVnZXhwOgogICAgIGNhc2UgQm90dG9tVmFsdWU6Ci0gICAgICAg
IG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldmVudCBjb25zdGFudCBmb2xkaW5n
LgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byByZXR1cm4gYm90dG9tLgogICAgICAgICBicmVh
azsKICAgICAgICAgCkBAIC0yNTIwLDExICsyNTc2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgIGNh
c2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAgICBpZiAoIW5vZGUt
PnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFs
dWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsK
QEAgLTI1NDQsNiArMjU5NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0dXNbaV0u
b2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
KyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKSA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTI2NzMsOSArMjcyNSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBp
ZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewotICAg
ICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1
Y3R1cmUoKSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpCisgICAgICAgICAgICBpZiAoZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUt
PnRyYW5zaXRpb24oKS0+bmV4dCkgeworICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3Ry
dWN0dXJlcygpOwogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1p
dCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0
KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1
cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKQEAgLTI2ODgsNiArMjc0MSw4
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIE51
a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBt
b2RlbCB0aGUgZmFjdCB0aGF0IHRoZSBzdHJ1Y3R1cmVJRCBpcyBudWtlZCwgc2ltcGx5IGJlY2F1
c2UgY3VycmVudGx5CiAgICAgICAgIC8vIG5vYm9keSB3b3VsZCBjdXJyZW50bHkgYmVuZWZpdCBm
cm9tIGhhdmluZyB0aGF0IGluZm9ybWF0aW9uLiBCdXQgaXQncyBhIGJ1ZyBub25ldGhlbGVzcy4K
KyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSkK
KyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ2hlY2tTdWJDbGFzczogewpAQCAtMjc4Nyw2ICsyODQyLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICBjYXNl
IEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tl
ZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKKyAgICAgICAgICAg
IGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yODc4
LDYgKzI5MzQsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUgJiYgY2FuRm9sZCkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheVVzZToKKyAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICpt
X2dyYXBoLmZyZWV6ZShwcm90b3R5cGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTMwMDksNiArMzA3NCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0aW5nVmFs
dWU7CiAgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53
cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMo
KTsKKyAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0
ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwpAQCAt
MzEzOSw2ICszMjA3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8IGlzRlRM
KG1fZ3JhcGgubV9wbGFuLm1vZGUpKQogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRp
ZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMo
Y2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRy
YWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CkBAIC0zMzY2LDYgKzM0MzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBpZiAocmFkaXguaXNOdW1iZXIoKQogICAgICAgICAgICAgICAg
ICYmIChyYWRpeC5hc051bWJlcigpID09IDAgfHwgcmFkaXguYXNOdW1iZXIoKSA9PSAxMCkpIHsK
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTM0NjksNiArMzU0MCwxMiBAQCB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZGlkRm9sZENsb2JiZXJXb3JsZCgpCit7CisgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVz
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmZvckFsbFZhbHVlcygKICAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIEZ1bmN0b3Im
IGZ1bmN0b3IpCkBAIC0zNTAxLDcgKzM1NzgsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJh
Y3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCiB7CiAgICAgZm9yQWxs
VmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3Ip
OwotICAgIHNldERpZENsb2JiZXIoKTsKKyAgICBtX3N0YXRlLm1lcmdlQ2xvYmJlclN0YXRlKEFi
c3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXMpOworICAg
IG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmRpZEZvbGRDbG9iYmVyU3RydWN0dXJl
cygpCit7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVy
Q2xvYmJlclN0YXRlOjpGb2xkZWRDbG9iYmVyKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJz
dHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTEyLDEyICszNTk2LDE3IEBAIHZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0LCB0
cmFuc2l0aW9uT2JzZXJ2ZXIpOwogICAgIAogICAgIEFTU0VSVCghZnJvbS0+ZGZnU2hvdWxkV2F0
Y2goKSk7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2xhaW0gdG8gYmUgaW4gYSBjbG9iYmVyZWQgc3Rh
dGUgYmVjYXVzZSAnZnJvbScgd2FzIG5ldmVyIHdhdGNoYWJsZSAoZHVyaW5nIHRoZSB0aW1lIHdl
IHdlcmUgY29tcGlsaW5nKSwgaGVuY2Ugbm8gY29uc3RhbnRzIGV2ZXIgaW50cm9kdWNlZCBpbnRv
IHRoZSBERkcgSVIgdGhhdCBldmVyIGhhZCBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUgd291bGQgZXZl
ciBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBmcm9tLgorICAgIAorICAgIG1fc3RhdGUubWVy
Z2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZTo6T2JzZXJ2ZWRU
cmFuc2l0aW9ucyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgog
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5z
aXRpb25zKAogICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgY29uc3QgVHJhbnNpdGlvblZlY3Rv
ciYgdmVjdG9yKQogeworICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgCiAgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlciB0cmFuc2l0aW9u
c09ic2VydmVyKHZlY3Rvcik7CiAgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgdHJhbnNp
dGlvbnNPYnNlcnZlcik7CiAgICAgCkBAIC0zNTI2LDEzICszNjE1LDggQEAgdm9pZCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2
ZWN0b3Iuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgQVNTRVJUKCF2ZWN0b3JbaV0ucHJldmlv
dXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgIH0KLX0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQWJz
dHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpzZXREaWRDbG9iYmVyKCkKLXsKLSAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7
Ci0gICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3RydWN0dXJlc0FyZUNsb2Ji
ZXJlZCk7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVy
Q2xvYmJlclN0YXRlOjpPYnNlcnZlZFRyYW5zaXRpb25zKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNjMyLDYgKzM3MTYsOCBAQCB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB7CiAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBudW1iZXIgPSBjaGlsZC50b051bWJlckZyb21QcmltaXRpdmUoKSkgeworICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgIGRp
ZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVO
dW1iZXIoZXF1aXZhbGVudEZ1bmN0aW9uKCpudW1iZXIpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMwNDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdElu
dGVycHJldGVyQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgog
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgpAQCAt
NTksNyArNjAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPmNmYVN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZUF0VGFpbDsgfQogICAgIAotICAgIHZvaWQgc2V0RGlkQ2xvYmJlcihib29s
KSB7IH0KKyAgICB2b2lkIHNldENsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlKSB7IH0KKyAgICB2b2lkIG1lcmdlQ2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0
ZXJDbG9iYmVyU3RhdGUpIHsgfQogICAgIHZvaWQgc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBSRUxFQVNFX0FTU0VSVChzdGF0ZSA9PSBtX2Js
b2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwpOyB9CiAgICAgdm9pZCBzZXRJc1Zh
bGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBpc1ZhbGlkOyB9CiAg
ICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMzA0NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtMTYzLDggKzE2NCw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgaGVhZCByZWdzOiAiLCBu
b2RlVmFsdWVQYWlyTGlzdER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSwgIlxuIik7CiAg
ICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAg
ICAgIGlmIChtX3ZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBo
OjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghc2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBtX2dyYXBoLCBub2Rl
KSkKQEAgLTE3OSw2ICsxODAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgICAgRXhwZWN0IE9TUiBleGl0LlxuIik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3N0YXRl
LmRpZENsb2JiZXJPckZvbGRlZCgpICE9IHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSlND
ZWxsX3N0cnVjdHVyZUlEKSkKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgdG9DU3RyaW5nKCJBSS1jbG9iYmVyaXplIGRpc2FncmVlbWVudDsgQUkgc2F5cyAiLCBtX3N0
YXRlLmNsb2JiZXJTdGF0ZSgpLCAiIHdoaWxlIGNsb2JiZXJpemUgc2F5cyAiLCB3cml0ZVNldCht
X2dyYXBoLCBub2RlKSkuZGF0YSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV92ZXJib3Nl
KSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgdGFpbCByZWdzOiAiKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24gMjMw
NDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgYWRkUmVhZHNBbmRXcml0ZXMo
R3JhcGgmIGdyYXBoLCBOb2QKICAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBh
ZGRXcml0ZSwgbm9PcCk7CiB9CiAKK0Nsb2JiZXJTZXQgd3JpdGVTZXQoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQoreworICAgIENsb2JiZXJTZXQgcmVzdWx0OworICAgIGFkZFdyaXRlcyhncmFw
aCwgbm9kZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIHJlYWRzT3Zl
cmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAg
ICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFJlYWQocmVhZFNldCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkocmV2aXNpb24gMjMwNDY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEz
LDYgKzExMyw4IEBAIHZvaWQgYWRkUmVhZHMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYKIHZv
aWQgYWRkV3JpdGVzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKIHZvaWQgYWRkUmVhZHNB
bmRXcml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYgcmVhZHMsIENsb2JiZXJTZXQmIHdy
aXRlcyk7CiAKK0Nsb2JiZXJTZXQgd3JpdGVTZXQoR3JhcGgmLCBOb2RlKik7CisKIGJvb2wgcmVh
ZHNPdmVybGFwKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKIGJvb2wgd3JpdGVzT3Zlcmxh
cChHcmFwaCYsIE5vZGUqLCBDbG9iYmVyU2V0Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMzA0NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtOTU0LDEw
ICs5NTQsMjkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3cml0
ZShIZWFwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoQXJyYXlTdG9yYWdlUHJvcGVy
dGllcyk7CisgICAgICAgICAgICB3cml0ZShBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAg
ICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAg
ICAvLyBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdy4KLSAgICAgICAgICAgIHJlYWQoV29ybGQpOwot
ICAgICAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkubWF5U3RvcmVUb0hvbGUoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAg
ICAgICAgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAg
ICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgcmVhZChB
cnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHdyaXRlKEFycmF5U3RvcmFnZVBy
b3BlcnRpZXMpOwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKQEAgLTEyOTYsMTEgKzEzMTUsMjUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIE5ld0FycmF5V2l0
aFNpemU6Ci0gICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgICAgICByZWFkKEhlYXBPYmplY3RD
b3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsK
IAorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIHJlYWQo
SGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAg
IHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU3ByZWFkOiB7CiAgICAgICAgIC8vIFRoaXMgYWxzbyByZWFkcyBmcm9tIEpT
Rml4ZWRBcnJheSdzIGRhdGEgc3RvcmUsIGJ1dCB3ZSBkb24ndCBoYXZlIGFueSB3YXkgb2YgZGVz
Y3JpYmluZyB0aGF0IHlldC4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDIzMDQ2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsNiArNzgz
LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAg
ICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRv
bU5ld0dlbmVyYXRvckZ1bmN0aW9uOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbjoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FzeW5jRnVuY3Rp
b246CisgICAgICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAg
ICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5QnVmZmVy
OgorICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3UmVnZXhwOgorICAgICAgICAgICAgY2FzZSBC
b3R0b21WYWx1ZToKKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMzA0NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVk
ZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgog
I2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKQEAgLTkwLDggKzkxLDEzIEBAIHB1YmxpYzoKICAgICAv
LyB5b3UgY2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9j
ay4KICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCisgICAgQWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZSBjbG9iYmVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJTdGF0ZTsgfQor
ICAgIAorICAgIC8vIFdvdWxkIGhhdmUgdGhlIGxhc3QgZXhlY3V0ZWQgbm9kZSBjbG9iYmVyZWQg
dGhlIHdvcmxkIGhhZCB3ZSBub3QgZm91bmQgYSB3YXkgdG8gZm9sZCBpdD8KKyAgICBib29sIGRp
ZENsb2JiZXJPckZvbGRlZCgpIGNvbnN0IHsgcmV0dXJuIGNsb2JiZXJTdGF0ZSgpICE9IEFic3Ry
YWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6Ok5vdENsb2JiZXJlZDsgfQorICAgIAogICAgIC8v
IERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxkPwotICAgIGJvb2wg
ZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQorICAgIGJvb2wgZGlk
Q2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIGNsb2JiZXJTdGF0ZSgpID09IEFic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXM7IH0KICAgICAKICAgICAvLyBB
cmUgc3RydWN0dXJlcyBjdXJyZW50bHkgY2xvYmJlcmVkPwogICAgIFN0cnVjdHVyZUNsb2JiZXJT
dGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNs
b2JiZXJTdGF0ZTsgfQpAQCAtMTE0LDcgKzEyMCw4IEBAIHB1YmxpYzoKICAgICBib29sIG1lcmdl
VG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqKTsKICAgICAKICAgICAvLyBNZXRob2RzIGludGVuZGVk
IHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIuCi0gICAgdm9pZCBzZXREaWRD
bG9iYmVyKGJvb2wgZGlkQ2xvYmJlcikgeyBtX2RpZENsb2JiZXIgPSBkaWRDbG9iYmVyOyB9Cisg
ICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBz
dGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0YXRlOyB9CisgICAgdm9pZCBtZXJnZUNsb2JiZXJT
dGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJlclN0
YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0KICAgICB2
b2lkIHNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgdmFsdWUp
IHsgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SXNWYWxp
ZChib29sIGlzVmFsaWQpIHsgbV9pc1ZhbGlkID0gaXNWYWxpZDsgfQogICAgIHZvaWQgc2V0QnJh
bmNoRGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbiBicmFuY2hEaXJlY3Rpb24pIHsgbV9icmFuY2hE
aXJlY3Rpb24gPSBicmFuY2hEaXJlY3Rpb247IH0KQEAgLTE0NSw3ICsxNTIsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9mb3VuZENvbnN0YW50czsKICAgICAKICAgICBib29sIG1faXNWYWxpZDsK
LSAgICBib29sIG1fZGlkQ2xvYmJlcjsKKyAgICBBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0
YXRlIG1fY2xvYmJlclN0YXRlOwogICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBtX3N0cnVjdHVy
ZUNsb2JiZXJTdGF0ZTsKICAgICAKICAgICBCcmFuY2hEaXJlY3Rpb24gbV9icmFuY2hEaXJlY3Rp
b247IC8vIFRoaXMgaXMgb25seSBzZXQgZm9yIGJsb2NrcyB0aGF0IGVuZCBpbiBCcmFuY2ggYW5k
IHRoYXQgZXhlY3V0ZSB0byBjb21wbGV0aW9uIChpLmUuIG1faXNWYWxpZCA9PSB0cnVlKS4K
</data>
<flag name="review"
          id="355972"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337621</attachid>
            <date>2018-04-10 10:59:52 -0700</date>
            <delta_ts>2018-04-10 10:59:52 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46947</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzA0ODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI4IEBACisyMDE4LTA0LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIGFuZCBjbG9iYmVyaXplIHNob3VsZCBhZ3JlZSB3aXRoIGVh
Y2ggb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NDQ0MAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorICAgICAgICAKKyAg
ICAgICAgQWRkIHRlc3RzIGZvciBhbGwgb2YgdGhlIGJ1Z3MgSSBmaXhlZC4KKworICAgICAgICAq
IHN0cmVzcy9kaXJlY3QtYXJndW1lbnRzLW91dC1vZi1ib3VuZHMtY2hhbmdlLXN0cnVjdHVyZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHN0cmVzcy9uZXctdHlwZWQtYXJy
YXktY3NlLWVmZmVjdHMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJl
c3Mvc2NvcGVkLWFyZ3VtZW50cy1vdXQtb2YtYm91bmRzLWNoYW5nZS1zdHJ1Y3R1cmUuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vLnRoZU8pOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJl
c3Mvc3RyaW5nLWZyb20tY2hhci1jb2RlLWNoYW5nZS1zdHJ1Y3R1cmUtbm90LWRlYWQuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGkudmFsdWVPZik6CisgICAgICAgICh3ZWly
ZFZhbHVlLnZhbHVlT2YpOgorICAgICAgICAqIHN0cmVzcy9zdHJpbmctZnJvbS1jaGFyLWNvZGUt
Y2hhbmdlLXN0cnVjdHVyZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoaS52
YWx1ZU9mKToKKyAgICAgICAgKHdlaXJkVmFsdWUudmFsdWVPZik6CisKIDIwMTgtMDQtMDkgIExl
byBCYWx0ZXIgIDxsZW9uYXJkby5iYWx0ZXJAZ21haWwuY29tPgogCiAgICAgICAgIEZpeCBlcnJh
bnQgVGVzdDI2MiBmaWxlcyBDUkxGIHRvIExGIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvcmln
aW5hbCBzb3VyY2UKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RpcmVjdC1hcmd1bWVudHMtb3V0LW9m
LWJvdW5kcy1jaGFuZ2Utc3RydWN0dXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L2RpcmVjdC1hcmd1bWVudHMtb3V0LW9mLWJvdW5kcy1jaGFuZ2Utc3RydWN0dXJlLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2RpcmVjdC1hcmd1bWVudHMtb3V0LW9mLWJvdW5k
cy1jaGFuZ2Utc3RydWN0dXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1
bmN0aW9uIGZvbyhvKQoreworICAgIHZhciB0aGVPID0gbzsKKyAgICB2YXIgeCA9IHRoZU8uZjsK
KyAgICBhcmd1bWVudHNbNDJdOworICAgIHJldHVybiB4ICsgdGhlTy5mOworfQorCisvLyBCcmVh
ayBzb21lIHdhdGNocG9pbnRzLgordmFyIG8gPSB7ZjoyNH07CitvLmcgPSA0MzsKKworbm9Jbmxp
bmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IGZvbyh7Zjo0Mn0pOworICAgIGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIGdsb2JhbE8gPSB7Zjo0
Mn07CitPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oNDIsIGZ1bmN0aW9uKCkgewor
ICAgIGRlbGV0ZSBnbG9iYWxPLmY7CisgICAgZ2xvYmFsTy5fX2RlZmluZUdldHRlcl9fKCJmIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiA3NTsgfSk7CisgICAgcmV0dXJuIDMzOworfSk7Cit2YXIgcmVz
dWx0ID0gZm9vKGdsb2JhbE8pOworaWYgKHJlc3VsdCAhPSA0MiArIDc1KQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL25ldy10eXBlZC1hcnJheS1jc2UtZWZmZWN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9uZXctdHlwZWQtYXJyYXktY3NlLWVmZmVjdHMuanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9zdHJlc3MvbmV3LXR5cGVkLWFycmF5LWNzZS1lZmZlY3RzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGZvbyhvLCB2KQoreworICAgIHZhciB4ID0g
by5mOworICAgIG5ldyBJbnQ4QXJyYXkodik7CisgICAgcmV0dXJuIHggKyBvLmY7Cit9CisKK25v
SW5saW5lKGZvbyk7CisKKy8vIEJyZWFrIHNvbWUgd2F0Y2hwb2ludHMuCit2YXIgbyA9IHtmOjQy
fTsKK28uZiA9IDQzOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2
YXIgcmVzdWx0ID0gZm9vKHtmOjQyfSwgWzEsIDIsIDNdKTsKKyAgICBpZiAocmVzdWx0ICE9IDg0
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3Zh
ciBnbG9iYWxPID0ge2Y6NDJ9OwordmFyIHdlaXJkVmFsdWUgPSB7fTsKK3dlaXJkVmFsdWUuX19k
ZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24oKSB7CisgICAgZ2xvYmFsTy5mID0gNDM7
CisgICAgcmV0dXJuIDExOworfSk7Cit2YXIgcmVzdWx0ID0gZm9vKGdsb2JhbE8sIHdlaXJkVmFs
dWUpOworaWYgKHJlc3VsdCAhPSA4NSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLW91dC1vZi1i
b3VuZHMtY2hhbmdlLXN0cnVjdHVyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9z
Y29wZWQtYXJndW1lbnRzLW91dC1vZi1ib3VuZHMtY2hhbmdlLXN0cnVjdHVyZS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLW91dC1vZi1ib3VuZHMt
Y2hhbmdlLXN0cnVjdHVyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitmdW5j
dGlvbiBmb28obykKK3sKKyAgICB2YXIgdGhlTyA9IChmdW5jdGlvbigpIHsgcmV0dXJuIG87IH0p
KCk7CisgICAgdmFyIHggPSB0aGVPLmY7CisgICAgYXJndW1lbnRzWzQyXTsKKyAgICByZXR1cm4g
eCArIHRoZU8uZjsKK30KKworLy8gQnJlYWsgc29tZSB3YXRjaHBvaW50cy4KK3ZhciBvID0ge2Y6
MjR9Oworby5nID0gNDM7CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oe2Y6NDJ9KTsKKyAgICBpZiAocmVz
dWx0ICE9IDg0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9CisKK3ZhciBnbG9iYWxPID0ge2Y6NDJ9OworT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdl
dHRlcl9fKDQyLCBmdW5jdGlvbigpIHsKKyAgICBkZWxldGUgZ2xvYmFsTy5mOworICAgIGdsb2Jh
bE8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gNzU7IH0pOworICAg
IHJldHVybiAzMzsKK30pOwordmFyIHJlc3VsdCA9IGZvbyhnbG9iYWxPKTsKK2lmIChyZXN1bHQg
IT0gNDIgKyA3NSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVz
dWx0OworCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zdHJpbmctZnJvbS1jaGFyLWNvZGUtY2hhbmdl
LXN0cnVjdHVyZS1ub3QtZGVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zdHJp
bmctZnJvbS1jaGFyLWNvZGUtY2hhbmdlLXN0cnVjdHVyZS1ub3QtZGVhZC5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9zdHJpbmctZnJvbS1jaGFyLWNvZGUtY2hhbmdlLXN0cnVj
dHVyZS1ub3QtZGVhZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit2YXIgZ2xv
YmFsU3RyaW5nOworCitmdW5jdGlvbiBmb28obywgdikKK3sKKyAgICB2YXIgeCA9IG8uZjsKKyAg
ICBnbG9iYWxTdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpOworICAgIHJldHVybiB4ICsg
by5mOworfQorCisvLyBCcmVhayBzb21lIHdhdGNocG9pbnRzLgordmFyIG8gPSB7ZjoyNH07Citv
LmcgPSA0MzsKKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyh7Zjo0Mn0sIHt2YWx1ZU9mOiBmdW5jdGlvbigp
IHsgcmV0dXJuIDMyOyB9fSk7CisgICAgaWYgKHJlc3VsdCAhPSA4NCkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgZ2xvYmFsTyA9IHtmOjQy
fTsKK3ZhciB3ZWlyZFZhbHVlID0ge3ZhbHVlT2Y6IGZ1bmN0aW9uKCkgeworICAgIGRlbGV0ZSBn
bG9iYWxPLmY7CisgICAgZ2xvYmFsTy5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7
IHJldHVybiA3NTsgfSk7CisgICAgcmV0dXJuIDMzOworfX07Cit2YXIgcmVzdWx0ID0gZm9vKGds
b2JhbE8sIHdlaXJkVmFsdWUpOworaWYgKHJlc3VsdCAhPSA0MiArIDc1KQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3N0cmluZy1mcm9tLWNoYXItY29kZS1jaGFuZ2Utc3RydWN0dXJlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL3N0cmluZy1mcm9tLWNoYXItY29kZS1jaGFuZ2Utc3RydWN0dXJl
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3N0cmluZy1mcm9tLWNoYXItY29k
ZS1jaGFuZ2Utc3RydWN0dXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKK2Z1
bmN0aW9uIGZvbyhvLCB2KQoreworICAgIHZhciB4ID0gby5mOworICAgIFN0cmluZy5mcm9tQ2hh
ckNvZGUodik7CisgICAgcmV0dXJuIHggKyBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKKy8v
IEJyZWFrIHNvbWUgd2F0Y2hwb2ludHMuCit2YXIgbyA9IHtmOjI0fTsKK28uZyA9IDQzOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKHtm
OjQyfSwge3ZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyByZXR1cm4gMzI7IH19KTsKKyAgICBpZiAocmVz
dWx0ICE9IDg0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9CisKK3ZhciBnbG9iYWxPID0ge2Y6NDJ9OwordmFyIHdlaXJkVmFsdWUgPSB7dmFsdWVPZjog
ZnVuY3Rpb24oKSB7CisgICAgZGVsZXRlIGdsb2JhbE8uZjsKKyAgICBnbG9iYWxPLl9fZGVmaW5l
R2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIDc1OyB9KTsKKyAgICByZXR1cm4gMzM7
Cit9fTsKK3ZhciByZXN1bHQgPSBmb28oZ2xvYmFsTywgd2VpcmRWYWx1ZSk7CitpZiAocmVzdWx0
ICE9IDQyICsgNzUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJl
c3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzA0ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNjEgQEAKKzIwMTgtMDQtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBERkcgQUkgYW5kIGNsb2JiZXJpemUgc2hvdWxkIGFncmVlIHdpdGggZWFjaCBvdGhl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NDQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisgICAgICAgIAorICAgICAgICBP
bmUgd2F5IHRvIGZpeCBidWdzIGludm9sdmluZyB1bmRlcmFwcHJveGltYXRpb24gaW4gQUkgb3Ig
Y2xvYmJlcml6ZSBpcyB0byBhc3NlcnQgdGhhdCB0aGV5CisgICAgICAgIGFncmVlIHdpdGggZWFj
aCBvdGhlci4gVGhhdCdzIHdoYXQgdGhpcyBwYXRjaCBkb2VzOiBpdCBhZGRzIGFuIGFzc2VydGlv
biB0aGF0IEFJJ3Mgc3RydWN0dXJlCisgICAgICAgIHN0YXRlIHRyYWNraW5nIG11c3QgYmUgZXF1
aXZhbGVudCB0byBKU0NlbGxfc3RydWN0dXJlSUQgYmVpbmcgY2xvYmJlcmVkLgorICAgICAgICAK
KyAgICAgICAgT25lIHN1YnRsZXR5IGlzIHRoYXQgQUkgc29tZXRpbWVzIGZvbGRzIGF3YXkgc3Ry
dWN0dXJlIGNsb2JiZXJpbmcgdXNpbmcgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICBjbG9iYmVy
aXplIGRvZXNuJ3QgaGF2ZS4gU28sIHdlIHRyYWNrIHRoaXMgd3V0aCBzcGVjaWFsIGtpbmRzIG9m
IEFJIHN0YXRlcyAoRm9sZGVkQ2xvYmJlciBhbmQKKyAgICAgICAgT2JzZXJ2ZWRUcmFuc2l0aW9u
cykuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgY2FzZXMgb2YgQUkg
bWlzc2luZyBjbG9iYmVyU3RydWN0dXJlcy9jbG9iYmVyV29ybGQgYW5kIG9uZSBjYXNlIG9mCisg
ICAgICAgIGNsb2JiZXJpemUgbWlzc2luZyBhIHdyaXRlKEhlYXApLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhbHNvIG1ha2VzIHNvbWUgY2FzZXMgbW9yZSBwcmVjaXNlIGluIG9yZGVyIHRvIGFw
cGVhc2UgdGhlIGFzc2VydGlvbi4gTWFraW5nIHRoaW5ncyBtb3JlCisgICAgICAgIHByZWNpc2Ug
bWlnaHQgbWFrZSB0aGluZ3MgZmFzdGVyLCBidXQgSSBkaWRuJ3QgbWVhc3VyZSBpdCBiZWNhdXNl
IHRoYXQgd2Fzbid0IHRoZSBnb2FsLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRl
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlQ2xvYmJlclN0YXRlcyk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkaWRGb2xkQ2xvYmJlcldvcmxkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xv
YmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZl
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnNldERpZENsb2JiZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0Q2xvYmJlclN0YXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjptZXJnZUNsb2JiZXJTdGF0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0RGlkQ2xvYmJlcik6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlclNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6d3JpdGVTZXQpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyU2V0Lmg6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29u
c3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0YXRlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZGlkQ2xvYmJlck9yRm9s
ZGVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZGlk
Q2xvYmJlciBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6
OnNldENsb2JiZXJTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3Rh
dGU6Om1lcmdlQ2xvYmJlclN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6c2V0RGlkQ2xvYmJlcik6IERlbGV0ZWQuCisKIDIwMTgtMDQtMDkgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBFeGVjdXRpbmcga25vd24gZWRnZSB0
eXBlcyBtYXkgcmV2ZWFsIGEgY29udHJhZGljdGlvbiBjYXVzaW5nIHVzIHRvIGVtaXQgYW4gZXhp
dCBhdCBhIG5vZGUgdGhhdCBpcyBub3QgYWxsb3dlZCB0byBleGl0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzA0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsNyBAQCBkZWJ1Z2dl
ci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAKIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCiAKIGRm
Zy9ERkdBYnN0cmFjdEhlYXAuY3BwCitkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJT
dGF0ZS5jcHAKIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAogZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKIGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjMwNDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsNyBAQAogCQkw
RjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dl
clN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07
CiAJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJTdGFja0FsbG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTg3MUU5RUQ2
NEUwMEMxODY5MiAvKiBBaXJTdGFja0FsbG9jYXRpb24uaCAqLzsgfTsKKwkJMEY1RTBGRDgyMDdD
NzI3MzAwOTdGMERFIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUUwRkQ2MjA3Qzcy
NzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmggKi87IH07
CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMy
NSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYwRkU5MDFGRkMz
NzAyMDAwMzMyMEEgLyogRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEZFOEUxRkZDMzZGRDAwMDMzMjBB
IC8qIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Niw2ICsyMzQ3LDggQEAKIAkJMEY1Q0Y5ODYx
RTlFRDY0RTAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja0FsbG9jYXRpb24uY3BwOyBwYXRoID0gYjMv
YWlyL0FpclN0YWNrQWxsb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNUNGOTg3MUU5RUQ2NEUwMEMxODY5MiAvKiBBaXJTdGFja0FsbG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tBbGxvY2F0aW9uLmg7IHBhdGggPSBi
My9haXIvQWlyU3RhY2tBbGxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05vZGVPcmlnaW4uY3BwOyBwYXRoID0gZGZn
L0RGR05vZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVFMEZE
NjIwN0M3MjcxMDA5N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdEludGVycHJldGVy
Q2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVFMEZENzIwN0M3MjcxMDA5
N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2
ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhD
RTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDkxLDYgKzcwOTQsOCBAQAogCQkJCUE3N0E0MjM2MTdB
MEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovLAogCQkJCUE3N0E0MjM3MTdB
MEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLywKIAkJCQlBNzA0RDhGRTE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovLAorCQkJCTBGNUUwRkQ3
MjA3QzcyNzEwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNw
cCAqLywKKwkJCQkwRjVFMEZENjIwN0M3MjcxMDA5N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnBy
ZXRlckNsb2JiZXJTdGF0ZS5oICovLAogCQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYw
MENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLApAQCAtODIxNSw2ICs4MjIwLDcgQEAK
IAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUzRDM2OEIwMDc2QTg3QSAvKiBBc3luY0dl
bmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2NDk2MUUxRDg0
NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjVFMEZEODIwN0M3MjczMDA5N0YwREUgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkEzOENGQUExRTMyQjVBQjAwNjAyMDZGIC8q
IEFzeW5jU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3Q0Y5NTcxREMxMjU5MDAw
OThDQzEyIC8qIEF0b21pY3NPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjQ2NzdGMUZE
REE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMjMwNDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxNCArMTUwLDE2IEBAIHB1Ymxp
YzoKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdp
biYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBkaWRGb2xkQ2xvYmJlcldvcmxk
KCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFs
bFZhbHVlcyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIEZ1bmN0b3ImKTsKICAgICAKICAgICB2b2lk
IGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBkaWRG
b2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9u
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdpc3Rl
cmVkU3RydWN0dXJlIHRvKTsKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9ucyh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImKTsKLSAgICB2b2lkIHNldERpZENs
b2JiZXIoKTsKICAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3du
Qm9vbGVhblJlc3VsdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaCIK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6REZHOjpBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKGNsb2JiZXJT
dGF0ZSkgeworICAgIGNhc2UgSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3Rh
dGU6Ok5vdENsb2JiZXJlZDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RDbG9iYmVyZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXJDbG9i
YmVyU3RhdGU6OkZvbGRlZENsb2JiZXI6CisgICAgICAgIG91dC5wcmludCgiRm9sZGVkQ2xvYmJl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnBy
ZXRlckNsb2JiZXJTdGF0ZTo6T2JzZXJ2ZWRUcmFuc2l0aW9uczoKKyAgICAgICAgb3V0LnByaW50
KCJPYnNlcnZlZFRyYW5zaXRpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpDbG9iYmVyZWRTdHJ1Y3R1cmVz
OgorICAgICAgICBvdXQucHJpbnQoIkNsb2JiZXJlZFN0cnVjdHVyZXMiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyQ2xvYmJlclN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RkaW50PgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBjbGFzcyBB
YnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIDogdWludDhfdCB7CisgICAgTm90Q2xvYmJl
cmVkLAorICAgIEZvbGRlZENsb2JiZXIsCisgICAgT2JzZXJ2ZWRUcmFuc2l0aW9ucywKKyAgICBD
bG9iYmVyZWRTdHJ1Y3R1cmVzCit9OworCitpbmxpbmUgQWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZSBtZXJnZUNsb2JiZXJTdGF0ZXMoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0
ZSBhLCBBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIGIpCit7CisgICAgdWludDhfdCBh
SW50ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYSk7CisgICAgdWludDhfdCBiSW50ID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oYik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGU+KHN0ZDo6bWF4KGFJbnQsIGJJbnQpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyQ2xvYmJlclN0YXRlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjMw
NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJB
cnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIgor
I2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuaCIKICNpbmNsdWRl
ICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJET01KSVRTaWduYXR1cmUuaCIKICNp
bmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC05Nyw3ICs5OCw3IEBAIHZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBBU1NFUlQobV9zdGF0ZS5ibG9jaygpKTsK
ICAgICBBU1NFUlQobV9zdGF0ZS5pc1ZhbGlkKCkpOwogICAgIAotICAgIG1fc3RhdGUuc2V0RGlk
Q2xvYmJlcihmYWxzZSk7CisgICAgbV9zdGF0ZS5zZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRl
cnByZXRlckNsb2JiZXJTdGF0ZTo6Tm90Q2xvYmJlcmVkKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zMjksNyArMzMwLDE2IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJh
cmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRv
ZXMsIGl0IHNob3VsZCB0dXJuCiAgICAgICAgIC8vIGl0c2VsZiBpbnRvIGEgc3RyYWlnaHQtbGlu
ZSBzZXF1ZW5jZSBvZiBHZXRTdGFjay9QdXRTdGFjay4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3MQotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUs
ICJCYWQgb3Bjb2RlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAg
bV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTsp
CkBAIC02MDksNiArNjE5LDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIEFyaXRoQ2x6MzI6IHsKICAgICAgICAgSlNWYWx1ZSBvcGVyYW5kID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBudW1iZXIgPSBvcGVyYW5kLnRvTnVtYmVyRnJvbVByaW1pdGl2ZSgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ZGlkRm9sZENsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSB0b1VJbnQzMigqbnVtYmVyKTsKICAg
ICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKGNsejMyKHZhbHVlKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDE2LDYgKzEwMzQsOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBBcml0aFRydW5jOiB7CiAgICAgICAgIEpT
VmFsdWUgb3BlcmFuZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAg
IGlmIChzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gbnVtYmVyID0gb3BlcmFuZC50b051bWJlckZyb21Q
cmltaXRpdmUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAh
PSBEb3VibGVSZXBVc2UpCisgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkb3VibGUgcm91bmRlZFZhbHVlID0gMDsKICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEFyaXRoUm91bmQpCiAgICAgICAgICAgICAgICAgcm91
bmRlZFZhbHVlID0ganNSb3VuZCgqbnVtYmVyKTsKQEAgLTE1MTUsNiArMTUzNiwxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgY2FzZSBDb21wYXJlRXE6IHsK
KyAgICAgICAgYm9vbCBpc0Nsb2JiZXJpbmcgPSBub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBl
ZFVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDbG9iYmVyaW5nKQorICAgICAgICAgICAg
ZGlkRm9sZENsb2JiZXJXb3JsZCgpOworICAgICAgICAKICAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QpIHsKQEAgLTE2MzYsNyArMTY2Miw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpCisgICAg
ICAgIGlmIChpc0Nsb2JiZXJpbmcpCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKQEAgLTE3MjMsNiArMTc0OSwxNiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOwogICAg
ICAgICBicmVhazsKIApAQCAtMTc4Myw2ICsxODE5LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRz
OgorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjA2OSw2ICsyMTA3
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRDb25z
dC5pc051bWJlcigpKSB7CisgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMDc3LDYgKzIxMTYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgICAgICBpZiAoIShmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNGdWxsTnVtYmVyIHwgU3BlY0Jvb2xlYW4gfCBTcGVj
U3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOworICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwOTAsNiArMjEzMCw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAg
IEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAg
ICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSkgeworICAgICAg
ICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgY2hpbGRDb25zdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA5OCw2
ICsyMTM5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAg
ICAgICAgIGlmICghKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQnl0ZWNv
ZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTIxNDEsNiArMjE4Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGludDMyX3QgcmFkaXggPSByYWRpeFZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgIGlmICgyIDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2KSB7CiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAg
ICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTg0LDggKzIyMjcsMTcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgU3ByZWFkOgotICAgICAgICBpZiAoIW1fZ3JhcGguY2FuRG9GYXN0U3By
ZWFkKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+Y2hpbGQxKCktPm9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlC
dWZmZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghbV9ncmFwaC5jYW5Eb0Zhc3RT
cHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAg
ICAgICAgICAgIG1fZ3JhcGgsIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7CkBAIC0y
MjY3LDYgKzIzMTksNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mcmVlemUocmFyZURhdGEpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXpp
bHkocmFyZURhdGEtPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjI5MSw2ICsyMzQ0LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogCiAgICAgICAgIGlmICghKHNvdXJjZS5tX3R5cGUgJiB+U3BlY09iamVj
dCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb09iamVjdCkKKyAgICAgICAgICAgICAgICBkaWRG
b2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzE1LDcgKzIzNzAsNiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9tTmV3QXJy
YXlCdWZmZXI6CiAgICAgY2FzZSBQaGFudG9tTmV3UmVnZXhwOgogICAgIGNhc2UgQm90dG9tVmFs
dWU6Ci0gICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldmVudCBjb25z
dGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byByZXR1cm4gYm90dG9tLgog
ICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0yNTIwLDExICsyNTc0LDYgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgR2V0QnlJZERpcmVjdEZs
dXNoOgogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAg
ICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1Zh
bGlkKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAogICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNw
ZWNDZWxsKSkpIHsKQEAgLTI1NDQsNiArMjU5Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlk
LCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTI2NzMsOSArMjcyMywxMCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xl
YXIoKSkgewotICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0
dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpCisgICAgICAg
ICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVy
ZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkgeworICAgICAgICAgICAgICAgIGRpZEZv
bGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAg
IGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5j
aGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKQEAgLTI2
ODgsNiArMjczOSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgIC8vIEZJWE1F
OiBXZSBkb24ndCBtb2RlbCB0aGUgZmFjdCB0aGF0IHRoZSBzdHJ1Y3R1cmVJRCBpcyBudWtlZCwg
c2ltcGx5IGJlY2F1c2UgY3VycmVudGx5CiAgICAgICAgIC8vIG5vYm9keSB3b3VsZCBjdXJyZW50
bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0IGluZm9ybWF0aW9uLiBCdXQgaXQncyBhIGJ1ZyBu
b25ldGhlbGVzcy4KKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTnVrZVN0cnVjdHVyZUFuZFNl
dEJ1dHRlcmZseSkKKyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAg
ICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFs
dWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tTdWJDbGFzczogewpAQCAtMjc4Nyw2
ICsyODQwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
IH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
KyAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yODc4LDYgKzI5MzIsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUg
JiYgY2FuRm9sZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheVVzZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEZ1bmN0aW9uVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShwcm90b3R5cGUpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTMwMDksNiArMzA3Miw5IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5h
bFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUg
cmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICBkaWRGb2xkQ2xvYmJl
clN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOwpAQCAtMzEzOSw2ICszMjA1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9
PSAxIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQogICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgICAgICBvYnNlcnZl
VHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgICAgICAgICAg
aWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdT
ZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNW
YWxpZChmYWxzZSk7CkBAIC0zMzY2LDYgKzM0MzMsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAocmFkaXguaXNOdW1iZXIoKQogICAg
ICAgICAgICAgICAgICYmIChyYWRpeC5hc051bWJlcigpID09IDAgfHwgcmFkaXguYXNOdW1iZXIo
KSA9PSAxMCkpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM0NjksNiArMzUzOCwxMiBAQCB2
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZGlkRm9sZENsb2JiZXJXb3JsZCgpCit7CisgICAgZGlkRm9sZENsb2Ji
ZXJTdHJ1Y3R1cmVzKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBl
PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVlcygKICAgICB1bnNpZ25lZCBjbG9iYmVyTGlt
aXQsIEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0zNTAxLDcgKzM1NzYsMTQgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCiB7
CiAgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0
cnVjdHVyZXNGb3IpOwotICAgIHNldERpZENsb2JiZXIoKTsKKyAgICBtX3N0YXRlLm1lcmdlQ2xv
YmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVj
dHVyZXMpOworICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNB
cmVDbG9iYmVyZWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4K
K3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmRpZEZvbGRDbG9i
YmVyU3RydWN0dXJlcygpCit7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpGb2xkZWRDbG9iYmVyKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTEyLDEyICszNTk0LDE3IEBAIHZvaWQg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBmb3JBbGxWYWx1ZXMoY2xv
YmJlckxpbWl0LCB0cmFuc2l0aW9uT2JzZXJ2ZXIpOwogICAgIAogICAgIEFTU0VSVCghZnJvbS0+
ZGZnU2hvdWxkV2F0Y2goKSk7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2xhaW0gdG8gYmUgaW4gYSBj
bG9iYmVyZWQgc3RhdGUgYmVjYXVzZSAnZnJvbScgd2FzIG5ldmVyIHdhdGNoYWJsZSAoZHVyaW5n
IHRoZSB0aW1lIHdlIHdlcmUgY29tcGlsaW5nKSwgaGVuY2Ugbm8gY29uc3RhbnRzIGV2ZXIgaW50
cm9kdWNlZCBpbnRvIHRoZSBERkcgSVIgdGhhdCBldmVyIGhhZCBhIHdhdGNoYWJsZSBzdHJ1Y3R1
cmUgd291bGQgZXZlciBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBmcm9tLgorICAgIAorICAg
IG1fc3RhdGUubWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0
ZTo6T2JzZXJ2ZWRUcmFuc2l0aW9ucyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
b2JzZXJ2ZVRyYW5zaXRpb25zKAogICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgY29uc3QgVHJh
bnNpdGlvblZlY3RvciYgdmVjdG9yKQogeworICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCiAgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZl
ciB0cmFuc2l0aW9uc09ic2VydmVyKHZlY3Rvcik7CiAgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJM
aW1pdCwgdHJhbnNpdGlvbnNPYnNlcnZlcik7CiAgICAgCkBAIC0zNTI2LDEzICszNjEzLDggQEAg
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgQVNTRVJUKCF2ZWN0
b3JbaV0ucHJldmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgIH0KLX0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpzZXREaWRDbG9iYmVyKCkKLXsKLSAgICBtX3N0YXRlLnNldERpZENs
b2JiZXIodHJ1ZSk7Ci0gICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3RydWN0
dXJlc0FyZUNsb2JiZXJlZCk7CisgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlOjpPYnNlcnZlZFRyYW5zaXRpb25zKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNjMyLDYgKzM3MTQsOCBAQCB2
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB7CiAgICAgSlNWYWx1ZSBj
aGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgaWYgKHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBudW1iZXIgPSBjaGlsZC50b051bWJlckZyb21QcmltaXRpdmUoKSkgewor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVzZSkKKyAg
ICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwganNEb3VibGVOdW1iZXIoZXF1aXZhbGVudEZ1bmN0aW9uKCpudW1iZXIpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMwNDg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJE
RkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9j
a01hcC5oIgpAQCAtNTksNyArNjAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlQ2xv
YmJlclN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2st
PmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbDsgfQogICAgIAotICAgIHZvaWQgc2V0RGlk
Q2xvYmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldENsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlKSB7IH0KKyAgICB2b2lkIG1lcmdlQ2xvYmJlclN0YXRlKEFic3Ry
YWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUpIHsgfQogICAgIHZvaWQgc2V0U3RydWN0dXJlQ2xv
YmJlclN0YXRlKFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBSRUxFQVNFX0FTU0VSVChz
dGF0ZSA9PSBtX2Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwpOyB9CiAgICAg
dm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBp
c1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZp
c2lvbiAyMzA0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5j
bHVkZSAiREZHQ2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAi
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtMTYz
LDggKzE2NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgaGVh
ZCByZWdzOiAiLCBub2RlVmFsdWVQYWlyTGlzdER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFk
KSwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChp
KTsKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmluZGV4KCkpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBt
X2dyYXBoLCBub2RlKSkKQEAgLTE3OSw2ICsxODAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICAgRXhwZWN0IE9TUiBleGl0LlxuIik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX3N0YXRlLmRpZENsb2JiZXJPckZvbGRlZCgpICE9IHdyaXRlc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgSlNDZWxsX3N0cnVjdHVyZUlEKSkKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgdG9DU3RyaW5nKCJBSS1jbG9iYmVyaXplIGRpc2FncmVlbWVudDsgQUkg
c2F5cyAiLCBtX3N0YXRlLmNsb2JiZXJTdGF0ZSgpLCAiIHdoaWxlIGNsb2JiZXJpemUgc2F5cyAi
LCB3cml0ZVNldChtX2dyYXBoLCBub2RlKSkuZGF0YSgpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobV92ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgdGFpbCByZWdzOiAi
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAko
cmV2aXNpb24gMjMwNDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgYWRkUmVh
ZHNBbmRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBhZGRXcml0ZSwgbm9PcCk7CiB9CiAKK0Nsb2JiZXJTZXQgd3JpdGVTZXQoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIENsb2JiZXJTZXQgcmVzdWx0OworICAgIGFk
ZFdyaXRlcyhncmFwaCwgbm9kZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBi
b29sIHJlYWRzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJl
YWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFJlYWQocmVhZFNldCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkocmV2aXNpb24gMjMw
NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTEzLDYgKzExMyw4IEBAIHZvaWQgYWRkUmVhZHMoR3JhcGgmLCBOb2RlKiwgQ2xv
YmJlclNldCYKIHZvaWQgYWRkV3JpdGVzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKIHZv
aWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYgcmVhZHMsIENs
b2JiZXJTZXQmIHdyaXRlcyk7CiAKK0Nsb2JiZXJTZXQgd3JpdGVTZXQoR3JhcGgmLCBOb2RlKik7
CisKIGJvb2wgcmVhZHNPdmVybGFwKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKIGJvb2wg
d3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBDbG9iYmVyU2V0Jik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMzA0ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtOTU0LDEwICs5NTQsMjkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAg
ICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoQXJyYXlT
dG9yYWdlUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShBcnJheVN0b3JhZ2VQcm9wZXJ0
aWVzKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgp
KQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICAvLyBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdy4KLSAgICAgICAgICAgIHJl
YWQoV29ybGQpOwotICAgICAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICAgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAg
ICAgICAgcmVhZChBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHdyaXRlKEFy
cmF5U3RvcmFnZVByb3BlcnRpZXMpOwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKQEAgLTEyOTYsMTEgKzEzMTUsMjUgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IE5ld0FycmF5V2l0aFNpemU6Ci0gICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgICAgICByZWFk
KEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAg
ICAgIHJldHVybjsKIAorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAg
ICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgICAgIHdyaXRlKEhlYXBPYmpl
Y3RDb3VudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToK
KyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoSGVhcCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0go
Z3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CiAgICAgICAgIC8vIFRoaXMgYWxzbyBy
ZWFkcyBmcm9tIEpTRml4ZWRBcnJheSdzIGRhdGEgc3RvcmUsIGJ1dCB3ZSBkb24ndCBoYXZlIGFu
eSB3YXkgb2YgZGVzY3JpYmluZyB0aGF0IHlldC4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291
bnQpOwpAQCAtMTUzNyw3ICsxNTcwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobm9kZS0+aXNC
aW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKICAg
ICAgICAgICAgIHdyaXRlKEhlYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzMDQ4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03ODMsNiArNzgzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5j
dGlvbjoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgorICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbjoKKyAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbU5ld0FzeW5jRnVuY3Rpb246CisgICAgICAgICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgICAgICAg
ICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVh
ZDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5QnVmZmVyOgorICAgICAgICAgICAgY2FzZSBQaGFudG9t
TmV3UmVnZXhwOgorICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgICAgICAg
ICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDIzMDQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw5ICs2ODUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgotICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7CiAgICAg
ICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSk7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCShy
ZXZpc2lvbiAyMzA0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0Jy
YW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKQEAgLTkwLDggKzkxLDEz
IEBAIHB1YmxpYzoKICAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygp
IG9uIGFueSBiYXNpYyBibG9jay4KICAgICB2b2lkIHJlc2V0KCk7CiAgICAgCisgICAgQWJzdHJh
Y3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2Nsb2JiZXJTdGF0ZTsgfQorICAgIAorICAgIC8vIFdvdWxkIGhhdmUgdGhlIGxhc3QgZXhlY3V0
ZWQgbm9kZSBjbG9iYmVyZWQgdGhpbmdzIGhhZCB3ZSBub3QgZm91bmQgYSB3YXkgdG8gZm9sZCBp
dD8KKyAgICBib29sIGRpZENsb2JiZXJPckZvbGRlZCgpIGNvbnN0IHsgcmV0dXJuIGNsb2JiZXJT
dGF0ZSgpICE9IEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6Ok5vdENsb2JiZXJlZDsg
fQorICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdv
cmxkPwotICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsg
fQorICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIGNsb2JiZXJTdGF0ZSgpID09
IEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXM7IH0K
ICAgICAKICAgICAvLyBBcmUgc3RydWN0dXJlcyBjdXJyZW50bHkgY2xvYmJlcmVkPwogICAgIFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZTsgfQpAQCAtMTE0LDcgKzEyMCw4IEBAIHB1YmxpYzoK
ICAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqKTsKICAgICAKICAgICAvLyBN
ZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIuCi0g
ICAgdm9pZCBzZXREaWRDbG9iYmVyKGJvb2wgZGlkQ2xvYmJlcikgeyBtX2RpZENsb2JiZXIgPSBk
aWRDbG9iYmVyOyB9CisgICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRl
ckNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0YXRlOyB9CisgICAgdm9p
ZCBtZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRl
KSB7IG1fY2xvYmJlclN0YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBz
dGF0ZSk7IH0KICAgICB2b2lkIHNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUgdmFsdWUpIHsgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSB2YWx1ZTsgfQogICAg
IHZvaWQgc2V0SXNWYWxpZChib29sIGlzVmFsaWQpIHsgbV9pc1ZhbGlkID0gaXNWYWxpZDsgfQog
ICAgIHZvaWQgc2V0QnJhbmNoRGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbiBicmFuY2hEaXJlY3Rp
b24pIHsgbV9icmFuY2hEaXJlY3Rpb24gPSBicmFuY2hEaXJlY3Rpb247IH0KQEAgLTE0NSw3ICsx
NTIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mb3VuZENvbnN0YW50czsKICAgICAKICAgICBi
b29sIG1faXNWYWxpZDsKLSAgICBib29sIG1fZGlkQ2xvYmJlcjsKKyAgICBBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlIG1fY2xvYmJlclN0YXRlOwogICAgIFN0cnVjdHVyZUNsb2JiZXJT
dGF0ZSBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZTsKICAgICAKICAgICBCcmFuY2hEaXJlY3Rpb24g
bV9icmFuY2hEaXJlY3Rpb247IC8vIFRoaXMgaXMgb25seSBzZXQgZm9yIGJsb2NrcyB0aGF0IGVu
ZCBpbiBCcmFuY2ggYW5kIHRoYXQgZXhlY3V0ZSB0byBjb21wbGV0aW9uIChpLmUuIG1faXNWYWxp
ZCA9PSB0cnVlKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDIzMDQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICAvKiBPcHRpbWl6YXRpb25zIGZvciBzdHJpbmcgYWNjZXNzICov
IFwKICAgICBtYWNybyhTdHJpbmdDaGFyQ29kZUF0LCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBt
YWNybyhTdHJpbmdDaGFyQXQsIE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFN0cmluZ0Zyb21D
aGFyQ29kZSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oU3RyaW5nRnJvbUNoYXJDb2RlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZv
ciBjb21wYXJpc29uIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKENvbXBhcmVMZXNzLCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>