<?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>43788</bug_id>
          
          <creation_ts>2010-08-10 06:07:03 -0700</creation_ts>
          <short_desc>Web Inspector: move databse processing to native layer.</short_desc>
          <delta_ts>2010-08-10 09:14:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>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>262644</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-10 06:07:03 -0700</bug_when>
    <thetext>Rationale:
- Slowly move out everything from InjectedScript
- Databases from iframes can now be processed
- Removed async dispatching on InjectedScript and its support from generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262647</commentid>
    <comment_count>1</comment_count>
      <attachid>64007</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-10 06:14:07 -0700</bug_when>
    <thetext>Created attachment 64007
[PATCH] Proposed change. Will add to XCode proj on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262658</commentid>
    <comment_count>2</comment_count>
      <attachid>64007</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-10 06:45:50 -0700</bug_when>
    <thetext>Comment on attachment 64007
[PATCH] Proposed change. Will add to XCode proj on landing.

WebCore/inspector/InspectorBackend.cpp:139
 +      *transactionId = m_inspectorController-&gt;m_storageAgent-&gt;executeSQL(database, query);
Please introduce a getter for storage agent as we do for other agents.

WebCore/inspector/InspectorStorageAgent.h:34
 +  #include &quot;wtf/PassOwnPtr.h&quot;
should be &lt;wtf/PassRefPtr.h&gt; ?

WebCore/inspector/InspectorStorageAgent.cpp:49
 +  #include &quot;wtf/Vector.h&quot;
&lt;wtf/Vector.h&gt;

WebCore/inspector/InspectorStorageAgent.cpp:39
 +  #include &quot;SQLValue.h&quot;
wrong include order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262700</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-10 09:07:07 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	C	WebCore/inspector/front-end/Database.js =&gt; WebCore/inspector/InspectorStorageAgent.h
	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/bindings/js/JSInjectedScriptHostCustom.cpp
	M	WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
	M	WebCore/inspector/CodeGeneratorInspector.pm
	M	WebCore/inspector/InjectedScript.cpp
	M	WebCore/inspector/InjectedScript.h
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InjectedScriptHost.idl
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	A	WebCore/inspector/InspectorStorageAgent.cpp
	M	WebCore/inspector/front-end/Database.js
	M	WebCore/inspector/front-end/DatabaseQueryView.js
	M	WebCore/inspector/front-end/DatabaseTableView.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/InjectedScriptAccess.js
	M	WebCore/inspector/front-end/StoragePanel.js
Committed r65072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262702</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 09:14:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65072 might have broken Qt Linux Release minimal
The following changes are on the blame list:
http://trac.webkit.org/changeset/65072
http://trac.webkit.org/changeset/65069
http://trac.webkit.org/changeset/65070
http://trac.webkit.org/changeset/65071</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64007</attachid>
            <date>2010-08-10 06:14:07 -0700</date>
            <delta_ts>2010-08-10 06:45:50 -0700</delta_ts>
            <desc>[PATCH] Proposed change. Will add to XCode proj on landing.</desc>
            <filename>storage_agent</filename>
            <type>text/plain</type>
            <size>42554</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDZlYzkzM2EuLjMzZTU3OGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA2Miw2ICsxMDYyLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5j
cHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0
b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA0ZGY5NjM5Li5lODVlODRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEwLTA4LTEwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgZGF0YWJzZSBw
cm9jZXNzaW5nIHRvIG5hdGl2ZSBsYXllci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3ODgKKworICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9j
YWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0Ojpk
aXNwYXRjaCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JCYWNrZW5kOjpleGVjdXRlU1FMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9u
dGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJv
bnRlbmRMaWZldGltZUFnZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ6Okluc3BlY3RvclN0b3JhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JTdG9yYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RvcmFnZUFnZW50OjpleGVjdXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0b3JhZ2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
b3JhZ2VBZ2VudDo6ZnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGF0
YWJhc2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2UucHJvdG90eXBlLmV4ZWN1
dGVTcWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5zcWxUcmFuc2FjdGlvbkZhaWxlZCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldy5wcm90b3R5cGUuX3F1ZXJ5RmluaXNoZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZS5fcXVlcnlFcnJv
cik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlVmlldy5wcm90b3R5cGUuX3F1ZXJ5
RmluaXNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5q
czoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlci5JbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUubWV0aG9kTmFtZSk6CisgICAgICAgIChJbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU3RvcmFnZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5w
cm90b3R5cGUuZGF0YUdyaWRGb3JSZXN1bHQpOgorCiAyMDEwLTA4LTA5ICBFcmljIFNlaWRlbCAg
PGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9XZWJD
b3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCAwMTBjMjhjLi45Mjhm
MDljIDEwMDY0NApCaW5hcnkgZmlsZXMgYS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcyBhbmQgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5q
cyBkaWZmZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDNjMzM4YTAuLmY1NDk1MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTYyMiw2ICsx
NjIyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKKwlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGQ0Y2M3OWYuLjhhYTRkZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzYxLDYgKzE3NjEsOCBAQAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdl
QWdlbnQuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZTljZmE0YS4uNmUy
MmI1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNv
cmUucHJvCkBAIC03NTMsNiArNzUzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBc
CisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHAgXAogICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcCBcCkBAIC0xNTEz
LDYgKzE1MTQsNyBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmgg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKKyAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yU3RvcmFnZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmggXAogICAgIGluc3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCiAgICAgaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDRmMDJmN2EuLjdkNzEzMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtNTA5ODUsNiArNTA5ODUsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRl
eCBlYzhiMTIyLi4wYzg5MWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApAQCAtMTAzLDIzICsxMDMsNiBAQCBTY3JpcHRPYmpl
Y3QgSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcm
IHNvdXJjZSwgU2NyaQogICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKIH0KIAotI2lmIEVOQUJM
RShEQVRBQkFTRSkKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGljID0gaW1wbCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWYgKCFpYykKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBpbXBs
KCktPmRhdGFiYXNlRm9ySWQoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0gICAg
aWYgKCFkYXRhYmFzZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHRvSlMoZXhlYywgZGF0YWJhc2UpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJh
bWUoRXhlY1N0YXRlKiBleGVjKQogewpAQCAtMTkyLDI0ICsxNzUsNiBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYykKIH0KICNl
bmRpZgogCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpyZXBvcnREaWREaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAzKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAKLSAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgaW50IGNhbGxJZCA9IGV4ZWMtPmFyZ3VtZW50KDApLmFzSW50MzIoKTsKLSAg
ICAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IFNjcmlwdFZhbHVlKGV4ZWMt
PmFyZ3VtZW50KDEpKS50b0luc3BlY3RvclZhbHVlKGV4ZWMpOwotICAgIAotICAgIGJvb2wgaXNF
eGNlcHRpb247Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5nZXRCb29sZWFuKGlzRXhjZXB0
aW9uKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaW1wbCgpLT5yZXBvcnRE
aWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQsIGlzRXhjZXB0aW9uKTsK
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRT
Y3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cAppbmRleCAzMWVmOGRiLi40MzVjZjczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC0xNjQsMTkg
KzE2NCw2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6Y3Vy
cmVudENhbGxGcmFtZUNhbGxiYWNrKGNvbnN0IHY4OjpBCiAjZW5kaWYKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0
YWJhc2VGb3JJZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5D
X1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuZGF0YWJhc2VGb3JJZCgpIik7Ci0gICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
SW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGhvc3QtPmRhdGFiYXNl
Rm9ySWQoYXJnc1swXS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGFiYXNlKQot
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGRhdGFiYXNl
KTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxl
Y3REYXRhYmFzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5D
X1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3Quc2VsZWN0RGF0YWJhc2UoKSIpOwpAQCAtMjA4LDE5
ICsxOTUsNiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNl
bGVjdERPTVN0b3JhZ2VDYWxsYmFjayhjb25zdCB2ODo6QQogfQogI2VuZGlmCiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbklu
amVjdGVkU2NyaXB0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJ
TkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5yZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQoKSIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMykKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLSAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGhvc3QgPSBWOEluamVjdGVk
U2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW50IGNhbGxJZCA9IGFy
Z3NbMF0tPlRvSW50MzIoKS0+VmFsdWUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJl
c3VsdCA9IFNjcmlwdFZhbHVlKGFyZ3NbMV0pLnRvSW5zcGVjdG9yVmFsdWUoU2NyaXB0U3RhdGU6
OmN1cnJlbnQoKSk7Ci0gICAgYm9vbCBpc0V4Y2VwdGlvbiA9IGFyZ3NbMl0tPlRvQm9vbGVhbigp
LT5WYWx1ZSgpOwotICAgIGhvc3QtPnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChj
YWxsSWQsIHJlc3VsdCwgaXNFeGNlcHRpb24pOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Ci19Ci0KIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRG
b3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjcmlwdFN0YXRlKQogewogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmluZGV4IGY0Njg1N2EuLjE0NjQ2ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMjM4LDggKzIzOCw3IEBAIHN1YiBnZW5lcmF0ZUZy
b250ZW5kRnVuY3Rpb24KICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAogICAgIG15ICRub3Rp
ZnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im5vdGlmeSJ9
OwotICAgIG15ICRhc3luYyA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiYXN5bmMifTsKLSAgICByZXR1cm4gaWYgISRhc3luYyAmJiAhJG5vdGlmeTsKKyAgICBy
ZXR1cm4gaWYgISRub3RpZnk7CiAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRub3RpZnkgPyAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZSA6ICJkaWQiIC4gdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSk7CiAKICAgICBteSBAYXJnc0ZpbHRlcmVkID0gZ3JlcCgkXy0+ZGlyZWN0aW9u
IGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOyAjIGp1c3Qga2VlcCBvbmx5IG91
dCBwYXJhbWV0ZXJzIGZvciBmcm9udGVuZCBpbnRlcmZhY2UuCkBAIC0zNDIsMTIgKzM0MSwxMSBA
QCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgIiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJ2YXJpYWJsZSJ9IC4gIiAiIC4gJF8t
Pm5hbWUgLiAiJGluaXRpYWxpemVyOyIpOwogICAgIH0KIAotICAgIG15ICRhc3luYyA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiYXN5bmMifTsKLSAgICBteSAk
YXJncyA9IGpvaW4oIiwgIiwgKGdyZXAoJGFzeW5jIHx8ICEoJF8gZXEgImNhbGxJZCIpLCBtYXAo
JF8tPm5hbWUsIEBpbkFyZ3MpKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsKKyAg
ICBteSAkYXJncyA9IGpvaW4oIiwgIiwgKGdyZXAoISgkXyBlcSAiY2FsbElkIiksIG1hcCgkXy0+
bmFtZSwgQGluQXJncykpLCBtYXAoIiYiIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwogICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICRoYW5kbGVyQWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3Mp
OyIpOwogCi0gICAgIyBUaGUgcmVzdWx0cyBvZiBmdW5jdGlvbiBjYWxsIHNob3VsZCBiZSB0cmFu
c2ZlcmVkIGJhY2sgdG8gZnJvbnRlbmQgKGV4Y2VwdCBhc3luYyBtZXRob2RzIC0gbmVlZCB0byBm
aXggdGhhdCkuCi0gICAgaWYgKHNjYWxhcihncmVwKCRfLT5uYW1lIGVxICJjYWxsSWQiLCBAaW5B
cmdzKSkgJiYgISRhc3luYykgeworICAgICMgVGhlIHJlc3VsdHMgb2YgZnVuY3Rpb24gY2FsbCBz
aG91bGQgYmUgdHJhbnNmZXJlZCBiYWNrIHRvIGZyb250ZW5kLgorICAgIGlmIChzY2FsYXIoZ3Jl
cCgkXy0+bmFtZSBlcSAiY2FsbElkIiwgQGluQXJncykpKSB7CiAgICAgICAgIG15IEBwdXNoQXJn
dW1lbnRzID0gbWFwKCIgICAgICAgIGFyZ3VtZW50cy0+cHVzaCIgLiAkdHlwZVRyYW5zZm9ybXsk
Xy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAuICIoIiAuICRfLT5uYW1lIC4gIik7IiwgQG91
dEFyZ3MpOwogCiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5jcHAKaW5kZXggNGYyOWI4YS4uM2Y0ZDgxOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbmplY3RlZFNjcmlwdDo6SW5qZWN0
ZWRTY3JpcHQoU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0T2JqZWN0KQogewogfQogCi12b2lk
IEluamVjdGVkU2NyaXB0OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCBhc3luYywgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0LCBib29sKiBoYWRFeGNlcHRpb24pIAordm9pZCBJbmplY3RlZFNj
cmlwdDo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFy
Z3VtZW50cywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0LCBib29sKiBoYWRFeGNlcHRp
b24pIAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBpZiAoIWNhbkFjY2Vzc0lu
c3BlY3RlZFdpbmRvdygpKSB7CkBAIC01NSw4ICs1NSw2IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0
cmluCiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmpl
Y3QsICJkaXNwYXRjaCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1ldGhvZE5hbWUp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAgaWYgKGFzeW5j
KQotICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgICpoYWRFeGNl
cHRpb24gPSBmYWxzZTsKICAgICBTY3JpcHRWYWx1ZSByZXN1bHRWYWx1ZSA9IGZ1bmN0aW9uLmNh
bGwoKmhhZEV4Y2VwdGlvbik7CiAgICAgaWYgKCEqaGFkRXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmgKaW5kZXggYjJkODhmNC4uMTczODliYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzTm9W
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRPYmplY3QuaGFzTm9WYWx1ZSgp
OyB9CiAKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CisgICAgdm9pZCBkaXNwYXRj
aChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y2FsbEZyYW1lcygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcAppbmRleCA1YzA1YzczLi4zNzUxMmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5jcHAKQEAgLTE0MiwxMiArMTQyLDYgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhv
c3Q6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKIH0KICNlbmRpZgogCi12b2lk
IEluamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxv
bmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQsIGJvb2wgaXNFeGNl
cHRpb24pCi17Ci0gICAgaWYgKFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IHJl
bW90ZUZyb250ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5kaWREaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQoY2FsbElkLCByZXN1bHQsIGlzRXhjZXB0aW9uKTsKLX0KLQogSW5qZWN0ZWRTY3JpcHQg
SW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcklkKGxvbmcgaWQpCiB7CiAgICAg
cmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpZCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5oCmluZGV4IDc4ZTAwZDQuLjk5N2YzNDAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5oCkBAIC04Miw3ICs4Miw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZENyZWF0ZVdvcmtlcihsb25nIGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJl
ZFdvcmtlcik7CiAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGxvbmcgaWQpOwogI2VuZGlmCi0g
ICAgdm9pZCByZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlvbik7CiAKICAg
ICBwYWlyPGxvbmcsIFNjcmlwdE9iamVjdD4gaW5qZWN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291
cmNlLCBTY3JpcHRTdGF0ZSopOwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9y
KFNjcmlwdFN0YXRlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbApp
bmRleCAyMWFmOTM4Li45YjJlZDZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEhvc3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5pZGwKQEAgLTQ0LDcgKzQ0LDYgQEAgbW9kdWxlIGNvcmUgewogI2VuZGlmCiAKICNpZiBk
ZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCi0gICAgICAgIFtDdXN0
b21dIERPTU9iamVjdCBkYXRhYmFzZUZvcklkKGluIGxvbmcgZGF0YWJhc2VJZCk7CiAgICAgICAg
IFtDdXN0b21dIHZvaWQgc2VsZWN0RGF0YWJhc2UoaW4gRE9NT2JqZWN0IGRhdGFiYXNlKTsKICNl
bmRpZgogCkBAIC01Nyw2ICs1Niw1IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBkaWRE
ZXN0cm95V29ya2VyKGluIGxvbmcgaWQpOwogICAgICAgICBsb25nIG5leHRXb3JrZXJJZCgpOwog
I2VuZGlmCi0gICAgICAgIFtDdXN0b21dIHZvaWQgcmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0KGluIGxvbmcgY2FsbElkLCBpbiBET01PYmplY3QgcmVzdWx0LCBpbiBib29sZWFuIGlz
RXhjZXB0aW9uKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZDk3MmJm
ZS4uOWQzZDEwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0xNTcsNyArMTU3LDcgQEAg
bW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVy
TG9nTGluZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0
UG9zaXRpb24sIG91dCBTdHJpbmcgbG9nKTsKICNlbmRpZgogICAgICAgICBbaGFuZGxlcj1CYWNr
ZW5kXSB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGluIFN0cmluZyBzY3JpcHRTb3VyY2Up
OwotICAgICAgICBbaGFuZGxlcj1CYWNrZW5kLCBhc3luY10gdm9pZCBkaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgaW4gU3Ry
aW5nIG1ldGhvZE5hbWUsIGluIFN0cmluZyBhcmd1bWVudHMsIGluIGJvb2xlYW4gYXN5bmMsIG91
dCBWYWx1ZSByZXN1bHQsIG91dCBib29sZWFuIGlzRXhjZXB0aW9uKTsKKyAgICAgICAgW2hhbmRs
ZXI9QmFja2VuZF0gdm9pZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQs
IGluIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgaW4gU3RyaW5nIG1ldGhvZE5hbWUsIGluIFN0cmlu
ZyBhcmd1bWVudHMsIG91dCBWYWx1ZSByZXN1bHQsIG91dCBib29sZWFuIGlzRXhjZXB0aW9uKTsK
ICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGluIFN0cmluZyBzY3JpcHRTb3VyY2UpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVy
XSB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CiAKQEAgLTIwNiw2ICsy
MDYsOSBAQCBtb2R1bGUgY29yZSB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYg
RU5BQkxFX0RBVEFCQVNFCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgZ2V0RGF0YWJh
c2VUYWJsZU5hbWVzKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGRhdGFiYXNlSWQsIG91dCBBcnJh
eSB0YWJsZU5hbWVzKTsKKyAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9pZCBleGVjdXRlU1FM
KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGRhdGFiYXNlSWQsIGluIFN0cmluZyBxdWVyeSwgb3V0
IGJvb2xlYW4gc3VjY2Vzcywgb3V0IGxvbmcgdHJhbnNhY3Rpb25JZCk7CisgICAgICAgIFtub3Rp
ZnldIHZvaWQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQob3V0IGxvbmcgdHJhbnNhY3Rpb25JZCwg
b3V0IFZhbHVlIGNvbHVtbk5hbWVzLCBvdXQgVmFsdWUgdmFsdWVzKTsKKyAgICAgICAgW25vdGlm
eV0gdm9pZCBzcWxUcmFuc2FjdGlvbkZhaWxlZChvdXQgbG9uZyB0cmFuc2FjdGlvbklkLCBvdXQg
VmFsdWUgc3FsRXJyb3IpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFH
RSkgJiYgRU5BQkxFX0RPTV9TVE9SQUdFCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCmluZGV4IDIyMDI1ZmIuLjBhMThlMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVk
ZSAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKQEAgLTg1LDcgKzg2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZSkKICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+
c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uoc291cmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIGxvbmcgaW5qZWN0ZWRT
Y3JpcHRJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50
cywgYm9vbCBhc3luYywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0LCBib29sKiBoYWRF
eGNlcHRpb24pCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudHMsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCwgYm9vbCog
aGFkRXhjZXB0aW9uKQogewogICAgIGlmICghcmVtb3RlRnJvbnRlbmQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTAyLDEwICsxMDMsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc3BhdGNo
T25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdAogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlu
amVjdGVkU2NyaXB0LmRpc3BhdGNoKGNhbGxJZCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLCBhc3lu
YywgcmVzdWx0LCBoYWRFeGNlcHRpb24pOwotICAgIGlmIChhc3luYykKLSAgICAgICAgcmV0dXJu
OyAgLy8gSW5qZWN0ZWRTY3JpcHQgd2lsbCByZXR1cm4gcmVzdWx0IGFzeW5jaHJvbm91c2x5IGJ5
IG1lYW5zIG9mIDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0LgotICAgIHJlbW90
ZUZyb250ZW5kKCktPmRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsICgqcmVzdWx0
KS5nZXQoKSwgKmhhZEV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRTY3JpcHQuZGlzcGF0Y2gobWV0
aG9kTmFtZSwgYXJndW1lbnRzLCByZXN1bHQsIGhhZEV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQmFja2VuZDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMoKQpAQCAtMTI5LDYgKzEyNywxOSBA
QCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGRhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcgogICAgICAgICAgICAgKCpuYW1lcyktPnB1c2hTdHJp
bmcodGFibGVOYW1lc1tpXSk7CiAgICAgfQogfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmV4
ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sKiBzdWNj
ZXNzLCBsb25nKiB0cmFuc2FjdGlvbklkKQoreworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAgICBpZiAo
IW1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9zdG9yYWdlQWdlbnQgfHwgIWRhdGFiYXNlKSB7Cisg
ICAgICAgICpzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAq
dHJhbnNhY3Rpb25JZCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9zdG9yYWdlQWdlbnQtPmV4
ZWN1dGVTUUwoZGF0YWJhc2UsIHF1ZXJ5KTsKKyAgICAqc3VjY2VzcyA9IHRydWU7Cit9CisKICNl
bmRpZgogCiBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogSW5zcGVjdG9yQmFja2VuZDo6cmVtb3Rl
RnJvbnRlbmQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCmluZGV4IGY3YmFlNGYu
LjYzYzRhMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKQEAgLTY2LDcgKzY2
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlKTsKLSAgICB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CisgICAgdm9pZCBkaXNwYXRj
aE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CiAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNz
YWdlcygpOwogCiAgICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3RvbSBpbXBsZW1l
bnRhdGlvbnMuCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKICAgICB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUwobG9uZyBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sKiBzdWNjZXNzLCBsb25nKiB0cmFuc2Fj
dGlvbklkKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCBlMWFlZmY5Li4wZjZmNTJkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjMsOSArNjMsMTAgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJl
c291cmNlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5o
IgpAQCAtNDc3LDYgKzQ3OCwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RG
cm9udGVuZCgpCiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICBtX3Jl
bW90ZUZyb250ZW5kID0gbmV3IFJlbW90ZUluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKICAg
ICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Nzc1N0b3JlLmdldCgp
LCBtX3JlbW90ZUZyb250ZW5kLmdldCgpKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBt
X3N0b3JhZ2VBZ2VudCA9IEluc3BlY3RvclN0b3JhZ2VBZ2VudDo6Y3JlYXRlKG1fcmVtb3RlRnJv
bnRlbmQuZ2V0KCkpOworI2VuZGlmCisKICAgICBpZiAobV90aW1lbGluZUFnZW50KQogICAgICAg
ICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX3JlbW90ZUZyb250
ZW5kLmdldCgpKTsKIApAQCAtNTk4LDYgKzYwNCw5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQogICAgIGlmIChtX2RvbUFnZW50KQog
ICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwogICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKKyAg
ICBpZiAobV9zdG9yYWdlQWdlbnQpCisgICAgICAgIG1fc3RvcmFnZUFnZW50LT5jbGVhckZyb250
ZW5kKCk7CisgICAgbV9zdG9yYWdlQWdlbnQuY2xlYXIoKTsKIAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCiAgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuY2xlYXIoKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBlMzU2OWNjLi45NmJh
Yzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02NSw2ICs2
NSw3IEBAIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JSZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIGNsYXNzIEluc3BlY3Rv
cldvcmtlclJlc291cmNlOwpAQCAtMzI4LDYgKzMyOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8UmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ+IG1f
cmVtb3RlRnJvbnRlbmQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50
OworICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IG1fc3RvcmFnZUFnZW50OwogICAg
IE93blB0cjxJbnNwZWN0b3JDU1NTdG9yZT4gbV9jc3NTdG9yZTsKICAgICBPd25QdHI8SW5zcGVj
dG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggNmRiNjI2Ny4uZDdmNDVjOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtMzEsNiArMzEsNyBAQAog
I2RlZmluZSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50X2gKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0QnJl
YWtwb2ludC5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnTGlzdGVuZXIuaCIKICNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3Rv
cmFnZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjNTEyNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKQEAg
LTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JTdG9yYWdlQWdlbnQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShEQVRB
QkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisj
aW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgor
I2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxSZXN1
bHRTZXRSb3dMaXN0LmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRl
ICJWb2lkQ2FsbGJhY2suaCIKKworI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitsb25nIGxhc3RUcmFuc2FjdGlvbklkID0gMDsK
Kwordm9pZCByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChJbnNwZWN0b3JTdG9yYWdlQWdlbnQqIGFn
ZW50LCBsb25nIHRyYW5zYWN0aW9uSWQsIFNRTEVycm9yKiBlcnJvcikKK3sKKyAgICBpZiAoIWFn
ZW50LT5mcm9udGVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGVycm9y
T2JqZWN0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvci0+bWVzc2FnZSgpKTsKKyAgICBlcnJv
ck9iamVjdC0+c2V0TnVtYmVyKCJjb2RlIiwgZXJyb3ItPmNvZGUoKSk7CisgICAgYWdlbnQtPmZy
b250ZW5kKCktPnNxbFRyYW5zYWN0aW9uRmFpbGVkKHRyYW5zYWN0aW9uSWQsIGVycm9yT2JqZWN0
KTsKK30KKworY2xhc3MgU3RhdGVtZW50Q2FsbGJhY2sgOiBwdWJsaWMgU1FMU3RhdGVtZW50Q2Fs
bGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YXRlbWVudENhbGxiYWNr
PiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VB
Z2VudD4gYWdlbnQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVt
ZW50Q2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQpKTsNCisgICAgfQ0KKworICAgIHZpcnR1
YWwgflN0YXRlbWVudENhbGxiYWNrKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZl
bnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxSZXN1bHRTZXQqIHJlc3VsdFNldCkK
KyAgICB7CisgICAgICAgIGlmICghbV9hZ2VudC0+ZnJvbnRlbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd0xpc3QgPSByZXN1
bHRTZXQtPnJvd3MoKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5h
bWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgY29sdW1ucyA9IHJvd0xpc3QtPmNvbHVtbk5hbWVzKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29sdW1ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbHVtbk5h
bWVzLT5wdXNoU3RyaW5nKGNvbHVtbnNbaV0pOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBW
ZWN0b3I8U1FMVmFsdWU+JiBkYXRhID0gcm93TGlzdC0+dmFsdWVzKCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3Qg
U1FMVmFsdWUmIHZhbHVlID0gcm93TGlzdC0+dmFsdWVzKClbaV07CisgICAgICAgICAgICBzd2l0
Y2ggKHZhbHVlLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmlu
Z1ZhbHVlOiB2YWx1ZXMtPnB1c2hTdHJpbmcodmFsdWUuc3RyaW5nKCkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZTogdmFsdWVzLT5wdXNoTnVtYmVy
KHZhbHVlLm51bWJlcigpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6
TnVsbFZhbHVlOiB2YWx1ZXMtPnB1c2goSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7IGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fYWdlbnQtPmZyb250ZW5kKCktPnNx
bFRyYW5zYWN0aW9uU3VjY2VlZGVkKG1fdHJhbnNhY3Rpb25JZCwgY29sdW1uTmFtZXMsIHZhbHVl
cyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdGF0ZW1l
bnRDYWxsYmFjayhsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RvcmFn
ZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkK
KyAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KKyAgICBsb25nIG1fdHJhbnNhY3Rpb25JZDsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2FnZW50OworfTsKKworY2xhc3Mg
U3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiBjcmVhdGUobG9uZyB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VB
Z2VudD4gYWdlbnQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVt
ZW50RXJyb3JDYWxsYmFjayh0cmFuc2FjdGlvbklkLCBhZ2VudCkpOw0KKyAgICB9DQorCisgICAg
dmlydHVhbCB+U3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIHsgfQorCisgICAgdmlydHVhbCBib29s
IGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqIGVycm9yKQorICAgIHsKKyAg
ICAgICAgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQobV9hZ2VudC5nZXQoKSwgbV90cmFuc2FjdGlv
bklkLCBlcnJvcik7CisgICAgICAgIHJldHVybiB0cnVlOyAgCisgICAgfQorCitwcml2YXRlOgor
ICAgIFN0YXRlbWVudEVycm9yQ2FsbGJhY2sobG9uZyB0cmFuc2FjdGlvbklkLCBSZWZQdHI8SW5z
cGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uSWQodHJh
bnNhY3Rpb25JZCkKKyAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KKyAgICBsb25nIG1fdHJh
bnNhY3Rpb25JZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2FnZW50Owor
fTsKKworY2xhc3MgVHJhbnNhY3Rpb25DYWxsYmFjayA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbkNhbGxi
YWNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGxvbmcgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGFnZW50KQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uQ2FsbGJhY2soc3FsU3RhdGVtZW50
LCB0cmFuc2FjdGlvbklkLCBhZ2VudCkpOw0KKyAgICB9DQorCisgICAgdmlydHVhbCB+VHJhbnNh
Y3Rpb25DYWxsYmFjaygpIHsgfQorCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9hZ2VudC0+ZnJv
bnRlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIFZlY3RvcjxTUUxW
YWx1ZT4gc3FsVmFsdWVzOworICAgICAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNh
bGxiYWNrKFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUobV90cmFuc2FjdGlvbklkLCBtX2FnZW50
KSk7CisgICAgICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShtX3RyYW5zYWN0aW9uSWQsIG1fYWdl
bnQpKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIHRyYW5zYWN0aW9u
LT5leGVjdXRlU1FMKG1fc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIGNhbGxiYWNrLnJlbGVhc2Uo
KSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IFN0cmluZyYgc3Fs
U3RhdGVtZW50LCBsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RvcmFn
ZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3NxbFN0YXRlbWVudChzcWxTdGF0ZW1lbnQpCisg
ICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAgICwgbV9hZ2Vu
dChhZ2VudCkgeyB9CisgICAgU3RyaW5nIG1fc3FsU3RhdGVtZW50OworICAgIGxvbmcgbV90cmFu
c2FjdGlvbklkOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IG1fYWdlbnQ7Cit9
OworCitjbGFzcyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0ZShsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sodHJhbnNhY3Rpb25JZCwgYWdlbnQp
KTsNCisgICAgfQ0KKworICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsg
fQorCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTEVycm9yKiBlcnJvcikKKyAgICB7
CisgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fYWdlbnQuZ2V0KCksIG1fdHJhbnNh
Y3Rpb25JZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Citwcml2YXRlOgor
ICAgIFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhsb25nIHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBhZ2VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9u
SWQodHJhbnNhY3Rpb25JZCkKKyAgICAgICAgLCBtX2FnZW50KGFnZW50KSB7IH0KKyAgICBsb25n
IG1fdHJhbnNhY3Rpb25JZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX2Fn
ZW50OworfTsKKworY2xhc3MgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sgOiBwdWJsaWMgVm9p
ZENhbGxiYWNrIHsNCitwdWJsaWM6DQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
U3VjY2Vzc0NhbGxiYWNrPiBjcmVhdGUoKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOw0KKyAgICB9DQorDQorICAgIHZp
cnR1YWwgflRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9DQorDQorICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudCgpIHsgfQ0KKw0KK3ByaXZhdGU6DQorICAgIFRyYW5zYWN0aW9uU3Vj
Y2Vzc0NhbGxiYWNrKCkgeyB9DQorfTsNCisKK30gLy8gbmFtZXNwYWNlCisKK0luc3BlY3RvclN0
b3JhZ2VBZ2VudDo6SW5zcGVjdG9yU3RvcmFnZUFnZW50KFJlbW90ZUluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCkKKyAgICA6IG1fZnJvbnRlbmQoZnJvbnRlbmQpCit7Cit9CisKK0luc3BlY3Rv
clN0b3JhZ2VBZ2VudDo6fkluc3BlY3RvclN0b3JhZ2VBZ2VudCgpCit7Cit9CisKK2xvbmcgSW5z
cGVjdG9yU3RvcmFnZUFnZW50OjpleGVjdXRlU1FMKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBxdWVyeSkKK3sKKyAgICBsb25nIHRyYW5zYWN0aW9uSWQgPSArK2xhc3RUcmFuc2Fj
dGlvbklkOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjayhUcmFu
c2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVlcnksIHRyYW5zYWN0aW9uSWQsIHRoaXMpKTsNCisg
ICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayhUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSh0cmFuc2FjdGlvbklkLCB0aGlzKSk7CisgICAg
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vzc0Nh
bGxiYWNrOjpjcmVhdGUoKSk7CisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJl
bGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNl
KCkpOworICAgIHJldHVybiB0cmFuc2FjdGlvbklkOworfQorCit2b2lkIEluc3BlY3RvclN0b3Jh
Z2VBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCit7CisgICAgbV9mcm9udGVuZCA9IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVO
QUJMRShEQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
b3JhZ2VBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyODA0ZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
RS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclN0b3JhZ2VBZ2VudF9oCisjZGVmaW5lIEluc3Bl
Y3RvclN0b3JhZ2VBZ2VudF9oCisKKyNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAid3RmL1Bhc3NPd25QdHIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIFJlbW90ZUluc3BlY3RvckZy
b250ZW5kOworCitjbGFzcyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JTdG9yYWdlQWdlbnQ+IGNyZWF0ZShSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0
b3JhZ2VBZ2VudChmcm9udGVuZCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkluc3BlY3RvclN0
b3JhZ2VBZ2VudCgpOworCisgICAgbG9uZyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmV4ZWN1dGVT
UUwoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KTsKKworICAgIFJlbW90ZUluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCgpIHsgcmV0dXJuIG1fZnJvbnRlbmQ7IH0KKyAgICB2b2lkIGNs
ZWFyRnJvbnRlbmQoKTsKKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JTdG9yYWdlQWdlbnQoUmVt
b3RlSW5zcGVjdG9yRnJvbnRlbmQqKTsKKworICAgIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBt
X2Zyb250ZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yU3RvcmFnZUFnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2UuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGF0YWJhc2UuanMKaW5kZXggMTdlZTRlNi4uNDViN2EwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EYXRhYmFzZS5qcwpAQCAtMzQsNiArMzQsOSBAQCBXZWJJbnNwZWN0b3IuRGF0YWJh
c2UgPSBmdW5jdGlvbihpZCwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKQogICAgIHRoaXMuX3ZlcnNp
b24gPSB2ZXJzaW9uOwogfQogCitXZWJJbnNwZWN0b3IuRGF0YWJhc2Uuc3VjY2Vzc0NhbGxiYWNr
cyA9IHt9OworV2ViSW5zcGVjdG9yLkRhdGFiYXNlLmVycm9yQ2FsbGJhY2tzID0ge307CisKIFdl
Ykluc3BlY3Rvci5EYXRhYmFzZS5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGlkKCkKICAgICB7CkBA
IC04NywxNiArOTAsMzMgQEAgV2ViSW5zcGVjdG9yLkRhdGFiYXNlLnByb3RvdHlwZSA9IHsKICAg
ICAKICAgICBleGVjdXRlU3FsOiBmdW5jdGlvbihxdWVyeSwgb25TdWNjZXNzLCBvbkVycm9yKQog
ICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzdWx0KQorICAgICAgICBmdW5jdGlv
biBjYWxsYmFjayhzdWNjZXNzLCB0cmFuc2FjdGlvbklkKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIShyZXN1bHQgaW5zdGFuY2VvZiBBcnJheSkpIHsKLSAgICAgICAgICAgICAgICBvbkVy
cm9yKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAg
ICBvbkVycm9yKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGF0YWJhc2Ugbm90IGZvdW5kLiIpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvblN1
Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5EYXRhYmFzZS5zdWNjZXNz
Q2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdID0gb25TdWNjZXNzOworICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkRhdGFiYXNlLmVycm9yQ2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdID0gb25FcnJvcjsK
ICAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogZXhlY3V0ZSB0aGUgcXVlcnkgaW4gdGhlIGZy
YW1lIHRoZSBEQiBjb21lcyBmcm9tLgotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXRE
ZWZhdWx0KCkuZXhlY3V0ZVNxbCh0aGlzLl9pZCwgcXVlcnksIGNhbGxiYWNrKTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5leGVjdXRlU1FMKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNh
bGxiYWNrKSwgdGhpcy5faWQsIHF1ZXJ5KTsKICAgICB9CiB9CiAKK1dlYkluc3BlY3Rvci5zcWxU
cmFuc2FjdGlvblN1Y2NlZWRlZCA9IGZ1bmN0aW9uKHRyYW5zYWN0aW9uSWQsIGNvbHVtbk5hbWVz
LCB2YWx1ZXMpCit7CisgICAgdmFyIGNhbGxiYWNrID0gV2ViSW5zcGVjdG9yLkRhdGFiYXNlLnN1
Y2Nlc3NDYWxsYmFja3NbdHJhbnNhY3Rpb25JZF07CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAg
ICAgcmV0dXJuOworICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuRGF0YWJhc2Uuc3VjY2Vzc0NhbGxi
YWNrc1t0cmFuc2FjdGlvbklkXTsKKyAgICBjYWxsYmFjayhjb2x1bW5OYW1lcywgdmFsdWVzKTsK
K30KKworV2ViSW5zcGVjdG9yLnNxbFRyYW5zYWN0aW9uRmFpbGVkID0gZnVuY3Rpb24odHJhbnNh
Y3Rpb25JZCwgZXJyb3JPYmopCit7CisgICAgdmFyIGNhbGxiYWNrID0gV2ViSW5zcGVjdG9yLkRh
dGFiYXNlLmVycm9yQ2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdOworICAgIGlmICghY2FsbGJhY2sp
CisgICAgICAgIHJldHVybjsKKyAgICBkZWxldGUgV2ViSW5zcGVjdG9yLkRhdGFiYXNlLmVycm9y
Q2FsbGJhY2tzW3RyYW5zYWN0aW9uSWRdOworICAgIGNhbGxiYWNrKGVycm9yT2JqKTsKK30KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcwppbmRl
eCAzOGM4ZGY0Li5hMTc5ZWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlUXVlcnlWaWV3LmpzCkBAIC0xMzcsOSArMTM3LDkgQEAgV2ViSW5zcGVjdG9yLkRh
dGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kYXRhYmFzZS5leGVj
dXRlU3FsKHF1ZXJ5LCB0aGlzLl9xdWVyeUZpbmlzaGVkLmJpbmQodGhpcywgcXVlcnkpLCB0aGlz
Ll9xdWVyeUVycm9yLmJpbmQodGhpcywgcXVlcnkpKTsKICAgICB9LAogCi0gICAgX3F1ZXJ5Rmlu
aXNoZWQ6IGZ1bmN0aW9uKHF1ZXJ5LCByZXN1bHQpCisgICAgX3F1ZXJ5RmluaXNoZWQ6IGZ1bmN0
aW9uKHF1ZXJ5LCBjb2x1bW5OYW1lcywgdmFsdWVzKQogICAgIHsKLSAgICAgICAgdmFyIGRhdGFH
cmlkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLmRhdGFHcmlkRm9yUmVzdWx0KHJlc3Vs
dCk7CisgICAgICAgIHZhciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFnZS5k
YXRhR3JpZEZvclJlc3VsdChjb2x1bW5OYW1lcywgdmFsdWVzKTsKICAgICAgICAgdmFyIHRyaW1t
ZWRRdWVyeSA9IHF1ZXJ5LnRyaW0oKTsKIAogICAgICAgICBpZiAoZGF0YUdyaWQpIHsKQEAgLTE1
NCw3ICsxNTQsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJvdG90eXBlID0g
ewogCiAgICAgX3F1ZXJ5RXJyb3I6IGZ1bmN0aW9uKHF1ZXJ5LCBlcnJvcikKICAgICB7Ci0gICAg
ICAgIGlmIChlcnJvci5jb2RlID09IDEpCisgICAgICAgIGlmIChlcnJvci5tZXNzYWdlKQogICAg
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlOwogICAgICAgICBlbHNlIGlmIChl
cnJvci5jb2RlID09IDIpCiAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiRGF0YWJhc2Ugbm8gbG9uZ2VyIGhhcyBleHBlY3RlZCB2ZXJzaW9uLiIpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVWaWV3Lmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVWaWV3LmpzCmluZGV4
IGNkNjZhYjcuLjllNmQzNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EYXRhYmFzZVRhYmxlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGF0YWJhc2VUYWJsZVZpZXcuanMKQEAgLTU0LDExICs1NCwxMSBAQCBXZWJJbnNwZWN0b3IuRGF0
YWJhc2VUYWJsZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmRhdGFiYXNlLmV4ZWN1
dGVTcWwoIlNFTEVDVCAqIEZST00gIiArIHRoaXMudGFibGVOYW1lLCB0aGlzLl9xdWVyeUZpbmlz
aGVkLmJpbmQodGhpcyksIHRoaXMuX3F1ZXJ5RXJyb3IuYmluZCh0aGlzKSk7CiAgICAgfSwKIAot
ICAgIF9xdWVyeUZpbmlzaGVkOiBmdW5jdGlvbihyZXN1bHQpCisgICAgX3F1ZXJ5RmluaXNoZWQ6
IGZ1bmN0aW9uKGNvbHVtbk5hbWVzLCB2YWx1ZXMpCiAgICAgewogICAgICAgICB0aGlzLmVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKIAotICAgICAgICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0
b3IucGFuZWxzLnN0b3JhZ2UuZGF0YUdyaWRGb3JSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgdmFy
IGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLmRhdGFHcmlkRm9yUmVzdWx0
KGNvbHVtbk5hbWVzLCB2YWx1ZXMpOwogICAgICAgICBpZiAoIWRhdGFHcmlkKSB7CiAgICAgICAg
ICAgICB2YXIgZW1wdHlNc2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CiAgICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQuY2xhc3NOYW1lID0gInN0b3JhZ2UtdGFibGUt
ZW1wdHkiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0Lmpz
CmluZGV4IDNhMTE0YzAuLmI4YmY5ZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTQ3Miw0NSArNDcyLDYgQEAgSW5qZWN0ZWRTY3JpcHQu
Q2FsbEZyYW1lUHJveHkucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotSW5qZWN0ZWRTY3JpcHQu
ZXhlY3V0ZVNxbCA9IGZ1bmN0aW9uKGNhbGxJZCwgZGF0YWJhc2VJZCwgcXVlcnkpCi17Ci0gICAg
ZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKHR4LCByZXN1bHQpCi0gICAgewotICAgICAgICB2YXIg
cm93cyA9IHJlc3VsdC5yb3dzOwotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZh
ciBsZW5ndGggPSByb3dzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTsKLSAgICAgICAgICAgIHJlc3Vs
dC5wdXNoKGRhdGEpOwotICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3MuaXRlbShpKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGNvbHVtbklkZW50aWZpZXIgaW4gcm93KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IChCdWcgMTk0MzkpIFdlIHNob3VsZCBzcGVjaWFsbHkgZm9ybWF0IFNRTCBO
VUxMIGhlcmUKLSAgICAgICAgICAgICAgICAvLyAod2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgSmF2
YVNjcmlwdCBudWxsIGhlcmUsIGFuZCB0dXJuZWQKLSAgICAgICAgICAgICAgICAvLyBpbnRvIHRo
ZSBzdHJpbmcgIm51bGwiIGJ5IHRoZSBTdHJpbmcoKSBmdW5jdGlvbikuCi0gICAgICAgICAgICAg
ICAgdmFyIHRleHQgPSByb3dbY29sdW1uSWRlbnRpZmllcl07Ci0gICAgICAgICAgICAgICAgZGF0
YVtjb2x1bW5JZGVudGlmaWVyXSA9IFN0cmluZyh0ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QucmVwb3J0RGlkRGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGNhbGxJZCwgcmVzdWx0LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
ZXJyb3JDYWxsYmFjayh0eCwgZXJyb3IpCi0gICAgewotICAgICAgICBJbmplY3RlZFNjcmlwdEhv
c3QucmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgZXJyb3IsIGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBxdWVyeVRyYW5zYWN0aW9uKHR4KQotICAgIHsKLSAg
ICAgICAgdHguZXhlY3V0ZVNxbChxdWVyeSwgbnVsbCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKTsKLSAgICB9Ci0KLSAgICB2YXIgZGF0YWJhc2UgPSBJbmplY3RlZFNjcmlwdEhvc3Qu
ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKLSAgICBpZiAoIWRhdGFiYXNlKQotICAgICAgICBl
cnJvckNhbGxiYWNrKG51bGwsIHsgY29kZSA6IDIgfSk7ICAvLyBSZXR1cm4gYXMgdW5leHBlY3Rl
ZCB2ZXJzaW9uLgotICAgIGRhdGFiYXNlLnRyYW5zYWN0aW9uKHF1ZXJ5VHJhbnNhY3Rpb24sIGVy
cm9yQ2FsbGJhY2spOwotICAgIHJldHVybiB0cnVlOwotfQotCiBJbmplY3RlZFNjcmlwdC5faXNE
ZWZpbmVkID0gZnVuY3Rpb24ob2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3QgfHwgSW5qZWN0
ZWRTY3JpcHQuX2lzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRleCBhYzI4OTQ4
Li5iNWFhOWM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHRBY2Nlc3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVj
dGVkU2NyaXB0QWNjZXNzLmpzCkBAIC02Niw3ICs2Niw3IEBAIEluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlciA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFzeW5jKQogICAgICAgICB9
CiAgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteUNhbGxi
YWNrKTsKIAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChjYWxsSWQsIHRoaXMuX2luamVjdGVkU2NyaXB0SWQsIG1ldGhvZE5hbWUsIGFyZ3NTdHJpbmcs
ICEhYXN5bmMpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdChjYWxsSWQsIHRoaXMuX2luamVjdGVkU2NyaXB0SWQsIG1ldGhvZE5hbWUsIGFyZ3NTdHJp
bmcpOwogICAgIH07CiB9CiAKQEAgLTg0LDggKzg0LDMgQEAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5f
aW5zdGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdpbmRvdyIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwdXNoTm9kZVRvRnJvbnRlbmQiKTsKIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOwotCi0vLyBTb21l
IG1ldGhvZHMgY2FuJ3QgcnVuIHN5bmNocm9ub3VzbHkgZXZlbiBvbiB0aGUgaW5qZWN0ZWQgc2Ny
aXB0IHNpZGUgKHN1Y2ggYXMgREIgdHJhbnNhY3Rpb25zKS4KLS8vIE1hcmsgdGhlbSBhcyBhc3lu
Y2hyb25vdXMgaGVyZS4KLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZXhl
Y3V0ZVNxbCIsIHRydWUpOwotCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3RvcmFnZVBhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0b3JhZ2VQ
YW5lbC5qcwppbmRleCA2ODU2M2RlLi4yZDE3OTg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU3RvcmFnZVBhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TdG9yYWdlUGFuZWwuanMKQEAgLTI5OCwzMiArMjk4LDI4IEBAIFdlYkluc3BlY3Rv
ci5TdG9yYWdlUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBkYXRhYmFzZS5nZXRUYWJsZU5h
bWVzKHRhYmxlTmFtZXNDYWxsYmFjayk7CiAgICAgfSwKIAotICAgIGRhdGFHcmlkRm9yUmVzdWx0
OiBmdW5jdGlvbihyb3dzKQorICAgIGRhdGFHcmlkRm9yUmVzdWx0OiBmdW5jdGlvbihjb2x1bW5O
YW1lcywgdmFsdWVzKQogICAgIHsKLSAgICAgICAgaWYgKCFyb3dzLmxlbmd0aCkKKyAgICAgICAg
dmFyIG51bUNvbHVtbnMgPSBjb2x1bW5OYW1lcy5sZW5ndGg7CisgICAgICAgIGlmICghbnVtQ29s
dW1ucykKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCiAgICAgICAgIHZhciBjb2x1bW5zID0g
e307Ci0gICAgICAgIHZhciBudW1Db2x1bW5zID0gMDsKIAotICAgICAgICBmb3IgKHZhciBjb2x1
bW5JZGVudGlmaWVyIGluIHJvd3NbMF0pIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
b2x1bW5OYW1lcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHt9Owot
ICAgICAgICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uSWRlbnRpZmllci5sZW5ndGg7Ci0gICAg
ICAgICAgICBjb2x1bW4udGl0bGUgPSBjb2x1bW5JZGVudGlmaWVyOworICAgICAgICAgICAgY29s
dW1uLndpZHRoID0gY29sdW1uTmFtZXNbaV0ubGVuZ3RoOworICAgICAgICAgICAgY29sdW1uLnRp
dGxlID0gY29sdW1uTmFtZXNbaV07CiAgICAgICAgICAgICBjb2x1bW4uc29ydGFibGUgPSB0cnVl
OwogCi0gICAgICAgICAgICBjb2x1bW5zW2NvbHVtbklkZW50aWZpZXJdID0gY29sdW1uOwotICAg
ICAgICAgICAgKytudW1Db2x1bW5zOworICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5OYW1lc1tp
XV0gPSBjb2x1bW47CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgbm9kZXMgPSBbXTsKLSAgICAg
ICAgdmFyIGxlbmd0aCA9IHJvd3MubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0
aCAvIG51bUNvbHVtbnM7ICsraSkgewogICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTsKLQotICAg
ICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07Ci0gICAgICAgICAgICBmb3IgKHZhciBjb2x1bW5J
ZGVudGlmaWVyIGluIHJvdykKLSAgICAgICAgICAgICAgICBkYXRhW2NvbHVtbklkZW50aWZpZXJd
ID0gcm93W2NvbHVtbklkZW50aWZpZXJdOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBjb2x1bW5OYW1lcy5sZW5ndGg7ICsraikKKyAgICAgICAgICAgICAgICBkYXRhW2NvbHVtbk5h
bWVzW2pdXSA9IHZhbHVlc1tudW1Db2x1bW5zICogaSArIGpdOwogCiAgICAgICAgICAgICB2YXIg
bm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKGRhdGEsIGZhbHNlKTsKICAgICAg
ICAgICAgIG5vZGUuc2VsZWN0YWJsZSA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="52463"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>