<?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>11801</bug_id>
          
          <creation_ts>2006-12-11 05:19:48 -0800</creation_ts>
          <short_desc>Autogenerate POD types in Objc/JS generation</short_desc>
          <delta_ts>2006-12-11 10:08:13 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42594</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-12-11 05:19:48 -0800</bug_when>
    <thetext>Currently we have three hand-written bindings, SVGPoint/SVGRect/SVGNumber, living in WebCore/bindings/js and WebCore/bindings/objc. They work around the fact that our wrapper generation assumes to operate on refcounted impl objects (ie. RefPtr&lt;SVGNumber&gt; m_impl). For efficiency we do NOT pass around SVGRect/SVGPoint/SVGNumber pointers around anymore in ksvg2. That&apos;s why we need a different style of Js/ObjC wrapper, those who operate on POD types.

Basically the attached patch &quot;models&quot; the hand-written generators as they are right now, but automatically using CodeGeneratorJS.pm / CodeGeneratorObjC.pm. This will help a lot in near future, when we also want to convert SVGAngle/SVGPreserveAspectRatio/SVGMatrix/SVGLength to POD types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42596</commentid>
    <comment_count>1</comment_count>
      <attachid>11801</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-12-11 06:28:02 -0800</bug_when>
    <thetext>Created attachment 11801
Initial patch

This patch autogenerates DOMSVGNumber/DOMSVGRect/DOMSVGPoint, and JSSVGNumber/JSSVGRect/JSSVGPoint. The only limitation is that currently the &quot;matrixTransform&quot; method of SVGPoint.idl had to be disabled, it can only work with Rob&apos;s SVGMatrix -&gt; AffineTransform patch.

If this patch gets positive review, we have to wait for Rob&apos;s patch to also get r+, and then land both together otherwhise the matrixTransform() layout test would be broken. Hope that&apos;s fine...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42603</commentid>
    <comment_count>2</comment_count>
      <attachid>11802</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-12-11 09:28:29 -0800</bug_when>
    <thetext>Created attachment 11802
Updated patch

Fix the issue after weinigs first review...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42604</commentid>
    <comment_count>3</comment_count>
      <attachid>11802</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-11 09:36:59 -0800</bug_when>
    <thetext>Comment on attachment 11802
Updated patch

Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42605</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-12-11 10:08:13 -0800</bug_when>
    <thetext>Landed in r18153.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11801</attachid>
            <date>2006-12-11 06:28:02 -0800</date>
            <delta_ts>2006-12-11 09:28:29 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>PODGeneration.diff</filename>
            <type>text/plain</type>
            <size>59788</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDYtMTItMTEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MDEK
