<?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>51707</bug_id>
          
          <creation_ts>2010-12-29 07:48:11 -0800</creation_ts>
          <short_desc>Web Inspector: extract Database &amp; DOM Storage agents; remove InspectorBackend.</short_desc>
          <delta_ts>2010-12-30 05:31:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>327567</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-29 07:48:11 -0800</bug_when>
    <thetext>This change brushes up storage agents + removes redundant InspectorBackend class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327570</commentid>
    <comment_count>1</comment_count>
      <attachid>77619</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-29 08:00:17 -0800</bug_when>
    <thetext>Created attachment 77619
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327573</commentid>
    <comment_count>2</comment_count>
      <attachid>77619</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-29 08:23:33 -0800</bug_when>
    <thetext>Comment on attachment 77619
[PATCH] Proposed change.

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

&gt; WebCore/inspector/InspectorDOMStorageAgent.cpp:35
&gt; +#include &quot;Frame.h&quot;

style: headers should be sorted in alphabetical order. I wonder why the style checker didn&apos;t catch this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327574</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-12-29 08:29:44 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=77619&amp;action=review

&gt; WebCore/inspector/CodeGeneratorInspector.pm:55
&gt;  $typeTransform{&quot;FileSystem&quot;} = {
&gt;      &quot;forward&quot; =&gt; &quot;InspectorFileSystemAgent&quot;,
&gt;      &quot;header&quot; =&gt; &quot;InspectorFileSystemAgent.h&quot;,
&gt; -    &quot;domainAccessor&quot; =&gt; &quot;m_inspectorController-&gt;fileSystemAgent()&quot;,
&gt; +    &quot;domainAccessor&quot; =&gt; &quot;m_inspectorController-&gt;m_fileSystemAgent&quot;,

please also sort this one too.

&gt; WebCore/inspector/InspectorController.cpp:-1058
&gt; -

it is not possible to comment the code which is not in the diff. I do the comments here.

looks like the next code should be moved to the Database agent and it will be called if the agent exists.

1068|1053     // Resources are only bound while visible.
1069|1054     if (m_frontend)
1070|1055         resource-&gt;bind(m_frontend.get());

&gt; WebCore/inspector/InspectorController.cpp:-1178
&gt;      if (m_frontend)
&gt;          resource-&gt;bind(m_frontend.get());
&gt;  }
&gt; -

the same here. It should be a function of DOMStorageAgent.

&gt; WebCore/inspector/InspectorDOMStorageAgent.h:31
&gt; +

I think we need a guard here.

#if ENABLE(INSPECTOR) &amp;&amp; ENABLE(DOM_STORAGE)

&gt; WebCore/inspector/InspectorDatabaseAgent.h:31
&gt; +

ditto.
#if ENABLE(INSPECTOR) &amp;&amp; ENABLE(DATABASE)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327673</commentid>
    <comment_count>4</comment_count>
      <attachid>77638</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-29 12:43:44 -0800</bug_when>
    <thetext>Created attachment 77638
[PATCH] Review comments addressed (for try bots).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327698</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-29 14:13:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74755 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
inspector/debugger-autocontinue-on-syntax-error.html
inspector/debugger-breakpoints-not-activated-on-reload.html
inspector/debugger-cyclic-ref.html
inspector/debugger-eval-on-call-frame.html
inspector/debugger-eval-while-paused.html
inspector/debugger-expand-scope.html
inspector/debugger-no-nested-pause.html
inspector/debugger-pause-in-eval-script.html
inspector/debugger-pause-on-breakpoint.html
inspector/debugger-pause-on-debugger-statement.html
inspector/debugger-pause-on-exception.html
inspector/debugger-proto-property.html
inspector/debugger-step-in.html
inspector/debugger-step-out.html
inspector/debugger-step-over.html
inspector/debugger-suspend-active-dom-objects.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327788</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-29 18:32:07 -0800</bug_when>
    <thetext>Did this get landed?  The sheriffbot seems to think it did (and then broke things).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327846</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-29 23:42:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Did this get landed?  The sheriffbot seems to think it did (and then broke things).

It did land for a change or two and got reverted. Re-applying it now:

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	C	WebCore/inspector/InspectorStorageAgent.h =&gt; WebCore/inspector/InspectorDOMStorageAgent.h
	R	WebCore/inspector/InspectorStorageAgent.cpp =&gt; WebCore/inspector/InspectorDatabaseAgent.cpp
	R	WebCore/inspector/InspectorStorageAgent.h =&gt; WebCore/inspector/InspectorDatabaseAgent.h
	D	WebCore/inspector/InspectorBackend.cpp
	D	WebCore/inspector/InspectorBackend.h
	M	LayoutTests/inspector/report-protocol-errors-expected.txt
	M	WebCore/CMakeLists.txt
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/inspector/CodeGeneratorInspector.pm
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	A	WebCore/inspector/InspectorDOMStorageAgent.cpp
	M	WebCore/inspector/front-end/ScriptsPanel.js
	M	WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
Committed r74785</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77619</attachid>
            <date>2010-12-29 08:00:17 -0800</date>
            <delta_ts>2010-12-29 12:43:44 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>storage_agents</filename>
            <type>text/plain</type>
            <size>91950</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDdjNmUzZTUuLmE5NTIxN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTE1MywxMiArMTE1MywxMyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAog
ICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNsaWVudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisgICAgaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlLmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuY3BwCkBAIC0xMTcwLDcgKzExNzEsNiBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
Ci0gICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRz
LmNwcAogICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMDg3YWQ2Li4wZDNkY2M5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDY2IEBACisyMDEwLTEyLTI5ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgRGF0YWJhc2UgJiBET00gU3RvcmFnZQorICAgICAg
ICBhZ2VudHM7IHJlbW92ZSBJbnNwZWN0b3JCYWNrZW5kLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE3MDcKKworICAgICAgICBUaGlzIGNoYW5nZSBi
cnVzaGVzIHVwIHN0b3JhZ2UgYWdlbnRzICsgcmVtb3ZlcyByZWR1bmRhbnQKKyAgICAgICAgSW5z
cGVjdG9yQmFja2VuZCBjbGFzcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhv
c3Q6OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0
OjpzZWxlY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6
OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0
OjppbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6IFJlbW92ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2Vu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkVXNlRE9NU3Rv
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmplY3Rl
ZFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9N
U3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpzZWxlY3RET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDogQ29waWVkIGZyb20g
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmguCisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6fkluc3BlY3RvckRhdGFiYXNlQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpzZWxlY3REYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjbGVhckZyb250ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6Okluc3BlY3RvckRh
dGFiYXNlQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
Lmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQu
aC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpmcm9udGVuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5zaG93KToKKwogMjAxMC0xMi0yOCAgQWxleGFuZGVy
IFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBh
dmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQppbmRleCBmMTA4Zjg2Li5iMGRiZTY1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5NDUs
MjAgKzE5NDUsMjIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmggXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmgg
XAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKIAlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBcCisJV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwIFwKQEAgLTE5NzYsOCArMTk3OCw2IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0b3JhZ2VBZ2VudC5jcHAgXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VB
Z2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBcCiAJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY2MmQ4ODMuLmNhOTQxMDEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xOTk5LDIwICsxOTk5LDIyIEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5jcHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCcsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNw
cCcsCkBAIC0yMDI4LDggKzIwMzAsNiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oJywKLSAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCcsCi0gICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCBhYWM3NjBhLi4wYzVjMDFjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwMzksMTMgKzEw
MzksMTQgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCkBAIC0xMDU0LDcgKzEw
NTUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBcCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCkBAIC0xOTMwLDExICsxOTMwLDEyIEBAIEhFQURFUlMg
Kz0gXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKICAgICBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuaCBcCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmggXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKQEAgLTE5NDQsNyArMTk0NSw2IEBAIEhF
QURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5oIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVu
ZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlZGUxNGIyLi5j
NWQyNmRiIDEwMDc1NQotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY1MDk0LDE0
ICs2NTA5NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JCYWNrZW5kLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJhY2tl
bmQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvckNsaWVudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNjUx
MjYsNiArNjUxMTgsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAi
CiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNjUxNTAsNiArNjUxNTAsMTQgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAt
NjUyMTgsMTQgKzY1MjI2LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0eWxlU2hlZXQuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMTFkNmY2Ny4uODI0MTVmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE2MDQsMTEgKzE2MDQsMTEgQEAKIAkJN0EyNDU4N0MxMDIxRUFGNDAw
MEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QTI0NTg3QTEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9y
RE9NQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3QTY3NEJEQjBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkQ5
MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovOyB9OwogCQk3
QTY3NEJEQzBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEQTBGOUVCRjRF
MDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi87IH07Ci0JCTdBNzRFQ0JBMTAx
ODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJ
bnNwZWN0b3JCYWNrZW5kLmNwcCAqLzsgfTsKLQkJN0E3NEVDQkIxMDE4MzlBNjAwQkY5MzlFIC8q
IEluc3BlY3RvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmgg
Ki87IH07CisJCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAg
Ki87IH07CisJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
NzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCAqLzsg
fTsKIAkJN0E3NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3Rv
bS5jcHAgKi87IH07Ci0JCTdBQjBCMUMwMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9y
YWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAg
Ki87IH07Ci0JCTdBQjBCMUMxMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQjBC
MUJGMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCAqLzsgfTsKKwkJ
N0FCMEIxQzAxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCMEIxQkUxMjEx
QTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwICovOyB9OworCQk3QUIw
QjFDMTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCMEIxQkYxMjExQTYyMjAw
QTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCAqLzsgfTsKIAkJN0FERTcyMjYxMENC
QkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBREU3MjI1MTBDQkJCOUIwMDZCM0IzQSAvKiBD
b250ZXh0TWVudVByb3ZpZGVyLmggKi87IH07CiAJCTdBRkQ0QThCMTEzMUMyNzYwMDM1Qjg4MyAv
KiBTY3JpcHRCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QUZENEE4QTExMzFDMjc2MDAzNUI4ODMgLyogU2NyaXB0QnJlYWtwb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdBRkQ0
RkY0MTEzMjc3QjYwMDM1Qjg4MyAvKiBTY3JpcHREZWJ1Z0xpc3RlbmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZENEZGMzExMzI3N0I2MDAzNUI4
ODMgLyogU2NyaXB0RGVidWdMaXN0ZW5lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC03OTg5LDExICs3OTg5LDExIEBACiAJCTdBMjQ1ODdBMTAy
MUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JET01BZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNjc0QkRBMEY5RUJG
NEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwTG9hZERlZmVycmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tl
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTc0RUNCOTEwMTgzOUE2MDBC
RjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E3NEVDQjkxMDE4MzlBNjAw
QkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0E3NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2Vu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JTdG9y
YWdlQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUIwQjFCRjEyMTFB
NjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FCMEIx
QkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QURFNzIyNTEwQ0JCQjlCMDA2QjNCM0EgLyogQ29udGV4
dE1lbnVQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0
TWVudVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkQ0QThBMTEz
MUMyNzYwMDM1Qjg4MyAvKiBTY3JpcHRCcmVha3BvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdEJyZWFrcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGRDRGRjMxMTMyNzdCNjAwMzVCODgzIC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RGVidWdMaXN0ZW5lci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4MDAsMjAgKzEyODAwLDIyIEBACiAJCQkJ
N0EwRTc2RjgxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5pZGwgKi8sCiAJ
CQkJQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5jcHAgKi8sCiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovLAotCQkJCTdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLywKLQkJCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUg
LyogSW5zcGVjdG9yQmFja2VuZC5oICovLAogCQkJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdFNiAv
KiBJbnNwZWN0b3JDbGllbnQuY3BwICovLAogCQkJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKIAkJCQk4MkFCMTc0MTEyNEI5OUVDMDBDNTA2
OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovLAogCQkJCTgyQUIxNzQyMTI0Qjk5RUMwMEM1
MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovLAorCQkJCTdBQjBCMUJFMTIxMUE2MjIwMEE3
Njk0MCAvKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCAqLywKKwkJCQk3QUIwQjFCRjEyMTFB
NjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oICovLAogCQkJCTQxRjA2MjEz
MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLywKIAkJ
CQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
ICovLAogCQkJCUYzM0YwNTNCMTIwQjBEQTUwMEU1NzQzQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcCAqLywKIAkJCQlGMzNGMDUzQzEyMEIwREE1MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oICovLAogCQkJCTdBMjQ1ODc5MTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0
b3JET01BZ2VudC5jcHAgKi8sCiAJCQkJN0EyNDU4N0ExMDIxRUFGNDAwMEEwMEFBIC8qIEluc3Bl
Y3RvckRPTUFnZW50LmggKi8sCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgKi8sCisJCQkJN0E3NEVDQjkxMDE4MzlBNjAwQkY5MzlF
IC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMw
MEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2
MTcyMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywK
IAkJCQkzODg4RjZFQzEyOEM5ODg5MDAwQ0E4RTAgLyogSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
LmNwcCAqLywKQEAgLTEyODMyLDggKzEyODM0LDYgQEAKIAkJCQk4MkFCMTc3MjEyNUM4MjY3MDBD
NTA2OUQgLyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oICovLAogCQkJCTRGQTNCOTA4MTI1Q0Qx
MjEwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJNEZBM0I5MDkxMjVDRDEy
MjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8sCi0JCQkJN0FCMEIxQkUxMjExQTYyMjAw
QTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgKi8sCi0JCQkJN0FCMEIxQkYxMjEx
QTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZG
MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKIAkJCQk4MkFC
MTc3MDEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVldC5oICovLAogCQkJCTc1
NDEzM0E5MTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCAqLywK
QEAgLTIwNjU3LDE0ICsyMDY1NywxNSBAQAogCQkJCTkzMzA5REYwMDk5RTY0OTIwMDU2RTU4MSAv
KiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzMwOURGMjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUI4ODVFOEQ1MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5
RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjcwN0E5QTExRUY2
Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyog
SW5zcGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBQjBCMUMxMTIxMUE2MjIw
MEE3Njk0MCAvKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBB
QSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0E3NEVDQkIxMDE4
MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFGMDYxNzQwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzg4OEY2RUYxMjhDOTg4OTAwMENBOEUwIC8qIElu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM0NEM3MTQxMTI1
QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTIwNjc0LDcgKzIwNjc1LDYgQEAKIAkJCQk5RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyog
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzYxMjVD
ODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJlc291cmNlQWdlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0FCMEIxQzExMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIElu
c3BlY3RvclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NDEzM0E4MTAyRTAwRTgw
MDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTIzMzgxLDE0ICsyMzM4MSwxNSBAQAogCQkJCTkzMzA5REVGMDk5RTY0OTIwMDU2RTU4
MSAvKiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzMzA5REYxMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRUZXh0Q29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCODg1RThENDExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdBNzRFQ0JBMTAxODM5
QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRG
NzA3QTk5MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9y
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzQzMTI0
Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3QUIwQjFDMDEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzNGMDUzRDEyMEIwREE1
MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjE3NTBGNUYwMEFDMDBBMDdF
QUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTM4ODhGNkVFMTI4Qzk4ODkwMDBDQThFMCAvKiBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEY0RjVGRkIxMUNCRDJFMTAwQTE4NkJGIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjMzOTgsNyArMjMzOTksNiBAQAogCQkJ
CTlGMEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGQTNCOTBBMTI1Q0QxMjIwMDMw
MEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QUIwQjFDMDEy
MTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgyQUIxNzczMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0
b3JUaW1lbGluZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGMzI4OUI1MTFBNDJBQUIw
MDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIGIvV2ViQ29yZS9p
bnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCA5NWY3ZThmLi44MWFkYjA3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAgLTEw
LDcyICsxMCw2NCBAQCB1c2UgQ2xhc3M6OlN0cnVjdDsKIHVzZSBGaWxlOjpzdGF0OwogCiBteSAl
dHlwZVRyYW5zZm9ybTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JDbGllbnQifSA9IHsKLSAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNsaWVudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckNsaWVudC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQmFja2VuZCJ9ID0gewotICAgICJm
b3J3YXJkIiA9PiAiSW5zcGVjdG9yQmFja2VuZCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3Rv
ckJhY2tlbmQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkiLAorJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2Fj
aGUifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCIsCisgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwK
KyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fYXBwbGlj
YXRpb25DYWNoZUFnZW50IiwKIH07Ci0kdHlwZVRyYW5zZm9ybXsiSW5zcGVjdG9yIn0gPSB7Ci0g
ICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAotICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlciIsCiskdHlwZVRyYW5zZm9ybXsi
Q1NTIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JDU1NBZ2VudCIsCisgICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckNTU0FnZW50LmgiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9jc3NBZ2VudCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17
IkRlYnVnZ2VyIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9t
YWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17IlJlc291cmNlcyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9s
bGVyLT5tX3Jlc291cmNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7
Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50IiwKLSAgICAiaGVhZGVy
IiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IkRPTVN0b3JhZ2UifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250
cm9sbGVyIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pm1fZGVidWdnZXJBZ2VudCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRhdGFiYXNlIn0gPSB7Ci0g
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JCYWNrZW5kIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yQmFja2VuZC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSIsCisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0
b3JEYXRhYmFzZUFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1f
ZGF0YWJhc2VBZ2VudCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3
YXJkIiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JE
T01BZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRvbUFnZW50KCkiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29u
dHJvbGxlci0+bV9kb21BZ2VudCIsCiB9OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JDU1NBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPmNzc0FnZW50KCkiLAorJHR5cGVUcmFuc2Zvcm17IkRPTVN0b3JhZ2UifSA9IHsK
KyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCIsCisgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3Ii
ID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tU3RvcmFnZUFnZW50IiwKIH07Ci0kdHlw
ZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5z
cGVjdG9yQ29udHJvbGxlci0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkiLAorJHR5cGVUcmFuc2Zv
cm17Ikluc3BlY3RvciJ9ID0geworICAgICJmb3J3YXJkSGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xs
ZXIiLAorfTsKKyR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7CisgICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRy
b2xsZXItPm1fcmVzb3VyY2VBZ2VudCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkZpbGVTeXN0ZW0i
fSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCIsCiAgICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIiwKLSAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmZpbGVTeXN0ZW1BZ2VudCgpIiwKKyAg
ICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZmlsZVN5c3Rl
bUFnZW50IiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKICAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JQcm9maWxlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9y
Q29udHJvbGxlci0+cHJvZmlsZXJBZ2VudCgpIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJt
X2luc3BlY3RvckNvbnRyb2xsZXItPm1fcHJvZmlsZXJBZ2VudCIsCiB9OworCiAkdHlwZVRyYW5z
Zm9ybXsiRnJvbnRlbmQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZyb250ZW5k
IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmQuaCIsCiB9OworJHR5cGVUcmFu
c2Zvcm17Ikluc3BlY3RvckNsaWVudCJ9ID0geworICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
Q2xpZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ2xpZW50LmgiLAorfTsKICR0eXBl
VHJhbnNmb3JteyJQYXNzUmVmUHRyIn0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYv
UGFzc1JlZlB0ci5oIiwKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAppbmRleCA0MTVhMmU1Li5hNGEwYzZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNl
QWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAKQEAgLTEyMCwyMyArMTIyLDIzIEBAIGxvbmcgSW5qZWN0ZWRTY3Jp
cHRIb3N0OjppbnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKQogI2lmIEVOQUJMRShEQVRB
QkFTRSkKIERhdGFiYXNlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQobG9uZyBk
YXRhYmFzZUlkKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1f
ZGF0YWJhc2VBZ2VudCkKKyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9k
YXRhYmFzZUFnZW50LT5kYXRhYmFzZUZvcklkKGRhdGFiYXNlSWQpOwogICAgIHJldHVybiAwOwog
fQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRh
dGFiYXNlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+c2VsZWN0RGF0YWJhc2UoZGF0YWJhc2UpOworICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RhdGFiYXNlQWdl
bnQpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9kYXRhYmFzZUFnZW50LT5zZWxl
Y3REYXRhYmFzZShkYXRhYmFzZSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0
b3JhZ2UpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOworICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbVN0b3JhZ2VB
Z2VudCkKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbVN0b3JhZ2VBZ2VudC0+
c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsKIH0KICNlbmRpZgogCkBAIC0xNzAsNyArMTcyLDcg
QEAgSW5zcGVjdG9yRE9NQWdlbnQqIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdG9yRE9NQWdl
bnQoKQogewogICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpOworICAgIHJl
dHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQuZ2V0KCk7CiB9CiAKIEluc3Bl
Y3RvckZyb250ZW5kKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmZyb250ZW5kKCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCmluZGV4IDU2ZmViMDEuLjdiMmQ3ZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bApAQCAtMzYsMTIgKzM2LDEyIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgLy8gZ2VuZXJpYyBJ
bnNwZWN0b3IncyBtZXRob2RzCiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICAgICAgW2Rv
bWFpbj1CYWNrZW5kXSB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGluIFN0cmluZyBzY3Jp
cHRTb3VyY2UpOwogICAgICAgICAvLyBIVUdFIEZJWE1FOiB3ZSBuZWVkIHRvIGV4cG9zZSBJbmpl
Y3RlZFNjcmlwdCBtZXRob2RzIGhlcmUuIE9yIGRvY3VtZW50IEluamVjdGVkU2NyaXB0IGNhcGFi
aWxpdGllcy4KLSAgICAgICAgW2RvbWFpbj1CYWNrZW5kXSB2b2lkIGRpc3BhdGNoT25JbmplY3Rl
ZFNjcmlwdChpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBtZXRob2ROYW1lLCBp
biBTdHJpbmcgYXJndW1lbnRzLCBvdXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2Vw
dGlvbik7CisgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldEluamVjdGVkU2NyaXB0
U291cmNlKGluIFN0cmluZyBzY3JpcHRTb3VyY2UpOworICAgICAgICBbZG9tYWluPUluc3BlY3Rv
cl0gdm9pZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBpbmplY3RlZFNjcmlwdElk
LCBpbiBTdHJpbmcgbWV0aG9kTmFtZSwgaW4gU3RyaW5nIGFyZ3VtZW50cywgb3V0IFZhbHVlIHJl
c3VsdCwgb3V0IGJvb2xlYW4gaXNFeGNlcHRpb24pOwogICAgICAgICBbZG9tYWluPUluc3BlY3Rv
cl0gdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGluIFN0cmluZyBzY3JpcHRTb3VyY2Up
OwogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFs
dWF0ZU9uTG9hZCgpOwotICAgICAgICBbZG9tYWluPUJhY2tlbmRdIHZvaWQgcmVsZWFzZVdyYXBw
ZXJPYmplY3RHcm91cChpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBvYmplY3RH
cm91cCk7CisgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgb2JqZWN0R3JvdXAp
OwogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBnZXRJbnNwZWN0b3JTdGF0ZShvdXQg
T2JqZWN0IHN0YXRlKTsKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0TW9uaXRv
cmluZ1hIUkVuYWJsZWQoaW4gYm9vbGVhbiBlbmFibGUsIG91dCBib29sZWFuIG5ld1N0YXRlKTsK
ICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgcmVsb2FkUGFnZSgpOwpAQCAtNjksNiAr
NjksOSBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQg
c2V0RXh0cmFIZWFkZXJzKGluIE9iamVjdCBoZWFkZXJzKTsKIAorICAgICAgICBbZG9tYWluPUlu
c3BlY3Rvcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQgU3RyaW5nIGNv
b2tpZXNTdHJpbmcpOworICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBkZWxldGVDb29r
aWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUsIGluIFN0cmluZyBkb21haW4pOworCiAgICAgICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCiAgICAgICAgIC8vIENvbnNvbGUgQVBJCiAgICAgICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCkBAIC04NCw2ICs4NywxMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIE5ldHdvcmsg
QVBJCiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKKyAgICAgICAgW2RvbWFpbj1OZXR3b3JrXSB2
b2lkIGNhY2hlZFJlc291cmNlcyhvdXQgT2JqZWN0IHJlc291cmNlcyk7CisgICAgICAgIFtkb21h
aW49TmV0d29ya10gdm9pZCByZXNvdXJjZUNvbnRlbnQoaW4gdW5zaWduZWQgbG9uZyBmcmFtZUlk
LCBpbiBTdHJpbmcgdXJsLCBpbiBib29sZWFuIGJhc2U2NEVuY29kZSwgb3V0IFN0cmluZyBjb250
ZW50KTsKKyAgICAgICAgW25vdGlmeSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgZnJhbWVEZXRhY2hl
ZEZyb21QYXJlbnQob3V0IHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7CisKICAgICAgICAgW25vdGlm
eSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KG91dCBs
b25nIGlkZW50aWZpZXIsIG91dCBTdHJpbmcgdXJsLCBvdXQgT2JqZWN0IGxvYWRlciwgb3V0IFZh
bHVlIGNhbGxTdGFjayk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1OZXR3b3JrXSB2b2lkIHdp
bGxTZW5kUmVxdWVzdChvdXQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBP
YmplY3QgcmVxdWVzdCwgb3V0IE9iamVjdCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICAgICAgW25v
dGlmeSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQob3V0IGxvbmcg
aWRlbnRpZmllcik7CkBAIC05OSwxOCArMTA2LDEyIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAg
W25vdGlmeSwgZG9tYWluPU5ldHdvcmtdIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlKG91dCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgdGltZSwg
b3V0IE9iamVjdCByZXNwb25zZSk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1OZXR3b3JrXSB2
b2lkIGRpZENsb3NlV2ViU29ja2V0KG91dCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIG91dCBk
b3VibGUgdGltZSk7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYgRU5BQkxFX0RB
VEFCQVNFCisKICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgLy8gUmVzb3VyY2VzIEFQ
SQorICAgICAgICAvLyBEYXRhYmFzZSBBUEkKICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAg
ICAgICBbZG9tYWluPVJlc291cmNlc10gdm9pZCBjYWNoZWRSZXNvdXJjZXMob3V0IE9iamVjdCBy
ZXNvdXJjZXMpOwotICAgICAgICBbZG9tYWluPVJlc291cmNlc10gdm9pZCByZXNvdXJjZUNvbnRl
bnQoaW4gdW5zaWduZWQgbG9uZyBmcmFtZUlkLCBpbiBTdHJpbmcgdXJsLCBpbiBib29sZWFuIGJh
c2U2NEVuY29kZSwgb3V0IFN0cmluZyBjb250ZW50KTsKLSAgICAgICAgW25vdGlmeSwgZG9tYWlu
PVJlc291cmNlc10gdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudChvdXQgdW5zaWduZWQgbG9u
ZyBmcmFtZUlkKTsKLQotICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNlIG5ldyBTdG9yYWdlRG9t
YWluLgotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJh
eSBjb29raWVzLCBvdXQgU3RyaW5nIGNvb2tpZXNTdHJpbmcpOwotICAgICAgICBbZG9tYWluPUlu
c3BlY3Rvcl0gdm9pZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUsIGluIFN0cmlu
ZyBkb21haW4pOwotI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJB
U0UKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURhdGFiYXNlXSB2b2lkIGFkZERhdGFiYXNlKG91
dCBPYmplY3QgZGF0YWJhc2UpOwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGF0YWJhc2VdIHZv
aWQgc2VsZWN0RGF0YWJhc2Uob3V0IGludCBkYXRhYmFzZUlkKTsKICAgICAgICAgW2RvbWFpbj1E
YXRhYmFzZV0gdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoaW4gbG9uZyBkYXRhYmFzZUlkLCBv
dXQgQXJyYXkgdGFibGVOYW1lcyk7CkBAIC0xMTgsNyArMTE5LDEzIEBAIG1vZHVsZSBjb3JlIHsK
ICAgICAgICAgW25vdGlmeSwgZG9tYWluPURhdGFiYXNlXSB2b2lkIHNxbFRyYW5zYWN0aW9uU3Vj
Y2VlZGVkKG91dCBsb25nIHRyYW5zYWN0aW9uSWQsIG91dCBWYWx1ZSBjb2x1bW5OYW1lcywgb3V0
IFZhbHVlIHZhbHVlcyk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1EYXRhYmFzZV0gdm9pZCBz
cWxUcmFuc2FjdGlvbkZhaWxlZChvdXQgbG9uZyB0cmFuc2FjdGlvbklkLCBvdXQgVmFsdWUgc3Fs
RXJyb3IpOwogI2VuZGlmCisKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5B
QkxFX0RPTV9TVE9SQUdFCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gRE9N
IFN0b3JhZ2UgQVBJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKICAgICAgICAgW2RvbWFpbj1E
T01TdG9yYWdlXSB2b2lkIGdldERPTVN0b3JhZ2VFbnRyaWVzKGluIGxvbmcgc3RvcmFnZUlkLCBv
dXQgQXJyYXkgZW50cmllcyk7CiAgICAgICAgIFtkb21haW49RE9NU3RvcmFnZV0gdm9pZCBzZXRE
T01TdG9yYWdlSXRlbShpbiBsb25nIHN0b3JhZ2VJZCwgaW4gU3RyaW5nIGtleSwgaW4gU3RyaW5n
IHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAgICAgW2RvbWFpbj1ET01TdG9yYWdl
XSB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGluIGxvbmcgc3RvcmFnZUlkLCBpbiBTdHJpbmcg
a2V5LCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKQEAgLTEyNiwxMiArMTMzLDI0IEBAIG1vZHVsZSBj
b3JlIHsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURPTVN0b3JhZ2VdIHZvaWQgdXBkYXRlRE9N
U3RvcmFnZShvdXQgaW50IHN0b3JhZ2VJZCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1ET01T
dG9yYWdlXSB2b2lkIHNlbGVjdERPTVN0b3JhZ2Uob3V0IGludCBzdG9yYWdlSWQpOwogI2VuZGlm
CisKICNpZiBkZWZpbmVkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICYmIEVOQUJM
RV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAg
ICAgICAvLyBBcHBDYWNoZSBBUEkKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogICAgICAgICBb
ZG9tYWluPUFwcGxpY2F0aW9uQ2FjaGVdIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZXMob3V0IFZh
bHVlIGFwcGxpY2F0aW9uQ2FjaGVzKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPUFwcGxpY2F0
aW9uQ2FjaGVdIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhvdXQgaW50IHN0YXR1
cyk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1BcHBsaWNhdGlvbkNhY2hlXSB2b2lkIHVwZGF0
ZU5ldHdvcmtTdGF0ZShvdXQgYm9vbGVhbiBpc05vd09ubGluZSk7CiAjZW5kaWYKKwogI2lmIGRl
ZmluZWQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAmJiBFTkFCTEVfRklMRV9TWVNURU0KKworICAgICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBGaWxlc3lzdGVtIEFQSQorICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCiAgICAgICAgIFtkb21haW49RmlsZVN5c3RlbV0gdm9pZCBnZXRGaWxlU3lz
dGVtUGF0aEFzeW5jKGluIHVuc2lnbmVkIGludCB0eXBlLCBpbiBTdHJpbmcgb3JpZ2luKTsKICAg
ICAgICAgW2RvbWFpbj1GaWxlU3lzdGVtXSB2b2lkIHJldmVhbEZvbGRlckluT1MoaW4gU3RyaW5n
IHBhdGgpOwogCkBAIC0yMDMsOCArMjIyLDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBE
ZWJ1Z2dlciBBUEkKICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAgICAgICBbZG9tYWluPUJh
Y2tlbmRdIHZvaWQgZW5hYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICBb
ZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMp
OyAvLyBGSVhNRTogc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGRvbWFpbiBhcyBlbmFibGVEZWJ1Z2dl
ci4KKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJv
bnRlbmQoaW4gYm9vbGVhbiBhbHdheXMpOworICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9p
ZCBkaXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAgICBbbm90aWZ5LCBk
b21haW49RGVidWdnZXJdIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3Rp
ZnksIGRvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGViNGMwZTcuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAi
RGF0YWJhc2UuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKLSNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgotI2luY2x1ZGUg
IlNjcmlwdFByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW5zcGVjdG9y
QmFja2VuZDo6SW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xs
ZXIpCi17Ci19Ci0KLUluc3BlY3RvckJhY2tlbmQ6On5JbnNwZWN0b3JCYWNrZW5kKCkKLXsKLX0K
LQotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KLXZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChhbHdheXMpOwotfQotCi0jZW5kaWYKLQotdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsKLSAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+c2V0SW5qZWN0
ZWRTY3JpcHRTb3VyY2Uoc291cmNlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNw
YXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWZyb250ZW5kKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBleHBsaWNpdGx5IHBhc3MgaW5qZWN0
ZWRTY3JpcHRJZCBhbG9uZyB3aXRoIG5vZGUgaWQgdG8gdGhlIGZyb250ZW5kLgotICAgIGJvb2wg
aW5qZWN0ZWRTY3JpcHRJZElzTm9kZUlkID0gaW5qZWN0ZWRTY3JpcHRJZCA8PSAwOwotCi0gICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0SWRJ
c05vZGVJZCkKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKC1pbmplY3RlZFNjcmlwdElkKTsKLSAgICBlbHNlCi0g
ICAgICAgIGluamVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNj
cmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3JJZChpbmplY3RlZFNjcmlwdElkKTsKLQotICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGluamVjdGVkU2NyaXB0LmRpc3BhdGNoKG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgcmVzdWx0LCBo
YWRFeGNlcHRpb24pOwotfQotCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQotewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkt
PnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoaW5qZWN0ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXAp
OwotfQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRE
YXRhYmFzZVRhYmxlTmFtZXMobG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBuYW1lcykKLXsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7Ci0gICAgaWYgKGRhdGFiYXNlKSB7Ci0gICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1lcygpOwot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgKCpuYW1lcykt
PnB1c2hTdHJpbmcodGFibGVOYW1lc1tpXSk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OmV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBi
b29sKiBzdWNjZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKQotewotICAgIERhdGFiYXNlKiBkYXRh
YmFzZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsK
LSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9zdG9yYWdlQWdlbnQgfHwgIWRhdGFi
YXNlKSB7Ci0gICAgICAgICpzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAqdHJhbnNhY3Rpb25JZCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9zdG9yYWdl
QWdlbnQtPmV4ZWN1dGVTUUwoZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAqc3VjY2VzcyA9IHRydWU7
Ci19Ci0KLSNlbmRpZgotCi1JbnNwZWN0b3JGcm9udGVuZCogSW5zcGVjdG9yQmFja2VuZDo6ZnJv
bnRlbmQoKQotewotICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQu
Z2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDFmY2VjOTYuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBJbnNwZWN0b3JCYWNrZW5kX2gKLSNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZF9oCi0KLSNpbmNs
dWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDsKLWNsYXNzIEluc3BlY3RvckRPTUFnZW50OwotY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7Ci0K
LWNsYXNzIEluc3BlY3RvckJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNr
ZW5kPgotewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+
IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNrZW5kKGluc3BlY3RvckNv
bnRyb2xsZXIpKTsKLSAgICB9Ci0KLSAgICB+SW5zcGVjdG9yQmFja2VuZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpIHsgcmV0dXJuIG1faW5zcGVj
dG9yQ29udHJvbGxlcjsgfQotICAgIEluc3BlY3RvckRPTUFnZW50KiBpbnNwZWN0b3JET01BZ2Vu
dCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKTsgfQotI2lmIEVO
QUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KiBpbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVybiBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpOyB9Ci0jZW5kaWYKLSAg
ICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAw
OyB9Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICB2b2lkIGVuYWJsZURl
YnVnZ2VyKGJvb2wgYWx3YXlzKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRJbmplY3RlZFNjcmlw
dFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSk7Ci0gICAgdm9pZCBkaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUs
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQs
IGJvb2wqIGhhZEV4Y2VwdGlvbik7Ci0KLSAgICAvLyBHZW5lcmljIGNvZGUgY2FsbGVkIGZyb20g
Y3VzdG9tIGltcGxlbWVudGF0aW9ucy4KLSAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0R3Jv
dXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKLQot
I2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhsb25n
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVzKTsKLSAgICB2b2lkIGV4
ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sKiBzdWNj
ZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEluc3Bl
Y3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcik7Ci0g
ICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9s
bGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5kX2gpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDgzNTVjZGYuLmM3YWM1YTggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01NywxMiArNTcsMTMg
QEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQu
aCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JC
YWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKQEAgLTcxLDcgKzcyLDYgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
U3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291
cmNlLmgiCkBAIC0xNDQsNyArMTQ0LDYgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1f
ZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDAp
CiAgICAgLCBtX3NldHRpbmdzTG9hZGVkKGZhbHNlKQotICAgICwgbV9pbnNwZWN0b3JCYWNrZW5k
KEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1faW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQogICAgICwg
bV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0xNjcsNyArMTY2LDYgQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogCiAgICAgcmVsZWFzZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAotICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzY29ubmVj
dENvbnRyb2xsZXIoKTsKICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVjdENvbnRy
b2xsZXIoKTsKIH0KIApAQCAtNDc2LDcgKzQ3NCwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgbV9jc3NBZ2VudC0+c2V0RE9NQWdlbnQobV9kb21B
Z2VudC5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgbV9zdG9yYWdlQWdlbnQg
PSBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBt
X2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJh
c2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisgICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKICNl
bmRpZgogCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKQEAgLTU5Miw5ICs1OTQsMTMgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAg
ICAgbV9kb21BZ2VudC5jbGVhcigpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIGlmICht
X3N0b3JhZ2VBZ2VudCkKLSAgICAgICAgbV9zdG9yYWdlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsK
LSAgICBtX3N0b3JhZ2VBZ2VudC5jbGVhcigpOworICAgIGlmIChtX2RhdGFiYXNlQWdlbnQpCisg
ICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+Y2xlYXJGcm9udGVuZCgpOworICAgIG1fZGF0YWJhc2VB
Z2VudC5jbGVhcigpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgbV9k
b21TdG9yYWdlQWdlbnQuY2xlYXIoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKQEAgLTEwMzUsMjcgKzEwNDEsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZERlc3Ryb3lXb3JrZXIoaW50cHRyX3QgaWQpCiAjZW5kaWYgLy8gRU5BQkxFKFdP
UktFUlMpCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBpZiAoIW1fZnJvbnRl
bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNl
UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFz
ZSgpID09IGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5zZWxlY3REYXRhYmFz
ZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LURhdGFiYXNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJh
c2VJZCkKLXsKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlUmVzb3VyY2VzLmZpbmQoZGF0YWJhc2VJZCk7Ci0gICAgaWYgKGl0ID09IG1fZGF0YWJhc2VS
ZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25k
LT5kYXRhYmFzZSgpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE9wZW5EYXRh
YmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewogICAgIGlmICgh
ZW5hYmxlZCgpKQpAQCAtMTE3NSw3MSArMTE2MCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2Nh
CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRlbmQu
Z2V0KCkpOwogfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNlbGVjdERPTVN0b3JhZ2Uo
U3RvcmFnZSogc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgaWYgKCFtX2Zy
b250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBzdG9yYWdlLT5m
cmFtZSgpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgaXNMb2NhbFN0b3Jh
Z2UgPSAoZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMpID09IHN0b3JhZ2UgJiYg
IWVjKTsKLSAgICBsb25nIHN0b3JhZ2VSZXNvdXJjZUlkID0gMDsKLSAgICBET01TdG9yYWdlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2Vz
LmVuZCgpOwotICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9j
YWxTdG9yYWdlKSkgewotICAgICAgICAgICAgc3RvcmFnZVJlc291cmNlSWQgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc3RvcmFnZVJl
c291cmNlSWQpCi0gICAgICAgIG1fZnJvbnRlbmQtPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZVJl
c291cmNlSWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VF
bnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBlbnRyaWVzKQot
ewotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0
RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKLSAgICBpZiAoc3RvcmFnZVJlc291
cmNlKSB7Ci0gICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+c3RhcnRSZXBvcnRpbmdDaGFuZ2VzVG9G
cm9udGVuZCgpOwotICAgICAgICBTdG9yYWdlKiBkb21TdG9yYWdlID0gc3RvcmFnZVJlc291cmNl
LT5kb21TdG9yYWdlKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkb21TdG9y
YWdlLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZShkb21TdG9yYWdl
LT5rZXkoaSkpOwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlKGRvbVN0b3JhZ2UtPmdldEl0ZW0o
bmFtZSkpOwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBlbnRyeSA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGVudHJ5LT5wdXNoU3RyaW5nKG5hbWUp
OwotICAgICAgICAgICAgZW50cnktPnB1c2hTdHJpbmcodmFsdWUpOwotICAgICAgICAgICAgKCpl
bnRyaWVzKS0+cHVzaEFycmF5KGVudHJ5KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCi17Ci0g
ICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRET01T
dG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOwotICAgIGlmIChzdG9yYWdlUmVzb3VyY2Up
IHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwotICAgICAgICBzdG9yYWdl
UmVzb3VyY2UtPmRvbVN0b3JhZ2UoKS0+c2V0SXRlbShrZXksIHZhbHVlLCBleGNlcHRpb24pOwot
ICAgICAgICAqc3VjY2VzcyA9ICFleGNlcHRpb247Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSwgYm9vbCogc3VjY2VzcykKLXsKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3Jh
Z2VJZCk7Ci0gICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgewotICAgICAgICBzdG9yYWdlUmVzb3Vy
Y2UtPmRvbVN0b3JhZ2UoKS0+cmVtb3ZlSXRlbShrZXkpOwotICAgICAgICAqc3VjY2VzcyA9IHRy
dWU7Ci0gICAgfQotfQotCi1JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckNv
bnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFnZUlkKQotewot
ICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVz
b3VyY2VzLmZpbmQoc3RvcmFnZUlkKTsKLSAgICBpZiAoaXQgPT0gbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKLX0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQpAQCAtMTUwNyw2ICsxNDI3
LDM2IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzWEhSQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHVybCwgU3RyaW5nKiBicmVha3BvaW50CiAKICNlbmRpZgogCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
KQoreworICAgICBpbmplY3RlZFNjcmlwdEhvc3QoKS0+c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uo
c291cmNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUs
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQs
IGJvb2wqIGhhZEV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEZJWE1FOiBleHBsaWNpdGx5IHBhc3MgaW5qZWN0ZWRTY3JpcHRJZCBh
bG9uZyB3aXRoIG5vZGUgaWQgdG8gdGhlIGZyb250ZW5kLgorICAgIGJvb2wgaW5qZWN0ZWRTY3Jp
cHRJZElzTm9kZUlkID0gaW5qZWN0ZWRTY3JpcHRJZCA8PSAwOworCisgICAgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHQ7CisgICAgaWYgKGluamVjdGVkU2NyaXB0SWRJc05vZGVJZCkKKyAg
ICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvck5vZGVJZCgtaW5qZWN0ZWRT
Y3JpcHRJZCk7CisgICAgZWxzZQorICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2Ny
aXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvcklkKGluamVjdGVkU2NyaXB0SWQpOworCisgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW5qZWN0ZWRTY3JpcHQuZGlzcGF0Y2gobWV0aG9kTmFtZSwgYXJndW1lbnRzLCByZXN1bHQsIGhh
ZEV4Y2VwdGlvbik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZVdyYXBw
ZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXApCit7CisgICAgaW5qZWN0ZWRTY3JpcHRIb3N0KCktPnJlbGVhc2VXcmFwcGVyT2JqZWN0
R3JvdXAoaW5qZWN0ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXApOworfQorCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgc2NyaXB0KQogewogICAgIGlmIChtX2Zyb250ZW5kKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGU1NzBjOTguLjQ4MTM0NGQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTU2LDEyICs1NiwxMyBAQCBjbGFzcyBI
aXRUZXN0UmVzdWx0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBj
bGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsK
IGNsYXNzIEluc3BlY3RvckNTU0FnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CitjbGFz
cyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2U7CitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZDsKQEAgLTg1LDcgKzg2LDYgQEAgY2xhc3MgU2NyaXB0QXJndW1lbnRzOwog
Y2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKLWNsYXNzIFN0b3JhZ2U7CiBjbGFzcyBTdG9yYWdlQXJlYTsKIAogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC0xMDMsOSArMTAzLDYgQEAgY2xhc3MgV2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2U7CiAKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOwot
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01hcDsKLQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBDb25zb2xlUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEVsZW1lbnRz
UGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFByb2ZpbGVzUGFuZWw7CkBAIC0x
MTQsNyArMTExLDYgQEAgcHVibGljOgogICAgIEluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSosIElu
c3BlY3RvckNsaWVudCopOwogICAgIH5JbnNwZWN0b3JDb250cm9sbGVyKCk7CiAKLSAgICBJbnNw
ZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNr
ZW5kLmdldCgpOyB9CiAgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgp
IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9CkBAIC0xODksMTAgKzE4NSw2
IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0
aW9uQ2FjaGVBZ2VudCgpIHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZUFnZW50LmdldCgpOyB9
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICBJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQqIGZpbGVTeXN0ZW1BZ2VudCgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbUFnZW50Lmdl
dCgpOyB9Ci0jZW5kaWYgCi0KICAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERv
Y3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwogICAgIHZvaWQgbWFpblJlc291cmNlRmlyZWRE
T01Db250ZW50RXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7CiAKQEAgLTIwNywx
MyArMTk5LDExIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9pZCBkaWRP
cGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKKwogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKICAgICB2b2lkIGRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFy
ZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpOwotICAg
IHZvaWQgc2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKTsKLSAgICB2b2lkIGdldERP
TVN0b3JhZ2VFbnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBl
bnRyaWVzKTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3VjY2Vzcyk7Ci0gICAg
dm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wqIHN1Y2Nlc3MpOwogI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAg
ICAgdm9pZCBkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CiAgICAgdm9pZCB3
aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7CkBAIC0yNTAsMTIgKzI0MCwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlLCBi
b29sIHNraXBSZWNvbXBpbGUgPSBmYWxzZSk7CiAgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9v
bCBhbHdheXMgPSBmYWxzZSk7CiAgICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKSBjb25zdDsKLSAg
ICBJbnNwZWN0b3JQcm9maWxlckFnZW50KiBwcm9maWxlckFnZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9maWxlckFnZW50LmdldCgpOyB9CiAKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7CiAg
ICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CiAgICAgYm9vbCBk
ZWJ1Z2dlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQ7IH0KLSAgICBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z2dlckFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZXN1bWUoKTsKIAogICAgIHZvaWQgc2V0
U3RpY2t5QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRz
KTsKQEAgLTI2Nyw2ICsyNTUsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzWEhSQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBicmVha3BvaW50VVJMKTsKICNlbmRpZgogCisg
ICAgdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSk7Cisg
ICAgdm9pZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBpbmplY3RlZFNjcmlwdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CisKKyAgICAvLyBH
ZW5lcmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9ucy4KKyAgICB2b2lk
IHJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKTsKKwogICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZChsb25nIHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIAogICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKGxvbmcgaWQpOwpAQCAtMzA2LDggKzMwMCw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwg
Ym9vbCogbmV3U3RhdGUpOwogCiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29s
IGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKLSAgICBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdl
bnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFz
ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpAQCAtMzE2LDEzICszMDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzdG9yZVN0aWNr
eUJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCByZXN0b3JlU3RpY2t5QnJlYWtwb2ludChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgdm9pZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwotICAg
IERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBnZXRE
T01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb25nIHN0b3JhZ2VJZCk7Ci0jZW5kaWYKIAogICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29r
aWUmKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ29va2ll
cyhMaXN0SGFzaFNldDxDb29raWU+Jik7CkBAIC0zNDIsNyArMzI3LDE1IEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwogICAgIE93blB0cjxJbnNw
ZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+
IG1fZG9tQWdlbnQ7Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdl
QWdlbnQ7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ+IG1fZGF0YWJhc2VBZ2VudDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorICAgIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+IG1fZG9tU3RvcmFnZUFn
ZW50OworI2VuZGlmCisKICAgICBPd25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1l
bGluZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKIApAQCAtMzYx
LDE3ICszNTQsMjAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V4cGlyZWRDb25zb2xlTWVz
c2FnZUNvdW50OwogICAgIEhhc2hNYXA8U3RyaW5nLCBkb3VibGU+IG1fdGltZXM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBtX2NvdW50czsKKwogI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZT4gPiBEYXRhYmFzZVJlc291cmNlc01hcDsKICAgICBEYXRhYmFzZVJlc291cmNlc01hcCBtX2Rh
dGFiYXNlUmVzb3VyY2VzOwogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4g
RE9NU3RvcmFnZVJlc291cmNlc01hcDsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fZG9t
U3RvcmFnZVJlc291cmNlczsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fc2hvd0FmdGVyVmlzaWJs
ZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHRlZE5vZGU7CiAgICAgQ29uc29sZU1lc3Nh
Z2UqIG1fcHJldmlvdXNNZXNzYWdlOwogICAgIGJvb2wgbV9zZXR0aW5nc0xvYWRlZDsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5kOwogICAgIE93blB0cjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsK
ICAgICBSZWZQdHI8SW5qZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2YWRiOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShET01fU1RP
UkFHRSkKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJTdG9yYWdlLmgi
CisjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp+SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50KCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBlbnRyaWVzKQoreworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3Rv
cmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKKyAg
ICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CisgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+c3RhcnRS
ZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCgpOworICAgICAgICBTdG9yYWdlKiBkb21TdG9yYWdl
ID0gc3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkb21TdG9yYWdlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJp
bmcgbmFtZShkb21TdG9yYWdlLT5rZXkoaSkpOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlKGRv
bVN0b3JhZ2UtPmdldEl0ZW0obmFtZSkpOworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBlbnRyeSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGVudHJ5
LT5wdXNoU3RyaW5nKG5hbWUpOworICAgICAgICAgICAgZW50cnktPnB1c2hTdHJpbmcodmFsdWUp
OworICAgICAgICAgICAgKCplbnRyaWVzKS0+cHVzaEFycmF5KGVudHJ5KTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJ
dGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogc3VjY2VzcykKK3sKKyAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIHN0
b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7Cisg
ICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlv
biA9IDA7CisgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+ZG9tU3RvcmFnZSgpLT5zZXRJdGVtKGtl
eSwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgICpzdWNjZXNzID0gIWV4Y2VwdGlvbjsKKyAg
ICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdl
SXRlbShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpCit7
CisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRE
T01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChzdG9yYWdlUmVzb3Vy
Y2UpIHsKKyAgICAgICAgc3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCktPnJlbW92ZUl0ZW0o
a2V5KTsKKyAgICAgICAgKnN1Y2Nlc3MgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKK3sK
KyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAgICByZXR1
cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSBzdG9yYWdlLT5mcmFtZSgpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUtPmRvbVdpbmRv
dygpLT5sb2NhbFN0b3JhZ2UoZWMpID09IHN0b3JhZ2UgJiYgIWVjKTsKKyAgICBsb25nIHN0b3Jh
Z2VSZXNvdXJjZUlkID0gMDsKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBk
b21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLT5lbmQoKTsKKyAgICBmb3IgKERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2Vz
LT5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+
c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0b3JhZ2UpKSB7CisgICAg
ICAgICAgICBzdG9yYWdlUmVzb3VyY2VJZCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIGlmIChzdG9yYWdlUmVzb3VyY2VJZCkKKyAgICAgICAg
bV9mcm9udGVuZC0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlUmVzb3VyY2VJZCk7Cit9CisKK0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXAqIGRvbVN0b3JhZ2VSZXNvdXJjZXMsIEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCkKKyAgICA6IG1fZG9tU3RvcmFnZVJlc291cmNlcyhkb21TdG9yYWdlUmVzb3VyY2Vz
KQorICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKK3sKK30KKworSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJj
ZUZvcklkKGxvbmcgc3RvcmFnZUlkKQoreworICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLT5maW5kKHN0b3JhZ2VJZCk7CisgICAg
aWYgKGl0ID09IG1fZG9tU3RvcmFnZVJlc291cmNlcy0+ZW5kKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoRE9NX1NUT1JFKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZkN2NiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAid3RmL0hhc2hNYXAuaCIKKyNpbmNsdWRlICJ3dGYvUGFzc1JlZlB0ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yQ29u
dHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsKK2NsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOworY2xhc3MgU3RvcmFnZTsKKworY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50PiB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOworCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50PiBjcmVhdGUoRE9NU3RvcmFnZVJlc291cmNl
c01hcCogZG9tU3RvcmFnZVJlc291cmNlcywgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQoZG9tU3RvcmFnZVJlc291cmNlcywgZnJvbnRlbmQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKTsKKworICAgIC8vIENhbGxlZCBmcm9tIHRoZSBm
cm9udC1lbmQuCisgICAgdm9pZCBnZXRET01TdG9yYWdlRW50cmllcyhsb25nIHN0b3JhZ2VJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogZW50cmllcyk7CisgICAgdm9pZCBzZXRET01TdG9yYWdl
SXRlbShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wqIHN1Y2Nlc3MpOworICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBz
dG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsKKworICAgIC8vIENh
bGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCisgICAgdm9pZCBzZWxlY3RET01TdG9yYWdl
KFN0b3JhZ2UqIHN0b3JhZ2UpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkg
eyByZXR1cm4gbV9mcm9udGVuZDsgfQorCitwcml2YXRlOgorICAgIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudChET01TdG9yYWdlUmVzb3VyY2VzTWFwKiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKwor
ICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9y
SWQobG9uZyBzdG9yYWdlSWQpOworCisgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCogbV9kb21T
dG9yYWdlUmVzb3VyY2VzOworICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGIzYWUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
Ikluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVO
QUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJTUUxFcnJvci5oIgor
I2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKKyNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJT
UUxWYWx1ZS5oIgorI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK2xvbmcgbGFz
dFRyYW5zYWN0aW9uSWQgPSAwOworCit2b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQqIGFnZW50LCBsb25nIHRyYW5zYWN0aW9uSWQsIFNRTEVycm9yKiBl
cnJvcikKK3sKKyAgICBpZiAoIWFnZW50LT5mcm9udGVuZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGVycm9yT2JqZWN0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvci0+
bWVzc2FnZSgpKTsKKyAgICBlcnJvck9iamVjdC0+c2V0TnVtYmVyKCJjb2RlIiwgZXJyb3ItPmNv
ZGUoKSk7CisgICAgYWdlbnQtPmZyb250ZW5kKCktPnNxbFRyYW5zYWN0aW9uRmFpbGVkKHRyYW5z
YWN0aW9uSWQsIGVycm9yT2JqZWN0KTsKK30KKworY2xhc3MgU3RhdGVtZW50Q2FsbGJhY2sgOiBw
dWJsaWMgU1FMU3RhdGVtZW50Q2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0YXRlbWVudENhbGxiYWNrPiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVm
UHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IGFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdGF0ZW1lbnRDYWxsYmFjayh0cmFuc2FjdGlvbklkLCBhZ2VudCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflN0YXRlbWVudENhbGxiYWNrKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqIHJlc3Vs
dFNldCkKKyAgICB7CisgICAgICAgIGlmICghbV9hZ2VudC0+ZnJvbnRlbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd0xpc3Qg
PSByZXN1bHRTZXQtPnJvd3MoKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNv
bHVtbk5hbWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29sdW1ucyA9IHJvd0xpc3QtPmNvbHVtbk5hbWVzKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sdW1ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNv
bHVtbk5hbWVzLT5wdXNoU3RyaW5nKGNvbHVtbnNbaV0pOworCisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBkYXRhID0gcm93TGlzdC0+dmFsdWVzKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgU1FMVmFsdWUmIHZhbHVlID0gcm93TGlzdC0+dmFsdWVzKClbaV07CisgICAgICAgICAg
ICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6
OlN0cmluZ1ZhbHVlOiB2YWx1ZXMtPnB1c2hTdHJpbmcodmFsdWUuc3RyaW5nKCkpOyBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZTogdmFsdWVzLT5wdXNo
TnVtYmVyKHZhbHVlLm51bWJlcigpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTUUxW
YWx1ZTo6TnVsbFZhbHVlOiB2YWx1ZXMtPnB1c2hWYWx1ZShJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
KTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9hZ2VudC0+ZnJv
bnRlbmQoKS0+c3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQobV90cmFuc2FjdGlvbklkLCBjb2x1bW5O
YW1lcywgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFN0YXRlbWVudENhbGxiYWNrKGxvbmcgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uSWQodHJh
bnNhY3Rpb25JZCkKKyAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KKyAgICBsb25nIG1fdHJh
bnNhY3Rpb25JZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gbV9hZ2VudDsK
K307CisKK2NsYXNzIFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVtZW50
RXJyb3JDYWxsYmFjaz4gY3JlYXRlKGxvbmcgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RhdGVtZW50RXJyb3JDYWxsYmFjayh0cmFuc2FjdGlvbklkLCBhZ2VudCkpOworICAg
IH0KKworICAgIHZpcnR1YWwgflN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKiBlcnJvcikK
KyAgICB7CisgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fYWdlbnQuZ2V0KCksIG1f
dHJhbnNhY3Rpb25JZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsgIAorICAgIH0KKwor
cHJpdmF0ZToKKyAgICBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGxvbmcgdHJhbnNhY3Rpb25JZCwg
UmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IGFnZW50KQorICAgICAgICA6IG1fdHJhbnNh
Y3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1fYWdlbnQoYWdlbnQpIHsgfQorICAg
IGxvbmcgbV90cmFuc2FjdGlvbklkOworICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50
PiBtX2FnZW50OworfTsKKworY2xhc3MgVHJhbnNhY3Rpb25DYWxsYmFjayA6IHB1YmxpYyBTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGxvbmcg
dHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhz
cWxTdGF0ZW1lbnQsIHRyYW5zYWN0aW9uSWQsIGFnZW50KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+VHJhbnNhY3Rpb25DYWxsYmFjaygpIHsgfQorCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2
ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9h
Z2VudC0+ZnJvbnRlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIFZl
Y3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOworICAgICAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+IGNhbGxiYWNrKFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUobV90cmFuc2FjdGlvbklk
LCBtX2FnZW50KSk7CisgICAgICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrKFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShtX3RyYW5zYWN0aW9u
SWQsIG1fYWdlbnQpKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIHRy
YW5zYWN0aW9uLT5leGVjdXRlU1FMKG1fc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIGNhbGxiYWNr
LnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorcHJpdmF0ZToKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IFN0
cmluZyYgc3FsU3RhdGVtZW50LCBsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yRGF0YWJhc2VBZ2VudD4gYWdlbnQpCisgICAgICAgIDogbV9zcWxTdGF0ZW1lbnQoc3FsU3Rh
dGVtZW50KQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAg
ICAsIG1fYWdlbnQoYWdlbnQpIHsgfQorICAgIFN0cmluZyBtX3NxbFN0YXRlbWVudDsKKyAgICBs
b25nIG1fdHJhbnNhY3Rpb25JZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4g
bV9hZ2VudDsKK307CisKK2NsYXNzIFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gY3JlYXRlKGxvbmcgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKHRyYW5zYWN0aW9u
SWQsIGFnZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqIGVycm9y
KQorICAgIHsKKyAgICAgICAgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQobV9hZ2VudC5nZXQoKSwg
bV90cmFuc2FjdGlvbklkLCBlcnJvcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK3By
aXZhdGU6CisgICAgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKGxvbmcgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3Ry
YW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0K
KyAgICBsb25nIG1fdHJhbnNhY3Rpb25JZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VB
Z2VudD4gbV9hZ2VudDsKK307CisKK2NsYXNzIFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrIDog
cHVibGljIFZvaWRDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJh
bnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOworICAgIH0KKworICAg
IHZpcnR1YWwgflRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXZlbnQoKSB7IH0KKworcHJpdmF0ZToKKyAgICBUcmFuc2FjdGlvblN1Y2Nl
c3NDYWxsYmFjaygpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UKKworSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKQoreworfQorCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGRhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVzKQoreworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9
IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7CisgICAgaWYgKGRhdGFiYXNlKSB7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1lcygpOworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgKCpuYW1lcyktPnB1
c2hTdHJpbmcodGFibGVOYW1lc1tpXSk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBib29sKiBzdWNjZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKQoreworICAgIERhdGFiYXNlKiBk
YXRhYmFzZSA9IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7CisgICAgaWYgKCFkYXRhYmFzZSkg
eworICAgICAgICAqc3VjY2VzcyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgKnRyYW5zYWN0aW9uSWQgPSArK2xhc3RUcmFuc2FjdGlvbklkOworICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUo
cXVlcnksICp0cmFuc2FjdGlvbklkLCB0aGlzKSk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayhUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNy
ZWF0ZSgqdHJhbnNhY3Rpb25JZCwgdGhpcykpOworICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjayhUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKCkpOworICAg
IGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2su
cmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpKTsKKyAgICAqc3VjY2VzcyA9IHRy
dWU7Cit9CisKK0RhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUZvcklk
KGxvbmcgZGF0YWJhc2VJZCkKK3sKKyAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLT5maW5kKGRhdGFiYXNlSWQpOworICAgIGlmIChpdCA9
PSBtX2RhdGFiYXNlUmVzb3VyY2VzLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGlmICghbV9m
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLT5iZWdpbigpOyBpdCAhPSBtX2Rh
dGFiYXNlUmVzb3VyY2VzLT5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+
ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkgeworICAgICAgICAgICAgbV9mcm9udGVuZC0+c2VsZWN0
RGF0YWJhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQorewor
ICAgIG1fZnJvbnRlbmQgPSAwOworfQorCitJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpJbnNwZWN0
b3JEYXRhYmFzZUFnZW50KERhdGFiYXNlUmVzb3VyY2VzTWFwKiBkYXRhYmFzZVJlc291cmNlcywg
SW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIDogbV9kYXRhYmFzZVJlc291cmNlcyhk
YXRhYmFzZVJlc291cmNlcykKKyAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVO
QUJMRShEQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzNkM2M4Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckRhdGFiYXNlQWdlbnRfaAorI2RlZmluZSBJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKKyNpbmNsdWRlICJ3dGYvUGFzc1JlZlB0ci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlOworY2xhc3MgSW5zcGVjdG9yQXJy
YXk7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kOworCitjbGFzcyBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gewor
cHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gY3JlYXRlKERhdGFiYXNlUmVzb3VyY2VzTWFwKiBk
YXRhYmFzZVJlc291cmNlcywgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KGRhdGFiYXNl
UmVzb3VyY2VzLCBmcm9udGVuZCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkluc3BlY3RvckRh
dGFiYXNlQWdlbnQoKTsKKworICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCisgICAg
dm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBuYW1lcyk7CisgICAgdm9pZCBleGVjdXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2VzcywgbG9uZyogdHJhbnNhY3Rpb25JZCk7
CisKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgorICAgIERhdGFiYXNl
KiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CisgICAgdm9pZCBzZWxlY3REYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KCkgeyByZXR1cm4gbV9mcm9udGVuZDsgfQorICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpOworCitw
cml2YXRlOgorICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoRGF0YWJhc2VSZXNvdXJjZXNNYXAq
LCBJbnNwZWN0b3JGcm9udGVuZCopOworCisgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAqIG1fZGF0
YWJhc2VSZXNvdXJjZXM7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JE
YXRhYmFzZUFnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1NjVmYS4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJM
RShEQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCi0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1l
bnRDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKLSNp
bmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNpbmNsdWRl
ICJWb2lkQ2FsbGJhY2suaCIKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi1sb25nIGxhc3RUcmFuc2FjdGlvbklkID0gMDsK
LQotdm9pZCByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChJbnNwZWN0b3JTdG9yYWdlQWdlbnQqIGFn
ZW50LCBsb25nIHRyYW5zYWN0aW9uSWQsIFNRTEVycm9yKiBlcnJvcikKLXsKLSAgICBpZiAoIWFn
ZW50LT5mcm9udGVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGVycm9y
T2JqZWN0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvci0+bWVzc2FnZSgpKTsKLSAgICBlcnJv
ck9iamVjdC0+c2V0TnVtYmVyKCJjb2RlIiwgZXJyb3ItPmNvZGUoKSk7Ci0gICAgYWdlbnQtPmZy
b250ZW5kKCktPnNxbFRyYW5zYWN0aW9uRmFpbGVkKHRyYW5zYWN0aW9uSWQsIGVycm9yT2JqZWN0
KTsKLX0KLQotY2xhc3MgU3RhdGVtZW50Q2FsbGJhY2sgOiBwdWJsaWMgU1FMU3RhdGVtZW50Q2Fs
bGJhY2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YXRlbWVudENhbGxiYWNr
PiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VB
Z2VudD4gYWdlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0YXRlbWVu
dENhbGxiYWNrKHRyYW5zYWN0aW9uSWQsIGFnZW50KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+
U3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChT
UUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0KQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2FnZW50LT5mcm9udGVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93TGlzdCA9IHJlc3VsdFNldC0+cm93cygpOwot
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2x1bW5zID0g
cm93TGlzdC0+Y29sdW1uTmFtZXMoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b2x1bW5zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29sdW1uTmFtZXMtPnB1c2hTdHJpbmco
Y29sdW1uc1tpXSk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4m
IGRhdGEgPSByb3dMaXN0LT52YWx1ZXMoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkYXRhLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBTUUxWYWx1ZSYgdmFsdWUg
PSByb3dMaXN0LT52YWx1ZXMoKVtpXTsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+
cHVzaFN0cmluZyh2YWx1ZS5zdHJpbmcoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
U1FMVmFsdWU6Ok51bWJlclZhbHVlOiB2YWx1ZXMtPnB1c2hOdW1iZXIodmFsdWUubnVtYmVyKCkp
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6IHZhbHVl
cy0+cHVzaFZhbHVlKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOyBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBtX2FnZW50LT5mcm9udGVuZCgpLT5zcWxUcmFuc2FjdGlv
blN1Y2NlZWRlZChtX3RyYW5zYWN0aW9uSWQsIGNvbHVtbk5hbWVzLCB2YWx1ZXMpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RhdGVtZW50Q2FsbGJhY2so
bG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gYWdl
bnQpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCi0gICAgICAgICwg
bV9hZ2VudChhZ2VudCkgeyB9Ci0gICAgbG9uZyBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAgUmVmUHRy
PEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9hZ2VudDsKLX07Ci0KLWNsYXNzIFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2sgOiBwdWJsaWMgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY3JlYXRlKGxv
bmcgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGFnZW50
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKHRyYW5zYWN0aW9uSWQsIGFnZW50KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+U3RhdGVt
ZW50RXJyb3JDYWxsYmFjaygpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNR
TFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgcmVwb3J0VHJh
bnNhY3Rpb25GYWlsZWQobV9hZ2VudC5nZXQoKSwgbV90cmFuc2FjdGlvbklkLCBlcnJvcik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOyAgCi0gICAgfQotCi1wcml2YXRlOgotICAgIFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2sobG9uZyB0cmFuc2FjdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFn
ZW50PiBhZ2VudCkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAg
ICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KLSAgICBsb25nIG1fdHJhbnNhY3Rpb25JZDsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2FnZW50OwotfTsKLQotY2xhc3MgVHJh
bnNhY3Rpb25DYWxsYmFjayA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGxvbmcgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGFnZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUcmFuc2FjdGlvbkNhbGxiYWNrKHNxbFN0YXRlbWVudCwgdHJhbnNhY3Rpb25JZCwg
YWdlbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbkNhbGxiYWNrKCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2FnZW50LT5mcm9udGVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxWYWx1ZXM7Ci0g
ICAgICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2soU3RhdGVtZW50Q2Fs
bGJhY2s6OmNyZWF0ZShtX3RyYW5zYWN0aW9uSWQsIG1fYWdlbnQpKTsKLSAgICAgICAgUmVmUHRy
PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2soU3RhdGVtZW50RXJyb3JD
YWxsYmFjazo6Y3JlYXRlKG1fdHJhbnNhY3Rpb25JZCwgbV9hZ2VudCkpOwotICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmV4ZWN1dGVTUUwobV9zcWxT
dGF0ZW1lbnQsIHNxbFZhbHVlcywgY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJl
bGVhc2UoKSwgZWMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci1wcml2YXRlOgotICAg
IFRyYW5zYWN0aW9uQ2FsbGJhY2soY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGxvbmcgdHJh
bnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGFnZW50KQotICAg
ICAgICA6IG1fc3FsU3RhdGVtZW50KHNxbFN0YXRlbWVudCkKLSAgICAgICAgLCBtX3RyYW5zYWN0
aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KLSAgICBT
dHJpbmcgbV9zcWxTdGF0ZW1lbnQ7Ci0gICAgbG9uZyBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAgUmVm
UHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9hZ2VudDsKLX07Ci0KLWNsYXNzIFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
Y3JlYXRlKGxvbmcgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ+IGFnZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIH5UcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVFdmVudChTUUxFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICByZXBvcnRUcmFuc2Fj
dGlvbkZhaWxlZChtX2FnZW50LmdldCgpLCBtX3RyYW5zYWN0aW9uSWQsIGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2sobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2Vu
dD4gYWdlbnQpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCi0gICAg
ICAgICwgbV9hZ2VudChhZ2VudCkgeyB9Ci0gICAgbG9uZyBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAg
UmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9hZ2VudDsKLX07Ci0KLWNsYXNzIFRyYW5z
YWN0aW9uU3VjY2Vzc0NhbGxiYWNrIDogcHVibGljIFZvaWRDYWxsYmFjayB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2s+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uU3VjY2Vzc0Nh
bGxiYWNrKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxi
YWNrKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoKSB7IH0KLQotcHJpdmF0
ZToKLSAgICBUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaygpIHsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UKLQotSW5zcGVjdG9yU3RvcmFnZUFnZW50OjpJbnNwZWN0b3JTdG9yYWdlQWdlbnQoSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQotICAgIDogbV9mcm9udGVuZChmcm9udGVuZCkKLXsK
LX0KLQotSW5zcGVjdG9yU3RvcmFnZUFnZW50Ojp+SW5zcGVjdG9yU3RvcmFnZUFnZW50KCkKLXsK
LX0KLQotbG9uZyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmV4ZWN1dGVTUUwoRGF0YWJhc2UqIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KQotewotICAgIGxvbmcgdHJhbnNhY3Rpb25JZCA9
ICsrbGFzdFRyYW5zYWN0aW9uSWQ7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+
IGNhbGxiYWNrKFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShxdWVyeSwgdHJhbnNhY3Rpb25J
ZCwgdGhpcykpOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2soVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUodHJhbnNhY3Rpb25JZCwg
dGhpcykpOwotICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayhUcmFuc2Fj
dGlvblN1Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKCkpOwotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlv
bihjYWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2Fs
bGJhY2sucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb25JZDsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQotewotICAgIG1fZnJvbnRlbmQg
PSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKSAmJiBFTkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
b3JhZ2VBZ2VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWNlZWU0Li4wMDAw
MDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yU3RvcmFnZUFnZW50
X2gKLSNkZWZpbmUgSW5zcGVjdG9yU3RvcmFnZUFnZW50X2gKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAid3RmL1Bhc3NSZWZQdHIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBEYXRhYmFzZTsKLWNsYXNzIEluc3BlY3RvckZyb250ZW5kOwotCi1jbGFz
cyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdG9y
YWdlQWdlbnQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdG9y
YWdlQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0b3JhZ2VBZ2VudChmcm9udGVuZCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgfkluc3BlY3RvclN0b3JhZ2VBZ2VudCgpOwotCi0gICAg
bG9uZyBleGVjdXRlU1FMKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBxdWVyeSk7Ci0KLSAgICBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQoKSB7IHJldHVybiBtX2Zyb250ZW5kOyB9Ci0gICAg
dm9pZCBjbGVhckZyb250ZW5kKCk7Ci0KLXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yU3RvcmFnZUFn
ZW50KEluc3BlY3RvckZyb250ZW5kKik7Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9u
dGVuZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclN0b3JhZ2VBZ2VudF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRzUGFuZWwuanMKaW5kZXggZmQ0NDQwNC4uN2Q3ZTEyOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBAIC0yMjAsNyArMjIwLDcgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLnZpc2li
bGVWaWV3LnNob3codGhpcy52aWV3c0NvbnRhaW5lckVsZW1lbnQpOwogCiAgICAgICAgIGlmICh0
aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bikgewotICAgICAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5lbmFibGVEZWJ1Z2dlcihmYWxzZSk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKICAgICAgICAgfQogICAgIH0sCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCmluZGV4IDM0NWU0
M2UuLmNhZWZmYjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwuY3BwCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
QmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCIK
</data>
<flag name="review"
          id="68775"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77638</attachid>
            <date>2010-12-29 12:43:44 -0800</date>
            <delta_ts>2010-12-30 05:31:29 -0800</delta_ts>
            <desc>[PATCH] Review comments addressed (for try bots).</desc>
            <filename>storage_agent</filename>
            <type>text/plain</type>
            <size>93857</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3Jz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJy
b3JzLWV4cGVjdGVkLnR4dAppbmRleCBhNWQ4ZGZjLi44ODU2YWU3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQu
dHh0CkBAIC00NCw3ICs0NCw3IEBAIFRlc3RzIHRoYXQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIgaXMgY2F0Y2hpbmcgaW5jb3JyZWN0IG1lc3NhZ2VzLgogfQogewogICAgIHNlcSA6IDIKLSAg
ICBkb21haW4gOiAiUmVzb3VyY2VzIgorICAgIGRvbWFpbiA6ICJOZXR3b3JrIgogICAgIHN1Y2Nl
c3MgOiBmYWxzZQogICAgIGVycm9ycyA6IHsKICAgICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjog
J2FyZ3VtZW50cycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIgpA
QCAtNTIsNyArNTIsNyBAQCBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGlz
IGNhdGNoaW5nIGluY29ycmVjdCBtZXNzYWdlcy4KIH0KIHsKICAgICBzZXEgOiAzCi0gICAgZG9t
YWluIDogIlJlc291cmNlcyIKKyAgICBkb21haW4gOiAiTmV0d29yayIKICAgICBzdWNjZXNzIDog
ZmFsc2UKICAgICBlcnJvcnMgOiB7CiAgICAgICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6ICdhcmd1
bWVudHMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIKQEAgLTYw
LDcgKzYwLDcgQEAgVGVzdHMgdGhhdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciBpcyBjYXRj
aGluZyBpbmNvcnJlY3QgbWVzc2FnZXMuCiB9CiB7CiAgICAgc2VxIDogNAotICAgIGRvbWFpbiA6
ICJSZXNvdXJjZXMiCisgICAgZG9tYWluIDogIk5ldHdvcmsiCiAgICAgc3VjY2VzcyA6IGZhbHNl
CiAgICAgZXJyb3JzIDogewogICAgICAgICAwIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAn
ZnJhbWVJZCcgd2l0aCB0eXBlICdOdW1iZXInIHdhcyBub3QgZm91bmQuIgpAQCAtNzAsNyArNzAs
NyBAQCBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGlzIGNhdGNoaW5nIGlu
Y29ycmVjdCBtZXNzYWdlcy4KIH0KIHsKICAgICBzZXEgOiA1Ci0gICAgZG9tYWluIDogIlJlc291
cmNlcyIKKyAgICBkb21haW4gOiAiTmV0d29yayIKICAgICBzdWNjZXNzIDogZmFsc2UKICAgICBl
cnJvcnMgOiB7CiAgICAgICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IEFyZ3VtZW50ICdmcmFtZUlk
JyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwMmQ4N2I3Li4x
ODc2YjM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTExNTMsMTIgKzExNTMsMTMgQEAgU0VUKFdlYkNvcmVfU09VUkNF
UwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNw
cApAQCAtMTE3MCw3ICsxMTcxLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAotICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdG9yYWdlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwCiAgICAgaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHAKICAgICBpbnNwZWN0b3Iv
U2NyaXB0QnJlYWtwb2ludC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZmVmM2I0NS4uYmVhOGI0MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAx
MC0xMi0yOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGV4dHJhY3QgRGF0YWJhc2UgJiBET00gU3RvcmFnZQorICAgICAgICBhZ2VudHM7IHJlbW92ZSBJ
bnNwZWN0b3JCYWNrZW5kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTE3MDcKKworICAgICAgICBUaGlzIGNoYW5nZSBicnVzaGVzIHVwIHN0b3JhZ2Ug
YWdlbnRzICsgcmVtb3ZlcyByZWR1bmRhbnQKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZCBjbGFz
cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0b3JET01BZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmg6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZVdy
YXBwZXJPYmplY3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6On5JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZWxlY3RET01TdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6SW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmguCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHA6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdG9y
YWdlQWdlbnQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
fkluc3BlY3RvckRhdGFiYXNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50OjpzZWxlY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjbGVhckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmg6IFJlbmFtZWQgZnJvbSBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaC4KKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpmcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnBy
b3RvdHlwZS5zaG93KToKKwogMjAxMC0xMi0yOSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBmMTA4Zjg2Li5iMGRiZTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5NDUsMjAgKzE5NDUsMjIgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmggXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIFwKLQlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIFwKKwlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBcCisJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQuY3BwIFwKQEAgLTE5NzYsOCArMTk3OCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmggXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5j
cHAgXAotCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY2MmQ4ODMuLmNhOTQxMDEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTk5LDIw
ICsxOTk5LDIyIEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAnLAot
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCcsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcCcsCkBAIC0yMDI4LDgg
KzIwMzAsNiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oJywKLSAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwppbmRleCBhYWM3NjBhLi4wYzVjMDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwMzksMTMgKzEwMzksMTQgQEAgU09VUkNF
UyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuY3BwIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCkBAIC0xMDU0LDcgKzEwNTUsNiBAQCBTT1VSQ0VT
ICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmNwcCBcCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcCBcCkBAIC0xOTMwLDExICsxOTMwLDEyIEBAIEhFQURFUlMgKz0gXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCi0g
ICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggXAorICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENsaWVudC5oIFwKQEAgLTE5NDQsNyArMTk0NSw2IEBAIEhFQURFUlMgKz0gXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwK
LSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmggXAogICAgIGluc3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlZGUxNGIyLi5jNWQyNmRiIDEwMDc1NQot
LS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY1MDk0LDE0ICs2NTA5NCw2IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JCYWNrZW5kLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJhY2tlbmQuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3Bl
Y3RvckNsaWVudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNjUxMjYsNiArNjUxMTgsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpAQCAtNjUxNTAsNiArNjUxNTAsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNjUyMTgsMTQgKzY1MjI2
LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdG9yYWdl
QWdlbnQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvclN0eWxlU2hlZXQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTFkNmY2Ny4u
ODI0MTVmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE2MDQsMTEgKzE2MDQsMTEgQEAKIAkJN0EyNDU4N0MxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3Bl
Y3RvckRPTUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTI0NTg3QTEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QTY3NEJEQjBG
OUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkQ5MEY5RUJGNEUwMDZDRjA5
OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovOyB9OwogCQk3QTY3NEJEQzBGOUVCRjRF
MDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmggKi87IH07Ci0JCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmNwcCAqLzsgfTsKLQkJN0E3NEVDQkIxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRF
Q0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmggKi87IH07CisJCTdBNzRF
Q0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlB
NTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgKi87IH07CisJCTdBNzRF
Q0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I5MTAxODM5QTYw
MEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCAqLzsgfTsKIAkJN0E3NEVDQkQx
MDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0JDMTAxODM5
REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgKi87IH07Ci0J
CTdBQjBCMUMwMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCMEIxQkUxMjEx
QTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgKi87IH07Ci0JCTdBQjBC
MUMxMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQjBCMUJGMTIxMUE2MjIwMEE3
Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCAqLzsgfTsKKwkJN0FCMEIxQzAxMjExQTYy
MjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8q
IEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwICovOyB9OworCQk3QUIwQjFDMTEyMTFBNjIyMDBB
NzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuaCAqLzsgfTsKIAkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBREU3MjI1MTBDQkJCOUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3Zp
ZGVyLmggKi87IH07CiAJCTdBRkQ0QThCMTEzMUMyNzYwMDM1Qjg4MyAvKiBTY3JpcHRCcmVha3Bv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZE
NEE4QTExMzFDMjc2MDAzNUI4ODMgLyogU2NyaXB0QnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdBRkQ0RkY0MTEzMjc3QjYwMDM1
Qjg4MyAvKiBTY3JpcHREZWJ1Z0xpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZENEZGMzExMzI3N0I2MDAzNUI4ODMgLyogU2NyaXB0RGVi
dWdMaXN0ZW5lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03OTg5LDExICs3OTg5LDExIEBACiAJCTdBMjQ1ODdBMTAyMUVBRjQwMDBBMDBBQSAv
KiBJbnNwZWN0b3JET01BZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnNwZWN0b3JET01BZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQ
YWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFnZUdyb3VwTG9hZERlZmVycmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVj
dG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNzRFQ0I4MTAxODM5QTUw
MEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E3NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0E3NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FCMEIx
QkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUIwQjFCRjEyMTFBNjIyMDBBNzY5NDAgLyog
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FCMEIxQkYxMjExQTYyMjAwQTc2
OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QURFNzIyNTEwQ0JCQjlCMDA2QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudVByb3ZpZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkQ0QThBMTEzMUMyNzYwMDM1Qjg4MyAv
KiBTY3JpcHRCcmVha3BvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdEJyZWFrcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGRDRGRjMx
MTMyNzdCNjAwMzVCODgzIC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RGVidWdMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTI4MDAsMjAgKzEyODAwLDIyIEBACiAJCQkJN0EwRTc2RjgxMEJGMDhF
RDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5pZGwgKi8sCiAJCQkJQjg4NUU4RDIxMUUw
NkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8sCiAJ
CQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oICovLAotCQkJCTdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNr
ZW5kLmNwcCAqLywKLQkJCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFj
a2VuZC5oICovLAogCQkJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGll
bnQuY3BwICovLAogCQkJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGll
bnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgKi8sCiAJCQkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNv
bnRyb2xsZXIuaCAqLywKIAkJCQk4MkFCMTc0MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwICovLAogCQkJCTgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0
b3JDU1NBZ2VudC5oICovLAorCQkJCTdBQjBCMUJFMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcCAqLywKKwkJCQk3QUIwQjFCRjEyMTFBNjIyMDBBNzY5NDAgLyog
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oICovLAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VB
QyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLywKIAkJCQk0MUYwNjIxMjBGNUYx
OTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovLAogCQkJCUYzM0Yw
NTNCMTIwQjBEQTUwMEU1NzQzQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCAqLywKIAkJ
CQlGMzNGMDUzQzEyMEIwREE1MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oICov
LAogCQkJCTdBMjQ1ODc5MTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5jcHAg
Ki8sCiAJCQkJN0EyNDU4N0ExMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50Lmgg
Ki8sCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5jcHAgKi8sCisJCQkJN0E3NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2MTcyMEY1RjAwQUMwMEEw
N0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywKIAkJCQkzODg4RjZFQzEy
OEM5ODg5MDAwQ0E4RTAgLyogSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcCAqLywKQEAgLTEy
ODMyLDggKzEyODM0LDYgQEAKIAkJCQk4MkFCMTc3MjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5oICovLAogCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJ
bnNwZWN0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIElu
c3BlY3RvclN0YXRlLmggKi8sCi0JCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAgKi8sCi0JCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8q
IEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5
RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKIAkJCQk4MkFCMTc3MDEyNUM4MjY3MDBD
NTA2OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVldC5oICovLAogCQkJCTc1NDEzM0E5MTAyRTAwRjQw
MDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCAqLywKQEAgLTIwNjU3LDE0ICsy
MDY1NywxNSBAQAogCQkJCTkzMzA5REYwMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGMjA5OUU2NDky
MDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4ODVF
OEQ1MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JC
YWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjcwN0E5QTExRUY2Nzk0MDBBQ0RBNjkgLyog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVD
MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFDODFCOTVBMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdl
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBQjBCMUMxMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjIxNDBGNUYxOTI2
MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JE
T01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0E3NEVDQkIxMDE4MzlBNjAwQkY5MzlFIC8q
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYxNzQw
RjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzg4OEY2RUYxMjhDOTg4OTAwMENBOEUwIC8qIEluc3BlY3RvckZpbGVTeXN0
ZW1BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM0NEM3MTQxMTI1QjgyQzAwRjI2RUVFIC8q
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIwNjc0LDcgKzIw
Njc1LDYgQEAKIAkJCQk5RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzYxMjVDODI2NzAwQzUwNjlEIC8q
IEluc3BlY3RvclJlc291cmNlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGQTNCOTBCMTI1
Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0FC
MEIxQzExMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjMyODlCNjExQTQyQUFC
MDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMzgxLDE0
ICsyMzM4MSwxNSBAQAogCQkJCTkzMzA5REVGMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYxMDk5
RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRUZXh0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCODg1RThENDExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJ
bnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNzA3QTk5MTFFRjY3OTQw
MEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5RCAv
KiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QUIwQjFDMDEyMTFB
NjIyMDBBNzY5NDAgLyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MUYwNjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzNGMDUzRDEyMEIwREE1MDBFNTc0M0EgLyogSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTI0NTg3QjEwMjFF
QUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
N0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjE3NTBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM4ODhGNkVFMTI4Qzk4
ODkwMDBDQThFMCAvKiBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEY0RjVGRkIxMUNCRDJFMTAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjMzOTgsNyArMjMzOTksNiBAQAogCQkJCTlGMEQ2QjJFMTIxQkZF
QkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgyQUIxNzc1MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTRGQTNCOTBBMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0
b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QUIwQjFDMDEyMTFBNjIyMDBBNzY5NDAg
LyogSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzcz
MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGMzI4OUI1MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNw
ZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5wbQppbmRleCA5NWY3ZThmLi5iOGFlYTBlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAgLTEwLDcyICsxMCw2NCBAQCB1
c2UgQ2xhc3M6OlN0cnVjdDsKIHVzZSBGaWxlOjpzdGF0OwogCiBteSAldHlwZVRyYW5zZm9ybTsK
LSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JDbGllbnQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvckNsaWVudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNsaWVudC5oIiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiQmFja2VuZCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQmFja2VuZCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckJhY2tlbmQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JC
YWNrZW5kKCkiLAorJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKKyAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCisgICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwKKyAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fYXBwbGljYXRpb25DYWNoZUFnZW50
IiwKIH07Ci0kdHlwZVRyYW5zZm9ybXsiSW5zcGVjdG9yIn0gPSB7Ci0gICAgImZvcndhcmRIZWFk
ZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1faW5zcGVjdG9yQ29udHJvbGxlciIsCiskdHlwZVRyYW5zZm9ybXsiQ1NTIn0gPSB7CisgICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JDU1NBZ2VudCIsCisgICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckNTU0FnZW50LmgiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29u
dHJvbGxlci0+bV9jc3NBZ2VudCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7
CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwKICAgICAiaGVhZGVy
IiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IlJlc291cmNlcyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3Jlc291cmNl
QWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNv
bnRyb2xsZXItPm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTVN0b3Jh
Z2UifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIkluc3BlY3RvckNvbnRyb2xsZXIuaCIs
Ci0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyIiwKKyAgICAi
ZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2Vu
dCIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkRhdGFiYXNlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JCYWNrZW5kIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQmFja2VuZC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckJhY2tlbmQoKSIsCisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50
IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIiwKKyAgICAiZG9t
YWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGF0YWJhc2VBZ2VudCIs
CiB9OwogJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVj
dG9yRE9NQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKLSAg
ICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCki
LAotfTsKLSR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3Bl
Y3RvckNTU0FnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5jc3NBZ2VudCgp
IiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZG9t
QWdlbnQiLAogfTsKLSR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAotICAgICJoZWFk
ZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFj
Y2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQo
KSIsCiskdHlwZVRyYW5zZm9ybXsiRE9NU3RvcmFnZSJ9ID0geworICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmgiLAorICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29u
dHJvbGxlci0+bV9kb21TdG9yYWdlQWdlbnQiLAogfTsKICR0eXBlVHJhbnNmb3JteyJGaWxlU3lz
dGVtIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAog
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFp
bkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5maWxlU3lzdGVtQWdlbnQoKSIs
CisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2ZpbGVT
eXN0ZW1BZ2VudCIsCit9OworJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvciJ9ID0geworICAgICJm
b3J3YXJkSGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29udHJvbGxlci5oIiwKKyAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIiLAorfTsKKyR0eXBlVHJhbnNmb3JteyJO
ZXR3b3JrIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50IiwK
KyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKKyAgICAiZG9tYWlu
QWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fcmVzb3VyY2VBZ2VudCIsCiB9
OwogJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JQcm9maWxlckFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIt
PnByb2ZpbGVyQWdlbnQoKSIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JD
b250cm9sbGVyLT5tX3Byb2ZpbGVyQWdlbnQiLAogfTsKKwogJHR5cGVUcmFuc2Zvcm17IkZyb250
ZW5kIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCiAgICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAogfTsKKyR0eXBlVHJhbnNmb3JteyJJbnNw
ZWN0b3JDbGllbnQifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNsaWVudCIsCisg
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNsaWVudC5oIiwKK307CiAkdHlwZVRyYW5zZm9ybXsi
UGFzc1JlZlB0ciJ9ID0gewogICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL1Bhc3NSZWZQdHIu
aCIsCiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggNDE1
YTJlNS4uYTRhMGM2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
CkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogCkBAIC0xMjAsMjMgKzEyMiwyMyBAQCBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6aW5z
cGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSkKICNpZiBFTkFCTEUoREFUQUJBU0UpCiBEYXRh
YmFzZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCkK
IHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUZvcklkKGRhdGFiYXNlSWQpOworICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RhdGFiYXNlQWdl
bnQpCisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGF0YWJhc2VBZ2Vu
dC0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBJ
bmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9kYXRhYmFzZUFnZW50KQorICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGF0YWJhc2VBZ2VudC0+c2VsZWN0RGF0YWJhc2Uo
ZGF0YWJhc2UpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiB2b2lkIElu
amVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQogewot
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21TdG9yYWdlQWdlbnQpCisgICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21TdG9yYWdlQWdlbnQtPnNlbGVjdERPTVN0
b3JhZ2Uoc3RvcmFnZSk7CiB9CiAjZW5kaWYKIApAQCAtMTcwLDcgKzE3Miw3IEBAIEluc3BlY3Rv
ckRPTUFnZW50KiBJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RvckRPTUFnZW50KCkKIHsKICAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKTsKKyAgICByZXR1cm4gbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50LmdldCgpOwogfQogCiBJbnNwZWN0b3JGcm9udGVu
ZCogSW5qZWN0ZWRTY3JpcHRIb3N0Ojpmcm9udGVuZCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApp
bmRleCA1NmZlYjAxLi43YjJkN2UyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTM2LDEy
ICszNiwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIGdlbmVyaWMgSW5zcGVjdG9yJ3Mg
bWV0aG9kcwogICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0gICAgICAgIFtkb21haW49QmFja2Vu
ZF0gdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc2NyaXB0U291cmNlKTsK
ICAgICAgICAgLy8gSFVHRSBGSVhNRTogd2UgbmVlZCB0byBleHBvc2UgSW5qZWN0ZWRTY3JpcHQg
bWV0aG9kcyBoZXJlLiBPciBkb2N1bWVudCBJbmplY3RlZFNjcmlwdCBjYXBhYmlsaXRpZXMuCi0g
ICAgICAgIFtkb21haW49QmFja2VuZF0gdm9pZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4g
bG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgbWV0aG9kTmFtZSwgaW4gU3RyaW5nIGFy
Z3VtZW50cywgb3V0IFZhbHVlIHJlc3VsdCwgb3V0IGJvb2xlYW4gaXNFeGNlcHRpb24pOworICAg
ICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShpbiBT
dHJpbmcgc2NyaXB0U291cmNlKTsKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZGlz
cGF0Y2hPbkluamVjdGVkU2NyaXB0KGluIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgaW4gU3RyaW5n
IG1ldGhvZE5hbWUsIGluIFN0cmluZyBhcmd1bWVudHMsIG91dCBWYWx1ZSByZXN1bHQsIG91dCBi
b29sZWFuIGlzRXhjZXB0aW9uKTsKICAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgYWRk
U2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChpbiBTdHJpbmcgc2NyaXB0U291cmNlKTsKICAgICAgICAg
W2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQo
KTsKLSAgICAgICAgW2RvbWFpbj1CYWNrZW5kXSB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0R3Jv
dXAoaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgb2JqZWN0R3JvdXApOworICAg
ICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGlu
IGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgaW4gU3RyaW5nIG9iamVjdEdyb3VwKTsKICAgICAgICAg
W2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUob3V0IE9iamVjdCBzdGF0
ZSk7CiAgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFi
bGVkKGluIGJvb2xlYW4gZW5hYmxlLCBvdXQgYm9vbGVhbiBuZXdTdGF0ZSk7CiAgICAgICAgIFtk
b21haW49SW5zcGVjdG9yXSB2b2lkIHJlbG9hZFBhZ2UoKTsKQEAgLTY5LDYgKzY5LDkgQEAgbW9k
dWxlIGNvcmUgewogCiAgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldEV4dHJhSGVh
ZGVycyhpbiBPYmplY3QgaGVhZGVycyk7CiAKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZv
aWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29raWVzU3RyaW5n
KTsKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZGVsZXRlQ29va2llKGluIFN0cmlu
ZyBjb29raWVOYW1lLCBpbiBTdHJpbmcgZG9tYWluKTsKKwogICAgICAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwogICAgICAgICAvLyBDb25zb2xlIEFQSQogICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtODQs
NiArODcsMTAgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBOZXR3b3JrIEFQSQogICAgICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogCisgICAgICAgIFtkb21haW49TmV0d29ya10gdm9pZCBjYWNoZWRS
ZXNvdXJjZXMob3V0IE9iamVjdCByZXNvdXJjZXMpOworICAgICAgICBbZG9tYWluPU5ldHdvcmtd
IHZvaWQgcmVzb3VyY2VDb250ZW50KGluIHVuc2lnbmVkIGxvbmcgZnJhbWVJZCwgaW4gU3RyaW5n
IHVybCwgaW4gYm9vbGVhbiBiYXNlNjRFbmNvZGUsIG91dCBTdHJpbmcgY29udGVudCk7CisgICAg
ICAgIFtub3RpZnksIGRvbWFpbj1OZXR3b3JrXSB2b2lkIGZyYW1lRGV0YWNoZWRGcm9tUGFyZW50
KG91dCB1bnNpZ25lZCBsb25nIGZyYW1lSWQpOworCiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1O
ZXR3b3JrXSB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChvdXQgbG9uZyBpZGVudGlm
aWVyLCBvdXQgU3RyaW5nIHVybCwgb3V0IE9iamVjdCBsb2FkZXIsIG91dCBWYWx1ZSBjYWxsU3Rh
Y2spOwogICAgICAgICBbbm90aWZ5LCBkb21haW49TmV0d29ya10gdm9pZCB3aWxsU2VuZFJlcXVl
c3Qob3V0IGxvbmcgaWRlbnRpZmllciwgb3V0IGRvdWJsZSB0aW1lLCBvdXQgT2JqZWN0IHJlcXVl
c3QsIG91dCBPYmplY3QgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgIFtub3RpZnksIGRvbWFp
bj1OZXR3b3JrXSB2b2lkIG1hcmtSZXNvdXJjZUFzQ2FjaGVkKG91dCBsb25nIGlkZW50aWZpZXIp
OwpAQCAtOTksMTggKzEwNiwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3RpZnksIGRv
bWFpbj1OZXR3b3JrXSB2b2lkIGRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShv
dXQgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBPYmplY3Qg
cmVzcG9uc2UpOwogICAgICAgICBbbm90aWZ5LCBkb21haW49TmV0d29ya10gdm9pZCBkaWRDbG9z
ZVdlYlNvY2tldChvdXQgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUp
OwogCisjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorCiAg
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgICAgIC8vIFJlc291cmNlcyBBUEkKKyAgICAgICAg
Ly8gRGF0YWJhc2UgQVBJCiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICAgICAgW2RvbWFp
bj1SZXNvdXJjZXNdIHZvaWQgY2FjaGVkUmVzb3VyY2VzKG91dCBPYmplY3QgcmVzb3VyY2VzKTsK
LSAgICAgICAgW2RvbWFpbj1SZXNvdXJjZXNdIHZvaWQgcmVzb3VyY2VDb250ZW50KGluIHVuc2ln
bmVkIGxvbmcgZnJhbWVJZCwgaW4gU3RyaW5nIHVybCwgaW4gYm9vbGVhbiBiYXNlNjRFbmNvZGUs
IG91dCBTdHJpbmcgY29udGVudCk7Ci0gICAgICAgIFtub3RpZnksIGRvbWFpbj1SZXNvdXJjZXNd
IHZvaWQgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQob3V0IHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IEludHJvZHVjZSBuZXcgU3RvcmFnZURvbWFpbi4KLSAgICAg
ICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywg
b3V0IFN0cmluZyBjb29raWVzU3RyaW5nKTsKLSAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZv
aWQgZGVsZXRlQ29va2llKGluIFN0cmluZyBjb29raWVOYW1lLCBpbiBTdHJpbmcgZG9tYWluKTsK
LSNpZiBkZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCiAgICAgICAg
IFtub3RpZnksIGRvbWFpbj1EYXRhYmFzZV0gdm9pZCBhZGREYXRhYmFzZShvdXQgT2JqZWN0IGRh
dGFiYXNlKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURhdGFiYXNlXSB2b2lkIHNlbGVjdERh
dGFiYXNlKG91dCBpbnQgZGF0YWJhc2VJZCk7CiAgICAgICAgIFtkb21haW49RGF0YWJhc2VdIHZv
aWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGluIGxvbmcgZGF0YWJhc2VJZCwgb3V0IEFycmF5IHRh
YmxlTmFtZXMpOwpAQCAtMTE4LDcgKzExOSwxMyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtu
b3RpZnksIGRvbWFpbj1EYXRhYmFzZV0gdm9pZCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChvdXQg
bG9uZyB0cmFuc2FjdGlvbklkLCBvdXQgVmFsdWUgY29sdW1uTmFtZXMsIG91dCBWYWx1ZSB2YWx1
ZXMpOwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGF0YWJhc2VdIHZvaWQgc3FsVHJhbnNhY3Rp
b25GYWlsZWQob3V0IGxvbmcgdHJhbnNhY3Rpb25JZCwgb3V0IFZhbHVlIHNxbEVycm9yKTsKICNl
bmRpZgorCiAjaWYgZGVmaW5lZChFTkFCTEVfRE9NX1NUT1JBR0UpICYmIEVOQUJMRV9ET01fU1RP
UkFHRQorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIERPTSBTdG9yYWdlIEFQ
SQorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiAgICAgICAgIFtkb21haW49RE9NU3RvcmFnZV0g
dm9pZCBnZXRET01TdG9yYWdlRW50cmllcyhpbiBsb25nIHN0b3JhZ2VJZCwgb3V0IEFycmF5IGVu
dHJpZXMpOwogICAgICAgICBbZG9tYWluPURPTVN0b3JhZ2VdIHZvaWQgc2V0RE9NU3RvcmFnZUl0
ZW0oaW4gbG9uZyBzdG9yYWdlSWQsIGluIFN0cmluZyBrZXksIGluIFN0cmluZyB2YWx1ZSwgb3V0
IGJvb2xlYW4gc3VjY2Vzcyk7CiAgICAgICAgIFtkb21haW49RE9NU3RvcmFnZV0gdm9pZCByZW1v
dmVET01TdG9yYWdlSXRlbShpbiBsb25nIHN0b3JhZ2VJZCwgaW4gU3RyaW5nIGtleSwgb3V0IGJv
b2xlYW4gc3VjY2Vzcyk7CkBAIC0xMjYsMTIgKzEzMywyNCBAQCBtb2R1bGUgY29yZSB7CiAgICAg
ICAgIFtub3RpZnksIGRvbWFpbj1ET01TdG9yYWdlXSB2b2lkIHVwZGF0ZURPTVN0b3JhZ2Uob3V0
IGludCBzdG9yYWdlSWQpOwogICAgICAgICBbbm90aWZ5LCBkb21haW49RE9NU3RvcmFnZV0gdm9p
ZCBzZWxlY3RET01TdG9yYWdlKG91dCBpbnQgc3RvcmFnZUlkKTsKICNlbmRpZgorCiAjaWYgZGVm
aW5lZChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEVfT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gQXBw
Q2FjaGUgQVBJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKICAgICAgICAgW2RvbWFpbj1BcHBs
aWNhdGlvbkNhY2hlXSB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVzKG91dCBWYWx1ZSBhcHBsaWNh
dGlvbkNhY2hlcyk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1BcHBsaWNhdGlvbkNhY2hlXSB2
b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMob3V0IGludCBzdGF0dXMpOwogICAgICAg
ICBbbm90aWZ5LCBkb21haW49QXBwbGljYXRpb25DYWNoZV0gdm9pZCB1cGRhdGVOZXR3b3JrU3Rh
dGUob3V0IGJvb2xlYW4gaXNOb3dPbmxpbmUpOwogI2VuZGlmCisKICNpZiBkZWZpbmVkKEVOQUJM
RV9GSUxFX1NZU1RFTSkgJiYgRU5BQkxFX0ZJTEVfU1lTVEVNCisKKyAgICAgICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKyAgICAgICAgLy8gRmlsZXN5c3RlbSBBUEkKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KwogICAgICAgICBbZG9tYWluPUZpbGVTeXN0ZW1dIHZvaWQgZ2V0RmlsZVN5c3RlbVBhdGhBc3lu
YyhpbiB1bnNpZ25lZCBpbnQgdHlwZSwgaW4gU3RyaW5nIG9yaWdpbik7CiAgICAgICAgIFtkb21h
aW49RmlsZVN5c3RlbV0gdm9pZCByZXZlYWxGb2xkZXJJbk9TKGluIFN0cmluZyBwYXRoKTsKIApA
QCAtMjAzLDggKzIyMiw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgLy8gRGVidWdnZXIgQVBJ
CiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICAgICAgW2RvbWFpbj1CYWNrZW5kXSB2b2lk
IGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKLSAgICAgICAgW2RvbWFpbj1JbnNw
ZWN0b3JdIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsgLy8gRklYTUU6
IHNob3VsZCBiZSBvbiB0aGUgc2FtZSBkb21haW4gYXMgZW5hYmxlRGVidWdnZXIuCisgICAgICAg
IFtkb21haW49SW5zcGVjdG9yXSB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGluIGJv
b2xlYW4gYWx3YXlzKTsKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgZGlzYWJsZURl
YnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVn
Z2VyXSB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogICAgICAgICBbbm90aWZ5LCBkb21haW49
RGVidWdnZXJdIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxlZCgpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjRjMGU3
Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29tPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRhdGFiYXNlLmgi
Ci0jZW5kaWYKLQotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9m
aWxlci5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUluc3BlY3RvckJhY2tlbmQ6Oklu
c3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikK
LSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQotewotfQot
Ci1JbnNwZWN0b3JCYWNrZW5kOjp+SW5zcGVjdG9yQmFja2VuZCgpCi17Ci19Ci0KLQotI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJs
ZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQotewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRl
bmQoYWx3YXlzKTsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnNldEluamVjdGVkU2NyaXB0U291
cmNlKHNvdXJjZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1l
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0
LCBib29sKiBoYWRFeGNlcHRpb24pCi17Ci0gICAgaWYgKCFmcm9udGVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogZXhwbGljaXRseSBwYXNzIGluamVjdGVkU2NyaXB0SWQg
YWxvbmcgd2l0aCBub2RlIGlkIHRvIHRoZSBmcm9udGVuZC4KLSAgICBib29sIGluamVjdGVkU2Ny
aXB0SWRJc05vZGVJZCA9IGluamVjdGVkU2NyaXB0SWQgPD0gMDsKLQotICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0OwotICAgIGlmIChpbmplY3RlZFNjcmlwdElkSXNOb2RlSWQpCi0g
ICAgICAgIGluamVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNj
cmlwdEZvck5vZGVJZCgtaW5qZWN0ZWRTY3JpcHRJZCk7Ci0gICAgZWxzZQotICAgICAgICBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkt
PmluamVjdGVkU2NyaXB0Rm9ySWQoaW5qZWN0ZWRTY3JpcHRJZCk7Ci0KLSAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbmplY3RlZFNj
cmlwdC5kaXNwYXRjaChtZXRob2ROYW1lLCBhcmd1bWVudHMsIHJlc3VsdCwgaGFkRXhjZXB0aW9u
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3Vw
KGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKLXsKLSAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5yZWxlYXNlV3Jh
cHBlck9iamVjdEdyb3VwKGluamVjdGVkU2NyaXB0SWQsIG9iamVjdEdyb3VwKTsKLX0KLQotI2lm
IEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0RGF0YWJhc2VUYWJs
ZU5hbWVzKGxvbmcgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmFtZXMpCi17
Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFz
ZUZvcklkKGRhdGFiYXNlSWQpOwotICAgIGlmIChkYXRhYmFzZSkgewotICAgICAgICBWZWN0b3I8
U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRhYmxlTmFtZXMoKTsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGFibGVOYW1lcy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgICgqbmFtZXMpLT5wdXNoU3RyaW5n
KHRhYmxlTmFtZXNbaV0pOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpleGVj
dXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2Vz
cywgbG9uZyogdHJhbnNhY3Rpb25JZCkKLXsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7Ci0gICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXItPm1fc3RvcmFnZUFnZW50IHx8ICFkYXRhYmFzZSkgewotICAg
ICAgICAqc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKnRy
YW5zYWN0aW9uSWQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fc3RvcmFnZUFnZW50LT5leGVj
dXRlU1FMKGRhdGFiYXNlLCBxdWVyeSk7Ci0gICAgKnN1Y2Nlc3MgPSB0cnVlOwotfQotCi0jZW5k
aWYKLQotSW5zcGVjdG9yRnJvbnRlbmQqIEluc3BlY3RvckJhY2tlbmQ6OmZyb250ZW5kKCkKLXsK
LSAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLmdldCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZmNlYzk2Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9y
QmFja2VuZF9oCi0jZGVmaW5lIEluc3BlY3RvckJhY2tlbmRfaAotCi0jaW5jbHVkZSAiQ29uc29s
ZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ7Ci1jbGFzcyBJ
bnNwZWN0b3JET01BZ2VudDsKLWNsYXNzIEluc3BlY3RvckZyb250ZW5kOwotCi1jbGFzcyBJbnNw
ZWN0b3JCYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZD4KLXsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBjcmVhdGUoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFja2VuZChpbnNwZWN0b3JDb250cm9sbGVyKSk7
Ci0gICAgfQotCi0gICAgfkluc3BlY3RvckJhY2tlbmQoKTsKLQotICAgIEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xs
ZXI7IH0KLSAgICBJbnNwZWN0b3JET01BZ2VudCogaW5zcGVjdG9yRE9NQWdlbnQoKSB7IHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCk7IH0KLSNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQotICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCog
aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKTsgfQotI2VuZGlmCi0gICAgdm9pZCBkaXNj
b25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsgfQotCi0jaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29s
IGFsd2F5cyk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29u
c3QgU3RyaW5nJiBzb3VyY2UpOwotICAgIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxv
bmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJp
bmcmIGFyZ3VtZW50cywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0LCBib29sKiBoYWRF
eGNlcHRpb24pOwotCi0gICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3RvbSBpbXBs
ZW1lbnRhdGlvbnMuCi0gICAgdm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGxvbmcgaW5q
ZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7Ci0KLSNpZiBFTkFCTEUo
REFUQUJBU0UpCi0gICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBkYXRhYmFzZUlk
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1lcyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMKGxv
bmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2VzcywgbG9uZyog
dHJhbnNhY3Rpb25JZCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JCYWNrZW5k
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpOwotICAgIEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNw
ZWN0b3JDb250cm9sbGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yQmFja2VuZF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcAppbmRleCA4YjA4NTk4Li42YzA5NTA3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTcsMjEgKzU3LDE5IEBACiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcldv
cmtlclJlc291cmNlLmgiCkBAIC0xMDYsNiArMTA0LDEzIEBACiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWEuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKQEAgLTExNiwxMSArMTIxLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIlN0
b3JhZ2UuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotI2VuZGlmCi0KIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0NCw3ICsxNDQsNiBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQog
ICAgICwgbV9wcmV2aW91c01lc3NhZ2UoMCkKICAgICAsIG1fc2V0dGluZ3NMb2FkZWQoZmFsc2Up
Ci0gICAgLCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIodGhpcykpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNj
cmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
QEAgLTE2Nyw3ICsxNjYsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJv
bGxlcigpCiAKICAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCi0gICAgbV9p
bnNwZWN0b3JCYWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogICAgIG1faW5qZWN0ZWRT
Y3JpcHRIb3N0LT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCkBAIC00NzYsNyArNDc0LDEx
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICBtX2Nz
c0FnZW50LT5zZXRET01BZ2VudChtX2RvbUFnZW50LmdldCgpKTsKIAogI2lmIEVOQUJMRShEQVRB
QkFTRSkKLSAgICBtX3N0b3JhZ2VBZ2VudCA9IEluc3BlY3RvclN0b3JhZ2VBZ2VudDo6Y3JlYXRl
KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fZGF0YWJhc2VBZ2VudCA9IEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmNyZWF0ZSgmbV9kYXRhYmFzZVJlc291cmNlcywgbV9mcm9udGVuZC5nZXQoKSk7
CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBtX2RvbVN0b3JhZ2VBZ2Vu
dCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y3JlYXRlKCZtX2RvbVN0b3JhZ2VSZXNvdXJj
ZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwogI2VuZGlmCiAKICAgICBpZiAobV90aW1lbGluZUFnZW50
KQpAQCAtNTkyLDkgKzU5NCwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbGVhc2VG
cm9udGVuZExpZmV0aW1lQWdlbnRzKCkKICAgICBtX2RvbUFnZW50LmNsZWFyKCk7CiAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCi0gICAgaWYgKG1fc3RvcmFnZUFnZW50KQotICAgICAgICBtX3N0b3Jh
Z2VBZ2VudC0+Y2xlYXJGcm9udGVuZCgpOwotICAgIG1fc3RvcmFnZUFnZW50LmNsZWFyKCk7Cisg
ICAgaWYgKG1fZGF0YWJhc2VBZ2VudCkKKyAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5jbGVhckZy
b250ZW5kKCk7CisgICAgbV9kYXRhYmFzZUFnZW50LmNsZWFyKCk7CisjZW5kaWYKKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyAgICBtX2RvbVN0b3JhZ2VBZ2VudC5jbGVhcigpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtMTAzNSwyNyArMTA0
MSw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVdvcmtlcihpbnRwdHJf
dCBpZCkKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFi
YXNlKQotewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9y
IChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpIHsKLSAgICAgICAgICAg
IG1fZnJvbnRlbmQtPnNlbGVjdERhdGFiYXNlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRGF0YWJhc2UqIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKQotewotICAgIERhdGFiYXNlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsK
LSAgICBpZiAoaXQgPT0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7Ci19Ci0KIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCkBAIC0xMTc1LDcxICsxMTYwLDYg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVh
KiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2EKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAg
cmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7CiB9Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQotewotICAgIEFTU0VS
VChzdG9yYWdlKTsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEZyYW1lKiBmcmFtZSA9IHN0b3JhZ2UtPmZyYW1lKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9tV2luZG93KCktPmxvY2Fs
U3RvcmFnZShlYykgPT0gc3RvcmFnZSAmJiAhZWMpOwotICAgIGxvbmcgc3RvcmFnZVJlc291cmNl
SWQgPSAwOwotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VF
bmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1Nh
bWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBzdG9y
YWdlUmVzb3VyY2VJZCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChzdG9yYWdlUmVzb3VyY2VJZCkKLSAgICAgICAgbV9mcm9udGVuZC0+
c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlUmVzb3VyY2VJZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIGVudHJpZXMpCi17Ci0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdl
SWQpOwotICAgIGlmIChzdG9yYWdlUmVzb3VyY2UpIHsKLSAgICAgICAgc3RvcmFnZVJlc291cmNl
LT5zdGFydFJlcG9ydGluZ0NoYW5nZXNUb0Zyb250ZW5kKCk7Ci0gICAgICAgIFN0b3JhZ2UqIGRv
bVN0b3JhZ2UgPSBzdG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2UoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRvbVN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBuYW1lKGRvbVN0b3JhZ2UtPmtleShpKSk7Ci0gICAgICAgICAgICBTdHJpbmcg
dmFsdWUoZG9tU3RvcmFnZS0+Z2V0SXRlbShuYW1lKSk7Ci0gICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGVudHJ5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgZW50cnktPnB1c2hTdHJpbmcobmFtZSk7Ci0gICAgICAgICAgICBlbnRyeS0+cHVzaFN0cmlu
Zyh2YWx1ZSk7Ci0gICAgICAgICAgICAoKmVudHJpZXMpLT5wdXNoQXJyYXkoZW50cnkpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3Jh
Z2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCogc3VjY2VzcykKLXsKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uq
IHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7
Ci0gICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGV4Y2Vw
dGlvbiA9IDA7Ci0gICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+ZG9tU3RvcmFnZSgpLT5zZXRJdGVt
KGtleSwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgICAgICpzdWNjZXNzID0gIWV4Y2VwdGlvbjsK
LSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0
ZW0obG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKQotewot
ICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9N
U3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKLSAgICBpZiAoc3RvcmFnZVJlc291cmNl
KSB7Ci0gICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+ZG9tU3RvcmFnZSgpLT5yZW1vdmVJdGVtKGtl
eSk7Ci0gICAgICAgICpzdWNjZXNzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLUluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291cmNl
Rm9ySWQobG9uZyBzdG9yYWdlSWQpCi17Ci0gICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZmluZChzdG9yYWdlSWQpOwotICAgIGlm
IChpdCA9PSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOwotfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VC
X1NPQ0tFVFMpCkBAIC0xNTA3LDYgKzE0MjcsMzYgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpoYXNYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnQK
IAogI2VuZGlmCiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5qZWN0ZWRTY3JpcHRT
b3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7CisgICAgIGluamVjdGVkU2NyaXB0SG9zdCgp
LT5zZXRJbmplY3RlZFNjcmlwdFNvdXJjZShzb3VyY2UpOworfQorCit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGluamVjdGVkU2NyaXB0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCwgYm9vbCogaGFkRXhjZXB0aW9uKQoreworICAgIGlm
ICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IGV4cGxpY2l0
bHkgcGFzcyBpbmplY3RlZFNjcmlwdElkIGFsb25nIHdpdGggbm9kZSBpZCB0byB0aGUgZnJvbnRl
bmQuCisgICAgYm9vbCBpbmplY3RlZFNjcmlwdElkSXNOb2RlSWQgPSBpbmplY3RlZFNjcmlwdElk
IDw9IDA7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdDsKKyAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHRJZElzTm9kZUlkKQorICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yTm9kZUlkKC1pbmplY3RlZFNjcmlwdElkKTsKKyAgICBlbHNlCisgICAgICAgIGlu
amVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9ySWQo
aW5qZWN0ZWRTY3JpcHRJZCk7CisKKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbmplY3RlZFNjcmlwdC5kaXNwYXRjaChtZXRob2RO
YW1lLCBhcmd1bWVudHMsIHJlc3VsdCwgaGFkRXhjZXB0aW9uKTsKK30KKwordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGxvbmcgaW5qZWN0ZWRTY3Jp
cHRJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK3sKKyAgICBpbmplY3RlZFNjcmlwdEhv
c3QoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpbmplY3RlZFNjcmlwdElkLCBvYmplY3RH
cm91cCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgaWYgKG1f
ZnJvbnRlbmQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZTU3
MGM5OC4uNDgxMzQ0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApA
QCAtNTYsMTIgKzU2LDEzIEBAIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmplY3RlZFNj
cmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3BlY3RvckFycmF5Owot
Y2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JET01BZ2VudDsKK2NsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsKIGNs
YXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOwogY2xhc3MgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwpAQCAtODUsNyArODYsNiBA
QCBjbGFzcyBTY3JpcHRBcmd1bWVudHM7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiBjbGFzcyBT
Y3JpcHRQcm9maWxlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU3RvcmFnZTsKIGNsYXNz
IFN0b3JhZ2VBcmVhOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAg
LTEwMyw5ICsxMDMsNiBAQCBjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZTsKIAogY2xh
c3MgSW5zcGVjdG9yQ29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+
ID4gRGF0YWJhc2VSZXNvdXJjZXNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRy
PEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwot
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgRWxlbWVudHNQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgUHJvZmlsZXNQYW5lbDsKQEAgLTExNCw3ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAgfkluc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKIAotICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQo
KSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogaW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoKSB7IHJldHVybiBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBp
bnNwZWN0b3JDbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAgIEluamVjdGVkU2NyaXB0
SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3Qu
Z2V0KCk7IH0KQEAgLTE4OSwxMCArMTg1LDYgQEAgcHVibGljOgogICAgIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyByZXR1cm4gbV9hcHBs
aWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQotICAgIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCogZmlsZVN5c3RlbUFnZW50KCkgeyBy
ZXR1cm4gbV9maWxlU3lzdGVtQWdlbnQuZ2V0KCk7IH0KLSNlbmRpZiAKLQogICAgIHZvaWQgbWFp
blJlc291cmNlRmlyZWRMb2FkRXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7CiAg
ICAgdm9pZCBtYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChEb2N1bWVudExvYWRlcios
IGNvbnN0IEtVUkwmKTsKIApAQCAtMjA3LDEzICsxOTksMTEgQEAgcHVibGljOgogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICAgICB2b2lkIGRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNl
PiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIHZvaWQg
ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0
b3JhZ2UsIEZyYW1lKiBmcmFtZSk7Ci0gICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2Uq
IHN0b3JhZ2UpOwotICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBzdG9yYWdlSWQs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpOwotICAgIHZvaWQgc2V0RE9NU3RvcmFn
ZUl0ZW0obG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sKiBzdWNjZXNzKTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcg
c3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9vbCogc3VjY2Vzcyk7CiAjZW5kaWYKKwog
I2lmIEVOQUJMRShXRUJfU09DS0VUUykKICAgICB2b2lkIGRpZENyZWF0ZVdlYlNvY2tldCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwm
IGRvY3VtZW50VVJMKTsKICAgICB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVl
c3QmKTsKQEAgLTI1MCwxMiArMjQwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZVByb2Zp
bGVyKGJvb2wgYWx3YXlzID0gZmFsc2UsIGJvb2wgc2tpcFJlY29tcGlsZSA9IGZhbHNlKTsKICAg
ICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlKTsKICAgICBib29sIHBy
b2ZpbGVyRW5hYmxlZCgpIGNvbnN0OwotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2Zp
bGVyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQuZ2V0KCk7IH0KIAogICAg
IHZvaWQgZW5hYmxlRGVidWdnZXIoKTsKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFs
d2F5cyA9IGZhbHNlKTsKICAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJBZ2VudDsgfQotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2Vy
QWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7IH0KICAgICB2b2lk
IHJlc3VtZSgpOwogCiAgICAgdm9pZCBzZXRTdGlja3lCcmVha3BvaW50cyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpOwpAQCAtMjY3LDYgKzI1NSwxMiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJy
ZWFrcG9pbnRVUkwpOwogI2VuZGlmCiAKKyAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlKTsKKyAgICB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudHMsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCwgYm9vbCog
aGFkRXhjZXB0aW9uKTsKKworICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJvbSBjdXN0b20g
aW1wbGVtZW50YXRpb25zLgorICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25n
IGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworCiAgICAgdm9p
ZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5n
JiBzY3JpcHQpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JOb2RlSWQo
bG9uZyBpZCk7CkBAIC0zMDYsOCArMzAwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNlYXJj
aGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CiAKICAgICB2b2lkIHNl
dE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwotICAg
IEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7
IH0KLSAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50
LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0zMTYsMTMgKzMwOCw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHJlc3Rv
cmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50
KTsKICNlbmRpZgotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICB2b2lkIHNlbGVjdERhdGFiYXNl
KERhdGFiYXNlKiBkYXRhYmFzZSk7Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBk
YXRhYmFzZUlkKTsKLSNlbmRpZgotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UqIGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGxvbmcgc3Rv
cmFnZUlkKTsKLSNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mKTsKQEAgLTM0
Miw3ICszMjcsMTUgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1f
ZnJvbnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50OwogICAg
IFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gbV9kYXRhYmFzZUFnZW50OworI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUmVmUHRyPEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudD4gbV9kb21TdG9yYWdlQWdlbnQ7CisjZW5kaWYKKwogICAgIE93blB0cjxJbnNw
ZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3Rv
clN0YXRlPiBtX3N0YXRlOwogCkBAIC0zNjEsMTcgKzM1NCwyMCBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQ7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IGRvdWJsZT4gbV90aW1lczsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+IG1fY291bnRz
OworCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0
cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOwogICAg
IERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fZGF0YWJhc2VSZXNvdXJjZXM7CiAjZW5kaWYKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwogICAgIERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2VuZGlmCisKICAg
ICBTdHJpbmcgbV9zaG93QWZ0ZXJWaXNpYmxlOwogICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdo
dGVkTm9kZTsKICAgICBDb25zb2xlTWVzc2FnZSogbV9wcmV2aW91c01lc3NhZ2U7CiAgICAgYm9v
bCBtX3NldHRpbmdzTG9hZGVkOwotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBtX2luc3Bl
Y3RvckJhY2tlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbmplY3RlZFNjcmlwdEhvc3Q+
IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
MjQxYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikgJiYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVl
cy5oIgorI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKQoreworfQorCit2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBz
dG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpCit7CisgICAgSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRET01TdG9yYWdlUmVz
b3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChzdG9yYWdlUmVzb3VyY2UpIHsKKyAgICAg
ICAgc3RvcmFnZVJlc291cmNlLT5zdGFydFJlcG9ydGluZ0NoYW5nZXNUb0Zyb250ZW5kKCk7Cisg
ICAgICAgIFN0b3JhZ2UqIGRvbVN0b3JhZ2UgPSBzdG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2Uo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRvbVN0b3JhZ2UtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lKGRvbVN0b3JhZ2UtPmtleShpKSk7Cisg
ICAgICAgICAgICBTdHJpbmcgdmFsdWUoZG9tU3RvcmFnZS0+Z2V0SXRlbShuYW1lKSk7CisgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVudHJ5ID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgZW50cnktPnB1c2hTdHJpbmcobmFtZSk7CisgICAgICAgICAg
ICBlbnRyeS0+cHVzaFN0cmluZyh2YWx1ZSk7CisgICAgICAgICAgICAoKmVudHJpZXMpLT5wdXNo
QXJyYXkoZW50cnkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKQoreworICAgIEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySWQoc3RvcmFnZUlkKTsKKyAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CisgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgc3RvcmFnZVJlc291cmNl
LT5kb21TdG9yYWdlKCktPnNldEl0ZW0oa2V5LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAg
KnN1Y2Nlc3MgPSAhZXhjZXB0aW9uOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSwgYm9vbCogc3VjY2VzcykKK3sKKyAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJ
ZCk7CisgICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgeworICAgICAgICBzdG9yYWdlUmVzb3VyY2Ut
PmRvbVN0b3JhZ2UoKS0+cmVtb3ZlSXRlbShrZXkpOworICAgICAgICAqc3VjY2VzcyA9IHRydWU7
CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2VsZWN0RE9NU3Rv
cmFnZShTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAo
IW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IHN0b3Jh
Z2UtPmZyYW1lKCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBpc0xvY2Fs
U3RvcmFnZSA9IChmcmFtZS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZShlYykgPT0gc3RvcmFn
ZSAmJiAhZWMpOworICAgIGxvbmcgc3RvcmFnZVJlc291cmNlSWQgPSAwOworICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNv
dXJjZXMtPmVuZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMtPmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7
ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1l
LCBpc0xvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZUlkID0gaXQt
PmZpcnN0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0
b3JhZ2VSZXNvdXJjZUlkKQorICAgICAgICBtX2Zyb250ZW5kLT5zZWxlY3RET01TdG9yYWdlKHN0
b3JhZ2VSZXNvdXJjZUlkKTsKK30KKworSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQoRE9NU3RvcmFnZVJlc291cmNlc01hcCogZG9tU3RvcmFnZVJlc291
cmNlcywgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIDogbV9kb21TdG9yYWdlUmVz
b3VyY2VzKGRvbVN0b3JhZ2VSZXNvdXJjZXMpCisgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQor
eworfQorCitJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQobG9uZyBzdG9yYWdlSWQpCit7CisgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJj
ZXMtPmZpbmQoc3RvcmFnZUlkKTsKKyAgICBpZiAoaXQgPT0gbV9kb21TdG9yYWdlUmVzb3VyY2Vz
LT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpICYmIEVOQUJMRShET01fU1RPUkUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmQ3
Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnRfaAorI2RlZmluZSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnRfaAorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgorI2luY2x1ZGUgInd0
Zi9QYXNzUmVmUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9y
QXJyYXk7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlOworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBTdG9yYWdlOwor
CitjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJj
ZXNNYXA7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+
IGNyZWF0ZShET01TdG9yYWdlUmVzb3VyY2VzTWFwKiBkb21TdG9yYWdlUmVzb3VyY2VzLCBJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChkb21TdG9yYWdlUmVzb3VyY2VzLCBmcm9udGVu
ZCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwor
CisgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KKyAgICB2b2lkIGdldERPTVN0b3Jh
Z2VFbnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBlbnRyaWVz
KTsKKyAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCBy
ZW1vdmVET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGJv
b2wqIHN1Y2Nlc3MpOworCisgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4K
KyAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7CisKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQoKSB7IHJldHVybiBtX2Zyb250ZW5kOyB9CisKK3ByaXZh
dGU6CisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAq
LCBJbnNwZWN0b3JGcm9udGVuZCopOworCisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
KiBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChsb25nIHN0b3JhZ2VJZCk7CisKKyAgICBET01T
dG9yYWdlUmVzb3VyY2VzTWFwKiBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CisgICAgSW5zcGVjdG9y
RnJvbnRlbmQqIG1fZnJvbnRlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JET01TdG9yYWdlQWdlbnRfaCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODhkYjNhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2su
aCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FM
UmVzdWx0U2V0Um93TGlzdC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiVm9pZENhbGxi
YWNrLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworbG9uZyBsYXN0VHJhbnNhY3Rpb25JZCA9IDA7CisKK3ZvaWQgcmVw
b3J0VHJhbnNhY3Rpb25GYWlsZWQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogYWdlbnQsIGxvbmcg
dHJhbnNhY3Rpb25JZCwgU1FMRXJyb3IqIGVycm9yKQoreworICAgIGlmICghYWdlbnQtPmZyb250
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJv
ck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3JPYmplY3QtPnNl
dFN0cmluZygibWVzc2FnZSIsIGVycm9yLT5tZXNzYWdlKCkpOworICAgIGVycm9yT2JqZWN0LT5z
ZXROdW1iZXIoImNvZGUiLCBlcnJvci0+Y29kZSgpKTsKKyAgICBhZ2VudC0+ZnJvbnRlbmQoKS0+
c3FsVHJhbnNhY3Rpb25GYWlsZWQodHJhbnNhY3Rpb25JZCwgZXJyb3JPYmplY3QpOworfQorCitj
bGFzcyBTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShs
b25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gYWdl
bnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0YXRlbWVudENhbGxiYWNr
KHRyYW5zYWN0aW9uSWQsIGFnZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U3RhdGVtZW50
Q2FsbGJhY2soKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2Fj
dGlvbiosIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Fn
ZW50LT5mcm9udGVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgU1FM
UmVzdWx0U2V0Um93TGlzdCogcm93TGlzdCA9IHJlc3VsdFNldC0+cm93cygpOworCisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2x1bW5zID0gcm93TGlzdC0+
Y29sdW1uTmFtZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5zLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgY29sdW1uTmFtZXMtPnB1c2hTdHJpbmcoY29sdW1uc1tp
XSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGRhdGEgPSBy
b3dMaXN0LT52YWx1ZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTUUxWYWx1ZSYgdmFsdWUgPSByb3dMaXN0
LT52YWx1ZXMoKVtpXTsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+cHVzaFN0cmlu
Zyh2YWx1ZS5zdHJpbmcoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6
Ok51bWJlclZhbHVlOiB2YWx1ZXMtPnB1c2hOdW1iZXIodmFsdWUubnVtYmVyKCkpOyBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6IHZhbHVlcy0+cHVzaFZh
bHVlKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBtX2FnZW50LT5mcm9udGVuZCgpLT5zcWxUcmFuc2FjdGlvblN1Y2NlZWRl
ZChtX3RyYW5zYWN0aW9uSWQsIGNvbHVtbk5hbWVzLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RhdGVtZW50Q2FsbGJhY2sobG9uZyB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IGFnZW50KQorICAg
ICAgICA6IG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1fYWdlbnQo
YWdlbnQpIHsgfQorICAgIGxvbmcgbV90cmFuc2FjdGlvbklkOworICAgIFJlZlB0cjxJbnNwZWN0
b3JEYXRhYmFzZUFnZW50PiBtX2FnZW50OworfTsKKworY2xhc3MgU3RhdGVtZW50RXJyb3JDYWxs
YmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBjcmVhdGUobG9uZyB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IGFnZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKHRy
YW5zYWN0aW9uSWQsIGFnZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U3RhdGVtZW50RXJy
b3JDYWxsYmFjaygpIHsgfQorCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5z
YWN0aW9uKiwgU1FMRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgcmVwb3J0VHJhbnNhY3Rp
b25GYWlsZWQobV9hZ2VudC5nZXQoKSwgbV90cmFuc2FjdGlvbklkLCBlcnJvcik7CisgICAgICAg
IHJldHVybiB0cnVlOyAgCisgICAgfQorCitwcml2YXRlOgorICAgIFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2sobG9uZyB0cmFuc2FjdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4g
YWdlbnQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAg
ICwgbV9hZ2VudChhZ2VudCkgeyB9CisgICAgbG9uZyBtX3RyYW5zYWN0aW9uSWQ7CisgICAgUmVm
UHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IG1fYWdlbnQ7Cit9OworCitjbGFzcyBUcmFuc2Fj
dGlvbkNhbGxiYWNrIDogcHVibGljIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHNxbFN0YXRlbWVudCwgbG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ+IGFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUcmFuc2FjdGlvbkNhbGxiYWNrKHNxbFN0YXRlbWVudCwgdHJhbnNhY3Rpb25JZCwgYWdl
bnQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbkNhbGxiYWNrKCkgeyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FnZW50LT5mcm9udGVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxWYWx1ZXM7CisgICAg
ICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2soU3RhdGVtZW50Q2FsbGJh
Y2s6OmNyZWF0ZShtX3RyYW5zYWN0aW9uSWQsIG1fYWdlbnQpKTsKKyAgICAgICAgUmVmUHRyPFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2soU3RhdGVtZW50RXJyb3JDYWxs
YmFjazo6Y3JlYXRlKG1fdHJhbnNhY3Rpb25JZCwgbV9hZ2VudCkpOworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmV4ZWN1dGVTUUwobV9zcWxTdGF0
ZW1lbnQsIHNxbFZhbHVlcywgY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVh
c2UoKSwgZWMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Citwcml2YXRlOgorICAgIFRy
YW5zYWN0aW9uQ2FsbGJhY2soY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGxvbmcgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBhZ2VudCkKKyAgICAg
ICAgOiBtX3NxbFN0YXRlbWVudChzcWxTdGF0ZW1lbnQpCisgICAgICAgICwgbV90cmFuc2FjdGlv
bklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAgICwgbV9hZ2VudChhZ2VudCkgeyB9CisgICAgU3Ry
aW5nIG1fc3FsU3RhdGVtZW50OworICAgIGxvbmcgbV90cmFuc2FjdGlvbklkOworICAgIFJlZlB0
cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBtX2FnZW50OworfTsKKworY2xhc3MgVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrIDogcHVibGljIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBj
cmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ+IGFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5UcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVFdmVudChTUUxFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICByZXBvcnRUcmFuc2Fj
dGlvbkZhaWxlZChtX2FnZW50LmdldCgpLCBtX3RyYW5zYWN0aW9uSWQsIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorcHJpdmF0ZToKKyAgICBUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2sobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ+IGFnZW50KQorICAgICAgICA6IG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAg
ICAgICAsIG1fYWdlbnQoYWdlbnQpIHsgfQorICAgIGxvbmcgbV90cmFuc2FjdGlvbklkOworICAg
IFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBtX2FnZW50OworfTsKKworY2xhc3MgVHJh
bnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sgOiBwdWJsaWMgVm9pZENhbGxiYWNrIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaz4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25TdWNjZXNz
Q2FsbGJhY2soKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25TdWNjZXNzQ2Fs
bGJhY2soKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudCgpIHsgfQorCitwcml2
YXRlOgorICAgIFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZQorCitJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp+SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJs
ZU5hbWVzKGxvbmcgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmFtZXMpCit7
CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAg
ICBpZiAoZGF0YWJhc2UpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcyA9IGRh
dGFiYXNlLT50YWJsZU5hbWVzKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRhYmxlTmFt
ZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAoKm5hbWVzKS0+cHVzaFN0cmluZyh0YWJsZU5hbWVzW2ldKTsKKyAgICB9
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChsb25nIGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5zYWN0
aW9uSWQpCit7CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0YWJhc2VGb3JJZChkYXRhYmFz
ZUlkKTsKKyAgICBpZiAoIWRhdGFiYXNlKSB7CisgICAgICAgICpzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqdHJhbnNhY3Rpb25JZCA9ICsrbGFzdFRyYW5z
YWN0aW9uSWQ7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKFRy
YW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShxdWVyeSwgKnRyYW5zYWN0aW9uSWQsIHRoaXMpKTsK
KyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKCp0cmFuc2FjdGlvbklkLCB0aGlzKSk7Cisg
ICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vz
c0NhbGxiYWNrOjpjcmVhdGUoKSk7CisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNr
LnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxl
YXNlKCkpOworICAgICpzdWNjZXNzID0gdHJ1ZTsKK30KKworRGF0YWJhc2UqIEluc3BlY3RvckRh
dGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKQoreworICAgIERhdGFi
YXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMtPmZpbmQo
ZGF0YWJhc2VJZCk7CisgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VSZXNvdXJjZXMtPmVuZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZC0+ZGF0YWJhc2UoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpzZWxlY3REYXRhYmFzZShEYXRhYmFzZSog
ZGF0YWJhc2UpCit7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNv
dXJjZXMtPmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VSZXNvdXJjZXMtPmVuZCgpOyArK2l0KSB7
CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKSB7CisgICAg
ICAgICAgICBtX2Zyb250ZW5kLT5zZWxlY3REYXRhYmFzZShpdC0+Zmlyc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6Y2xlYXJGcm9udGVuZCgpCit7CisgICAgbV9mcm9udGVuZCA9IDA7Cit9CisKK0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQoRGF0YWJhc2VSZXNvdXJj
ZXNNYXAqIGRhdGFiYXNlUmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCisg
ICAgOiBtX2RhdGFiYXNlUmVzb3VyY2VzKGRhdGFiYXNlUmVzb3VyY2VzKQorICAgICwgbV9mcm9u
dGVuZChmcm9udGVuZCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM3M2QzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudF9oCisjZGVmaW5lIEluc3BlY3RvckRhdGFiYXNlQWdlbnRfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgorI2luY2x1
ZGUgInd0Zi9QYXNzUmVmUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0
YWJhc2U7CitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
CitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOworY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmQ7CisKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50PiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNN
YXA7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBjcmVh
dGUoRGF0YWJhc2VSZXNvdXJjZXNNYXAqIGRhdGFiYXNlUmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQoZGF0YWJhc2VSZXNvdXJjZXMsIGZyb250ZW5kKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpOworCisgICAgLy8gQ2FsbGVk
IGZyb20gdGhlIGZyb250LWVuZC4KKyAgICB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhsb25n
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVzKTsKKyAgICB2b2lkIGV4
ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sKiBzdWNj
ZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKTsKKworICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmpl
Y3RlZCBzY3JpcHQuCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlk
KTsKKyAgICB2b2lkIHNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSk7CisKKyAgICBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQoKSB7IHJldHVybiBtX2Zyb250ZW5kOyB9CisgICAg
dm9pZCBjbGVhckZyb250ZW5kKCk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudChEYXRhYmFzZVJlc291cmNlc01hcCosIEluc3BlY3RvckZyb250ZW5kKik7CisKKyAgICBE
YXRhYmFzZVJlc291cmNlc01hcCogbV9kYXRhYmFzZVJlc291cmNlczsKKyAgICBJbnNwZWN0b3JG
cm9udGVuZCogbV9mcm9udGVuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckRhdGFiYXNlQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZjU2NWZhLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKLSNpbmNsdWRlICJTUUxFcnJv
ci5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFJlc3VsdFNldFJvd0xpc3QuaCIK
LSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLSNpbmNs
dWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWxv
bmcgbGFzdFRyYW5zYWN0aW9uSWQgPSAwOwotCi12b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVk
KEluc3BlY3RvclN0b3JhZ2VBZ2VudCogYWdlbnQsIGxvbmcgdHJhbnNhY3Rpb25JZCwgU1FMRXJy
b3IqIGVycm9yKQotewotICAgIGlmICghYWdlbnQtPmZyb250ZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvck9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgZXJyb3JPYmplY3QtPnNldFN0cmluZygibWVzc2FnZSIsIGVy
cm9yLT5tZXNzYWdlKCkpOwotICAgIGVycm9yT2JqZWN0LT5zZXROdW1iZXIoImNvZGUiLCBlcnJv
ci0+Y29kZSgpKTsKLSAgICBhZ2VudC0+ZnJvbnRlbmQoKS0+c3FsVHJhbnNhY3Rpb25GYWlsZWQo
dHJhbnNhY3Rpb25JZCwgZXJyb3JPYmplY3QpOwotfQotCi1jbGFzcyBTdGF0ZW1lbnRDYWxsYmFj
ayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShsb25nIHRyYW5zYWN0aW9uSWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3RhdGVtZW50Q2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5TdGF0ZW1lbnRDYWxsYmFjaygpIHsgfQotCi0gICAg
dmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiBy
ZXN1bHRTZXQpCi0gICAgewotICAgICAgICBpZiAoIW1fYWdlbnQtPmZyb250ZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dM
aXN0ID0gcmVzdWx0U2V0LT5yb3dzKCk7Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBjb2x1bW5OYW1lcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGNvbHVtbnMgPSByb3dMaXN0LT5jb2x1bW5OYW1lcygpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBjb2x1bW5OYW1lcy0+cHVzaFN0cmluZyhjb2x1bW5zW2ldKTsKLQotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAg
ICAgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgZGF0YSA9IHJvd0xpc3QtPnZhbHVlcygpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSA9IHJvd0xpc3QtPnZhbHVlcygpW2ldOwotICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNRTFZh
bHVlOjpTdHJpbmdWYWx1ZTogdmFsdWVzLT5wdXNoU3RyaW5nKHZhbHVlLnN0cmluZygpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6IHZhbHVlcy0+
cHVzaE51bWJlcih2YWx1ZS5udW1iZXIoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
U1FMVmFsdWU6Ok51bGxWYWx1ZTogdmFsdWVzLT5wdXNoVmFsdWUoSW5zcGVjdG9yVmFsdWU6Om51
bGwoKSk7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fYWdlbnQt
PmZyb250ZW5kKCktPnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKG1fdHJhbnNhY3Rpb25JZCwgY29s
dW1uTmFtZXMsIHZhbHVlcyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBTdGF0ZW1lbnRDYWxsYmFjayhsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uSWQo
dHJhbnNhY3Rpb25JZCkKLSAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KLSAgICBsb25nIG1f
dHJhbnNhY3Rpb25JZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2FnZW50
OwotfTsKLQotY2xhc3MgU3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0b3JhZ2VBZ2VudD4gYWdlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0YXRlbWVudEVycm9yQ2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIH5TdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciogZXJyb3Ip
Ci0gICAgewotICAgICAgICByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChtX2FnZW50LmdldCgpLCBt
X3RyYW5zYWN0aW9uSWQsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuIHRydWU7ICAKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhsb25nIHRyYW5zYWN0aW9uSWQs
IFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGFnZW50KQotICAgICAgICA6IG1fdHJhbnNh
Y3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICAgICAsIG1fYWdlbnQoYWdlbnQpIHsgfQotICAg
IGxvbmcgbV90cmFuc2FjdGlvbklkOwotICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+
IG1fYWdlbnQ7Ci19OwotCi1jbGFzcyBUcmFuc2FjdGlvbkNhbGxiYWNrIDogcHVibGljIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5z
YWN0aW9uQ2FsbGJhY2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgbG9uZyB0
cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gYWdlbnQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uQ2FsbGJhY2soc3Fs
U3RhdGVtZW50LCB0cmFuc2FjdGlvbklkLCBhZ2VudCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
flRyYW5zYWN0aW9uQ2FsbGJhY2soKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoIW1fYWdl
bnQtPmZyb250ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBWZWN0
b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxi
YWNrPiBjYWxsYmFjayhTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG1fdHJhbnNhY3Rpb25JZCwg
bV9hZ2VudCkpOwotICAgICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjayhTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVhdGUobV90cmFuc2FjdGlvbklk
LCBtX2FnZW50KSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICB0cmFu
c2FjdGlvbi0+ZXhlY3V0ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBjYWxsYmFjay5y
ZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBlYyk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLXByaXZhdGU6Ci0gICAgVHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgbG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
clN0b3JhZ2VBZ2VudD4gYWdlbnQpCi0gICAgICAgIDogbV9zcWxTdGF0ZW1lbnQoc3FsU3RhdGVt
ZW50KQotICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICAgICAs
IG1fYWdlbnQoYWdlbnQpIHsgfQotICAgIFN0cmluZyBtX3NxbFN0YXRlbWVudDsKLSAgICBsb25n
IG1fdHJhbnNhY3Rpb25JZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2Fn
ZW50OwotfTsKLQotY2xhc3MgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gYWdlbnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayh0cmFuc2FjdGlvbklkLCBh
Z2VudCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygp
IHsgfQotCi0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTEVycm9yKiBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fYWdlbnQuZ2V0KCksIG1fdHJh
bnNhY3Rpb25JZCwgZXJyb3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci1wcml2YXRl
OgotICAgIFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkKLSAgICAgICAgOiBtX3RyYW5zYWN0
aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KLSAgICBs
b25nIG1fdHJhbnNhY3Rpb25JZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBt
X2FnZW50OwotfTsKLQotY2xhc3MgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sgOiBwdWJsaWMg
Vm9pZENhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlv
blN1Y2Nlc3NDYWxsYmFjaz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB+VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudCgpIHsgfQotCi1wcml2YXRlOgotICAgIFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxi
YWNrKCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1JbnNwZWN0b3JTdG9yYWdlQWdlbnQ6
Okluc3BlY3RvclN0b3JhZ2VBZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAg
OiBtX2Zyb250ZW5kKGZyb250ZW5kKQotewotfQotCi1JbnNwZWN0b3JTdG9yYWdlQWdlbnQ6On5J
bnNwZWN0b3JTdG9yYWdlQWdlbnQoKQotewotfQotCi1sb25nIEluc3BlY3RvclN0b3JhZ2VBZ2Vu
dDo6ZXhlY3V0ZVNRTChEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcXVlcnkpCi17
Ci0gICAgbG9uZyB0cmFuc2FjdGlvbklkID0gKytsYXN0VHJhbnNhY3Rpb25JZDsKLSAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2soVHJhbnNhY3Rpb25DYWxsYmFjazo6
Y3JlYXRlKHF1ZXJ5LCB0cmFuc2FjdGlvbklkLCB0aGlzKSk7Ci0gICAgUmVmUHRyPFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayhUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6OmNyZWF0ZSh0cmFuc2FjdGlvbklkLCB0aGlzKSk7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoKSk7
Ci0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxs
YmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIHJldHVybiB0
cmFuc2FjdGlvbklkOwotfQotCi12b2lkIEluc3BlY3RvclN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9u
dGVuZCgpCi17Ci0gICAgbV9mcm9udGVuZCA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShEQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIxY2VlZTQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3RvcmFnZUFnZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJbnNwZWN0b3JTdG9yYWdlQWdlbnRfaAotI2RlZmluZSBJbnNwZWN0b3JTdG9yYWdlQWdl
bnRfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJ3dGYvUGFzc1Jl
ZlB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlOwotY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmQ7Ci0KLWNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gY3JlYXRlKEluc3BlY3RvckZyb250
ZW5kKiBmcm9udGVuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yU3RvcmFnZUFnZW50KGZyb250ZW5kKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+SW5zcGVj
dG9yU3RvcmFnZUFnZW50KCk7Ci0KLSAgICBsb25nIGV4ZWN1dGVTUUwoRGF0YWJhc2UqLCBjb25z
dCBTdHJpbmcmIHF1ZXJ5KTsKLQotICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpIHsg
cmV0dXJuIG1fZnJvbnRlbmQ7IH0KLSAgICB2b2lkIGNsZWFyRnJvbnRlbmQoKTsKLQotcHJpdmF0
ZToKLSAgICBJbnNwZWN0b3JTdG9yYWdlQWdlbnQoSW5zcGVjdG9yRnJvbnRlbmQqKTsKLQotICAg
IEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yU3RvcmFnZUFnZW50X2gpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBmZDQ0NDA0Li43
ZDdlMTI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1Bh
bmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMK
QEAgLTIyMCw3ICsyMjAsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2hvdyh0aGlzLnZpZXdzQ29udGFpbmVy
RWxlbWVudCk7CiAKICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmVuYWJsZURlYnVnZ2VyKGZhbHNlKTsKKyAg
ICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoZmFs
c2UpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwog
ICAgICAgICB9CiAgICAgfSwKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5jcHAKaW5kZXggMzQ1ZTQzZS4uY2FlZmZiNiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>