KworICAgICAgICBBdXRvZ2VuZXJhdGUgUE9EIHR5cGVzIGZvciBPYmpDL0pTLgorICAgICAgICBU
aGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBoYW5kLXdyaXR0ZW4gSlNTVkcqLCBET01TVkcq
IHdyYXBwZXJzCisgICAgICAgIGluIGJpbmRpbmdzL2pzLCBiaW5kaW5ncy9vYmpjLiBNYWtlcyBp
dCBtdWNoIGVhc2llciB0byBjb252ZXJ0IG1vcmUKKyAgICAgICAgU1ZHIHR5cGVzIHRvIFBPRCB0
eXBlcyAoaWUuIFNWR01hdHJpeCogLT4gQWZmaW5lVHJhbnNmb3JtIGV0Yy4pCisKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1NWR1BvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdSZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1JlY3QuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVNWR051bWJlci5tbTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVNWR1BvaW50Lm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL29iamMvRE9NU1ZHUmVjdC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdOdW1i
ZXIuaWRsOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2ludC5pZGw6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1JlY3QuaWRsOgorCiAyMDA2LTEyLTEwICBMYXJzIEtub2xsIDxsYXJzQHRyb2xs
dGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWmFjawpJbmRleDogV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTQyNCwxNCArNDI0LDE3IEBAIGFsbCA6IFwKICAgICBKU1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbC5oIFwKICAgICBKU1NWR1BhdGhTZWdNb3ZldG9BYnMuaCBcCiAgICAg
SlNTVkdQYXRoU2VnTW92ZXRvUmVsLmggXAorICAgIEpTU1ZHTnVtYmVyLmggXAogICAgIEpTU1ZH
TnVtYmVyTGlzdC5oIFwKICAgICBKU1NWR1BhaW50LmggXAogICAgIEpTU1ZHUGF0aFNlZ0xpc3Qu
aCBcCiAgICAgSlNTVkdQYXR0ZXJuRWxlbWVudC5oIFwKKyAgICBKU1NWR1BvaW50LmggXAogICAg
IEpTU1ZHUG9pbnRMaXN0LmggXAogICAgIEpTU1ZHUG9seWdvbkVsZW1lbnQuaCBcCiAgICAgSlNT
VkdQb2x5bGluZUVsZW1lbnQuaCBcCiAgICAgSlNTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCBc
CisgICAgSlNTVkdSZWN0LmggXAogICAgIEpTU1ZHUmVjdEVsZW1lbnQuaCBcCiAgICAgSlNTVkdS
ZW5kZXJpbmdJbnRlbnQuaCBcCiAgICAgSlNTVkdTZXRFbGVtZW50LmggXApAQCAtNDUyLDEwICs0
NTUsNyBAQCBhbGwgOiBcCiAgICAgSlNTVkdVbml0VHlwZXMuaCBcCiAgICAgSlNTVkdVc2VFbGVt
ZW50LmggXAogICAgIEpTU1ZHVmlld0VsZW1lbnQuaCBcCi0gICAgSlNTVkdQb2ludFRhYmxlLmNw
cCBcCiAgICAgSlNTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmggXAotICAgIEpTU1ZHUmVjdFRhYmxl
LmNwcCBcCi0gICAgSlNTVkdOdW1iZXJUYWJsZS5jcHAgXAogICAgIEpTU1ZHRWxlbWVudC5oIFwK
ICAgICBKU1NWR1NWR0VsZW1lbnQuaCBcCiAgICAgSlNTVkdFbGxpcHNlRWxlbWVudC5oIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
ODE0OSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODI2LDExICszODI2LDExIEBACiAJCTg1NzREMUYxMEFERTYxMjIwMDRD
QkExMSAvKiBKU1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTc0RDFGMjBBREU2MTIyMDA0Q0JBMTEgLyogSlNT
VkdFbGVtZW50V3JhcHBlckZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg1NzREMUYzMEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR051bWJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdOdW1iZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NTc0RDFGNDBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdO
dW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHTnVtYmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NzREMUY0MEFERTYxMjIwMDRDQkExMSAv
KiBKU1NWR051bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IHBhdGggPSBKU1NW
R051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTc0RDFGNTBBREU2MTIy
MDA0Q0JBMTEgLyogSlNTVkdQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTVkdQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1
NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR1BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg1NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgcGF0aCA9IEpTU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODU3NEQxRjcwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdSZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODU3NEQxRjgwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZH
UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdSZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NzREMUY4MEFERTYxMjIwMDRDQkExMSAvKiBK
U1NWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBwYXRoID0gSlNTVkdSZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1NzREMjM5MEFERTdFM0EwMDRDQkEx
MSAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdab29tRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTdFMEIyMzBBQjA0MzQ2MDAz
NkU0NDcgLyogRE9NTW91c2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NTW91c2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTdFMEIy
NDBBQjA0MzQ2MDAzNkU0NDcgLyogRE9NTW91c2VFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01Nb3VzZUV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjE5NCw2ICs2MTk0LDggQEAKIAkJCQlCMkZBM0NDNTBBQjc1QTZFMDAw
RTVBQzQgLyogSlNTVkdNYXRyaXguaCAqLywKIAkJCQlCMkZBM0NDNjBBQjc1QTZFMDAwRTVBQzQg
LyogSlNTVkdNZXRhZGF0YUVsZW1lbnQuY3BwICovLAogCQkJCUIyRkEzQ0M3MEFCNzVBNkUwMDBF
NUFDNCAvKiBKU1NWR01ldGFkYXRhRWxlbWVudC5oICovLAorCQkJCTg1NzREMUYzMEFERTYxMjIw
MDRDQkExMSAvKiBKU1NWR051bWJlci5jcHAgKi8sCisJCQkJODU3NEQxRjQwQURFNjEyMjAwNENC
QTExIC8qIEpTU1ZHTnVtYmVyLmggKi8sCiAJCQkJQjJGQTNDQzgwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHTnVtYmVyTGlzdC5jcHAgKi8sCiAJCQkJQjJGQTNDQzkwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHTnVtYmVyTGlzdC5oICovLAogCQkJCUIyRkEzQ0NBMEFCNzVBNkUwMDBFNUFDNCAvKiBK
U1NWR1BhaW50LmNwcCAqLywKQEAgLTYyNDQsNiArNjI0Niw4IEBACiAJCQkJQjJGQTNDRjcwQUI3
NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b1JlbC5oICovLAogCQkJCUIyRkEzQ0Y4
MEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR1BhdHRlcm5FbGVtZW50LmNwcCAqLywKIAkJCQlCMkZB
M0NGOTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdQYXR0ZXJuRWxlbWVudC5oICovLAorCQkJCTg1
NzREMUY1MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmNwcCAqLywKKwkJCQk4NTc0RDFG
NjBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdQb2ludC5oICovLAogCQkJCUIyRkEzQ0ZBMEFCNzVB
NkUwMDBFNUFDNCAvKiBKU1NWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjJGQTNDRkIwQUI3NUE2
RTAwMEU1QUM0IC8qIEpTU1ZHUG9pbnRMaXN0LmggKi8sCiAJCQkJQjJGQTNDRkQwQUI3NUE2RTAw
MEU1QUM0IC8qIEpTU1ZHUG9seWdvbkVsZW1lbnQuY3BwICovLApAQCAtNjI1NCw2ICs2MjU4LDgg
QEAKIAkJCQlCMkZBM0QwMjBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmggKi8sCiAJCQkJQjJGQTNEMDMwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcCAqLywKIAkJCQlCMkZBM0QwNDBBQjc1QTZFMDAwRTVBQzQgLyogSlNT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCAqLywKKwkJCQk4NTc0RDFGNzBBREU2MTIyMDA0Q0JB
MTEgLyogSlNTVkdSZWN0LmNwcCAqLywKKwkJCQk4NTc0RDFGODBBREU2MTIyMDA0Q0JBMTEgLyog
SlNTVkdSZWN0LmggKi8sCiAJCQkJQjJGQTNEMDUwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmVj
dEVsZW1lbnQuY3BwICovLAogCQkJCUIyRkEzRDA2MEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR1Jl
Y3RFbGVtZW50LmggKi8sCiAJCQkJQjJGQTNEMDgwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmVu
ZGVyaW5nSW50ZW50LmNwcCAqLywKQEAgLTY3OTgsOSArNjgwNCw2IEBACiAJCTg1NDk0OTJEMEFD
ODVBMEEwMDhBQjAzNSAvKiBTVkcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTg1MTYyMEVFMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdOdW1iZXIubW0g
Ki8sCi0JCQkJODUxNjIwRjAwQUQyRkQ4ODAwNTlBN0RFIC8qIERPTVNWR1BvaW50Lm1tICovLAot
CQkJCTg1MTYyMEYyMEFEMkZEODkwMDU5QTdERSAvKiBET01TVkdSZWN0Lm1tICovLAogCQkJCTg1
Q0UxQjAxMEFEQURBOTYwMDNCQkRFQSAvKiBET01TVkdQYXRoU2VnSW50ZXJuYWwubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IFNWRzsKQEAgLTcwNjAsNiArNzA2Myw3IEBACiAJCQkJODU1OUYxMTAw
QUM5QkU5OTAwQTM0MzlDIC8qIERPTVNWR01ldGFkYXRhRWxlbWVudC5oICovLAogCQkJCTg1NTlG
MTExMEFDOUJFOTkwMEEzNDM5QyAvKiBET01TVkdNZXRhZGF0YUVsZW1lbnQubW0gKi8sCiAJCQkJ
ODU0MDc0RjkwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR051bWJlci5oICovLAorCQkJCTg1MTYy
MEVFMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdOdW1iZXIubW0gKi8sCiAJCQkJODVDMjM5N0Yw
QUQ1OTA3RDAwMzUzM0U3IC8qIERPTVNWR051bWJlckxpc3QuaCAqLywKIAkJCQk4NUMyMzk4MDBB
RDU5MDdEMDAzNTMzRTcgLyogRE9NU1ZHTnVtYmVyTGlzdC5tbSAqLywKIAkJCQk4NUM5QTMwMzBB
RDdFOTQyMDBGQkZGMUUgLyogRE9NU1ZHUGFpbnQuaCAqLywKQEAgLTcxMTEsNiArNzExNSw3IEBA
CiAJCQkJODU5RDYyNzEwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BhdHRlcm5FbGVtZW50Lmgg
Ki8sCiAJCQkJODU5RDYyNzIwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BhdHRlcm5FbGVtZW50
Lm1tICovLAogCQkJCTg1NDA3NEZBMEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdQb2ludC5oICov
LAorCQkJCTg1MTYyMEYwMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdQb2ludC5tbSAqLywKIAkJ
CQk4NTlENjI3MzBBRDg4OEVFMDAwMTI5OTUgLyogRE9NU1ZHUG9pbnRMaXN0LmggKi8sCiAJCQkJ
ODU5RDYyNzQwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BvaW50TGlzdC5tbSAqLywKIAkJCQk4
NTlENjI3NTBBRDg4OEVFMDAwMTI5OTUgLyogRE9NU1ZHUG9seWdvbkVsZW1lbnQuaCAqLywKQEAg
LTcxMjIsNiArNzEyNyw3IEBACiAJCQkJODU5RDYyNzkwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5oICovLAogCQkJCTg1OUQ2MjdBMEFEODg4RUUwMDAxMjk5
NSAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQubW0gKi8sCiAJCQkJODU0MDc0RkIwQUQ2
QzIyRTAwNjIwQzU3IC8qIERPTVNWR1JlY3QuaCAqLywKKwkJCQk4NTE2MjBGMjBBRDJGRDg5MDA1
OUE3REUgLyogRE9NU1ZHUmVjdC5tbSAqLywKIAkJCQk4NTlDOUMzRDBBQ0FDQ0NDMDA3OTE2MTEg
LyogRE9NU1ZHUmVjdEVsZW1lbnQuaCAqLywKIAkJCQk4NTlDOUMzRTBBQ0FDQ0NDMDA3OTE2MTEg
LyogRE9NU1ZHUmVjdEVsZW1lbnQubW0gKi8sCiAJCQkJODU5RDYyN0IwQUQ4ODhFRTAwMDEyOTk1
IC8qIERPTVNWR1JlbmRlcmluZ0ludGVudC5oICovLApAQCAtODY0NSwxMiArODY1MSw2IEBACiAJ
CQkJMUE3NTBERDMwQTkwRTcyOTAwMEZGMjE1IC8qIEpTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCAq
LywKIAkJCQk4NTc0RDFGMTBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdFbGVtZW50V3JhcHBlckZh
Y3RvcnkuY3BwICovLAogCQkJCTg1NzREMUYyMEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR0VsZW1l
bnRXcmFwcGVyRmFjdG9yeS5oICovLAotCQkJCTg1NzREMUYzMEFERTYxMjIwMDRDQkExMSAvKiBK
U1NWR051bWJlci5jcHAgKi8sCi0JCQkJODU3NEQxRjQwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZH
TnVtYmVyLmggKi8sCi0JCQkJODU3NEQxRjUwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUG9pbnQu
Y3BwICovLAotCQkJCTg1NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8s
Ci0JCQkJODU3NEQxRjcwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5jcHAgKi8sCi0JCQkJ
ODU3NEQxRjgwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5oICovLAogCQkJCTFBNzUwRTMz
MEE5MEY4OUYwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwICovLAogCQkJCTkzQjcw
RDQxMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCAqLywKIAkJCQk5M0I3
MEQ0MjA5RUIwQzdDMDA5RDg0NjggLyogSlNYTUxIdHRwUmVxdWVzdC5oICovLApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAJKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWZkZWYgU1ZH
X1NVUFBPUlQKLQotI2luY2x1ZGUgIkpTU1ZHTnVtYmVyLmgiCi0KLSNpbmNsdWRlICJKU1NWR051
bWJlclRhYmxlLmNwcCIKLQotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBDbGFzc0luZm8gSlNTVkdOdW1iZXI6OmluZm8gPSB7ICJTVkdOdW1iZXIi
LCAwLCAmSlNTVkdOdW1iZXJUYWJsZSwgMCB9OwotCi0vKgotQGJlZ2luIEpTU1ZHTnVtYmVyVGFi
bGUgNAotICB2YWx1ZSAgICAgICAgIFdlYkNvcmU6OkpTU1ZHTnVtYmVyOjpOdW1iZXJWYWx1ZSAg
ICAgICBEb250RGVsZXRlCi1AZW5kCi0qLwotCi1KU1NWR051bWJlcjo6fkpTU1ZHTnVtYmVyKCkK
LXsKLX0KLQotYm9vbCBKU1NWR051bWJlcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1NWR051bWJlciwgRE9NT2JqZWN0
PihleGVjLCAgJkpTU1ZHTnVtYmVyVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19
Ci0KLUpTVmFsdWUqIEpTU1ZHTnVtYmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE51
bWJlclZhbHVlOgotICAgICAgICByZXR1cm4ganNOdW1iZXIobV92YWx1ZSk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIEpTU1ZHTnVtYmVyOjpwdXQo
S0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKLXsKLSAgICBsb29rdXBQdXQ8SlNTVkdO
dW1iZXI+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR051bWJlclRhYmxl
LCB0aGlzKTsKLX0KLQotdm9pZCBKU1NWR051bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikK
LXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBOdW1iZXJWYWx1ZToKLSAgICAgICAg
bV92YWx1ZSA9IHZhbHVlLT50b051bWJlcihleGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1KU1ZhbHVlKiBnZXRKU1NWR051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2KQot
ewotICAgIHJldHVybiBuZXcgSlNTVkdOdW1iZXIoZXhlYywgdik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR051bWJlci5oCShyZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdOdW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEpTU1ZHTnVtYmVyX2gKLSNkZWZpbmUgSlNTVkdOdW1iZXJfaAotCi0j
aWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNTVkdOdW1iZXIgOiBwdWJsaWMgS0pTOjpET01PYmplY3Qg
ewotcHVibGljOgotICAgIEpTU1ZHTnVtYmVyKEtKUzo6RXhlY1N0YXRlKiwgZG91YmxlIHYpIDog
bV92YWx1ZSh2KSB7IH0KLSAgICB+SlNTVkdOdW1iZXIoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXIm
LCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHB1dChL
SlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6SlNWYWx1ZSosIGlu
dCBhdHRyID0gS0pTOjpOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUqLCBpbnQsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyKTsKLQotICAgIHZpcnR1YWwgY29u
c3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87Ci0KLSAgICBlbnVtIHsgTnVtYmVy
VmFsdWUgfTsKLQotICAgIGRvdWJsZSBpbXBsKCkgeyByZXR1cm4gbV92YWx1ZTsgfQotCi1wcml2
YXRlOgotICAgIGRvdWJsZSBtX3ZhbHVlOwotfTsKLQotS0pTOjpKU1ZhbHVlKiBnZXRKU1NWR051
bWJlcihLSlM6OkV4ZWNTdGF0ZSosIGRvdWJsZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0KLSNlbmRpZiAvLyBKU1NWR051bWJlcl9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAJKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NWR1BvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWZkZWYg
U1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKLQotI2luY2x1ZGUgIkpTU1ZH
TWF0cml4LmgiCi0jaW5jbHVkZSAiU1ZHTWF0cml4LmgiCi0jaW5jbHVkZSAiSlNTVkdQb2ludFRh
YmxlLmNwcCIKLQotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jb25zdCBDbGFzc0luZm8gSlNTVkdQb2ludDo6aW5mbyA9IHsgIlNWR1BvaW50IiwgMCwgJkpT
U1ZHUG9pbnRUYWJsZSwgMCB9OwotLyoKLUBiZWdpbiBKU1NWR1BvaW50VGFibGUgNAotICB4ICAg
ICAgICAgV2ViQ29yZTo6SlNTVkdQb2ludDo6UG9pbnRYICAgICAgIERvbnREZWxldGUKLSAgeSAg
ICAgICAgIFdlYkNvcmU6OkpTU1ZHUG9pbnQ6OlBvaW50WSAgICAgICBEb250RGVsZXRlCi1AZW5k
Ci1AYmVnaW4gSlNTVkdQb2ludFByb3RvVGFibGUgMgotIG1hdHJpeFRyYW5zZm9ybSAgICBXZWJD
b3JlOjpKU1NWR1BvaW50OjpNYXRyaXhUcmFuc2Zvcm0gRG9udERlbGV0ZXxGdW5jdGlvbiAxCi1A
ZW5kCi0qLwotCi1LSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhKU1NWR1BvaW50UHJvdG9GdW5jKQot
S0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkpTU1ZHUG9pbnQiLCBKU1NWR1BvaW50UHJvdG8sIEpT
U1ZHUG9pbnRQcm90b0Z1bmMpCi0KLUpTU1ZHUG9pbnQ6OkpTU1ZHUG9pbnQoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEZsb2F0UG9pbnQmIHApIDogbV9wb2ludChwKQotewotICAgIHNldFBy
b3RvdHlwZShKU1NWR1BvaW50UHJvdG86OnNlbGYoZXhlYykpOwotfQotCi1KU1NWR1BvaW50Ojp+
SlNTVkdQb2ludCgpCi17Ci19Ci0KLWJvb2wgSlNTVkdQb2ludDo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1NWR1BvaW50
LCBET01PYmplY3Q+KGV4ZWMsICAmSlNTVkdQb2ludFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwotfQotCi1KU1ZhbHVlKiBKU1NWR1BvaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFBvaW50WDoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcG9pbnQueCgpKTsKLSAg
ICBjYXNlIFBvaW50WToKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcG9pbnQueSgpKTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgSlNTVkdQb2lu
dDo6cHV0KEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCi17Ci0gICAgbG9va3VwUHV0
PEpTU1ZHUG9pbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR1BvaW50
VGFibGUsIHRoaXMpOwotfQotCi12b2lkIEpTU1ZHUG9pbnQ6OnB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0
dHIpCi17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUG9pbnRYOgotICAgICAgICBt
X3BvaW50LnNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQb2ludFk6Ci0gICAgICAgIG1fcG9pbnQuc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIEpTU1ZHUG9pbnRQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNTVkdQb2lu
dDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0K
LSNpZmRlZiBTVkdfU1VQUE9SVAotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBzdGF0aWNfY2FzdDxK
U1NWR1BvaW50Kj4odGhpc09iaiktPmltcGwoKTsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAg
IGNhc2UgSlNTVkdQb2ludDo6TWF0cml4VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICBTVkdNYXRy
aXgqIG1hdCA9IHRvU1ZHTWF0cml4KGFyZ3NbMF0pOwotICAgICAgICAgICAgaWYgKCFtYXQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHAgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0LT5tYXRyaXgoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0SlNTVkdQb2ludChleGVjLCBwKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIGdldEpTU1ZHUG9p
bnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBu
ZXcgSlNTVkdQb2ludChleGVjLCBwKTsKLX0KLQotRmxvYXRQb2ludCB0b0Zsb2F0UG9pbnQoSlNW
YWx1ZSogdmFsKQotewotICAgIHJldHVybiB2YWwtPmlzT2JqZWN0KCZKU1NWR1BvaW50OjppbmZv
KSA/IHN0YXRpY19jYXN0PEpTU1ZHUG9pbnQqPih2YWwpLT5pbXBsKCkgOiBGbG9hdFBvaW50KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTU1ZHUG9pbnRfaAotI2RlZmluZSBKU1NW
R1BvaW50X2gKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbmNsdWRlICJranNfYmluZGluZy5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LSlNf
REVGSU5FX1BST1RPVFlQRShKU1NWR1BvaW50UHJvdG8pCi0KLWNsYXNzIEpTU1ZHUG9pbnQgOiBw
dWJsaWMgS0pTOjpET01PYmplY3QgewotcHVibGljOgotICAgIEpTU1ZHUG9pbnQoS0pTOjpFeGVj
U3RhdGUqLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgfkpTU1ZHUG9pbnQoKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotCi0gICAgdmlydHVh
bCB2b2lkIHB1dChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6
SlNWYWx1ZSosIGludCBhdHRyID0gS0pTOjpOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyKTsKLQotICAg
IHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87Ci0KLSAgICBl
bnVtIHsgUG9pbnRYLCBQb2ludFksIE1hdHJpeFRyYW5zZm9ybSB9OwotCi0gICAgRmxvYXRQb2lu
dCBpbXBsKCkgeyByZXR1cm4gbV9wb2ludDsgfQotIAotcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50
IG1fcG9pbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIEpTU1ZHUG9pbnRQcm90bzsKLX07Ci0KLUtKUzo6
SlNWYWx1ZSogZ2V0SlNTVkdQb2ludChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEZsb2F0UG9pbnQm
KTsKLUZsb2F0UG9pbnQgdG9GbG9hdFBvaW50KEtKUzo6SlNWYWx1ZSopOwotICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0KLSNlbmRpZiAvLyBKU1NW
R1BvaW50X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUmVjdC5jcHAJKHJldmlzaW9uIDE4MTQ5
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1JlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVkZSAiSlNTVkdSZWN0LmgiCi0KLSNpbmNs
dWRlICJKU1NWR1JlY3RUYWJsZS5jcHAiCi0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY29uc3QgQ2xhc3NJbmZvIEpTU1ZHUmVjdDo6aW5mbyA9IHsgIlNW
R1JlY3QiLCAwLCAmSlNTVkdSZWN0VGFibGUsIDAgfTsKLS8qCi1AYmVnaW4gSlNTVkdSZWN0VGFi
bGUgNAotICB4ICAgICAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0WCAgICAgICAgICAgRG9u
dERlbGV0ZQotICB5ICAgICAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0WSAgICAgICAgICAg
RG9udERlbGV0ZQotICB3aWR0aCAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0V2lkdGggICAg
ICAgRG9udERlbGV0ZQotICBoZWlnaHQgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0SGVpZ2h0
ICAgICAgRG9udERlbGV0ZQotQGVuZAotKi8KLQotSlNTVkdSZWN0Ojp+SlNTVkdSZWN0KCkKLXsK
LX0KLQotYm9vbCBKU1NWR1JlY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNTVkdSZWN0LCBET01PYmplY3Q+KGV4ZWMs
ICAmSlNTVkdSZWN0VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFs
dWUqIEpTU1ZHUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBSZWN0WDoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fcmVjdC54KCkpOwotICAgIGNhc2UgUmVjdFk6Ci0gICAgICAg
IHJldHVybiBqc051bWJlcihtX3JlY3QueSgpKTsKLSAgICBjYXNlIFJlY3RXaWR0aDoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fcmVjdC53aWR0aCgpKTsKLSAgICBjYXNlIFJlY3RIZWlnaHQ6
Ci0gICAgICAgIHJldHVybiBqc051bWJlcihtX3JlY3QuaGVpZ2h0KCkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBKU1NWR1JlY3Q6OnB1dChLSlM6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEtK
Uzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQotewotICAgIGxvb2t1cFB1dDxKU1NWR1JlY3Q+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR1JlY3RUYWJsZSwgdGhpcyk7
Ci19Ci0KLXZvaWQgSlNTVkdSZWN0OjpwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4sIEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQotewotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFJlY3RYOgotICAgICAgICBtX3JlY3Quc2V0WCh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlY3RZOgotICAg
ICAgICBtX3JlY3Quc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJlY3RXaWR0aDoKLSAgICAgICAgbV9yZWN0LnNldFdpZHRoKHZhbHVlLT50b051
bWJlcihleGVjKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdEhlaWdodDoKLSAgICAg
ICAgbV9yZWN0LnNldEhlaWdodCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVh
azsKLSAgICB9ICAKLX0KLQotSlNWYWx1ZSogZ2V0SlNTVkdSZWN0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIHJldHVybiBuZXcgSlNTVkdSZWN0KGV4ZWMsIHIp
OwotfQotCi1GbG9hdFJlY3QgdG9GbG9hdFJlY3QoSlNWYWx1ZSogdmFsKQotewotICAgIHJldHVy
biB2YWwtPmlzT2JqZWN0KCZKU1NWR1JlY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8SlNTVkdSZWN0
Kj4odmFsKS0+aW1wbCgpIDogRmxvYXRSZWN0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdSZWN0LmgJ
KHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1JlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEpTU1ZHUmVjdF9oCi0jZGVmaW5lIEpTU1ZHUmVjdF9oCi0KLSNpZmRlZiBTVkdfU1VQUE9SVAot
Ci0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU1NWR1JlY3QgOiBwdWJsaWMgS0pTOjpET01PYmpl
Y3QgewotcHVibGljOgotICAgIEpTU1ZHUmVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEZsb2F0
UmVjdCYgcikgOiBtX3JlY3QocikgeyB9Ci0gICAgfkpTU1ZHUmVjdCgpOwotCi0gICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1Zh
bHVlKiwgaW50IGF0dHIgPSBLSlM6Ok5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSosIGludCwgS0pTOjpKU1ZhbHVlKiwgaW50IGF0dHIpOwotCi0gICAgdmly
dHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KLSAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgIGVudW0g
eyBSZWN0WCwgUmVjdFksIFJlY3RXaWR0aCwgUmVjdEhlaWdodCB9OwotCi0gICAgRmxvYXRSZWN0
IGltcGwoKSB7IHJldHVybiBtX3JlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBGbG9hdFJlY3QgbV9y
ZWN0OwotfTsKLQotS0pTOjpKU1ZhbHVlKiBnZXRKU1NWR1JlY3QoS0pTOjpFeGVjU3RhdGUqLCBj
b25zdCBGbG9hdFJlY3QmKTsKLUZsb2F0UmVjdCB0b0Zsb2F0UmVjdChLSlM6OkpTVmFsdWUqKTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQotI2Vu
ZGlmIC8vIEpTU1ZHUmVjdF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NU1ZHTnVt
YmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdOdW1iZXIu
bW0JKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVNWR051bWJl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbXBvcnQg
IkRPTVNWR051bWJlci5oIgotCi0jaW1wb3J0ICJET01JbnRlcm5hbC5oIgotCi0jZGVmaW5lIElN
UEwgKihyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oX2ludGVybmFsKSkKLQotQGltcGxlbWVudGF0
aW9uIERPTVNWR051bWJlcgotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBkZWxldGUgcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KF9pbnRlcm5hbCk7Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
PihfaW50ZXJuYWwpOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKGZsb2F0KXZhbHVl
Ci17Ci0gICAgcmV0dXJuIElNUEw7Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGZsb2F0KW5ld1Zh
bHVlCi17Ci0gICAgSU1QTCA9IG5ld1ZhbHVlOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBET01TVkdOdW1iZXIgKFdlYkNvcmVJbnRlcm5hbCkKLQotLSAoZmxvYXQpX1NWR051bWJlcgot
ewotICAgIHJldHVybiBJTVBMOwotfQotCi0tIChpZClfaW5pdFdpdGhGbG9hdDooZmxvYXQpdmFs
dWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAgICBbc3VwZXIgX2luaXRd
OwotICAgIGZsb2F0ICppbXBsID0gbmV3IGZsb2F0OwotICAgICppbXBsID0gdmFsdWU7Ci0gICAg
X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0rIChET01TVkdOdW1iZXIgKilfU1ZHTnVtYmVyV2l0aDoo
ZmxvYXQpdmFsdWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAgICByZXR1
cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXQ6dmFsdWVdIGF1dG9yZWxlYXNlXTsKLX0K
LQotQGVuZAotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01TVkdQb2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NU1ZHUG9pbnQubW0JKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTVNWR1BvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JU
Ci0KLSNpbXBvcnQgIkRPTVNWR1BvaW50LmgiCi0KLSNpbXBvcnQgIkRPTUludGVybmFsLmgiCi0j
aW1wb3J0ICJET01TVkdNYXRyaXguaCIKLSNpbXBvcnQgIkZsb2F0UG9pbnQuaCIKLSNpbXBvcnQg
IlNWR01hdHJpeC5oIgotCi0jZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpG
bG9hdFBvaW50Kj4oX2ludGVybmFsKQotCi1AaW1wbGVtZW50YXRpb24gRE9NU1ZHUG9pbnQKLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgZGVsZXRlIElNUEw7Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgZGVsZXRlIElNUEw7Ci0gICAgW3N1cGVy
IGZpbmFsaXplXTsKLX0KLQotLSAoZmxvYXQpeAotewotICAgIHJldHVybiBJTVBMLT54KCk7Ci19
Ci0KLS0gKHZvaWQpc2V0WDooZmxvYXQpbmV3WAotewotICAgIElNUEwtPnNldFgobmV3WCk7Ci19
Ci0KLS0gKGZsb2F0KXkKLXsKLSAgICByZXR1cm4gSU1QTC0+eSgpOwotfQotCi0tICh2b2lkKXNl
dFk6KGZsb2F0KW5ld1kKLXsKLSAgICBJTVBMLT5zZXRZKG5ld1kpOwotfQotCi0tIChET01TVkdQ
b2ludCAqKW1hdHJpeFRyYW5zZm9ybTooRE9NU1ZHTWF0cml4ICopbWF0cml4Ci17Ci0gICAgQVNT
RVJUKG1hdHJpeCk7Ci0gICAgcmV0dXJuIFtET01TVkdQb2ludCBfU1ZHUG9pbnRXaXRoOklNUEwt
Pm1hdHJpeFRyYW5zZm9ybShbbWF0cml4IF9TVkdNYXRyaXhdLT5tYXRyaXgoKSldOwotfQotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBET01TVkdQb2ludCAoV2ViQ29yZUludGVybmFsKQotCi0t
IChXZWJDb3JlOjpGbG9hdFBvaW50KV9TVkdQb2ludAotewotICAgIHJldHVybiAqKElNUEwpOwot
fQotCi0tIChpZClfaW5pdFdpdGhGbG9hdFBvaW50OihXZWJDb3JlOjpGbG9hdFBvaW50KXZhbHVl
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBDYWNoaW5nCi0gICAgW3N1cGVyIF9pbml0XTsK
LSAgICBXZWJDb3JlOjpGbG9hdFBvaW50ICppbXBsID0gbmV3IFdlYkNvcmU6OkZsb2F0UG9pbnQo
dmFsdWUpOwotICAgIF9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJu
YWwqPihpbXBsKTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotKyAoRE9NU1ZHUG9pbnQgKilfU1ZH
UG9pbnRXaXRoOihXZWJDb3JlOjpGbG9hdFBvaW50KWltcGwKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IENhY2hpbmcKLSAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXRQ
b2ludDppbXBsXSBhdXRvcmVsZWFzZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCi0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCShyZXZpc2lvbiAxODE0
OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNh
bXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbXBvcnQgIkRPTVNWR1JlY3QuaCIKLQot
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgotCi0jZGVmaW5l
IElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpGbG9hdFJlY3QqPihfaW50ZXJuYWwpCi0K
LUBpbXBsZW1lbnRhdGlvbiBET01TVkdSZWN0Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGRl
bGV0ZSBJTVBMOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQot
ewotICAgIGRlbGV0ZSBJTVBMOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKGZsb2F0
KXgKLXsKLSAgICByZXR1cm4gSU1QTC0+eCgpOwotfQotCi0tICh2b2lkKXNldFg6KGZsb2F0KW5l
d1gKLXsKLSAgICBJTVBMLT5zZXRYKG5ld1gpOwotfQotCi0tIChmbG9hdCl5Ci17Ci0gICAgcmV0
dXJuIElNUEwtPnkoKTsKLX0KLQotLSAodm9pZClzZXRZOihmbG9hdCluZXdZCi17Ci0gICAgSU1Q
TC0+c2V0WShuZXdZKTsKLX0KLQotLSAoZmxvYXQpd2lkdGgKLXsKLSAgICByZXR1cm4gSU1QTC0+
d2lkdGgoKTsKLX0KLQotLSAodm9pZClzZXRXaWR0aDooZmxvYXQpbmV3V2lkdGgKLXsKLSAgICBJ
TVBMLT5zZXRXaWR0aChuZXdXaWR0aCk7Ci19Ci0KLS0gKGZsb2F0KWhlaWdodAotewotICAgIHJl
dHVybiBJTVBMLT5oZWlnaHQoKTsKLX0KLQotLSAodm9pZClzZXRIZWlnaHQ6KGZsb2F0KW5ld0hl
aWdodAotewotICAgIElNUEwtPnNldEhlaWdodChuZXdIZWlnaHQpOwotfQotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBET01TVkdSZWN0IChXZWJDb3JlSW50ZXJuYWwpCi0KLS0gKFdlYkNvcmU6
OkZsb2F0UmVjdClfU1ZHUmVjdAotewotICAgIHJldHVybiAqKElNUEwpOwotfQotCi0tIChpZClf
aW5pdFdpdGhGbG9hdFJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl2YWx1ZQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgQ2FjaGluZwotICAgIFtzdXBlciBfaW5pdF07Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0ICppbXBsID0gbmV3IFdlYkNvcmU6OkZsb2F0UmVjdCh2YWx1ZSk7Ci0gICAgX2lu
dGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0rIChET01TVkdSZWN0ICopX1NWR1JlY3RXaXRoOihXZWJDb3Jl
OjpGbG9hdFJlY3QpdmFsdWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAg
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXRSZWN0OnZhbHVlXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE4MTQ5KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDggKzE5NSwxMCBAQCBzdWIgQWRkSW5jbHVkZXNGb3JTVkdBbmltYXRlZFR5
cGUKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAgICR0eXBlID1+IHMvU1ZHQW5pbWF0ZWQvLzsK
IAotICAgIGlmICgkdHlwZSBlcSAiU1ZHUmVjdCIgb3IgJHR5cGUgZXEgIlNWR1BvaW50IiBvciAk
dHlwZSBlcSAiU1ZHTnVtYmVyIikgewotICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU1NWRyR0eXBl
LmgifSA9IDE7CisgICAgaWYgKCR0eXBlIGVxICJQb2ludCIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siRmxvYXRQb2ludC5oIn0gPSAxOworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJSZWN0Iikg
eworICAgICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFJlY3QuaCJ9ID0gMTsKICAgICB9IGVsc2lm
ICgkdHlwZSBlcSAiU3RyaW5nIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0
cmluZy5oIn0gPSAxOwogICAgIH0KQEAgLTI2Myw2ICsyNjUsMTMgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAjIEdldCBjb3JyZWN0IHBhc3Mvc3RvcmUgdHlw
ZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKKyAgICBteSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKKyAgICBteSAkcGFzc1R5cGUgPSAiJGlt
cGxDbGFzc05hbWUqIjsKKyAgICAkcGFzc1R5cGUgPSAiY29uc3QgJHBvZFR5cGUmIiBpZigkcG9k
VHlwZSk7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkcG9kVHlwZS5o
XCJcbiIpIGlmICgkcG9kVHlwZSBhbmQgJHBvZFR5cGUgbmUgImZsb2F0Iik7CisKICAgICBteSAk
bnVtQ29uc3RhbnRzID0gQHskZGF0YU5vZGUtPmNvbnN0YW50c307CiAgICAgbXkgJG51bUF0dHJp
YnV0ZXMgPSBAeyRkYXRhTm9kZS0+YXR0cmlidXRlc307CiAgICAgbXkgJG51bUZ1bmN0aW9ucyA9
IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9OwpAQCAtMjcwLDcgKzI3OSw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtc
blxuIik7CiAKICAgICAjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvcndhcmQgZGVjbGFyYXRpb24K
LSAgICBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZCgkaW1wbENsYXNzTmFtZSk7CisgICAgQWRkQ2xh
c3NGb3J3YXJkSWZOZWVkZWQoJGltcGxDbGFzc05hbWUpIHVubGVzcygkcG9kVHlwZSk7CiAKICAg
ICAjIENsYXNzIGRlY2xhcmF0aW9uCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRj
bGFzc05hbWUgOiBwdWJsaWMgJHBhcmVudENsYXNzTmFtZSB7XG4iKTsKQEAgLTI3OCw5ICsyODcs
OSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDYWNoZSJ9KSB7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZSgkaW1wbENsYXNzTmFtZSopO1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZSgkcGFzc1R5cGUp
O1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAk
Y2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlKiwgJGltcGxDbGFzc05hbWUqKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoS0pTOjpFeGVjU3RhdGUqLCAk
cGFzc1R5cGUpO1xuIik7CiAgICAgfQogCiAgICAgIyBEZXN0cnVjdG9yCkBAIC00MDAsOSArNDA5
LDE2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgIGlmICghJGhhc1BhcmVudCkg
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9XG4iKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgInByaXZhdGU6XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBSZWZQdHI8JGltcGxDbGFzc05hbWU+IG1faW1wbDtcbiIpOworICAgICAgICAgaWYgKCRw
b2RUeXBlKSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRwb2RUeXBl
JiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsOyB9XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgY29uc3QgJHBvZFR5cGUmIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2lt
cGw7IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByaXZhdGU6XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHBvZFR5cGUgbV9pbXBs
O1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgp
OyB9XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcml2YXRlOlxuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIFJlZlB0cjwkaW1wbENsYXNz
TmFtZT4gbV9pbXBsO1xuIik7CisgICAgICAgIH0KICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciJ9KSB7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwoKSBjb25zdDtc
biIpOwogICAgIH0KQEAgLTQyMiwxMCArNDM4LDE0IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKIAogICAgIGlmICghJGhhc1BhcmVudCkg
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6
RXhlY1N0YXRlKiwgJGltcGxDbGFzc05hbWUqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgJHBhc3NUeXBlKTtc
biIpOwogICAgIH0KICAgICBpZiAoISRoYXNQYXJlbnQgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkgewotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiJGltcGxDbGFzc05hbWUqIHRvJHtpbnRlcmZhY2VOYW1lfShLSlM6OkpT
VmFsdWUqKTtcbiIpOworICAgICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIkcG9kVHlwZSB0byR7aW50ZXJmYWNlTmFtZX0oS0pTOjpKU1ZhbHVl
Kik7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9KEtKUzo6SlNWYWx1ZSopO1xu
Iik7CisgICAgICAgIH0KICAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAK
QEAgLTQ1NywxMSArNDc3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOwotCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
In1cblxuIik7Ci0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0
aW9uYWx9X1NVUFBPUlRcblxuIikgaWYgJGNvbmRpdGlvbmFsOwotCiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiNlbmRpZlxuIik7CiB9CiAKQEAgLTY2MSwxMiArNjc4LDE3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogICAgIHB1c2goQGltcGxDb250ZW50LCAiMCB9O1xu
XG4iKTsKIAorICAgICMgR2V0IGNvcnJlY3QgcGFzcy9zdG9yZSB0eXBlcyByZXNwZWN0aW5nIFBP
RFR5cGUgZmxhZworICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiUE9EVHlwZSJ9OworICAgIG15ICRwYXNzVHlwZSA9ICIkaW1wbENsYXNzTmFtZSoiOwor
ICAgICRwYXNzVHlwZSA9ICJjb25zdCAkcG9kVHlwZSYiIGlmKCRwb2RUeXBlKTsKKwogICAgICMg
Q29uc3RydWN0b3IKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9O
b3RDYWNoZSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojok
Y2xhc3NOYW1lKCRpbXBsQ2xhc3NOYW1lKiBpbXBsKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKCRwYXNzVHlwZSBpbXBsKVxuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShpbXBsKVxu
Iik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFt
ZX06OiRjbGFzc05hbWUoRXhlY1N0YXRlKiBleGVjLCAkaW1wbENsYXNzTmFtZSogaW1wbClcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShF
eGVjU3RhdGUqIGV4ZWMsICRwYXNzVHlwZSBpbXBsKVxuIik7CiAgICAgICAgIGlmICgkaGFzUGFy
ZW50KSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFz
c05hbWUoZXhlYywgaW1wbClcbiIpOwogICAgICAgICB9IGVsc2UgewpAQCAtNjgzLDcgKzcwNSwx
MSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgRGVzdHJ1Y3RvcgogICAgIGlm
ICghJGhhc1BhcmVudCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1l
fTo6fiRjbGFzc05hbWUoKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuICAg
IFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTtcbn1cblxu
Iik7CisgICAgICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG59XG5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4gICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2lt
cGwuZ2V0KCkpO1xufVxuXG4iKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgICMgRG9jdW1lbnQg
bmVlZHMgYSBzcGVjaWFsIGRlc3RydWN0b3IgYmVjYXVzZSBpdCdzIGEgc3BlY2lhbCBjYXNlIGZv
ciBjYWNoaW5nLiBJdCBuZWVkcwpAQCAtNzUwLDcgKzc3NiwxMyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2NsYXNzTmFtZX06OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0XG57XG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHN0YXRpY19jYXN0
PCRpbXBsQ2xhc3NOYW1lKj4oaW1wbCgpKTtcblxuIik7CisKKyAgICAgICAgaWYgKCRwb2RUeXBl
KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjb25zdCAkcG9kVHlwZSYg
aW1wKGltcGwoKSk7XG5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBs
Q2xhc3NOYW1lKj4oaW1wbCgpKTtcblxuIik7CisgICAgICAgIH0KKwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBzd2l0Y2ggKHRva2VuKSB7XG4iKTsKIAogICAgICAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgewpAQCAtNzY3LDExICs3
OTksMjYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAi
OjpnZXRDb25zdHJ1Y3RvcihleGVjKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoIUB7JGF0
dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9uc30pIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBjYXNlICIgLiBXS191Y2ZpcnN0KCRuYW1lKSAuICJBdHRyTnVtOlxuIik7
Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgImltcC0+JG5hbWUoKSIpIC4g
IjtcbiIpOworCisgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgkcG9kVHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NW
R051bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgImlt
cCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgImltcC4kbmFtZSgpIikgLiAiO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICIgLiBOYXRp
dmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAiaW1wLT4kbmFtZSgpIikgLiAiO1xu
Iik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXNlICIgLiBXS191Y2ZpcnN0KCRuYW1lKSAu
ICJBdHRyTnVtOiB7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgImltcC0+JG5hbWUoZWMpIikgLiAiO1xuIik7
CisKKyAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJpbXAuJG5hbWUoZWMpIikgLiAi
O1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJpbXAtPiRuYW1lKGVjKSIpIC4gIjtc
biIpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIik7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKQEAgLTc5OCw3ICs4
NDUsMTMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCAvKmF0dHIqLylcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1w
bENsYXNzTmFtZSo+KGltcGwoKSk7XG5cbiIpOworCisgICAgICAgICAgICBpZiAoJHBvZFR5cGUp
IHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSYgaW1w
KGltcGwoKSk7XG5cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8
JGltcGxDbGFzc05hbWUqPihpbXBsKCkpO1xuXG4iKTsKKyAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3dpdGNoICh0b2tlbikge1xuIik7CiAKICAg
ICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9
KSB7CkBAIC04MjEsMTEgKzg3NCwxOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU09i
amVjdDo6cHV0KGV4ZWMsIFwiJG5hbWVcIiwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBjYXNlICIgLiBXS191Y2ZpcnN0KCRuYW1lKSAuIkF0dHJOdW06IHtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpbXAtPnNldCIg
LiBXS191Y2ZpcnN0KCRuYW1lKSAuICIoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsICJ2YWx1ZSIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpO1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgkcG9kVHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBK
U1NWR051bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgaW1wID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsICJ2YWx1ZSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBpbXAuc2V0IiAuIFdLX3VjZmlyc3QoJG5hbWUpIC4gIigiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9u
c307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGltcC0+c2V0IiAuIFdLX3VjZmlyc3QoJG5hbWUpIC4gIigiIC4gSlNWYWx1ZVRvTmF0aXZl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVy
RXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiBAeyRhdHRyaWJ1
dGUtPnNldHRlckV4Y2VwdGlvbnN9OworICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGJyZWFrO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwpAQCAtODUzLDcgKzkxNCwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCYke2NsYXNzTmFtZX06OmluZm8pKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTtcblxuIik7CiAKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHN0YXRp
Y19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmop
LT5pbXBsKCkpO1xuXG4iKTsKKyAgICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSYgaW1wKHN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPih0aGlzT2JqKS0+aW1wbCgpKTtcblxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGlj
X2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iaikt
PmltcGwoKSk7XG5cbiIpOworICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgc3dpdGNoIChpZCkge1xuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChA
eyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpAQCAtODcyLDYgKzkzNywxMSBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICBteSAkcGFyYW1JbmRleCA9IDA7CiAgICAg
ICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wLT4iIC4gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWUgLiAiKCI7CisgCisgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZSAuICIoIjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbXkgJG51bVBhcmFtZXRl
cnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CiAgICAgICAgICAgICBteSAkaGFzT3B0aW9u
YWxBcmd1bWVudHMgPSAwOwogCkBAIC05MzAsMTcgKzEwMDAsMzEgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICB9CiAKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
ICRpbXBsQ2xhc3NOYW1lKiBvYmopXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJL
SlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsICRwYXNzVHlwZSBvYmopXG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEtKUzo6Y2FjaGVET01PYmplY3Q8JGltcGxDbGFzc05hbWUs
ICRjbGFzc05hbWU+KGV4ZWMsIG9iaik7XG4iKTsKKyAgICAgICAgaWYgKCRwb2RUeXBlKSB7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gbmV3ICRjbGFzc05hbWUo
ZXhlYywgb2JqKTtcbiIpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBLSlM6OmNhY2hlRE9NT2JqZWN0PCRpbXBsQ2xhc3NOYW1l
LCAkY2xhc3NOYW1lPihleGVjLCBvYmopO1xuIik7CisgICAgICAgIH0KICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICB9CiAKICAgICBpZiAoISRoYXNQYXJlbnQgfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1lKiB0byR7aW50ZXJm
YWNlTmFtZX0oS0pTOjpKU1ZhbHVlKiB2YWwpXG4iKTsKKyAgICAgICAgaWYgKCRwb2RUeXBlKSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRwb2RUeXBlIHRvJHtpbnRlcmZhY2VO
YW1lfShLSlM6OkpTVmFsdWUqIHZhbClcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9
KEtKUzo6SlNWYWx1ZSogdmFsKVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
dmFsLT5pc09iamVjdCgmJHtjbGFzc05hbWV9OjppbmZvKSA/IHN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPih2YWwpLT5pbXBsKCkgOiAwO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHZhbC0+aXNP
YmplY3QoJiR7Y2xhc3NOYW1lfTo6aW5mbykgPyBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odmFs
KS0+aW1wbCgpIDogIik7CisgICAgICAgIGlmICgkcG9kVHlwZSBhbmQgJHBvZFR5cGUgbmUgImZs
b2F0IikgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkcG9kVHlwZSgpO1xufVxu
Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIjA7
XG59XG4iKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciJ9ICYmICRoYXNQYXJlbnQpIHsK
QEAgLTExMDksMTYgKzExOTMsMTMgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIH0KIAogICAg
IGlmICgkdHlwZSBlcSAiU1ZHUmVjdCIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siSlNTVkdS
ZWN0LmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAidG9GbG9hdFJlY3QoJHZhbHVlKSI7CisgICAg
ICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0UmVjdC5oIn0gPSAxOwogICAgIH0KIAogICAgIGlmICgk
dHlwZSBlcSAiU1ZHUG9pbnQiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IkpTU1ZHUG9pbnQu
aCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuICJ0b0Zsb2F0UG9pbnQoJHZhbHVlKSI7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkZsb2F0UG9pbnQuaCJ9ID0gMTsKICAgICB9CiAKLQogICAgICMgRGVm
YXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlwZSBjb252ZXJzaW9uIHJvdXRpbmVzCiAgICAg
JGltcGxJbmNsdWRlc3siSlMkdHlwZS5oIn0gPSAxOwogICAgIHJldHVybiAidG8kdHlwZSgkdmFs
dWUpIjsKQEAgLTExNTMsNyArMTIzNCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIAogICAgIGlm
ICgkdHlwZSBlcSAiU1ZHUmVjdCIgb3IgJHR5cGUgZXEgIlNWR1BvaW50IiBvciAkdHlwZSBlcSAi
U1ZHTnVtYmVyIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7Ci0g
ICAgICAgIHJldHVybiAiZ2V0SlMkdHlwZShleGVjLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJu
ICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiSFRNTENv
bGxlY3Rpb24iKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ck9iakMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JPYmpDLnBtCShyZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtODExLDYgKzgxMSwxNCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICRudW1BdHRyaWJ1dGVzID0gQHsk
ZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OwogICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9k
ZS0+ZnVuY3Rpb25zfTsKIAorICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OworICAgIG15ICRwb2RUeXBlV2l0aE5hbWVzcGFjZTsKKwor
ICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICAkcG9kVHlwZVdpdGhOYW1lc3BhY2UgPSAiV2Vi
Q29yZTo6JHBvZFR5cGUiOworICAgICAgICAkcG9kVHlwZVdpdGhOYW1lc3BhY2UgPSAkcG9kVHlw
ZSBpZigkcG9kVHlwZSBlcSAiZmxvYXQiKTsgIyBTcGVjaWFsIGNhc2UgZm9yIERPTVNWR051bWJl
cgorICAgIH0KKwogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUuCiAgICAgQGlt
cGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGltcGxlbWVudGF0aW9uTGljZW5jZVRlbXBs
YXRlKTsKIApAQCAtODI1LDggKzgzMywxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lID1+IC8oXHcrKShBYnN8UmVsKSQvKSB7CiAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiQxLmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJGlt
cGxJbmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9ID0gMTsKLSAgICB9CisgICAgICAgIGlmICgh
JHBvZFR5cGUpIHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiRpbXBsQ2xhc3NOYW1lLmgi
fSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkcG9k
VHlwZS5oIn0gPSAxIHVubGVzcygkcG9kVHlwZSBlcSAiZmxvYXQiKTsKKyAgICAgICAgfQorICAg
IH0gCiAKICAgICAkaW1wbEluY2x1ZGVzeyJET01JbnRlcm5hbC5oIn0gPSAxOwogICAgICRpbXBs
SW5jbHVkZXN7IkV4Y2VwdGlvbkhhbmRsZXJzLmgifSA9IDE7CkBAIC04MzQsNyArODQ2LDkgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBAaW1wbENvbnRlbnQgPSAoKTsKIAogICAg
ICMgYWRkIGltcGxlbWVudGF0aW9uIGFjY2Vzc29yCi0gICAgaWYgKCRwYXJlbnRJbXBsQ2xhc3NO
YW1lIGVxICJPYmplY3QiKSB7CisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8JHBvZFR5cGVXaXRoTmFt
ZXNwYWNlKj4oX2ludGVybmFsKVxuXG4iKTsKKyAgICB9IGVsc2lmICgkcGFyZW50SW1wbENsYXNz
TmFtZSBlcSAiT2JqZWN0IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNkZWZpbmUg
SU1QTCByZWludGVycHJldF9jYXN0PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSo+KF9pbnRl
cm5hbClcblxuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJGJhc2VDbGFzc1dpdGhOYW1l
c3BhY2UgPSAiV2ViQ29yZTo6JGJhc2VDbGFzcyI7CkBAIC04NjIsNiArODc2LDggQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBbc2VsZiBkZXRhY2hdO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgSU1QTC0+ZGVyZWYoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgfTtcbiIpOworICAgICAgICB9IGVsc2lmICgkcG9kVHlwZSkgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZGVsZXRlIElNUEw7XG4iKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChfaW50ZXJuYWwp
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBJTVBMLT5kZXJl
ZigpO1xuIik7CkBAIC04NzYsNiArODkyLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbc2VsZiBkZXRhY2hdO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSU1QTC0+ZGVyZWYo
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfTtcbiIpOworICAg
ICAgICB9IGVsc2lmICgkcG9kVHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgZGVsZXRlIElNUEw7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmIChfaW50ZXJuYWwpXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBJTVBMLT5kZXJlZigpO1xuIik7CkBAIC05MjMsNiAr
OTQxLDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkZ2V0
dGVyQ29udGVudEhlYWQgPSAiSU1QTC0+JGF0dHJpYnV0ZU5hbWUoIjsKICAgICAgICAgICAgIG15
ICRnZXR0ZXJDb250ZW50VGFpbCA9ICIpIjsKIAorICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2Ug
Zm9yIERPTVNWR051bWJlcgorICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGFuZCAkcG9kVHlwZSBl
cSAiZmxvYXQiKSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIipJTVBM
IjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgPSAiIjsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGVTYW5zUHRyID0gJGF0dHJpYnV0ZVR5
cGU7CiAgICAgICAgICAgICAkYXR0cmlidXRlVHlwZVNhbnNQdHIgPX4gcy8gXCokLy87ICMgUmVt
b3ZlIHRyYWlsaW5nICIgKiIgZnJvbSBwb2ludGVyIHR5cGVzLgogCkBAIC0xMDI3LDcgKzEwNTEs
MTQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCRhcmdOYW1lKTtcblxuIik7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCRoYXNTZXR0ZXJFeGNlcHRpb24pIHsKKyAg
ICAgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgRE9NU1ZHTnVtYmVyCisgICAgICAgICAg
ICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSBl
cSAiZmxvYXQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAqSU1QTCA9ICRhcmc7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElNUEwtPiRhdHRy
aWJ1dGVOYW1lKCRhcmcpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2lmICgkaGFzU2V0dGVyRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSU1QTC0+JGF0dHJpYnV0ZU5hbWUoJGFy
ZywgZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOwpAQCAtMTIyNSw2ICsxMjU2LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIC0gKFdlYkNvcmU6OkZvb0JhciAqKV9mb29CYXIg
Zm9yIGltcGxlbWVudGF0aW9uIGNsYXNzIEZvb0JhcgogICAgIG15ICR0eXBlR2V0dGVyTmFtZSA9
IEdldE9iakNUeXBlR2V0dGVyTmFtZSgkaW50ZXJmYWNlTmFtZSk7CiAgICAgbXkgJHR5cGVHZXR0
ZXJTaWcgPSAiLSAoJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlICopJHR5cGVHZXR0ZXJOYW1l
IjsKKyAgICAkdHlwZUdldHRlclNpZyA9ICItICgkcG9kVHlwZVdpdGhOYW1lc3BhY2UpJHR5cGVH
ZXR0ZXJOYW1lIiBpZiAoJHBvZFR5cGUpOwogCiAgICAgbXkgQGl2YXJzVG9SZXRhaW4gPSAoKTsK
ICAgICBteSAkaXZhcnNUb0luaXQgPSAiIjsKQEAgLTEyNDgsNiArMTI4MCw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyAtIFR5cGUtTWFrZXIKICAgICBteSAkdHlwZU1ha2Vy
TmFtZSA9IEdldE9iakNUeXBlTWFrZXIoJGludGVyZmFjZU5hbWUpOwogICAgIG15ICR0eXBlTWFr
ZXJTaWcgPSAiKyAoJGNsYXNzTmFtZSAqKSR0eXBlTWFrZXJOYW1lOigkaW1wbENsYXNzTmFtZVdp
dGhOYW1lc3BhY2UgKilpbXBsIiAuICR0eXBlTWFrZXJTaWdBZGRpdGlvbjsKKyAgICAkdHlwZU1h
a2VyU2lnID0gIisgKCRjbGFzc05hbWUgKikkdHlwZU1ha2VyTmFtZTooJHBvZFR5cGVXaXRoTmFt
ZXNwYWNlKWltcGwiIC4gJHR5cGVNYWtlclNpZ0FkZGl0aW9uIGlmICgkcG9kVHlwZSk7CiAKICAg
ICAjIEdlbmVyYXRlIGludGVyZmFjZSBkZWZpbml0aW9ucy4gCiAgICAgQGludGVuYWxIZWFkZXJD
b250ZW50ID0gc3BsaXQoIlxyIiwgJGltcGxlbWVudGF0aW9uTGljZW5jZVRlbXBsYXRlKTsKQEAg
LTEyNjgsMTAgKzEzMDEsMzUgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR0eXBlR2V0dGVyU2lnXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIElNUEw7XG4iKTsKKworICAgICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAqSU1QTDtcbiIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIElNUEw7XG4iKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAotICAg
ICAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEgIk9iamVjdCIpIHsgICAgICAgIAorICAg
ICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgICAgICMgLSAoaWQpX2luaXRXaXRoRm9vQmFy
OihXZWJDb3JlOjpGb29CYXIpaW1wbCBmb3IgaW1wbGVtZW50YXRpb24gY2xhc3MgRm9vQmFyCisg
ICAgICAgICAgICBteSAkaW5pdFdpdGhJbXBsTmFtZSA9ICJfaW5pdFdpdGgiIC4gJGltcGxDbGFz
c05hbWU7CisgICAgICAgICAgICBteSAkaW5pdFdpdGhTaWcgPSAiLSAoaWQpJGluaXRXaXRoSW1w
bE5hbWU6KCRwb2RUeXBlV2l0aE5hbWVzcGFjZSlpbXBsIiAuICR0eXBlTWFrZXJTaWdBZGRpdGlv
bjsKKworICAgICAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiJGluaXRXaXRoU2lnXG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBbc3VwZXIgX2luaXRdO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkcG9kVHlwZVdpdGhOYW1lc3BhY2UqIF9pbXBsID0gbmV3ICRwb2RUeXBlV2l0aE5hbWVzcGFj
ZShpbXBsKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgX2ludGVy
bmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KF9pbXBsKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNlbGY7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgIyAt
IChET01Gb29CYXIpX0Zvb0JhcldpdGg6KFdlYkNvcmU6OkZvb0JhcilpbXBsIGZvciBpbXBsZW1l
bnRhdGlvbiBjbGFzcyBGb29CYXIKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHR5
cGVNYWtlclNpZ1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIFtbW3NlbGYgYWxsb2Nd
ICRpbml0V2l0aEltcGxOYW1lOmltcGxdIGF1dG9yZWxlYXNlXTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICB9IGVsc2lmICgkcGFyZW50SW1w
bENsYXNzTmFtZSBlcSAiT2JqZWN0IikgeyAgICAgICAgCiAgICAgICAgICAgICAjIC0gKGlkKV9p
bml0V2l0aEZvb0JhcjooV2ViQ29yZTo6Rm9vQmFyICopaW1wbCBmb3IgaW1wbGVtZW50YXRpb24g
Y2xhc3MgRm9vQmFyCiAgICAgICAgICAgICBteSAkaW5pdFdpdGhJbXBsTmFtZSA9ICJfaW5pdFdp
dGgiIC4gJGltcGxDbGFzc05hbWU7CiAgICAgICAgICAgICBteSAkaW5pdFdpdGhTaWcgPSAiLSAo
aWQpJGluaXRXaXRoSW1wbE5hbWU6KCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSAqKWltcGwi
IC4gJHR5cGVNYWtlclNpZ0FkZGl0aW9uOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVt
YmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXIuaWRsCShy
ZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR051bWJlci5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbW9kdWxlIHN2ZyB7CiAKLSAgICBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPVNWRywgT2JqQ0N1c3RvbUltcGxlbWVudGF0aW9uXSBTVkdOdW1iZXIg
eworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9U1ZHLCBQT0RUeXBlPWZsb2F0XSBTVkdOdW1i
ZXIgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgdmFsdWUKICAgICAgICAgICAg
ICAgICAgICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICB9OwpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUG9pbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BvaW50LmlkbAkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdQb2ludC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxNCBAQAogCiBtb2R1bGUg
c3ZnIHsKIAotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9U1ZHLCBPYmpDQ3VzdG9tSW1wbGVt
ZW50YXRpb25dIFNWR1BvaW50IHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPVNWRywgUE9E
VHlwZT1GbG9hdFBvaW50XSBTVkdQb2ludCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBm
bG9hdCB4CiAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCB5CiAgICAgICAgICAgICAgICAgICAg
ICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKLSAgICAgICAgU1ZHUG9pbnQgbWF0cml4
VHJhbnNmb3JtKGluIFNWR01hdHJpeCBtYXRyaXgpOworICAgICAgICAvLyBGSVhNRSAtIFJlZW5h
YmxlIHRoaXMgb25jZSBTVkdNYXRyaXggaXMgY29udmVydGVkIHRvIEFmZmluZVRyYW5zZm9ybQor
ICAgICAgICAvL1NWR1BvaW50IG1hdHJpeFRyYW5zZm9ybShpbiBTVkdNYXRyaXggbWF0cml4KTsK
ICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0LmlkbAkocmV2aXNpb24gMTgxNDkpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogCiBtb2R1bGUgc3ZnIHsKIAotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9U1ZH
LCBPYmpDQ3VzdG9tSW1wbGVtZW50YXRpb25dIFNWR1JlY3QgeworICAgIGludGVyZmFjZSBbQ29u
ZGl0aW9uYWw9U1ZHLCBQT0RUeXBlPUZsb2F0UmVjdF0gU1ZHUmVjdCB7CiAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBmbG9hdCB4CiAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXIgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCB5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11802</attachid>
            <date>2006-12-11 09:28:29 -0800</date>
            <delta_ts>2006-12-11 09:36:59 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>PODGeneration.diff</filename>
            <type>text/plain</type>
            <size>59690</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDYtMTItMTEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MDEK
KworICAgICAgICBBdXRvZ2VuZXJhdGUgUE9EIHR5cGVzIGZvciBPYmpDL0pTLgorICAgICAgICBU
aGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBoYW5kLXdyaXR0ZW4gSlNTVkcqLCBET01TVkcq
IHdyYXBwZXJzCisgICAgICAgIGluIGJpbmRpbmdzL2pzLCBiaW5kaW5ncy9vYmpjLiBNYWtlcyBp
dCBtdWNoIGVhc2llciB0byBjb252ZXJ0IG1vcmUKKyAgICAgICAgU1ZHIHR5cGVzIHRvIFBPRCB0
eXBlcyAoaWUuIFNWR01hdHJpeCogLT4gQWZmaW5lVHJhbnNmb3JtIGV0Yy4pCisKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1NWR1BvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdSZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1JlY3QuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVNWR051bWJlci5tbTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVNWR1BvaW50Lm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL29iamMvRE9NU1ZHUmVjdC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdOdW1i
ZXIuaWRsOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2ludC5pZGw6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1JlY3QuaWRsOgorCiAyMDA2LTEyLTEwICBMYXJzIEtub2xsIDxsYXJzQHRyb2xs
dGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWmFjawpJbmRleDogV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTQyNCwxNCArNDI0LDE3IEBAIGFsbCA6IFwKICAgICBKU1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbC5oIFwKICAgICBKU1NWR1BhdGhTZWdNb3ZldG9BYnMuaCBcCiAgICAg
SlNTVkdQYXRoU2VnTW92ZXRvUmVsLmggXAorICAgIEpTU1ZHTnVtYmVyLmggXAogICAgIEpTU1ZH
TnVtYmVyTGlzdC5oIFwKICAgICBKU1NWR1BhaW50LmggXAogICAgIEpTU1ZHUGF0aFNlZ0xpc3Qu
aCBcCiAgICAgSlNTVkdQYXR0ZXJuRWxlbWVudC5oIFwKKyAgICBKU1NWR1BvaW50LmggXAogICAg
IEpTU1ZHUG9pbnRMaXN0LmggXAogICAgIEpTU1ZHUG9seWdvbkVsZW1lbnQuaCBcCiAgICAgSlNT
VkdQb2x5bGluZUVsZW1lbnQuaCBcCiAgICAgSlNTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCBc
CisgICAgSlNTVkdSZWN0LmggXAogICAgIEpTU1ZHUmVjdEVsZW1lbnQuaCBcCiAgICAgSlNTVkdS
ZW5kZXJpbmdJbnRlbnQuaCBcCiAgICAgSlNTVkdTZXRFbGVtZW50LmggXApAQCAtNDUyLDEwICs0
NTUsNyBAQCBhbGwgOiBcCiAgICAgSlNTVkdVbml0VHlwZXMuaCBcCiAgICAgSlNTVkdVc2VFbGVt
ZW50LmggXAogICAgIEpTU1ZHVmlld0VsZW1lbnQuaCBcCi0gICAgSlNTVkdQb2ludFRhYmxlLmNw
cCBcCiAgICAgSlNTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmggXAotICAgIEpTU1ZHUmVjdFRhYmxl
LmNwcCBcCi0gICAgSlNTVkdOdW1iZXJUYWJsZS5jcHAgXAogICAgIEpTU1ZHRWxlbWVudC5oIFwK
ICAgICBKU1NWR1NWR0VsZW1lbnQuaCBcCiAgICAgSlNTVkdFbGxpcHNlRWxlbWVudC5oIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
ODE0OSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODI2LDExICszODI2LDExIEBACiAJCTg1NzREMUYxMEFERTYxMjIwMDRD
QkExMSAvKiBKU1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTc0RDFGMjBBREU2MTIyMDA0Q0JBMTEgLyogSlNT
VkdFbGVtZW50V3JhcHBlckZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg1NzREMUYzMEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR051bWJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdOdW1iZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NTc0RDFGNDBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdO
dW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHTnVtYmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NzREMUY0MEFERTYxMjIwMDRDQkExMSAv
KiBKU1NWR051bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IHBhdGggPSBKU1NW
R051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTc0RDFGNTBBREU2MTIy
MDA0Q0JBMTEgLyogSlNTVkdQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTVkdQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1
NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR1BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg1NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgcGF0aCA9IEpTU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODU3NEQxRjcwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdSZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODU3NEQxRjgwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZH
UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdSZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NzREMUY4MEFERTYxMjIwMDRDQkExMSAvKiBK
U1NWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBwYXRoID0gSlNTVkdSZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1NzREMjM5MEFERTdFM0EwMDRDQkEx
MSAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdab29tRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTdFMEIyMzBBQjA0MzQ2MDAz
NkU0NDcgLyogRE9NTW91c2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NTW91c2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTdFMEIy
NDBBQjA0MzQ2MDAzNkU0NDcgLyogRE9NTW91c2VFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01Nb3VzZUV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjE5NCw2ICs2MTk0LDggQEAKIAkJCQlCMkZBM0NDNTBBQjc1QTZFMDAw
RTVBQzQgLyogSlNTVkdNYXRyaXguaCAqLywKIAkJCQlCMkZBM0NDNjBBQjc1QTZFMDAwRTVBQzQg
LyogSlNTVkdNZXRhZGF0YUVsZW1lbnQuY3BwICovLAogCQkJCUIyRkEzQ0M3MEFCNzVBNkUwMDBF
NUFDNCAvKiBKU1NWR01ldGFkYXRhRWxlbWVudC5oICovLAorCQkJCTg1NzREMUYzMEFERTYxMjIw
MDRDQkExMSAvKiBKU1NWR051bWJlci5jcHAgKi8sCisJCQkJODU3NEQxRjQwQURFNjEyMjAwNENC
QTExIC8qIEpTU1ZHTnVtYmVyLmggKi8sCiAJCQkJQjJGQTNDQzgwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHTnVtYmVyTGlzdC5jcHAgKi8sCiAJCQkJQjJGQTNDQzkwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHTnVtYmVyTGlzdC5oICovLAogCQkJCUIyRkEzQ0NBMEFCNzVBNkUwMDBFNUFDNCAvKiBK
U1NWR1BhaW50LmNwcCAqLywKQEAgLTYyNDQsNiArNjI0Niw4IEBACiAJCQkJQjJGQTNDRjcwQUI3
NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b1JlbC5oICovLAogCQkJCUIyRkEzQ0Y4
MEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR1BhdHRlcm5FbGVtZW50LmNwcCAqLywKIAkJCQlCMkZB
M0NGOTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdQYXR0ZXJuRWxlbWVudC5oICovLAorCQkJCTg1
NzREMUY1MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmNwcCAqLywKKwkJCQk4NTc0RDFG
NjBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdQb2ludC5oICovLAogCQkJCUIyRkEzQ0ZBMEFCNzVB
NkUwMDBFNUFDNCAvKiBKU1NWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjJGQTNDRkIwQUI3NUE2
RTAwMEU1QUM0IC8qIEpTU1ZHUG9pbnRMaXN0LmggKi8sCiAJCQkJQjJGQTNDRkQwQUI3NUE2RTAw
MEU1QUM0IC8qIEpTU1ZHUG9seWdvbkVsZW1lbnQuY3BwICovLApAQCAtNjI1NCw2ICs2MjU4LDgg
QEAKIAkJCQlCMkZBM0QwMjBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmggKi8sCiAJCQkJQjJGQTNEMDMwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcCAqLywKIAkJCQlCMkZBM0QwNDBBQjc1QTZFMDAwRTVBQzQgLyogSlNT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCAqLywKKwkJCQk4NTc0RDFGNzBBREU2MTIyMDA0Q0JB
MTEgLyogSlNTVkdSZWN0LmNwcCAqLywKKwkJCQk4NTc0RDFGODBBREU2MTIyMDA0Q0JBMTEgLyog
SlNTVkdSZWN0LmggKi8sCiAJCQkJQjJGQTNEMDUwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmVj
dEVsZW1lbnQuY3BwICovLAogCQkJCUIyRkEzRDA2MEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR1Jl
Y3RFbGVtZW50LmggKi8sCiAJCQkJQjJGQTNEMDgwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHUmVu
ZGVyaW5nSW50ZW50LmNwcCAqLywKQEAgLTY3OTgsOSArNjgwNCw2IEBACiAJCTg1NDk0OTJEMEFD
ODVBMEEwMDhBQjAzNSAvKiBTVkcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTg1MTYyMEVFMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdOdW1iZXIubW0g
Ki8sCi0JCQkJODUxNjIwRjAwQUQyRkQ4ODAwNTlBN0RFIC8qIERPTVNWR1BvaW50Lm1tICovLAot
CQkJCTg1MTYyMEYyMEFEMkZEODkwMDU5QTdERSAvKiBET01TVkdSZWN0Lm1tICovLAogCQkJCTg1
Q0UxQjAxMEFEQURBOTYwMDNCQkRFQSAvKiBET01TVkdQYXRoU2VnSW50ZXJuYWwubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IFNWRzsKQEAgLTcwNjAsNiArNzA2Myw3IEBACiAJCQkJODU1OUYxMTAw
QUM5QkU5OTAwQTM0MzlDIC8qIERPTVNWR01ldGFkYXRhRWxlbWVudC5oICovLAogCQkJCTg1NTlG
MTExMEFDOUJFOTkwMEEzNDM5QyAvKiBET01TVkdNZXRhZGF0YUVsZW1lbnQubW0gKi8sCiAJCQkJ
ODU0MDc0RjkwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR051bWJlci5oICovLAorCQkJCTg1MTYy
MEVFMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdOdW1iZXIubW0gKi8sCiAJCQkJODVDMjM5N0Yw
QUQ1OTA3RDAwMzUzM0U3IC8qIERPTVNWR051bWJlckxpc3QuaCAqLywKIAkJCQk4NUMyMzk4MDBB
RDU5MDdEMDAzNTMzRTcgLyogRE9NU1ZHTnVtYmVyTGlzdC5tbSAqLywKIAkJCQk4NUM5QTMwMzBB
RDdFOTQyMDBGQkZGMUUgLyogRE9NU1ZHUGFpbnQuaCAqLywKQEAgLTcxMTEsNiArNzExNSw3IEBA
CiAJCQkJODU5RDYyNzEwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BhdHRlcm5FbGVtZW50Lmgg
Ki8sCiAJCQkJODU5RDYyNzIwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BhdHRlcm5FbGVtZW50
Lm1tICovLAogCQkJCTg1NDA3NEZBMEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdQb2ludC5oICov
LAorCQkJCTg1MTYyMEYwMEFEMkZEODgwMDU5QTdERSAvKiBET01TVkdQb2ludC5tbSAqLywKIAkJ
CQk4NTlENjI3MzBBRDg4OEVFMDAwMTI5OTUgLyogRE9NU1ZHUG9pbnRMaXN0LmggKi8sCiAJCQkJ
ODU5RDYyNzQwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNWR1BvaW50TGlzdC5tbSAqLywKIAkJCQk4
NTlENjI3NTBBRDg4OEVFMDAwMTI5OTUgLyogRE9NU1ZHUG9seWdvbkVsZW1lbnQuaCAqLywKQEAg
LTcxMjIsNiArNzEyNyw3IEBACiAJCQkJODU5RDYyNzkwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5oICovLAogCQkJCTg1OUQ2MjdBMEFEODg4RUUwMDAxMjk5
NSAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQubW0gKi8sCiAJCQkJODU0MDc0RkIwQUQ2
QzIyRTAwNjIwQzU3IC8qIERPTVNWR1JlY3QuaCAqLywKKwkJCQk4NTE2MjBGMjBBRDJGRDg5MDA1
OUE3REUgLyogRE9NU1ZHUmVjdC5tbSAqLywKIAkJCQk4NTlDOUMzRDBBQ0FDQ0NDMDA3OTE2MTEg
LyogRE9NU1ZHUmVjdEVsZW1lbnQuaCAqLywKIAkJCQk4NTlDOUMzRTBBQ0FDQ0NDMDA3OTE2MTEg
LyogRE9NU1ZHUmVjdEVsZW1lbnQubW0gKi8sCiAJCQkJODU5RDYyN0IwQUQ4ODhFRTAwMDEyOTk1
IC8qIERPTVNWR1JlbmRlcmluZ0ludGVudC5oICovLApAQCAtODY0NSwxMiArODY1MSw2IEBACiAJ
CQkJMUE3NTBERDMwQTkwRTcyOTAwMEZGMjE1IC8qIEpTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCAq
LywKIAkJCQk4NTc0RDFGMTBBREU2MTIyMDA0Q0JBMTEgLyogSlNTVkdFbGVtZW50V3JhcHBlckZh
Y3RvcnkuY3BwICovLAogCQkJCTg1NzREMUYyMEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR0VsZW1l
bnRXcmFwcGVyRmFjdG9yeS5oICovLAotCQkJCTg1NzREMUYzMEFERTYxMjIwMDRDQkExMSAvKiBK
U1NWR051bWJlci5jcHAgKi8sCi0JCQkJODU3NEQxRjQwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZH
TnVtYmVyLmggKi8sCi0JCQkJODU3NEQxRjUwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUG9pbnQu
Y3BwICovLAotCQkJCTg1NzREMUY2MEFERTYxMjIwMDRDQkExMSAvKiBKU1NWR1BvaW50LmggKi8s
Ci0JCQkJODU3NEQxRjcwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5jcHAgKi8sCi0JCQkJ
ODU3NEQxRjgwQURFNjEyMjAwNENCQTExIC8qIEpTU1ZHUmVjdC5oICovLAogCQkJCTFBNzUwRTMz
MEE5MEY4OUYwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwICovLAogCQkJCTkzQjcw
RDQxMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCAqLywKIAkJCQk5M0I3
MEQ0MjA5RUIwQzdDMDA5RDg0NjggLyogSlNYTUxIdHRwUmVxdWVzdC5oICovLApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAJKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR051bWJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWZkZWYgU1ZH
X1NVUFBPUlQKLQotI2luY2x1ZGUgIkpTU1ZHTnVtYmVyLmgiCi0KLSNpbmNsdWRlICJKU1NWR051
bWJlclRhYmxlLmNwcCIKLQotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBDbGFzc0luZm8gSlNTVkdOdW1iZXI6OmluZm8gPSB7ICJTVkdOdW1iZXIi
LCAwLCAmSlNTVkdOdW1iZXJUYWJsZSwgMCB9OwotCi0vKgotQGJlZ2luIEpTU1ZHTnVtYmVyVGFi
bGUgNAotICB2YWx1ZSAgICAgICAgIFdlYkNvcmU6OkpTU1ZHTnVtYmVyOjpOdW1iZXJWYWx1ZSAg
ICAgICBEb250RGVsZXRlCi1AZW5kCi0qLwotCi1KU1NWR051bWJlcjo6fkpTU1ZHTnVtYmVyKCkK
LXsKLX0KLQotYm9vbCBKU1NWR051bWJlcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1NWR051bWJlciwgRE9NT2JqZWN0
PihleGVjLCAgJkpTU1ZHTnVtYmVyVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19
Ci0KLUpTVmFsdWUqIEpTU1ZHTnVtYmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE51
bWJlclZhbHVlOgotICAgICAgICByZXR1cm4ganNOdW1iZXIobV92YWx1ZSk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIEpTU1ZHTnVtYmVyOjpwdXQo
S0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKLXsKLSAgICBsb29rdXBQdXQ8SlNTVkdO
dW1iZXI+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR051bWJlclRhYmxl
LCB0aGlzKTsKLX0KLQotdm9pZCBKU1NWR051bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikK
LXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBOdW1iZXJWYWx1ZToKLSAgICAgICAg
bV92YWx1ZSA9IHZhbHVlLT50b051bWJlcihleGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1KU1ZhbHVlKiBnZXRKU1NWR051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2KQot
ewotICAgIHJldHVybiBuZXcgSlNTVkdOdW1iZXIoZXhlYywgdik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR051bWJlci5oCShyZXZpc2lvbiAxODE0OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdOdW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEpTU1ZHTnVtYmVyX2gKLSNkZWZpbmUgSlNTVkdOdW1iZXJfaAotCi0j
aWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNTVkdOdW1iZXIgOiBwdWJsaWMgS0pTOjpET01PYmplY3Qg
ewotcHVibGljOgotICAgIEpTU1ZHTnVtYmVyKEtKUzo6RXhlY1N0YXRlKiwgZG91YmxlIHYpIDog
bV92YWx1ZSh2KSB7IH0KLSAgICB+SlNTVkdOdW1iZXIoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXIm
LCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHB1dChL
SlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6SlNWYWx1ZSosIGlu
dCBhdHRyID0gS0pTOjpOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUqLCBpbnQsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyKTsKLQotICAgIHZpcnR1YWwgY29u
c3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87Ci0KLSAgICBlbnVtIHsgTnVtYmVy
VmFsdWUgfTsKLQotICAgIGRvdWJsZSBpbXBsKCkgeyByZXR1cm4gbV92YWx1ZTsgfQotCi1wcml2
YXRlOgotICAgIGRvdWJsZSBtX3ZhbHVlOwotfTsKLQotS0pTOjpKU1ZhbHVlKiBnZXRKU1NWR051
bWJlcihLSlM6OkV4ZWNTdGF0ZSosIGRvdWJsZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0KLSNlbmRpZiAvLyBKU1NWR051bWJlcl9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAJKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NWR1BvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWZkZWYg
U1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKLQotI2luY2x1ZGUgIkpTU1ZH
TWF0cml4LmgiCi0jaW5jbHVkZSAiU1ZHTWF0cml4LmgiCi0jaW5jbHVkZSAiSlNTVkdQb2ludFRh
YmxlLmNwcCIKLQotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jb25zdCBDbGFzc0luZm8gSlNTVkdQb2ludDo6aW5mbyA9IHsgIlNWR1BvaW50IiwgMCwgJkpT
U1ZHUG9pbnRUYWJsZSwgMCB9OwotLyoKLUBiZWdpbiBKU1NWR1BvaW50VGFibGUgNAotICB4ICAg
ICAgICAgV2ViQ29yZTo6SlNTVkdQb2ludDo6UG9pbnRYICAgICAgIERvbnREZWxldGUKLSAgeSAg
ICAgICAgIFdlYkNvcmU6OkpTU1ZHUG9pbnQ6OlBvaW50WSAgICAgICBEb250RGVsZXRlCi1AZW5k
Ci1AYmVnaW4gSlNTVkdQb2ludFByb3RvVGFibGUgMgotIG1hdHJpeFRyYW5zZm9ybSAgICBXZWJD
b3JlOjpKU1NWR1BvaW50OjpNYXRyaXhUcmFuc2Zvcm0gRG9udERlbGV0ZXxGdW5jdGlvbiAxCi1A
ZW5kCi0qLwotCi1LSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhKU1NWR1BvaW50UHJvdG9GdW5jKQot
S0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkpTU1ZHUG9pbnQiLCBKU1NWR1BvaW50UHJvdG8sIEpT
U1ZHUG9pbnRQcm90b0Z1bmMpCi0KLUpTU1ZHUG9pbnQ6OkpTU1ZHUG9pbnQoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEZsb2F0UG9pbnQmIHApIDogbV9wb2ludChwKQotewotICAgIHNldFBy
b3RvdHlwZShKU1NWR1BvaW50UHJvdG86OnNlbGYoZXhlYykpOwotfQotCi1KU1NWR1BvaW50Ojp+
SlNTVkdQb2ludCgpCi17Ci19Ci0KLWJvb2wgSlNTVkdQb2ludDo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1NWR1BvaW50
LCBET01PYmplY3Q+KGV4ZWMsICAmSlNTVkdQb2ludFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwotfQotCi1KU1ZhbHVlKiBKU1NWR1BvaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFBvaW50WDoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcG9pbnQueCgpKTsKLSAg
ICBjYXNlIFBvaW50WToKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcG9pbnQueSgpKTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgSlNTVkdQb2lu
dDo6cHV0KEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCi17Ci0gICAgbG9va3VwUHV0
PEpTU1ZHUG9pbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR1BvaW50
VGFibGUsIHRoaXMpOwotfQotCi12b2lkIEpTU1ZHUG9pbnQ6OnB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0
dHIpCi17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUG9pbnRYOgotICAgICAgICBt
X3BvaW50LnNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQb2ludFk6Ci0gICAgICAgIG1fcG9pbnQuc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIEpTU1ZHUG9pbnRQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNTVkdQb2lu
dDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0K
LSNpZmRlZiBTVkdfU1VQUE9SVAotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBzdGF0aWNfY2FzdDxK
U1NWR1BvaW50Kj4odGhpc09iaiktPmltcGwoKTsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAg
IGNhc2UgSlNTVkdQb2ludDo6TWF0cml4VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICBTVkdNYXRy
aXgqIG1hdCA9IHRvU1ZHTWF0cml4KGFyZ3NbMF0pOwotICAgICAgICAgICAgaWYgKCFtYXQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHAgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0LT5tYXRyaXgoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0SlNTVkdQb2ludChleGVjLCBwKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIGdldEpTU1ZHUG9p
bnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBu
ZXcgSlNTVkdQb2ludChleGVjLCBwKTsKLX0KLQotRmxvYXRQb2ludCB0b0Zsb2F0UG9pbnQoSlNW
YWx1ZSogdmFsKQotewotICAgIHJldHVybiB2YWwtPmlzT2JqZWN0KCZKU1NWR1BvaW50OjppbmZv
KSA/IHN0YXRpY19jYXN0PEpTU1ZHUG9pbnQqPih2YWwpLT5pbXBsKCkgOiBGbG9hdFBvaW50KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTU1ZHUG9pbnRfaAotI2RlZmluZSBKU1NW
R1BvaW50X2gKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbmNsdWRlICJranNfYmluZGluZy5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1LSlNf
REVGSU5FX1BST1RPVFlQRShKU1NWR1BvaW50UHJvdG8pCi0KLWNsYXNzIEpTU1ZHUG9pbnQgOiBw
dWJsaWMgS0pTOjpET01PYmplY3QgewotcHVibGljOgotICAgIEpTU1ZHUG9pbnQoS0pTOjpFeGVj
U3RhdGUqLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgfkpTU1ZHUG9pbnQoKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotCi0gICAgdmlydHVh
bCB2b2lkIHB1dChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6
SlNWYWx1ZSosIGludCBhdHRyID0gS0pTOjpOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyKTsKLQotICAg
IHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87Ci0KLSAgICBl
bnVtIHsgUG9pbnRYLCBQb2ludFksIE1hdHJpeFRyYW5zZm9ybSB9OwotCi0gICAgRmxvYXRQb2lu
dCBpbXBsKCkgeyByZXR1cm4gbV9wb2ludDsgfQotIAotcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50
IG1fcG9pbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIEpTU1ZHUG9pbnRQcm90bzsKLX07Ci0KLUtKUzo6
SlNWYWx1ZSogZ2V0SlNTVkdQb2ludChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEZsb2F0UG9pbnQm
KTsKLUZsb2F0UG9pbnQgdG9GbG9hdFBvaW50KEtKUzo6SlNWYWx1ZSopOwotICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0KLSNlbmRpZiAvLyBKU1NW
R1BvaW50X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUmVjdC5jcHAJKHJldmlzaW9uIDE4MTQ5
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1JlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVkZSAiSlNTVkdSZWN0LmgiCi0KLSNpbmNs
dWRlICJKU1NWR1JlY3RUYWJsZS5jcHAiCi0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY29uc3QgQ2xhc3NJbmZvIEpTU1ZHUmVjdDo6aW5mbyA9IHsgIlNW
R1JlY3QiLCAwLCAmSlNTVkdSZWN0VGFibGUsIDAgfTsKLS8qCi1AYmVnaW4gSlNTVkdSZWN0VGFi
bGUgNAotICB4ICAgICAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0WCAgICAgICAgICAgRG9u
dERlbGV0ZQotICB5ICAgICAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0WSAgICAgICAgICAg
RG9udERlbGV0ZQotICB3aWR0aCAgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0V2lkdGggICAg
ICAgRG9udERlbGV0ZQotICBoZWlnaHQgICAgV2ViQ29yZTo6SlNTVkdSZWN0OjpSZWN0SGVpZ2h0
ICAgICAgRG9udERlbGV0ZQotQGVuZAotKi8KLQotSlNTVkdSZWN0Ojp+SlNTVkdSZWN0KCkKLXsK
LX0KLQotYm9vbCBKU1NWR1JlY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNTVkdSZWN0LCBET01PYmplY3Q+KGV4ZWMs
ICAmSlNTVkdSZWN0VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFs
dWUqIEpTU1ZHUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBSZWN0WDoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fcmVjdC54KCkpOwotICAgIGNhc2UgUmVjdFk6Ci0gICAgICAg
IHJldHVybiBqc051bWJlcihtX3JlY3QueSgpKTsKLSAgICBjYXNlIFJlY3RXaWR0aDoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fcmVjdC53aWR0aCgpKTsKLSAgICBjYXNlIFJlY3RIZWlnaHQ6
Ci0gICAgICAgIHJldHVybiBqc051bWJlcihtX3JlY3QuaGVpZ2h0KCkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBKU1NWR1JlY3Q6OnB1dChLSlM6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEtK
Uzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQotewotICAgIGxvb2t1cFB1dDxKU1NWR1JlY3Q+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1NWR1JlY3RUYWJsZSwgdGhpcyk7
Ci19Ci0KLXZvaWQgSlNTVkdSZWN0OjpwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4sIEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQotewotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFJlY3RYOgotICAgICAgICBtX3JlY3Quc2V0WCh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlY3RZOgotICAg
ICAgICBtX3JlY3Quc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJlY3RXaWR0aDoKLSAgICAgICAgbV9yZWN0LnNldFdpZHRoKHZhbHVlLT50b051
bWJlcihleGVjKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdEhlaWdodDoKLSAgICAg
ICAgbV9yZWN0LnNldEhlaWdodCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBicmVh
azsKLSAgICB9ICAKLX0KLQotSlNWYWx1ZSogZ2V0SlNTVkdSZWN0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIHJldHVybiBuZXcgSlNTVkdSZWN0KGV4ZWMsIHIp
OwotfQotCi1GbG9hdFJlY3QgdG9GbG9hdFJlY3QoSlNWYWx1ZSogdmFsKQotewotICAgIHJldHVy
biB2YWwtPmlzT2JqZWN0KCZKU1NWR1JlY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8SlNTVkdSZWN0
Kj4odmFsKS0+aW1wbCgpIDogRmxvYXRSZWN0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdSZWN0LmgJ
KHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1JlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEpTU1ZHUmVjdF9oCi0jZGVmaW5lIEpTU1ZHUmVjdF9oCi0KLSNpZmRlZiBTVkdfU1VQUE9SVAot
Ci0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU1NWR1JlY3QgOiBwdWJsaWMgS0pTOjpET01PYmpl
Y3QgewotcHVibGljOgotICAgIEpTU1ZHUmVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEZsb2F0
UmVjdCYgcikgOiBtX3JlY3QocikgeyB9Ci0gICAgfkpTU1ZHUmVjdCgpOwotCi0gICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1Zh
bHVlKiwgaW50IGF0dHIgPSBLSlM6Ok5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSosIGludCwgS0pTOjpKU1ZhbHVlKiwgaW50IGF0dHIpOwotCi0gICAgdmly
dHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KLSAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgIGVudW0g
eyBSZWN0WCwgUmVjdFksIFJlY3RXaWR0aCwgUmVjdEhlaWdodCB9OwotCi0gICAgRmxvYXRSZWN0
IGltcGwoKSB7IHJldHVybiBtX3JlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBGbG9hdFJlY3QgbV9y
ZWN0OwotfTsKLQotS0pTOjpKU1ZhbHVlKiBnZXRKU1NWR1JlY3QoS0pTOjpFeGVjU3RhdGUqLCBj
b25zdCBGbG9hdFJlY3QmKTsKLUZsb2F0UmVjdCB0b0Zsb2F0UmVjdChLSlM6OkpTVmFsdWUqKTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQotI2Vu
ZGlmIC8vIEpTU1ZHUmVjdF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NU1ZHTnVt
YmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdOdW1iZXIu
bW0JKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVNWR051bWJl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbXBvcnQg
IkRPTVNWR051bWJlci5oIgotCi0jaW1wb3J0ICJET01JbnRlcm5hbC5oIgotCi0jZGVmaW5lIElN
UEwgKihyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oX2ludGVybmFsKSkKLQotQGltcGxlbWVudGF0
aW9uIERPTVNWR051bWJlcgotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBkZWxldGUgcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KF9pbnRlcm5hbCk7Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
PihfaW50ZXJuYWwpOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKGZsb2F0KXZhbHVl
Ci17Ci0gICAgcmV0dXJuIElNUEw7Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGZsb2F0KW5ld1Zh
bHVlCi17Ci0gICAgSU1QTCA9IG5ld1ZhbHVlOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBET01TVkdOdW1iZXIgKFdlYkNvcmVJbnRlcm5hbCkKLQotLSAoZmxvYXQpX1NWR051bWJlcgot
ewotICAgIHJldHVybiBJTVBMOwotfQotCi0tIChpZClfaW5pdFdpdGhGbG9hdDooZmxvYXQpdmFs
dWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAgICBbc3VwZXIgX2luaXRd
OwotICAgIGZsb2F0ICppbXBsID0gbmV3IGZsb2F0OwotICAgICppbXBsID0gdmFsdWU7Ci0gICAg
X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0rIChET01TVkdOdW1iZXIgKilfU1ZHTnVtYmVyV2l0aDoo
ZmxvYXQpdmFsdWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAgICByZXR1
cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXQ6dmFsdWVdIGF1dG9yZWxlYXNlXTsKLX0K
LQotQGVuZAotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01TVkdQb2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NU1ZHUG9pbnQubW0JKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTVNWR1BvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JU
Ci0KLSNpbXBvcnQgIkRPTVNWR1BvaW50LmgiCi0KLSNpbXBvcnQgIkRPTUludGVybmFsLmgiCi0j
aW1wb3J0ICJET01TVkdNYXRyaXguaCIKLSNpbXBvcnQgIkZsb2F0UG9pbnQuaCIKLSNpbXBvcnQg
IlNWR01hdHJpeC5oIgotCi0jZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpG
bG9hdFBvaW50Kj4oX2ludGVybmFsKQotCi1AaW1wbGVtZW50YXRpb24gRE9NU1ZHUG9pbnQKLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgZGVsZXRlIElNUEw7Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgZGVsZXRlIElNUEw7Ci0gICAgW3N1cGVy
IGZpbmFsaXplXTsKLX0KLQotLSAoZmxvYXQpeAotewotICAgIHJldHVybiBJTVBMLT54KCk7Ci19
Ci0KLS0gKHZvaWQpc2V0WDooZmxvYXQpbmV3WAotewotICAgIElNUEwtPnNldFgobmV3WCk7Ci19
Ci0KLS0gKGZsb2F0KXkKLXsKLSAgICByZXR1cm4gSU1QTC0+eSgpOwotfQotCi0tICh2b2lkKXNl
dFk6KGZsb2F0KW5ld1kKLXsKLSAgICBJTVBMLT5zZXRZKG5ld1kpOwotfQotCi0tIChET01TVkdQ
b2ludCAqKW1hdHJpeFRyYW5zZm9ybTooRE9NU1ZHTWF0cml4ICopbWF0cml4Ci17Ci0gICAgQVNT
RVJUKG1hdHJpeCk7Ci0gICAgcmV0dXJuIFtET01TVkdQb2ludCBfU1ZHUG9pbnRXaXRoOklNUEwt
Pm1hdHJpeFRyYW5zZm9ybShbbWF0cml4IF9TVkdNYXRyaXhdLT5tYXRyaXgoKSldOwotfQotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBET01TVkdQb2ludCAoV2ViQ29yZUludGVybmFsKQotCi0t
IChXZWJDb3JlOjpGbG9hdFBvaW50KV9TVkdQb2ludAotewotICAgIHJldHVybiAqKElNUEwpOwot
fQotCi0tIChpZClfaW5pdFdpdGhGbG9hdFBvaW50OihXZWJDb3JlOjpGbG9hdFBvaW50KXZhbHVl
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBDYWNoaW5nCi0gICAgW3N1cGVyIF9pbml0XTsK
LSAgICBXZWJDb3JlOjpGbG9hdFBvaW50ICppbXBsID0gbmV3IFdlYkNvcmU6OkZsb2F0UG9pbnQo
dmFsdWUpOwotICAgIF9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJu
YWwqPihpbXBsKTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotKyAoRE9NU1ZHUG9pbnQgKilfU1ZH
UG9pbnRXaXRoOihXZWJDb3JlOjpGbG9hdFBvaW50KWltcGwKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IENhY2hpbmcKLSAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXRQ
b2ludDppbXBsXSBhdXRvcmVsZWFzZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCi0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCShyZXZpc2lvbiAxODE0
OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01TVkdSZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNh
bXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbXBvcnQgIkRPTVNWR1JlY3QuaCIKLQot
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgotCi0jZGVmaW5l
IElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpGbG9hdFJlY3QqPihfaW50ZXJuYWwpCi0K
LUBpbXBsZW1lbnRhdGlvbiBET01TVkdSZWN0Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGRl
bGV0ZSBJTVBMOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQot
ewotICAgIGRlbGV0ZSBJTVBMOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKGZsb2F0
KXgKLXsKLSAgICByZXR1cm4gSU1QTC0+eCgpOwotfQotCi0tICh2b2lkKXNldFg6KGZsb2F0KW5l
d1gKLXsKLSAgICBJTVBMLT5zZXRYKG5ld1gpOwotfQotCi0tIChmbG9hdCl5Ci17Ci0gICAgcmV0
dXJuIElNUEwtPnkoKTsKLX0KLQotLSAodm9pZClzZXRZOihmbG9hdCluZXdZCi17Ci0gICAgSU1Q
TC0+c2V0WShuZXdZKTsKLX0KLQotLSAoZmxvYXQpd2lkdGgKLXsKLSAgICByZXR1cm4gSU1QTC0+
d2lkdGgoKTsKLX0KLQotLSAodm9pZClzZXRXaWR0aDooZmxvYXQpbmV3V2lkdGgKLXsKLSAgICBJ
TVBMLT5zZXRXaWR0aChuZXdXaWR0aCk7Ci19Ci0KLS0gKGZsb2F0KWhlaWdodAotewotICAgIHJl
dHVybiBJTVBMLT5oZWlnaHQoKTsKLX0KLQotLSAodm9pZClzZXRIZWlnaHQ6KGZsb2F0KW5ld0hl
aWdodAotewotICAgIElNUEwtPnNldEhlaWdodChuZXdIZWlnaHQpOwotfQotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBET01TVkdSZWN0IChXZWJDb3JlSW50ZXJuYWwpCi0KLS0gKFdlYkNvcmU6
OkZsb2F0UmVjdClfU1ZHUmVjdAotewotICAgIHJldHVybiAqKElNUEwpOwotfQotCi0tIChpZClf
aW5pdFdpdGhGbG9hdFJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl2YWx1ZQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgQ2FjaGluZwotICAgIFtzdXBlciBfaW5pdF07Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0ICppbXBsID0gbmV3IFdlYkNvcmU6OkZsb2F0UmVjdCh2YWx1ZSk7Ci0gICAgX2lu
dGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0rIChET01TVkdSZWN0ICopX1NWR1JlY3RXaXRoOihXZWJDb3Jl
OjpGbG9hdFJlY3QpdmFsdWUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IENhY2hpbmcKLSAg
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoRmxvYXRSZWN0OnZhbHVlXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE4MTQ5KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDggKzE5NSw4IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlw
ZQogICAgIG15ICR0eXBlID0gc2hpZnQ7CiAgICAgJHR5cGUgPX4gcy9TVkdBbmltYXRlZC8vOwog
Ci0gICAgaWYgKCR0eXBlIGVxICJTVkdSZWN0IiBvciAkdHlwZSBlcSAiU1ZHUG9pbnQiIG9yICR0
eXBlIGVxICJTVkdOdW1iZXIiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IkpTU1ZHJHR5cGUu
aCJ9ID0gMTsKKyAgICBpZiAoJHR5cGUgZXEgIlBvaW50IiBvciAkdHlwZSBlcSAiUmVjdCIpIHsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXQkdHlwZS5oIn0gPSAxOwogICAgIH0gZWxzaWYg
KCR0eXBlIGVxICJTdHJpbmciKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3Ry
aW5nLmgifSA9IDE7CiAgICAgfQpAQCAtMjYzLDYgKzI2MywxMiBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICAgICAgfQogICAgIH0KIAorICAgICMgR2V0IGNvcnJlY3QgcGFzcy9zdG9yZSB0eXBl
cyByZXNwZWN0aW5nIFBPRFR5cGUgZmxhZworICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OworICAgIG15ICRwYXNzVHlwZSA9ICRwb2RU
eXBlID8gImNvbnN0ICRwb2RUeXBlJiIgOiAiJGltcGxDbGFzc05hbWUqIjsKKworICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRwb2RUeXBlLmhcIlxuIikgaWYgKCRwb2RUeXBl
IGFuZCAkcG9kVHlwZSBuZSAiZmxvYXQiKTsKKwogICAgIG15ICRudW1Db25zdGFudHMgPSBAeyRk
YXRhTm9kZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtQXR0cmlidXRlcyA9IEB7JGRhdGFOb2Rl
LT5hdHRyaWJ1dGVzfTsKICAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0
aW9uc307CkBAIC0yNzAsNyArMjc2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKIAogICAgICMgSW1w
bGVtZW50YXRpb24gY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlvbgotICAgIEFkZENsYXNzRm9yd2Fy
ZElmTmVlZGVkKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZCgk
aW1wbENsYXNzTmFtZSkgdW5sZXNzKCRwb2RUeXBlKTsKIAogICAgICMgQ2xhc3MgZGVjbGFyYXRp
b24KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAk
cGFyZW50Q2xhc3NOYW1lIHtcbiIpOwpAQCAtMjc4LDkgKzI4NCw5IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogCiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJEb05vdENhY2hlIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAkY2xhc3NOYW1lKCRpbXBsQ2xhc3NOYW1lKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKCRwYXNzVHlwZSk7XG4iKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoS0pTOjpFeGVj
U3RhdGUqLCAkaW1wbENsYXNzTmFtZSopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgJGNsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSosICRwYXNzVHlwZSk7XG4iKTsKICAg
ICB9CiAKICAgICAjIERlc3RydWN0b3IKQEAgLTQwMCw5ICs0MDYsMTYgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgfQogCiAgICAgaWYgKCEkaGFzUGFyZW50KSB7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwoKSBjb25zdCB7IHJldHVybiBt
X2ltcGwuZ2V0KCk7IH1cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0
ZTpcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIFJlZlB0cjwkaW1wbENs
YXNzTmFtZT4gbV9pbXBsO1xuIik7CisgICAgICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkcG9kVHlwZSYgaW1wbCgpIHsgcmV0dXJuIG1f
aW1wbDsgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGNvbnN0
ICRwb2RUeXBlJiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcml2YXRlOlxuIik7CisgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICRwb2RUeXBlIG1faW1wbDtcbiIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFt
ZSogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfVxuIik7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOworICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBSZWZQdHI8JGltcGxDbGFzc05hbWU+IG1faW1wbDtcbiIpOwor
ICAgICAgICB9CiAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
R2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsKCkgY29uc3Q7XG4iKTsKICAgICB9CkBAIC00MjIs
MTAgKzQzNSwxNCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAifTtcblxuIik7CiAKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIktKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosICRpbXBsQ2xh
c3NOYW1lKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIktKUzo6SlNWYWx1
ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosICRwYXNzVHlwZSk7XG4iKTsKICAgICB9CiAgICAgaWYg
KCEkaGFzUGFyZW50IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRl
TmF0aXZlQ29udmVydGVyIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRpbXBs
Q2xhc3NOYW1lKiB0byR7aW50ZXJmYWNlTmFtZX0oS0pTOjpKU1ZhbHVlKik7XG4iKTsKKyAgICAg
ICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJHBv
ZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEtKUzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJGltcGxDbGFzc05hbWUq
IHRvJHtpbnRlcmZhY2VOYW1lfShLSlM6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICB9CiAgICAg
fQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogCkBAIC00NTcsMTEgKzQ3NCw4IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9
O1xuXG4iKTsKLQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwotCiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsfV9TVVBQT1JUXG5cbiIp
IGlmICRjb25kaXRpb25hbDsKLQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIp
OwogfQogCkBAIC02NjEsMTIgKzY3NSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIjAgfTtcblxuIik7CiAKKyAgICAjIEdldCBj
b3JyZWN0IHBhc3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKKyAgICBteSAk
cG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKKyAg
ICBteSAkcGFzc1R5cGUgPSAkcG9kVHlwZSA/ICJjb25zdCAkcG9kVHlwZSYiIDogIiRpbXBsQ2xh
c3NOYW1lKiI7CisKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2FjaGUifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZSgkaW1wbENsYXNzTmFtZSogaW1wbClcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZSgkcGFz
c1R5cGUgaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJl
bnRDbGFzc05hbWUoaW1wbClcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEV4ZWNTdGF0ZSogZXhlYywgJGltcGxD
bGFzc05hbWUqIGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNz
TmFtZX06OiRjbGFzc05hbWUoRXhlY1N0YXRlKiBleGVjLCAkcGFzc1R5cGUgaW1wbClcbiIpOwog
ICAgICAgICBpZiAoJGhhc1BhcmVudCkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGV4ZWMsIGltcGwpXG4iKTsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTY4Myw3ICs3MDEsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAj
IERlc3RydWN0b3IKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIke2NsYXNzTmFtZX06On4kY2xhc3NOYW1lKClcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiAgICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1f
aW1wbC5nZXQoKSk7XG59XG5cbiIpOworICAgICAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xufVxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuICAgIFNjcmlwdEludGVycHJldGVyOjpm
b3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTtcbn1cblxuIik7CisgICAgICAgIH0KICAgICB9
CiAKICAgICAjIERvY3VtZW50IG5lZWRzIGEgc3BlY2lhbCBkZXN0cnVjdG9yIGJlY2F1c2UgaXQn
cyBhIHNwZWNpYWwgY2FzZSBmb3IgY2FjaGluZy4gSXQgbmVlZHMKQEAgLTc1MCw3ICs3NzIsMTMg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOwogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtjbGFz
c05hbWV9OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dFxue1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1l
KiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGltcGwoKSk7XG5cbiIpOworCisg
ICAgICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgY29uc3QgJHBvZFR5cGUmIGltcChpbXBsKCkpO1xuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAg
PSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGltcGwoKSk7XG5cbiIpOworICAgICAgICB9
CisKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3dpdGNoICh0b2tlbikge1xuIik7
CiAKICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRl
c30pIHsKQEAgLTc2NywxMSArNzk1LDI2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKUyIgLiAk
Y29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3IoZXhlYyk7XG4iKTsKICAgICAgICAg
ICAgIH0gZWxzaWYgKCFAeyRhdHRyaWJ1dGUtPmdldHRlckV4Y2VwdGlvbnN9KSB7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzZSAiIC4gV0tfdWNmaXJzdCgkbmFt
ZSkgLiAiQXR0ck51bTpcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
ICJpbXAtPiRuYW1lKCkiKSAuICI7XG4iKTsKKworICAgICAgICAgICAgICAgIGlmICgkcG9kVHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUgZXEgImZsb2F0IikgeyAjIFNw
ZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsICJpbXAiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJpbXAu
JG5hbWUoKSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgImlt
cC0+JG5hbWUoKSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzZSAiIC4g
V0tfdWNmaXJzdCgkbmFtZSkgLiAiQXR0ck51bToge1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEtKUzo6SlNWYWx1ZSogcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJpbXAtPiRu
YW1lKGVjKSIpIC4gIjtcbiIpOworCisgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBLSlM6OkpTVmFs
dWUqIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAi
aW1wLiRuYW1lKGVjKSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBLSlM6OkpTVmFsdWUq
IHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAiaW1w
LT4kbmFtZShlYykiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fVxuIik7CkBAIC03OTgsNyArODQxLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZhbHVlLCBp
bnQgLyphdHRyKi8pXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1w
ID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihpbXBsKCkpO1xuXG4iKTsKKworICAgICAg
ICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJHBvZFR5cGUmIGltcChpbXBsKCkpO1xuXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUq
IGltcCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oaW1wbCgpKTtcblxuIik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN3aXRjaCAo
dG9rZW4pIHtcbiIpOwogCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRh
dGFOb2RlLT5hdHRyaWJ1dGVzfSkgewpAQCAtODIxLDExICs4NzAsMTkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICAgICAgSlNPYmplY3Q6OnB1dChleGVjLCBcIiRuYW1lXCIsIHZhbHVlKTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzZSAiIC4gV0tfdWNmaXJzdCgkbmFtZSkgLiJBdHRy
TnVtOiB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVy
RXhjZXB0aW9uc307Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgaW1wLT5zZXQiIC4gV0tfdWNmaXJzdCgkbmFtZSkgLiAiKCIgLiBKU1ZhbHVlVG9O
YXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgZWMiKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRl
ckV4Y2VwdGlvbnN9OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0
dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUgZXEgImZsb2F0IikgeyAj
IFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGltcCA9ICIgLiBKU1ZhbHVlVG9OYXRp
dmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaW1wLnNldCIgLiBXS191Y2ZpcnN0KCRuYW1l
KSAuICIoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIp
IC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpIGlmIEB7JGF0dHJp
YnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIGltcC0+c2V0IiAuIFdLX3VjZmlyc3QoJG5hbWUpIC4g
IigiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCBlYyIpIGlm
IEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OworICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGJyZWFrO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtODUzLDcgKzkxMCwxMSBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCYke2NsYXNzTmFtZX06OmluZm8pKVxuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTtcblxuIik7CiAKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxD
bGFzc05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oc3RhdGljX2Nhc3Q8
JGNsYXNzTmFtZSo+KHRoaXNPYmopLT5pbXBsKCkpO1xuXG4iKTsKKyAgICAgICAgaWYgKCRwb2RU
eXBlKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSYgaW1w
KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqKS0+aW1wbCgpKTtcblxuIik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENs
YXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwk
Y2xhc3NOYW1lKj4odGhpc09iaiktPmltcGwoKSk7XG5cbiIpOworICAgICAgICB9CiAKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3dpdGNoIChpZCkge1xuIik7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpAQCAtODcxLDcg
KzkzMiw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG15ICRwYXJhbUluZGV4ID0gMDsKLSAgICAgICAgICAgIG15ICRmdW5jdGlvblN0
cmluZyA9ICJpbXAtPiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIjsKKyAgICAg
ICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICJpbXAiIC4gKCRwb2RUeXBlID8gIi4iIDogIi0+
IikgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIjsKKwogICAgICAgICAgICAgbXkg
JG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CiAgICAgICAgICAgICBt
eSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOwogCkBAIC05MzAsMTcgKzk5MiwzMSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmICghJGhhc1BhcmVudCkgewot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIktKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNT
dGF0ZSogZXhlYywgJGltcGxDbGFzc05hbWUqIG9iailcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIktKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgJHBhc3NU
eXBlIG9iailcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZURPTU9iamVjdDwkaW1w
bENsYXNzTmFtZSwgJGNsYXNzTmFtZT4oZXhlYywgb2JqKTtcbiIpOworICAgICAgICBpZiAoJHBv
ZFR5cGUpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBuZXcg
JGNsYXNzTmFtZShleGVjLCBvYmopO1xuIik7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEtKUzo6Y2FjaGVET01PYmplY3Q8JGlt
cGxDbGFzc05hbWUsICRjbGFzc05hbWU+KGV4ZWMsIG9iaik7XG4iKTsKKyAgICAgICAgfQogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgIH0KIAogICAgIGlmICghJGhhc1Bh
cmVudCB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNv
bnZlcnRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJGltcGxDbGFzc05hbWUq
IHRvJHtpbnRlcmZhY2VOYW1lfShLSlM6OkpTVmFsdWUqIHZhbClcbiIpOworICAgICAgICBpZiAo
JHBvZFR5cGUpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHBvZFR5cGUgdG8k
e2ludGVyZmFjZU5hbWV9KEtKUzo6SlNWYWx1ZSogdmFsKVxuIik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1lKiB0byR7aW50
ZXJmYWNlTmFtZX0oS0pTOjpKU1ZhbHVlKiB2YWwpXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiB2YWwtPmlzT2JqZWN0KCYke2NsYXNzTmFtZX06OmluZm8pID8gc3RhdGljX2Nh
c3Q8JGNsYXNzTmFtZSo+KHZhbCktPmltcGwoKSA6IDA7XG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG4iKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gdmFsLT5pc09iamVjdCgmJHtjbGFzc05hbWV9OjppbmZvKSA/IHN0YXRpY19jYXN0PCRjbGFz
c05hbWUqPih2YWwpLT5pbXBsKCkgOiAiKTsKKyAgICAgICAgaWYgKCRwb2RUeXBlIGFuZCAkcG9k
VHlwZSBuZSAiZmxvYXQiKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRwb2RU
eXBlKCk7XG59XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiMDtcbn1cbiIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlTmF0aXZlQ29udmVydGVyIn0gJiYgJGhh
c1BhcmVudCkgewpAQCAtMTEwOSwxNiArMTE4NSwxMyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAg
ICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTVkdSZWN0IikgewotICAgICAgICAkaW1wbEluY2x1
ZGVzeyJKU1NWR1JlY3QuaCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuICJ0b0Zsb2F0UmVjdCgkdmFs
dWUpIjsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRSZWN0LmgifSA9IDE7CiAgICAgfQog
CiAgICAgaWYgKCR0eXBlIGVxICJTVkdQb2ludCIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3si
SlNTVkdQb2ludC5oIn0gPSAxOwotICAgICAgICByZXR1cm4gInRvRmxvYXRQb2ludCgkdmFsdWUp
IjsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRQb2ludC5oIn0gPSAxOwogICAgIH0KIAot
CiAgICAgIyBEZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91
dGluZXMKICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CiAgICAgcmV0dXJuICJ0
byR0eXBlKCR2YWx1ZSkiOwpAQCAtMTE1Myw3ICsxMjI2LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogCiAgICAgaWYgKCR0eXBlIGVxICJTVkdSZWN0IiBvciAkdHlwZSBlcSAiU1ZHUG9pbnQiIG9y
ICR0eXBlIGVxICJTVkdOdW1iZXIiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUu
aCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuICJnZXRKUyR0eXBlKGV4ZWMsICR2YWx1ZSkiOworICAg
ICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBl
IGVxICJIVE1MQ29sbGVjdGlvbiIpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHJldmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC04MTEs
NiArODExLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgbXkgJG51bUF0dHJp
YnV0ZXMgPSBAeyRkYXRhTm9kZS0+YXR0cmlidXRlc307CiAgICAgbXkgJG51bUZ1bmN0aW9ucyA9
IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9OwogCisgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07CisgICAgbXkgJHBvZFR5cGVXaXRoTmFt
ZXNwYWNlOworCisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICRwb2RUeXBlV2l0aE5hbWVz
cGFjZSA9ICgkcG9kVHlwZSBlcSAiZmxvYXQiKSA/ICIkcG9kVHlwZSIgOiAiV2ViQ29yZTo6JHBv
ZFR5cGUiOworICAgIH0KKwogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUuCiAg
ICAgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGltcGxlbWVudGF0aW9uTGljZW5j
ZVRlbXBsYXRlKTsKIApAQCAtODI1LDggKzgzMiwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lID1+IC8oXHcrKShBYnN8UmVsKSQvKSB7
CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IiQxLmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgJGltcGxJbmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9ID0gMTsKLSAgICB9CisgICAgICAg
IGlmICghJHBvZFR5cGUpIHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiRpbXBsQ2xhc3NO
YW1lLmgifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyIkcG9kVHlwZS5oIn0gPSAxIHVubGVzcygkcG9kVHlwZSBlcSAiZmxvYXQiKTsKKyAgICAgICAg
fQorICAgIH0gCiAKICAgICAkaW1wbEluY2x1ZGVzeyJET01JbnRlcm5hbC5oIn0gPSAxOwogICAg
ICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkhhbmRsZXJzLmgifSA9IDE7CkBAIC04MzQsNyArODQ1
LDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBAaW1wbENvbnRlbnQgPSAoKTsK
IAogICAgICMgYWRkIGltcGxlbWVudGF0aW9uIGFjY2Vzc29yCi0gICAgaWYgKCRwYXJlbnRJbXBs
Q2xhc3NOYW1lIGVxICJPYmplY3QiKSB7CisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8JHBvZFR5cGVX
aXRoTmFtZXNwYWNlKj4oX2ludGVybmFsKVxuXG4iKTsKKyAgICB9IGVsc2lmICgkcGFyZW50SW1w
bENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNk
ZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSo+
KF9pbnRlcm5hbClcblxuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJGJhc2VDbGFzc1dp
dGhOYW1lc3BhY2UgPSAiV2ViQ29yZTo6JGJhc2VDbGFzcyI7CkBAIC04NjIsNiArODc1LDggQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBbc2VsZiBkZXRhY2hdO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgSU1QTC0+ZGVyZWYoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgfTtcbiIpOworICAgICAgICB9IGVsc2lmICgkcG9kVHlwZSkgeworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZGVsZXRlIElNUEw7XG4iKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChfaW50
ZXJuYWwpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBJTVBM
LT5kZXJlZigpO1xuIik7CkBAIC04NzYsNiArODkxLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbc2VsZiBkZXRh
Y2hdO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSU1QTC0+
ZGVyZWYoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfTtcbiIp
OworICAgICAgICB9IGVsc2lmICgkcG9kVHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgZGVsZXRlIElNUEw7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChfaW50ZXJuYWwpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBJTVBMLT5kZXJlZigpO1xuIik7CkBAIC05
MjMsNiArOTQwLDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBt
eSAkZ2V0dGVyQ29udGVudEhlYWQgPSAiSU1QTC0+JGF0dHJpYnV0ZU5hbWUoIjsKICAgICAgICAg
ICAgIG15ICRnZXR0ZXJDb250ZW50VGFpbCA9ICIpIjsKIAorICAgICAgICAgICAgIyBTcGVjaWFs
IGNhc2UgZm9yIERPTVNWR051bWJlcgorICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGFuZCAkcG9k
VHlwZSBlcSAiZmxvYXQiKSB7CisgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0g
IipJTVBMIjsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgPSAiIjsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGVTYW5zUHRyID0gJGF0dHJp
YnV0ZVR5cGU7CiAgICAgICAgICAgICAkYXR0cmlidXRlVHlwZVNhbnNQdHIgPX4gcy8gXCokLy87
ICMgUmVtb3ZlIHRyYWlsaW5nICIgKiIgZnJvbSBwb2ludGVyIHR5cGVzLgogCkBAIC0xMDI3LDcg
KzEwNTAsMTQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCRhcmdOYW1lKTtcblxuIik7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCRoYXNTZXR0ZXJFeGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgRE9NU1ZHTnVtYmVyCisgICAg
ICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkcG9k
VHlwZSBlcSAiZmxvYXQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAqSU1QTCA9ICRhcmc7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElNUEwt
PiRhdHRyaWJ1dGVOYW1lKCRhcmcpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2lmICgkaGFzU2V0dGVyRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSU1QTC0+JGF0dHJpYnV0ZU5h
bWUoJGFyZywgZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICRleGNlcHRpb25SYWlzZU9uRXJyb3JcbiIpOwpAQCAtMTIyNCw3ICsxMjU0LDcgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIC0gVHlwZS1HZXR0ZXIKICAgICAjIC0g
KFdlYkNvcmU6OkZvb0JhciAqKV9mb29CYXIgZm9yIGltcGxlbWVudGF0aW9uIGNsYXNzIEZvb0Jh
cgogICAgIG15ICR0eXBlR2V0dGVyTmFtZSA9IEdldE9iakNUeXBlR2V0dGVyTmFtZSgkaW50ZXJm
YWNlTmFtZSk7Ci0gICAgbXkgJHR5cGVHZXR0ZXJTaWcgPSAiLSAoJGltcGxDbGFzc05hbWVXaXRo
TmFtZXNwYWNlICopJHR5cGVHZXR0ZXJOYW1lIjsKKyAgICBteSAkdHlwZUdldHRlclNpZyA9ICIt
ICIgLiAoJHBvZFR5cGUgPyAiKCRwb2RUeXBlV2l0aE5hbWVzcGFjZSkiIDogIigkaW1wbENsYXNz
TmFtZVdpdGhOYW1lc3BhY2UgKikiKSAuICR0eXBlR2V0dGVyTmFtZTsKIAogICAgIG15IEBpdmFy
c1RvUmV0YWluID0gKCk7CiAgICAgbXkgJGl2YXJzVG9Jbml0ID0gIiI7CkBAIC0xMjQ4LDYgKzEy
NzgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgLSBUeXBlLU1ha2VyCiAg
ICAgbXkgJHR5cGVNYWtlck5hbWUgPSBHZXRPYmpDVHlwZU1ha2VyKCRpbnRlcmZhY2VOYW1lKTsK
ICAgICBteSAkdHlwZU1ha2VyU2lnID0gIisgKCRjbGFzc05hbWUgKikkdHlwZU1ha2VyTmFtZToo
JGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlICopaW1wbCIgLiAkdHlwZU1ha2VyU2lnQWRkaXRp
b247CisgICAgJHR5cGVNYWtlclNpZyA9ICIrICgkY2xhc3NOYW1lICopJHR5cGVNYWtlck5hbWU6
KCRwb2RUeXBlV2l0aE5hbWVzcGFjZSlpbXBsIiAuICR0eXBlTWFrZXJTaWdBZGRpdGlvbiBpZiAo
JHBvZFR5cGUpOwogCiAgICAgIyBHZW5lcmF0ZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMuIAogICAg
IEBpbnRlbmFsSGVhZGVyQ29udGVudCA9IHNwbGl0KCJcciIsICRpbXBsZW1lbnRhdGlvbkxpY2Vu
Y2VUZW1wbGF0ZSk7CkBAIC0xMjY4LDEwICsxMjk5LDM1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkdHlwZUdldHRlclNpZ1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBJTVBMO1xuIik7CisKKyAgICAgICAgaWYgKCRwb2RUeXBlKSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gKklNUEw7XG4iKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBJTVBMO1xuIik7CisgICAgICAgIH0KKwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CiAKLSAgICAgICAgaWYgKCRwYXJlbnRJbXBsQ2xhc3NOYW1lIGVxICJPYmplY3Qi
KSB7ICAgICAgICAKKyAgICAgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgICAgICAjIC0gKGlk
KV9pbml0V2l0aEZvb0JhcjooV2ViQ29yZTo6Rm9vQmFyKWltcGwgZm9yIGltcGxlbWVudGF0aW9u
IGNsYXNzIEZvb0JhcgorICAgICAgICAgICAgbXkgJGluaXRXaXRoSW1wbE5hbWUgPSAiX2luaXRX
aXRoIiAuICRpbXBsQ2xhc3NOYW1lOworICAgICAgICAgICAgbXkgJGluaXRXaXRoU2lnID0gIi0g
KGlkKSRpbml0V2l0aEltcGxOYW1lOigkcG9kVHlwZVdpdGhOYW1lc3BhY2UpaW1wbCIgLiAkdHlw
ZU1ha2VyU2lnQWRkaXRpb247CisKKyAgICAgICAgICAgICMgRklYTUU6IEltcGxlbWVudCBDYWNo
aW5nCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbml0V2l0aFNpZ1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgW3N1cGVyIF9pbml0XTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGVXaXRoTmFtZXNwYWNlKiBfaW1wbCA9IG5ldyAkcG9k
VHlwZVdpdGhOYW1lc3BhY2UoaW1wbCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIF9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwq
PihfaW1wbCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBzZWxmO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisK
KyAgICAgICAgICAgICMgLSAoRE9NRm9vQmFyKV9Gb29CYXJXaXRoOihXZWJDb3JlOjpGb29CYXIp
aW1wbCBmb3IgaW1wbGVtZW50YXRpb24gY2xhc3MgRm9vQmFyCisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiR0eXBlTWFrZXJTaWdcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBbW1tzZWxmIGFsbG9jXSAkaW5pdFdpdGhJbXBsTmFtZTppbXBsXSBhdXRvcmVsZWFzZV07XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgfSBl
bHNpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEgIk9iamVjdCIpIHsgICAgICAgIAogICAgICAg
ICAgICAgIyAtIChpZClfaW5pdFdpdGhGb29CYXI6KFdlYkNvcmU6OkZvb0JhciAqKWltcGwgZm9y
IGltcGxlbWVudGF0aW9uIGNsYXNzIEZvb0JhcgogICAgICAgICAgICAgbXkgJGluaXRXaXRoSW1w
bE5hbWUgPSAiX2luaXRXaXRoIiAuICRpbXBsQ2xhc3NOYW1lOwogICAgICAgICAgICAgbXkgJGlu
aXRXaXRoU2lnID0gIi0gKGlkKSRpbml0V2l0aEltcGxOYW1lOigkaW1wbENsYXNzTmFtZVdpdGhO
YW1lc3BhY2UgKilpbXBsIiAuICR0eXBlTWFrZXJTaWdBZGRpdGlvbjsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR051bWJlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHTnVtYmVyLmlkbAkocmV2aXNpb24gMTgxNDkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdO
dW1iZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKIG1vZHVsZSBzdmcg
ewogCi0gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1TVkcsIE9iakNDdXN0b21JbXBsZW1lbnRh
dGlvbl0gU1ZHTnVtYmVyIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPVNWRywgUE9EVHlw
ZT1mbG9hdF0gU1ZHTnVtYmVyIHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGZsb2F0IHZh
bHVlCiAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAg
ICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvaW50LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2ludC5pZGwJKHJldmlzaW9uIDE4MTQ5KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUG9pbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMyArMjQs
MTQgQEAKIAogbW9kdWxlIHN2ZyB7CiAKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPVNWRywg
T2JqQ0N1c3RvbUltcGxlbWVudGF0aW9uXSBTVkdQb2ludCB7CisgICAgaW50ZXJmYWNlIFtDb25k
aXRpb25hbD1TVkcsIFBPRFR5cGU9RmxvYXRQb2ludF0gU1ZHUG9pbnQgewogICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgZmxvYXQgeAogICAgICAgICAgICAgICAgICAgICAgc2V0dGVyIHJhaXNl
cyhET01FeGNlcHRpb24pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgeQogICAg
ICAgICAgICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAg
IFNWR1BvaW50IG1hdHJpeFRyYW5zZm9ybShpbiBTVkdNYXRyaXggbWF0cml4KTsKKyAgICAgICAg
Ly8gRklYTUUgLSBSZWVuYWJsZSB0aGlzIG9uY2UgU1ZHTWF0cml4IGlzIGNvbnZlcnRlZCB0byBB
ZmZpbmVUcmFuc2Zvcm0KKyAgICAgICAgLy9TVkdQb2ludCBtYXRyaXhUcmFuc2Zvcm0oaW4gU1ZH
TWF0cml4IG1hdHJpeCk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UmVjdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdC5pZGwJKHJl
dmlzaW9uIDE4MTQ5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbW9kdWxlIHN2ZyB7CiAKLSAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPVNWRywgT2JqQ0N1c3RvbUltcGxlbWVudGF0aW9uXSBTVkdSZWN0IHsKKyAg
ICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPVNWRywgUE9EVHlwZT1GbG9hdFJlY3RdIFNWR1JlY3Qg
ewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgeAogICAgICAgICAgICAgICAgICAg
ICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgeQo=
</data>
<flag name="review"
          id="4276"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>