<?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>71862</bug_id>
          
          <creation_ts>2011-11-08 15:08:35 -0800</creation_ts>
          <short_desc>Towards 8 Bit Strings: Templatize JSC::LiteralParser class by character type</short_desc>
          <delta_ts>2011-11-09 20:54:52 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71337</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>498460</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-08 15:08:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/10225303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499292</commentid>
    <comment_count>1</comment_count>
      <attachid>114350</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-09 13:15:32 -0800</bug_when>
    <thetext>Created attachment 114350
Proposed Patch

This patch may not build on non-Mac bots due to exports not being right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499314</commentid>
    <comment_count>2</comment_count>
      <attachid>114350</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-09 13:35:20 -0800</bug_when>
    <thetext>Comment on attachment 114350
Proposed Patch

Attachment 114350 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10403048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499322</commentid>
    <comment_count>3</comment_count>
      <attachid>114350</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-09 13:48:17 -0800</bug_when>
    <thetext>Comment on attachment 114350
Proposed Patch

Attachment 114350 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10401056</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499335</commentid>
    <comment_count>4</comment_count>
      <attachid>114363</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-09 13:59:58 -0800</bug_when>
    <thetext>Created attachment 114363
Updated Patch

Speculative fix to qt and elf build failures.

Fixed LayoutTests/fast/js/JSON-parse.html due to improper error message generation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499380</commentid>
    <comment_count>5</comment_count>
      <attachid>114363</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-11-09 14:55:28 -0800</bug_when>
    <thetext>Comment on attachment 114363
Updated Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:6
&gt; +        Changed LiteralParser to be templatized of character type.

s/of/on

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Moved five enums out of class definition to work around a clang compiler defect.

sadness, have you filed a bug on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499618</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-09 20:54:52 -0800</bug_when>
    <thetext>Committed r99812: &lt;http://trac.webkit.org/changeset/99812&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114350</attachid>
            <date>2011-11-09 13:15:32 -0800</date>
            <delta_ts>2011-11-09 13:59:58 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>71862-3.patch</filename>
            <type>text/plain</type>
            <size>38857</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk3NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAK
KzIwMTEtMTEtMDkgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6TGl0ZXJhbFBhcnNlciBj
bGFzcyBieSBjaGFyYWN0ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzE4NjIKKworICAgICAgICBDaGFuZ2VkIExpdGVyYWxQYXJzZXIgdG8g
YmUgdGVtcGxhdGl6ZWQgb2YgY2hhcmFjdGVyIHR5cGUuCisKKyAgICAgICAgTW92ZWQgZml2ZSBl
bnVtcyBvdXQgb2YgY2xhc3MgZGVmaW5pdGlvbiB0byB3b3JrIGFyb3VuZCBhIGNsYW5nIGNvbXBp
bGVyIGRlZmVjdC4KKworICAgICAgICBBZGRlZCBsZXhJZGVudGlmaWVyIHRlbXBsYXRlZCBtZXRo
b2QgdG8gYnJlYWsgb3V0IGNoYXJhY3RlciBzcGVjaWZpYyB2ZXJzaW9ucy4KKyAgICAgICAgQWRk
ZWQgc3RhdGljIHNldFBhcnNlclRva2VuU3RyaW5nIHRlbXBsYXRlZCBtZXRob2QgdG8gaGFuZGxl
IHNldHRpbmcgYXBwcm9yaWF0ZWx5CisgICAgICAgIHNpemVkIHN0cmluZyBwb2ludGVyLgorCisg
ICAgICAgIFRvIGtlZXAgY29kZSBpbiBMaXRlcmFsUGFyc2VyLmNwcCBhbmQga2VlcCBMaXRlcmFs
UGFyc2VyLmggc21hbGwsIHRoZSB0d28KKyAgICAgICAgZmxhdm9ycyBvZiBMaXRlcmFsUGFyc2Vy
IGFyZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCBhdCB0aGUgZW5kIG9mCisgICAgICAgIExpdGVy
YWxQYXJzZXIuY3BwLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZU1ha2VGcm9tSlNP
TlN0cmluZyk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU09OUHJvdG9GdW5jUGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OmlzSlNPTldoaXRlU3BhY2UpOgorICAgICAg
ICAoSlNDOjo6OnRyeUpTT05QUGFyc2UpOgorICAgICAgICAoSlNDOjo6Om1ha2VJZGVudGlmaWVy
KToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4KToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6
bGV4SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6TGV4ZXI6Om5leHQpOgorICAgICAgICAo
SlNDOjpMQ2hhcik6CisgICAgICAgIChKU0M6OlVDaGFyKToKKyAgICAgICAgKEpTQzo6aXNTYWZl
U3RyaW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4U3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4TnVtYmVyKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6
CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmg6CisgICAgICAgIChKU0M6OkxpdGVy
YWxQYXJzZXI6OkxpdGVyYWxQYXJzZXIpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpn
ZXRFcnJvck1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjp0cnlMaXRlcmFs
UGFyc2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6TGV4ZXIpOgorICAg
ICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6Y3VycmVudFRva2VuKToKKyAgICAgICAg
KEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmdldEVycm9yTWVzc2FnZSk6CisgICAgICAgICog
cnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkxDaGFyKToKKyAgICAgICAgKEpTQzo6
VUNoYXIpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kKToKKwogMjAxMS0x
MS0wOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODczCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk5Njg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw3IEBAIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNX
VEYxM1N0cmluZ0J1aWxkZXIxMXJlaWZ5U3RyaW5nRXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVy
MTFzaHJpbmtUb0ZpdEV2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjE1cmVzZXJ2ZUNhcGFjaXR5
RWoKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmFwcGVuZEVQS2NqCitfX1pOM1dURjEzU3RyaW5n
QnVpbGRlcjZhcHBlbmRFUEtoagogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2YXBwZW5kRVBLdGoK
IF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNnJlc2l6ZUVqCiBfX1pOM1dURjEzV1RGVGhyZWFkRGF0
YTEwc3RhdGljRGF0YUUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFs
dWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDExIEBAIEpTVmFsdWVSZWYg
SlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKICAgICBVU3RyaW5nIHN0
ciA9IHN0cmluZy0+dXN0cmluZygpOwotICAgIExpdGVyYWxQYXJzZXIgcGFyc2VyKGV4ZWMsIHN0
ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6U3RyaWN0SlNPTik7
CisgICAgaWYgKHN0ci5pczhCaXQoKSkgeworICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBw
YXJzZXIoZXhlYywgc3RyLmNoYXJhY3RlcnM4KCksIHN0ci5sZW5ndGgoKSwgU3RyaWN0SlNPTik7
CisgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpOwor
ICAgIH0KKyAgICBMaXRlcmFsUGFyc2VyPFVDaGFyPiBwYXJzZXIoZXhlYywgc3RyLmNoYXJhY3Rl
cnMxNigpLCBzdHIubGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTk2ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QCBFWFBPUlRTCiAgICAgP2FkZFN0YXRpY0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVY
UEFVR2xvYmFsUHJvcGVydHlJbmZvQDEyQEhAWgogICAgID9hbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBJSUBaCiAgICAgP2FsbG9jYXRl
U2xvd0Nhc2VAQWxsb2NhdGlvblNwYWNlQEpTQ0BAQUFFUEFYQUFVU2l6ZUNsYXNzQE1hcmtlZFNw
YWNlQDJAQFoKLSAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJESUBaCisgICAg
P2FwcGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCRUlAWgogICAgID9hcHBlbmRAU3RyaW5n
QnVpbGRlckBXVEZAQFFBRVhQQl9XSUBaCiAgICAgP2FzY2lpQFVTdHJpbmdASlNDQEBRQkU/QVZD
U3RyaW5nQFdURkBAWFoKICAgICA/YXR0YWNoQERlYnVnZ2VyQEpTQ0BAUUFFWFBBVkpTR2xvYmFs
T2JqZWN0QDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUs
OSArNDQ1LDE1IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpjYWxsRXYKICAg
ICAgICAgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY2FuIHVzZSB0aGUgcHJlcGFyc2VyIGluIHN0cmljdCBtb2RlLCB3ZSBqdXN0IG5l
ZWQgYWRkaXRpb25hbCBsb2dpYwogICAgICAgICAgICAgLy8gdG8gcHJldmVudCBkdXBsaWNhdGVz
LgotICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFt
U291cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNl
cjo6Tm9uU3RyaWN0SlNPTik7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3Qg
PSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlZE9iamVjdDsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtU291cmNlLmlzOEJpdCgpKSB7Cisg
ICAgICAgICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGNhbGxGcmFtZSwg
cHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OKTsKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZWRPYmplY3Q7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExpdGVy
YWxQYXJzZXI8VUNoYXI+IHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFj
dGVyczE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOworICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFs
UGFyc2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlOwpAQCAtNzc5LDE2ICs3ODUsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAogICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBMaXRlcmFsUGFyc2VyIGxpdGVyYWxQYXJzZXIo
Y2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2UoKS5kYXRhKCksIHByb2dyYW0tPnNvdXJjZSgpLmxl
bmd0aCgpLCBMaXRlcmFsUGFyc2VyOjpKU09OUCk7Ci0gICAgVmVjdG9yPExpdGVyYWxQYXJzZXI6
OkpTT05QRGF0YT4gSlNPTlBEYXRhOwotICAgIGlmIChsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFy
c2UoSlNPTlBEYXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oKSkpIHsKKyAgICBWZWN0b3I8SlNPTlBEYXRhPiBKU09OUERhdGE7CisgICAgYm9vbCBw
YXJzZVJlc3VsdDsKKyAgICBjb25zdCBVU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBwcm9ncmFtLT5z
b3VyY2UoKS50b1N0cmluZygpOworICAgIGlmIChwcm9ncmFtU291cmNlLmlzOEJpdCgpKSB7Cisg
ICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IGxpdGVyYWxQYXJzZXIoY2FsbEZyYW1lLCBwcm9n
cmFtU291cmNlLmNoYXJhY3RlcnM4KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIEpTT05QKTsK
KyAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFyc2UoSlNPTlBE
YXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTGl0ZXJhbFBhcnNlcjxVQ2hhcj4gbGl0ZXJhbFBhcnNl
cihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHByb2dyYW1Tb3VyY2Uu
bGVuZ3RoKCksIEpTT05QKTsKKyAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRy
eUpTT05QUGFyc2UoSlNPTlBEYXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRz
UmljaFNvdXJjZUluZm8oKSk7ICAgICAgICAKKyAgICB9CisKKyAgICBpZiAocGFyc2VSZXN1bHQp
IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4tPmds
b2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgZW50cnkgPSAwOyBlbnRyeSA8IEpTT05QRGF0YS5zaXplKCk7IGVudHJ5KyspIHsK
LSAgICAgICAgICAgIFZlY3RvcjxMaXRlcmFsUGFyc2VyOjpKU09OUFBhdGhFbnRyeT4gSlNPTlBQ
YXRoOworICAgICAgICAgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBKU09OUFBhdGg7CiAgICAg
ICAgICAgICBKU09OUFBhdGguc3dhcChKU09OUERhdGFbZW50cnldLm1fcGF0aCk7CiAgICAgICAg
ICAgICBKU1ZhbHVlIEpTT05QVmFsdWUgPSBKU09OUERhdGFbZW50cnldLm1fdmFsdWUuZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoSlNPTlBQYXRoLnNpemUoKSA9PSAxICYmIEpTT05QUGF0aFswXS5t
X3R5cGUgPT0gTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZSkgeworICAg
ICAgICAgICAgaWYgKEpTT05QUGF0aC5zaXplKCkgPT0gMSAmJiBKU09OUFBhdGhbMF0ubV90eXBl
ID09IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmUpIHsKICAgICAgICAgICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIEpTT05QUGF0aFswXS5tX3BhdGhFbnRy
eU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwgSlNPTlBWYWx1
ZSwgc2xvdCk7CkBAIC04MDAsOSArODE1LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBiYXNlT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
SlNPTlBQYXRoLnNpemUoKSAtIDE7IGkrKykgewotICAgICAgICAgICAgICAgIEFTU0VSVChKU09O
UFBhdGhbaV0ubV90eXBlICE9IExpdGVyYWxQYXJzZXI6OkpTT05QUGF0aEVudHJ5VHlwZURlY2xh
cmUpOworICAgICAgICAgICAgICAgIEFTU0VSVChKU09OUFBhdGhbaV0ubV90eXBlICE9IEpTT05Q
UGF0aEVudHJ5VHlwZURlY2xhcmUpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoSlNPTlBQYXRo
W2ldLm1fdHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQ
YXRoRW50cnlUeXBlRG90OiB7CisgICAgICAgICAgICAgICAgY2FzZSBKU09OUFBhdGhFbnRyeVR5
cGVEb3Q6IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lLCBzbG90KSkgewpAQCAtODE3LDcgKzgzMiw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBMaXRlcmFs
UGFyc2VyOjpKU09OUFBhdGhFbnRyeVR5cGVMb29rdXA6IHsKKyAgICAgICAgICAgICAgICBjYXNl
IEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewogICAgICAgICAgICAgICAgICAgICBiYXNlT2Jq
ZWN0ID0gYmFzZU9iamVjdC5nZXQoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoSW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtODMwLDcgKzg0
NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgc3dp
dGNoIChKU09OUFBhdGgubGFzdCgpLm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBMaXRlcmFs
UGFyc2VyOjpKU09OUFBhdGhFbnRyeVR5cGVDYWxsOiB7CisgICAgICAgICAgICBjYXNlIEpTT05Q
UGF0aEVudHJ5VHlwZUNhbGw6IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
YmFzZU9iamVjdC5nZXQoY2FsbEZyYW1lLCBKU09OUFBhdGgubGFzdCgpLm1fcGF0aEVudHJ5TmFt
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtODQ2LDEzICs4NjEsMTMg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50
cnlUeXBlRG90OiB7CisgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZURvdDogewog
ICAgICAgICAgICAgICAgIGJhc2VPYmplY3QucHV0KGNhbGxGcmFtZSwgSlNPTlBQYXRoLmxhc3Qo
KS5tX3BhdGhFbnRyeU5hbWUsIEpTT05QVmFsdWUsIHNsb3QpOwogICAgICAgICAgICAgICAgIGlm
IChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50cnlUeXBlTG9va3VwOiB7
CisgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewogICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QucHV0KGNhbGxGcmFtZSwgSlNPTlBQYXRoLmxhc3QoKS5tX3BhdGhJ
bmRleCwgSlNPTlBWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0NSw5ICs0NDUsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRQogCiAgICAgVVN0cmluZyBzID0geC50b1N0cmluZyhleGVjKTsKIAotICAgIExpdGVyYWxQ
YXJzZXIgcHJlcGFyc2VyKGV4ZWMsIHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpLCBMaXRlcmFs
UGFyc2VyOjpOb25TdHJpY3RKU09OKTsKLSAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocGFyc2VkT2JqZWN0KTsKKyAgICBpZiAocy5pczhCaXQoKSkgeworICAgICAgICBMaXRlcmFs
UGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgp
LCBOb25TdHJpY3RKU09OKTsKKyAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJl
cGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShwYXJzZWRPYmplY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIExpdGVyYWxQYXJzZXI8
VUNoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OKTsKKyAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2Vy
LnRyeUxpdGVyYWxQYXJzZSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
YXJzZWRPYmplY3QpOyAgICAgICAgCisgICAgfQogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwg
PSBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UocyksIGZhbHNlKTsKICAg
ICBKU09iamVjdCogZXJyb3IgPSBldmFsLT5jb21waWxlKGV4ZWMsIHN0YXRpY19jYXN0PEpTR2xv
YmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+Z2xvYmFsU2NvcGVDaGFpbigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lv
biA5OTY4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MTksMTEgKzgxOSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAorICAgIEpTVmFsdWUgdW5m
aWx0ZXJlZDsKICAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
TGl0ZXJhbFBhcnNlciBqc29uUGFyc2VyKGV4ZWMsIHNvdXJjZS5jaGFyYWN0ZXJzKCksIHNvdXJj
ZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6U3RyaWN0SlNPTik7Ci0gICAgSlNWYWx1ZSB1bmZp
bHRlcmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKLSAgICBpZiAoIXVuZmlsdGVy
ZWQpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3Io
ZXhlYywganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOworICAgIGlmIChzb3VyY2UuaXM4
Qml0KCkpIHsKKyAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4ganNvblBhcnNlcihleGVjLCBz
b3VyY2UuY2hhcmFjdGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKKyAgICAg
ICAgdW5maWx0ZXJlZCA9IGpzb25QYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCk7CisgICAgICAgIGlm
ICghdW5maWx0ZXJlZCkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlU3ludGF4RXJyb3IoZXhlYywganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IGpzb25QYXJzZXIoZXhlYywg
c291cmNlLmNoYXJhY3RlcnMxNigpLCBzb3VyY2UubGVuZ3RoKCksIFN0cmljdEpTT04pOworICAg
ICAgICB1bmZpbHRlcmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKKyAgICAgICAg
aWYgKCF1bmZpbHRlcmVkKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCBqc29uUGFyc2VyLmdldEVycm9yTWVzc2FnZSgpKSk7ICAg
ICAgICAKKyAgICB9CiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodW5maWx0ZXJlZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24g
OTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNKU09OV2hpdGVTcGFjZShjb25zdCBVQ2hhciYgYykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0pTT05XaGl0
ZVNwYWNlKGNvbnN0IENoYXJUeXBlJiBjKQogewogICAgIC8vIFRoZSBKU09OIFJGQyA0NjI3IGRl
ZmluZXMgYSBsaXN0IG9mIGFsbG93ZWQgY2hhcmFjdGVycyB0byBiZSBjb25zaWRlcmVkCiAgICAg
Ly8gaW5zaWduaWZpY2FudCB3aGl0ZSBzcGFjZTogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZj
NDYyNy50eHQgKDIuIEpTT04gR3JhbW1hcikuCiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0g
MHg5IHx8IGMgPT0gMHhBIHx8IGMgPT0gMHhEOwogfQogCi1ib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yPEpTT05QRGF0YT4mIHJlc3VsdHMsIGJvb2wgbmVlZHNGdWxsU291
cmNlSW5mbykKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK2Jvb2wgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnRyeUpTT05QUGFyc2UoVmVjdG9yPEpTT05QRGF0YT4mIHJlc3VsdHMsIGJv
b2wgbmVlZHNGdWxsU291cmNlSW5mbykKIHsKICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9r
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwLDcgKzEyMiw4IEBAIGJv
b2wgTGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQYXJzZShWZWN0b3IKICAgICByZXR1cm4gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRva0VuZDsKIH0KICAgICAKLUFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyOjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlw
ZT4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyPENoYXJUeXBl
Pjo6bWFrZUlkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBtX2V4ZWMtPmdsb2JhbERhdGEo
KS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CkBAIC0xMzksNyArMTQyLDI4IEBAIEFM
V0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGEKICAgICByZXR1cm4gbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0KIAotdGVtcGxhdGUgPExpdGVyYWxQYXJz
ZXI6OlBhcnNlck1vZGUgbW9kZT4gTGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJz
ZXI6OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNlclRva2VuJiB0b2tlbikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyVHlwZT4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFy
c2VyPENoYXJUeXBlPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBtX2V4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgaWYgKGNo
YXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKQorICAgICAgICByZXR1cm4g
SWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisK
KyAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dOworICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFj
dGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XTsKKyAgICB9CisgICAgaWYgKCFtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlz
TnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVy
c1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CisgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK3RlbXBsYXRlIDxQYXJzZXJN
b2RlIG1vZGU+IFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6TGV4ZXI6OmxleChM
aXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+JiB0b2tlbikKIHsKICAgICB3aGlsZSAobV9wdHIg
PCBtX2VuZCAmJiBpc0pTT05XaGl0ZVNwYWNlKCptX3B0cikpCiAgICAgICAgICsrbV9wdHI7CkBA
IC0yNDAsMTUgKzI2NCw4IEBAIHRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1v
ZGUKICAgICAgICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CiAgICAgICAgICAgICByZXR1cm4g
VG9rQXNzaWduOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoKm1fcHRyKSB8
fCAqbV9wdHIgPT0gJ18nIHx8ICptX3B0ciA9PSAnJCcpIHsKLSAgICAgICAgICAgIHdoaWxlICht
X3B0ciA8IG1fZW5kICYmIChpc0FTQ0lJQWxwaGFudW1lcmljKCptX3B0cikgfHwgKm1fcHRyID09
ICdfJyB8fCAqbV9wdHIgPT0gJyQnKSkKLSAgICAgICAgICAgICAgICBtX3B0cisrOwotICAgICAg
ICAgICAgdG9rZW4uc3RyaW5nVG9rZW4gPSB0b2tlbi5zdGFydDsKLSAgICAgICAgICAgIHRva2Vu
LnN0cmluZ0xlbmd0aCA9IG1fcHRyIC0gdG9rZW4uc3RhcnQ7Ci0gICAgICAgICAgICB0b2tlbi50
eXBlID0gVG9rSWRlbnRpZmllcjsKLSAgICAgICAgICAgIHRva2VuLmVuZCA9IG1fcHRyOwotICAg
ICAgICAgICAgcmV0dXJuIFRva0lkZW50aWZpZXI7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYSgqbV9wdHIpIHx8ICptX3B0ciA9PSAnXycgfHwgKm1fcHRyID09ICckJykKKyAg
ICAgICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKHRva2VuKTsKICAgICAgICAgaWYgKCptX3B0
ciA9PSAnXCcnKSB7CiAgICAgICAgICAgICBpZiAobW9kZSA9PSBTdHJpY3RKU09OKSB7CiAgICAg
ICAgICAgICAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiU2luZ2xlIHF1b3RlcyAoXCcpIGFyZSBu
b3QgYWxsb3dlZCBpbiBKU09OIjsKQEAgLTI2MSw3ICsyNzgsMzQgQEAgdGVtcGxhdGUgPExpdGVy
YWxQYXJzZXI6OlBhcnNlck1vZGUgbW9kZQogICAgIHJldHVybiBUb2tFcnJvcjsKIH0KIAotTGl0
ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpuZXh0KCkKK3RlbXBs
YXRlIDw+CitUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxMQ2hhcj46OkxleGVyOjpsZXhJZGVudGlm
aWVyKExpdGVyYWxQYXJzZXJUb2tlbjxMQ2hhcj4mIHRva2VuKQoreworICAgIHdoaWxlIChtX3B0
ciA8IG1fZW5kICYmIChpc0FTQ0lJQWxwaGFudW1lcmljKCptX3B0cikgfHwgKm1fcHRyID09ICdf
JyB8fCAqbV9wdHIgPT0gJyQnKSkKKyAgICAgICAgbV9wdHIrKzsKKyAgICB0b2tlbi5zdHJpbmdJ
czhCaXQgPSAxOworICAgIHRva2VuLnN0cmluZ1Rva2VuOCA9IHRva2VuLnN0YXJ0OworICAgIHRv
a2VuLnN0cmluZ0xlbmd0aCA9IG1fcHRyIC0gdG9rZW4uc3RhcnQ7CisgICAgdG9rZW4udHlwZSA9
IFRva0lkZW50aWZpZXI7CisgICAgdG9rZW4uZW5kID0gbV9wdHI7CisgICAgcmV0dXJuIFRva0lk
ZW50aWZpZXI7Cit9CisKK3RlbXBsYXRlIDw+CitUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxVQ2hh
cj46OkxleGVyOjpsZXhJZGVudGlmaWVyKExpdGVyYWxQYXJzZXJUb2tlbjxVQ2hhcj4mIHRva2Vu
KQoreworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIChpc0FTQ0lJQWxwaGFudW1lcmljKCpt
X3B0cikgfHwgKm1fcHRyID09ICdfJyB8fCAqbV9wdHIgPT0gJyQnKSkKKyAgICAgICAgbV9wdHIr
KzsKKyAgICB0b2tlbi5zdHJpbmdJczhCaXQgPSAwOworICAgIHRva2VuLnN0cmluZ1Rva2VuMTYg
PSB0b2tlbi5zdGFydDsKKyAgICB0b2tlbi5zdHJpbmdMZW5ndGggPSBtX3B0ciAtIHRva2VuLnN0
YXJ0OworICAgIHRva2VuLnR5cGUgPSBUb2tJZGVudGlmaWVyOworICAgIHRva2VuLmVuZCA9IG1f
cHRyOworICAgIHJldHVybiBUb2tJZGVudGlmaWVyOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CitUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyOjpuZXh0
KCkKIHsKICAgICBpZiAobV9tb2RlID09IE5vblN0cmljdEpTT04pCiAgICAgICAgIHJldHVybiBs
ZXg8Tm9uU3RyaWN0SlNPTj4obV9jdXJyZW50VG9rZW4pOwpAQCAtMjcwLDIwICszMTQsNDAgQEAg
TGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OgogICAgIHJldHVybiBsZXg8
U3RyaWN0SlNPTj4obV9jdXJyZW50VG9rZW4pOwogfQogCi10ZW1wbGF0ZSA8TGl0ZXJhbFBhcnNl
cjo6UGFyc2VyTW9kZSBtb2RlLCBVQ2hhciB0ZXJtaW5hdG9yPiBzdGF0aWMgaW5saW5lIGJvb2wg
aXNTYWZlU3RyaW5nQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElO
RSB2b2lkIHNldFBhcnNlclRva2VuU3RyaW5nPExDaGFyPihMaXRlcmFsUGFyc2VyVG9rZW48TENo
YXI+JiB0b2tlbiwgY29uc3QgTENoYXIqIHN0cmluZykKK3sKKyAgICB0b2tlbi5zdHJpbmdJczhC
aXQgPSAxOworICAgIHRva2VuLnN0cmluZ1Rva2VuOCA9IHN0cmluZzsKK30KKwordGVtcGxhdGUg
PD4KK0FMV0FZU19JTkxJTkUgdm9pZCBzZXRQYXJzZXJUb2tlblN0cmluZzxVQ2hhcj4oTGl0ZXJh
bFBhcnNlclRva2VuPFVDaGFyPiYgdG9rZW4sIGNvbnN0IFVDaGFyKiBzdHJpbmcpCiB7Ci0gICAg
cmV0dXJuIChjID49ICcgJyAmJiAobW9kZSA9PSBMaXRlcmFsUGFyc2VyOjpTdHJpY3RKU09OIHx8
IGMgPD0gMHhmZikgJiYgYyAhPSAnXFwnICYmIGMgIT0gdGVybWluYXRvcikgfHwgYyA9PSAnXHQn
OworICAgIHRva2VuLnN0cmluZ0lzOEJpdCA9IDA7CisgICAgdG9rZW4uc3RyaW5nVG9rZW4xNiA9
IHN0cmluZzsKK30KKwordGVtcGxhdGUgPFBhcnNlck1vZGUgbW9kZSwgdHlwZW5hbWUgQ2hhclR5
cGUsIExDaGFyIHRlcm1pbmF0b3I+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVTdHJpbmdDaGFy
YWN0ZXIoTENoYXIgYykKK3sKKyAgICByZXR1cm4gKGMgPj0gJyAnICYmIGMgIT0gJ1xcJyAmJiBj
ICE9IHRlcm1pbmF0b3IpIHx8IGMgPT0gJ1x0JzsKK30KKwordGVtcGxhdGUgPFBhcnNlck1vZGUg
bW9kZSwgdHlwZW5hbWUgQ2hhclR5cGUsIFVDaGFyIHRlcm1pbmF0b3I+IHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NhZmVTdHJpbmdDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gKGMgPj0g
JyAnICYmIChtb2RlID09IFN0cmljdEpTT04gfHwgYyA8PSAweGZmKSAmJiBjICE9ICdcXCcgJiYg
YyAhPSB0ZXJtaW5hdG9yKSB8fCBjID09ICdcdCc7CiB9CiAKIC8vICJpbmxpbmUiIGlzIHJlcXVp
cmVkIGhlcmUgdG8gaGVscCBXSU5TQ1cgY29tcGlsZXIgcmVzb2x2ZSBzcGVjaWFsaXplZCBhcmd1
bWVudCBpbiB0ZW1wbGF0ZWQgZnVuY3Rpb25zLgotdGVtcGxhdGUgPExpdGVyYWxQYXJzZXI6OlBh
cnNlck1vZGUgbW9kZSwgVUNoYXIgdGVybWluYXRvcj4gaW5saW5lIExpdGVyYWxQYXJzZXI6OlRv
a2VuVHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tl
biYgdG9rZW4pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Cit0ZW1wbGF0ZSA8UGFyc2Vy
TW9kZSBtb2RlLCBjaGFyIHRlcm1pbmF0b3I+IEFMV0FZU19JTkxJTkUgVG9rZW5UeXBlIExpdGVy
YWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhlcjo6bGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tlbjxD
aGFyVHlwZT4mIHRva2VuKQogewogICAgICsrbV9wdHI7Ci0gICAgY29uc3QgVUNoYXIqIHJ1blN0
YXJ0ID0gbV9wdHI7CisgICAgY29uc3QgQ2hhclR5cGUqIHJ1blN0YXJ0ID0gbV9wdHI7CiAgICAg
VVN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBkbyB7CiAgICAgICAgIHJ1blN0YXJ0ID0gbV9w
dHI7Ci0gICAgICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZVN0cmluZ0NoYXJhY3Rl
cjxtb2RlLCB0ZXJtaW5hdG9yPigqbV9wdHIpKQorICAgICAgICB3aGlsZSAobV9wdHIgPCBtX2Vu
ZCAmJiBpc1NhZmVTdHJpbmdDaGFyYWN0ZXI8bW9kZSwgQ2hhclR5cGUsIHRlcm1pbmF0b3I+KCpt
X3B0cikpCiAgICAgICAgICAgICArK21fcHRyOwogICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgo
KSkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJ1blN0YXJ0LCBtX3B0ciAtIHJ1blN0YXJ0
KTsKQEAgLTM0MCw3ICs0MDQsNyBAQCB0ZW1wbGF0ZSA8TGl0ZXJhbFBhcnNlcjo6UGFyc2VyTW9k
ZSBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEpTQzo6TGV4ZXI8VUNoYXI+Ojpjb252ZXJ0VW5pY29k
ZShtX3B0clsxXSwgbV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0cls0XSkpOworICAgICAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChKU0M6OkxleGVyPENoYXJUeXBlPjo6Y29udmVydFVuaWNv
ZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwgbV9wdHJbNF0pKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTM2
MywxMSArNDI3LDE3IEBAIHRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUK
IAogICAgIGlmIChidWlsZGVyLmlzRW1wdHkoKSkgewogICAgICAgICB0b2tlbi5zdHJpbmdCdWZm
ZXIgPSBVU3RyaW5nKCk7Ci0gICAgICAgIHRva2VuLnN0cmluZ1Rva2VuID0gcnVuU3RhcnQ7Cisg
ICAgICAgIHNldFBhcnNlclRva2VuU3RyaW5nPENoYXJUeXBlPih0b2tlbiwgcnVuU3RhcnQpOwog
ICAgICAgICB0b2tlbi5zdHJpbmdMZW5ndGggPSBtX3B0ciAtIHJ1blN0YXJ0OwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHRva2VuLnN0cmluZ0J1ZmZlciA9IGJ1aWxkZXIudG9VU3RyaW5nKCk7Ci0g
ICAgICAgIHRva2VuLnN0cmluZ1Rva2VuID0gdG9rZW4uc3RyaW5nQnVmZmVyLmNoYXJhY3RlcnMo
KTsKKyAgICAgICAgaWYgKHRva2VuLnN0cmluZ0J1ZmZlci5pczhCaXQoKSkgeworICAgICAgICAg
ICAgdG9rZW4uc3RyaW5nSXM4Qml0ID0gMTsKKyAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2Vu
OCA9IHRva2VuLnN0cmluZ0J1ZmZlci5jaGFyYWN0ZXJzOCgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdG9rZW4uc3RyaW5nSXM4Qml0ID0gMDsKKyAgICAgICAgICAgIHRva2VuLnN0
cmluZ1Rva2VuMTYgPSB0b2tlbi5zdHJpbmdCdWZmZXIuY2hhcmFjdGVyczE2KCk7CisgICAgICAg
IH0KICAgICAgICAgdG9rZW4uc3RyaW5nTGVuZ3RoID0gdG9rZW4uc3RyaW5nQnVmZmVyLmxlbmd0
aCgpOwogICAgIH0KICAgICB0b2tlbi50eXBlID0gVG9rU3RyaW5nOwpAQCAtMzc1LDcgKzQ0NSw4
IEBAIHRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUKICAgICByZXR1cm4g
VG9rU3RyaW5nOwogfQogCi1MaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6
TGV4ZXI6OmxleE51bWJlcihMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJUeXBlPgorVG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhl
cjo6bGV4TnVtYmVyKExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4mIHRva2VuKQogewogICAg
IC8vIEVTNSBhbmQganNvbi5vcmcgZGVmaW5lIG51bWJlcnMgYXMKICAgICAvLyBudW1iZXIKQEAg
LTQyMyw3ICs0OTQsNyBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6
CiAgICAgICAgIGludCByZXN1bHQgPSAwOwogICAgICAgICB0b2tlbi50eXBlID0gVG9rTnVtYmVy
OwogICAgICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKLSAgICAgICAgY29uc3QgVUNoYXIqIGRpZ2l0
ID0gdG9rZW4uc3RhcnQ7CisgICAgICAgIGNvbnN0IENoYXJUeXBlKiBkaWdpdCA9IHRva2VuLnN0
YXJ0OwogICAgICAgICBpbnQgbmVnYXRpdmUgPSAxOwogICAgICAgICBpZiAoKmRpZ2l0ID09ICct
JykgewogICAgICAgICAgICAgbmVnYXRpdmUgPSAtMTsKQEAgLTQ3MSw3ICs1NDIsOCBAQCBMaXRl
cmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6CiAgICAgcmV0dXJuIFRva051bWJl
cjsKIH0KIAotSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFs
U3RhdGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CitKU1ZhbHVlIExpdGVyYWxQYXJz
ZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7CiAgICAgUGFy
c2VyU3RhdGUgc3RhdGUgPSBpbml0aWFsU3RhdGU7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
b2JqZWN0U3RhY2s7CkBAIC01MjYsNyArNTk4LDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpw
YXJzZShQYXJzZXJTdGF0ZQogCiAgICAgICAgICAgICAgICAgVG9rZW5UeXBlIHR5cGUgPSBtX2xl
eGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBUb2tTdHJpbmcgfHwgKG1f
bW9kZSAhPSBTdHJpY3RKU09OICYmIHR5cGUgPT0gVG9rSWRlbnRpZmllcikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTGV4ZXI6OkxpdGVyYWxQYXJzZXJUb2tlbiBpZGVudGlmaWVyVG9rZW4gPSBt
X2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBMaXRlcmFsUGFyc2Vy
VG9rZW48Q2hhclR5cGU+IGlkZW50aWZpZXJUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbG9uCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tDb2xvbikgewpAQCAtNTM1LDcgKzYwNywx
MCBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlCiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1f
bGV4ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5k
KG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJUb2tlbi5zdHJpbmdUb2tlbiwgaWRlbnRpZmllclRv
a2VuLnN0cmluZ0xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllclRv
a2VuLnN0cmluZ0lzOEJpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFj
ay5hcHBlbmQobWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclRva2VuLnN0cmluZ1Rva2VuOCwgaWRl
bnRpZmllclRva2VuLnN0cmluZ0xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5kKG1ha2VJZGVudGlm
aWVyKGlkZW50aWZpZXJUb2tlbi5zdHJpbmdUb2tlbjE2LCBpZGVudGlmaWVyVG9rZW4uc3RyaW5n
TGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKERvUGFyc2VP
YmplY3RFbmRFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydFBhcnNl
RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICB9CkBAIC01NTUsNyArNjMwLDcgQEAgSlNWYWx1
ZSBMaXRlcmFsUGFyc2VyOjpwYXJzZShQYXJzZXJTdGF0ZQogICAgICAgICAgICAgICAgICAgICBt
X3BhcnNlRXJyb3JNZXNzYWdlID0gIlByb3BlcnR5IG5hbWUgbXVzdCBiZSBhIHN0cmluZyBsaXRl
cmFsIjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgTGV4ZXI6OkxpdGVyYWxQYXJzZXJUb2tlbiBpZGVudGlm
aWVyVG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgICAgIExpdGVy
YWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4gaWRlbnRpZmllclRva2VuID0gbV9sZXhlci5jdXJyZW50
VG9rZW4oKTsKIAogICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBjb2xvbgogICAgICAgICAg
ICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tDb2xvbikgewpAQCAtNTY0LDcgKzYzOSwx
MCBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlCiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7Ci0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllclN0YWNrLmFwcGVuZChtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyVG9rZW4u
c3RyaW5nVG9rZW4sIGlkZW50aWZpZXJUb2tlbi5zdHJpbmdMZW5ndGgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaWRlbnRpZmllclRva2VuLnN0cmluZ0lzOEJpdCkKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllclN0YWNrLmFwcGVuZChtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyVG9rZW4u
c3RyaW5nVG9rZW44LCBpZGVudGlmaWVyVG9rZW4uc3RyaW5nTGVuZ3RoKSk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5kKG1h
a2VJZGVudGlmaWVyKGlkZW50aWZpZXJUb2tlbi5zdHJpbmdUb2tlbjE2LCBpZGVudGlmaWVyVG9r
ZW4uc3RyaW5nTGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoRG9Q
YXJzZU9iamVjdEVuZEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRQYXJz
ZUV4cHJlc3Npb247CiAgICAgICAgICAgICB9CkBAIC01OTEsMTMgKzY2OSwxNiBAQCBKU1ZhbHVl
IExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlCiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgVG9rTEJyYWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydFBhcnNlT2Jq
ZWN0OwogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva1N0cmluZzogewotICAgICAgICAgICAg
ICAgICAgICAgICAgTGV4ZXI6OkxpdGVyYWxQYXJzZXJUb2tlbiBzdHJpbmdUb2tlbiA9IG1fbGV4
ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMaXRlcmFsUGFyc2Vy
VG9rZW48Q2hhclR5cGU+IHN0cmluZ1Rva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdFZhbHVlID0ganNTdHJpbmcobV9leGVjLCBtYWtlSWRlbnRpZmllcihzdHJpbmdU
b2tlbi5zdHJpbmdUb2tlbiwgc3RyaW5nVG9rZW4uc3RyaW5nTGVuZ3RoKS51c3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ1Rva2VuLnN0cmluZ0lzOEJpdCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1h
a2VJZGVudGlmaWVyKHN0cmluZ1Rva2VuLnN0cmluZ1Rva2VuOCwgc3RyaW5nVG9rZW4uc3RyaW5n
TGVuZ3RoKS51c3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3RyaW5nKG1fZXhlYywgbWFrZUlk
ZW50aWZpZXIoc3RyaW5nVG9rZW4uc3RyaW5nVG9rZW4xNiwgc3RyaW5nVG9rZW4uc3RyaW5nTGVu
Z3RoKS51c3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tOdW1iZXI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIExleGVyOjpMaXRlcmFsUGFyc2VyVG9rZW4gbnVtYmVyVG9r
ZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgTGl0
ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiBudW1iZXJUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRv
a2VuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzTnVtYmVyKG51bWJlclRva2VuLm51bWJlclRv
a2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjIzLDcgKzcwNCw3IEBA
IEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjo6cGFyc2UoUGFyc2VyU3RhdGUKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSAiVW5leHBlY3RlZCB0b2tlbiAnfSciOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUb2tJZGVudGlmaWVyOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJz
ZUVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmV4cGVjdGVkIGlkZW50aWZpZXIgXCIl
c1wiIiwgVVN0cmluZyhtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0cmluZ1Rva2VuLCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0cmluZ0xlbmd0aCkuYXNjaWkoKS5kYXRhKCkpLmltcGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1h
dCgiVW5leHBlY3RlZCBpZGVudGlmaWVyIFwiJXNcIiIsIFVTdHJpbmcobV9sZXhlci5jdXJyZW50
VG9rZW4oKS5zdHJpbmdUb2tlbjgsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RyaW5nTGVuZ3Ro
KS5hc2NpaSgpLmRhdGEoKSkuaW1wbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tDb2xvbjoKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSAiVW5leHBlY3RlZCB0b2tlbiAn
OiciOwpAQCAtNzM3LDQgKzgxOCw4IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjo6cGFyc2UoUGFy
c2VyU3RhdGUKICAgICB9CiB9CiAKKy8vIEluc3RhbnRpYXRlIHRoZSB0d28gZmxhdm9ycyBvZiBM
aXRlcmFsUGFyc2VyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxl
IGluIExpdGVyYWxQYXJzZXIuaAordGVtcGxhdGUgY2xhc3MgTGl0ZXJhbFBhcnNlcjxMQ2hhcj47
Cit0ZW1wbGF0ZSBjbGFzcyBMaXRlcmFsUGFyc2VyPFVDaGFyPjsKKwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaAkocmV2aXNpb24gOTk2
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDEyMCArMzMsMTMzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0g
ICAgY2xhc3MgTGl0ZXJhbFBhcnNlciB7Cit0eXBlZGVmIGVudW0geyBTdHJpY3RKU09OLCBOb25T
dHJpY3RKU09OLCBKU09OUCB9IFBhcnNlck1vZGU7CisKK2VudW0gSlNPTlBQYXRoRW50cnlUeXBl
IHsKKyAgICBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlLCAvLyB2YXIgcGF0aEVudHJ5TmFtZSA9
IEpTT04KKyAgICBKU09OUFBhdGhFbnRyeVR5cGVEb3QsIC8vIDxwcmlvciBlbnRyaWVzPi5wYXRo
RW50cnlOYW1lID0gSlNPTgorICAgIEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cCwgLy8gPHByaW9y
IGVudHJpZXM+W3BhdGhJbmRleF0gPSBKU09OCisgICAgSlNPTlBQYXRoRW50cnlUeXBlQ2FsbCAv
LyA8cHJpb3IgZW50cmllcz4oSlNPTikKK307CisKK2VudW0gUGFyc2VyU3RhdGUgeyBTdGFydFBh
cnNlT2JqZWN0LCBTdGFydFBhcnNlQXJyYXksIFN0YXJ0UGFyc2VFeHByZXNzaW9uLCAKKyAgICAg
ICAgICAgICAgICAgICBTdGFydFBhcnNlU3RhdGVtZW50LCBTdGFydFBhcnNlU3RhdGVtZW50RW5k
U3RhdGVtZW50LCAKKyAgICAgICAgICAgICAgICAgICBEb1BhcnNlT2JqZWN0U3RhcnRFeHByZXNz
aW9uLCBEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICBEb1Bh
cnNlQXJyYXlTdGFydEV4cHJlc3Npb24sIERvUGFyc2VBcnJheUVuZEV4cHJlc3Npb24gfTsKK2Vu
dW0gVG9rZW5UeXBlIHsgVG9rTEJyYWNrZXQsIFRva1JCcmFja2V0LCBUb2tMQnJhY2UsIFRva1JC
cmFjZSwgCisgICAgICAgICAgICAgICAgIFRva1N0cmluZywgVG9rSWRlbnRpZmllciwgVG9rTnVt
YmVyLCBUb2tDb2xvbiwgCisgICAgICAgICAgICAgICAgIFRva0xQYXJlbiwgVG9rUlBhcmVuLCBU
b2tDb21tYSwgVG9rVHJ1ZSwgVG9rRmFsc2UsCisgICAgICAgICAgICAgICAgIFRva051bGwsIFRv
a0VuZCwgVG9rRG90LCBUb2tBc3NpZ24sIFRva1NlbWksIFRva0Vycm9yIH07CisgICAgCitzdHJ1
Y3QgSlNPTlBQYXRoRW50cnkgeworICAgIEpTT05QUGF0aEVudHJ5VHlwZSBtX3R5cGU7CisgICAg
SWRlbnRpZmllciBtX3BhdGhFbnRyeU5hbWU7CisgICAgaW50IG1fcGF0aEluZGV4OworfTsKKwor
c3RydWN0IEpTT05QRGF0YSB7CisgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBtX3BhdGg7Cisg
ICAgU3Ryb25nPFVua25vd24+IG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
clR5cGU+CitzdHJ1Y3QgTGl0ZXJhbFBhcnNlclRva2VuIHsKKyAgICBUb2tlblR5cGUgdHlwZTsK
KyAgICBjb25zdCBDaGFyVHlwZSogc3RhcnQ7CisgICAgY29uc3QgQ2hhclR5cGUqIGVuZDsKKyAg
ICBVU3RyaW5nIHN0cmluZ0J1ZmZlcjsKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBudW1i
ZXJUb2tlbjsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBMQ2hhciogc3RyaW5nVG9rZW44OworICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBzdHJpbmdUb2tlbjE2OworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHN0cmluZ0lzOEJpdCA6IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGgg
OiAzMTsKKyAgICAgICAgfTsKKyAgICB9OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlPgorQUxXQVlTX0lOTElORSB2b2lkIHNldFBhcnNlclRva2VuU3RyaW5nKExpdGVyYWxQYXJz
ZXJUb2tlbjxDaGFyVHlwZT4mLCBjb25zdCBDaGFyVHlwZSogc3RyaW5nKTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgorY2xhc3MgTGl0ZXJhbFBhcnNlciB7CitwdWJsaWM6CisgICAg
TGl0ZXJhbFBhcnNlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgsIFBhcnNlck1vZGUgbW9kZSkKKyAgICAgICAgOiBtX2V4ZWMoZXhl
YykKKyAgICAgICAgLCBtX2xleGVyKGNoYXJhY3RlcnMsIGxlbmd0aCwgbW9kZSkKKyAgICAgICAg
LCBtX21vZGUobW9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFVTdHJpbmcgZ2V0RXJyb3JN
ZXNzYWdlKCkgCisgICAgeyAKKyAgICAgICAgaWYgKCFtX2xleGVyLmdldEVycm9yTWVzc2FnZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiSlNPTiBQYXJz
ZSBlcnJvcjogJXMiLCBtX2xleGVyLmdldEVycm9yTWVzc2FnZSgpLmFzY2lpKCkuZGF0YSgpKS5p
bXBsKCk7CisgICAgICAgIGlmICghbV9wYXJzZUVycm9yTWVzc2FnZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIkpTT04gUGFyc2UgZXJyb3I6ICVzIiwgbV9w
YXJzZUVycm9yTWVzc2FnZS5hc2NpaSgpLmRhdGEoKSkuaW1wbCgpOworICAgICAgICByZXR1cm4g
IkpTT04gUGFyc2UgZXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZyI7CisgICAgfQor
ICAgIAorICAgIEpTVmFsdWUgdHJ5TGl0ZXJhbFBhcnNlKCkKKyAgICB7CisgICAgICAgIG1fbGV4
ZXIubmV4dCgpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBhcnNlKG1fbW9kZSA9PSBTdHJp
Y3RKU09OID8gU3RhcnRQYXJzZUV4cHJlc3Npb24gOiBTdGFydFBhcnNlU3RhdGVtZW50KTsKKyAg
ICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCkudHlwZSA9PSBUb2tTZW1pKQorICAgICAg
ICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnR5cGUgIT0gVG9rRW5kKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlKU09OUFBhcnNlKFZlY3Rv
cjxKU09OUERhdGE+JiwgYm9vbCBuZWVkc0Z1bGxTb3VyY2VJbmZvKTsKKworcHJpdmF0ZToKKyAg
ICBjbGFzcyBMZXhlciB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIGVudW0geyBTdHJp
Y3RKU09OLCBOb25TdHJpY3RKU09OLCBKU09OUCB9IFBhcnNlck1vZGU7Ci0gICAgICAgIExpdGVy
YWxQYXJzZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBQYXJzZXJNb2RlIG1vZGUpCi0gICAgICAgICAgICA6IG1fZXhlYyhleGVjKQot
ICAgICAgICAgICAgLCBtX2xleGVyKGNoYXJhY3RlcnMsIGxlbmd0aCwgbW9kZSkKLSAgICAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAgIExleGVyKGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhcnNlck1vZGUgbW9kZSkKKyAgICAgICAgICAgIDogbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fcHRyKGNoYXJhY3RlcnMpCisgICAgICAgICAgICAs
IG1fZW5kKGNoYXJhY3RlcnMgKyBsZW5ndGgpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgVVN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSAKLSAgICAgICAgeyAKLSAgICAg
ICAgICAgIGlmICghbV9sZXhlci5nZXRFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJKU09OIFBhcnNlIGVycm9yOiAlcyIsIG1f
bGV4ZXIuZ2V0RXJyb3JNZXNzYWdlKCkuYXNjaWkoKS5kYXRhKCkpLmltcGwoKTsKLSAgICAgICAg
ICAgIGlmICghbV9wYXJzZUVycm9yTWVzc2FnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJKU09OIFBhcnNlIGVycm9yOiAlcyIsIG1fcGFyc2VFcnJv
ck1lc3NhZ2UuYXNjaWkoKS5kYXRhKCkpLmltcGwoKTsKLSAgICAgICAgICAgIHJldHVybiAiSlNP
TiBQYXJzZSBlcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nIjsKLSAgICAgICAgfQor
ICAgICAgICBUb2tlblR5cGUgbmV4dCgpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB0cnlM
aXRlcmFsUGFyc2UoKQorICAgICAgICBjb25zdCBMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+
JiBjdXJyZW50VG9rZW4oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xleGVyLm5leHQoKTsK
LSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gcGFyc2UobV9tb2RlID09IFN0cmljdEpTT04g
PyBTdGFydFBhcnNlRXhwcmVzc2lvbiA6IFN0YXJ0UGFyc2VTdGF0ZW1lbnQpOwotICAgICAgICAg
ICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCkudHlwZSA9PSBUb2tTZW1pKQotICAgICAgICAg
ICAgICAgIG1fbGV4ZXIubmV4dCgpOwotICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRv
a2VuKCkudHlwZSAhPSBUb2tFbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
VG9rZW47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGVudW0gSlNPTlBQYXRoRW50cnlU
eXBlIHsKLSAgICAgICAgICAgIEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmUsIC8vIHZhciBwYXRo
RW50cnlOYW1lID0gSlNPTgotICAgICAgICAgICAgSlNPTlBQYXRoRW50cnlUeXBlRG90LCAvLyA8
cHJpb3IgZW50cmllcz4ucGF0aEVudHJ5TmFtZSA9IEpTT04KLSAgICAgICAgICAgIEpTT05QUGF0
aEVudHJ5VHlwZUxvb2t1cCwgLy8gPHByaW9yIGVudHJpZXM+W3BhdGhJbmRleF0gPSBKU09OCi0g
ICAgICAgICAgICBKU09OUFBhdGhFbnRyeVR5cGVDYWxsIC8vIDxwcmlvciBlbnRyaWVzPihKU09O
KQotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBKU09OUFBhdGhFbnRyeSB7Ci0gICAgICAg
ICAgICBKU09OUFBhdGhFbnRyeVR5cGUgbV90eXBlOwotICAgICAgICAgICAgSWRlbnRpZmllciBt
X3BhdGhFbnRyeU5hbWU7Ci0gICAgICAgICAgICBpbnQgbV9wYXRoSW5kZXg7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgc3RydWN0IEpTT05QRGF0YSB7Ci0gICAgICAgICAgICBWZWN0b3I8SlNPTlBQ
YXRoRW50cnk+IG1fcGF0aDsKLSAgICAgICAgICAgIFN0cm9uZzxVbmtub3duPiBtX3ZhbHVlOwot
ICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgdHJ5SlNPTlBQYXJzZShWZWN0b3I8SlNPTlBEYXRh
PiYsIGJvb2wgbmVlZHNGdWxsU291cmNlSW5mbyk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBl
bnVtIFBhcnNlclN0YXRlIHsgU3RhcnRQYXJzZU9iamVjdCwgU3RhcnRQYXJzZUFycmF5LCBTdGFy
dFBhcnNlRXhwcmVzc2lvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydFBhcnNl
U3RhdGVtZW50LCBTdGFydFBhcnNlU3RhdGVtZW50RW5kU3RhdGVtZW50LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERvUGFyc2VPYmplY3RTdGFydEV4cHJlc3Npb24sIERvUGFyc2VPYmpl
Y3RFbmRFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9QYXJzZUFycmF5
U3RhcnRFeHByZXNzaW9uLCBEb1BhcnNlQXJyYXlFbmRFeHByZXNzaW9uIH07Ci0gICAgICAgIGVu
dW0gVG9rZW5UeXBlIHsgVG9rTEJyYWNrZXQsIFRva1JCcmFja2V0LCBUb2tMQnJhY2UsIFRva1JC
cmFjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgVG9rU3RyaW5nLCBUb2tJZGVudGlmaWVy
LCBUb2tOdW1iZXIsIFRva0NvbG9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBUb2tMUGFy
ZW4sIFRva1JQYXJlbiwgVG9rQ29tbWEsIFRva1RydWUsIFRva0ZhbHNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIFRva051bGwsIFRva0VuZCwgVG9rRG90LCBUb2tBc3NpZ24sIFRva1NlbWks
IFRva0Vycm9yIH07Ci0gICAgICAgIAotICAgICAgICBjbGFzcyBMZXhlciB7Ci0gICAgICAgIHB1
YmxpYzoKLSAgICAgICAgICAgIHN0cnVjdCBMaXRlcmFsUGFyc2VyVG9rZW4gewotICAgICAgICAg
ICAgICAgIFRva2VuVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFy
dDsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZW5kOwotICAgICAgICAgICAgICAgIFVT
dHJpbmcgc3RyaW5nQnVmZmVyOwotICAgICAgICAgICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIG51bWJlclRva2VuOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0cmluZ1Rva2VuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIExl
eGVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhcnNlck1vZGUg
bW9kZSkKLSAgICAgICAgICAgICAgICA6IG1fbW9kZShtb2RlKQotICAgICAgICAgICAgICAgICwg
bV9wdHIoY2hhcmFjdGVycykKLSAgICAgICAgICAgICAgICAsIG1fZW5kKGNoYXJhY3RlcnMgKyBs
ZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFRva2VuVHlwZSBuZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0
IExpdGVyYWxQYXJzZXJUb2tlbiYgY3VycmVudFRva2VuKCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50VG9rZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeyByZXR1cm4gbV9s
ZXhFcnJvck1lc3NhZ2U7IH0KLSAgICAgICAgICAgIAotICAgICAgICBwcml2YXRlOgotICAgICAg
ICAgICAgVVN0cmluZyBtX2xleEVycm9yTWVzc2FnZTsKLSAgICAgICAgICAgIHRlbXBsYXRlIDxQ
YXJzZXJNb2RlIG1vZGU+IFRva2VuVHlwZSBsZXgoTGl0ZXJhbFBhcnNlclRva2VuJik7Ci0gICAg
ICAgICAgICB0ZW1wbGF0ZSA8UGFyc2VyTW9kZSBtb2RlLCBVQ2hhciB0ZXJtaW5hdG9yPiBBTFdB
WVNfSU5MSU5FIFRva2VuVHlwZSBsZXhTdHJpbmcoTGl0ZXJhbFBhcnNlclRva2VuJik7Ci0gICAg
ICAgICAgICBBTFdBWVNfSU5MSU5FIFRva2VuVHlwZSBsZXhOdW1iZXIoTGl0ZXJhbFBhcnNlclRv
a2VuJik7Ci0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyVG9rZW4gbV9jdXJyZW50VG9rZW47Ci0g
ICAgICAgICAgICBVU3RyaW5nIG1fc3RyaW5nOwotICAgICAgICAgICAgUGFyc2VyTW9kZSBtX21v
ZGU7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbV9wdHI7Ci0gICAgICAgICAgICBjb25zdCBV
Q2hhciogbV9lbmQ7Ci0gICAgICAgIH07CisgICAgICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdl
KCkgeyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KICAgICAgICAgCi0gICAgICAgIGNsYXNz
IFN0YWNrR3VhcmQ7Ci0gICAgICAgIEpTVmFsdWUgcGFyc2UoUGFyc2VyU3RhdGUpOwotCi0gICAg
ICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAgICAgICBMaXRlcmFsUGFyc2VyOjpMZXhlciBtX2xl
eGVyOworICAgIHByaXZhdGU6CisgICAgICAgIFVTdHJpbmcgbV9sZXhFcnJvck1lc3NhZ2U7Cisg
ICAgICAgIHRlbXBsYXRlIDxQYXJzZXJNb2RlIG1vZGU+IFRva2VuVHlwZSBsZXgoTGl0ZXJhbFBh
cnNlclRva2VuPENoYXJUeXBlPiYpOworICAgICAgICBBTFdBWVNfSU5MSU5FIFRva2VuVHlwZSBs
ZXhJZGVudGlmaWVyKExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4mKTsKKyAgICAgICAgdGVt
cGxhdGUgPFBhcnNlck1vZGUgbW9kZSwgY2hhciB0ZXJtaW5hdG9yPiBBTFdBWVNfSU5MSU5FIFRv
a2VuVHlwZSBsZXhTdHJpbmcoTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiYpOworICAgICAg
ICBBTFdBWVNfSU5MSU5FIFRva2VuVHlwZSBsZXhOdW1iZXIoTGl0ZXJhbFBhcnNlclRva2VuPENo
YXJUeXBlPiYpOworICAgICAgICBMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+IG1fY3VycmVu
dFRva2VuOworICAgICAgICBVU3RyaW5nIG1fc3RyaW5nOwogICAgICAgICBQYXJzZXJNb2RlIG1f
bW9kZTsKLSAgICAgICAgVVN0cmluZyBtX3BhcnNlRXJyb3JNZXNzYWdlOwotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgY29uc3QgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyID0gMTI4OwotICAgICAg
ICBGaXhlZEFycmF5PElkZW50aWZpZXIsIE1heGltdW1DYWNoYWJsZUNoYXJhY3Rlcj4gbV9zaG9y
dElkZW50aWZpZXJzOwotICAgICAgICBGaXhlZEFycmF5PElkZW50aWZpZXIsIE1heGltdW1DYWNo
YWJsZUNoYXJhY3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyIG1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgY29uc3QgQ2hhclR5cGUqIG1fcHRyOworICAgICAg
ICBjb25zdCBDaGFyVHlwZSogbV9lbmQ7CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBTdGFja0d1
YXJkOworICAgIEpTVmFsdWUgcGFyc2UoUGFyc2VyU3RhdGUpOworCisgICAgRXhlY1N0YXRlKiBt
X2V4ZWM7CisgICAgdHlwZW5hbWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyIG1fbGV4
ZXI7CisgICAgUGFyc2VyTW9kZSBtX21vZGU7CisgICAgVVN0cmluZyBtX3BhcnNlRXJyb3JNZXNz
YWdlOworICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIg
PSAxMjg7CisgICAgRml4ZWRBcnJheTxJZGVudGlmaWVyLCBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0
ZXI+IG1fc2hvcnRJZGVudGlmaWVyczsKKyAgICBGaXhlZEFycmF5PElkZW50aWZpZXIsIE1heGlt
dW1DYWNoYWJsZUNoYXJhY3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpOworICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBt
YWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAg
ICAgfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAko
cmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CisgICAgaW5saW5lIGNvbnN0IENoYXJUeXBlKiBnZXRDaGFyYWN0ZXJzKCkg
Y29uc3Q7CisKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+aXM4Qml0
KCk7IH0KIAogICAgIENTdHJpbmcgYXNjaWkoKSBjb25zdDsKQEAgLTEzNSw2ICsxMzgsMjAgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9pbXBsOwogfTsKIAordGVtcGxhdGU8
PgoraW5saW5lIGNvbnN0IExDaGFyKiBVU3RyaW5nOjpnZXRDaGFyYWN0ZXJzPExDaGFyPigpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyczgoKTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIGNvbnN0IFVDaGFyKiBVU3RyaW5nOjpnZXRDaGFyYWN0
ZXJzPFVDaGFyPigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnMxNigpOworfQorCiBORVZFUl9JTkxJTkUgYm9vbCBlcXVhbFNsb3dDYXNlKGNv
bnN0IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5nJiBzMik7CiAKIEFMV0FZU19JTkxJTkUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5nJiBzMikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJ
KHJldmlzaW9uIDk5Njg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCB2b2lkIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogCiAgICAgbWVtY3B5KGFwcGVuZFVuaW5p
dGlhbGl6ZWQobGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
ICogMik7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGgp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAKICAgICBVQ2hhciog
ZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBjb25zdCBjaGFyKiBlbmQg
PSBjaGFyYWN0ZXJzICsgbGVuZ3RoOworICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJz
ICsgbGVuZ3RoOwogICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAqKGRlc3Qr
KykgPSAqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShjaGFyYWN0ZXJzKyspOworICAgICAgICAqKGRl
c3QrKykgPSAqKGNoYXJhY3RlcnMrKyk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5r
VG9GaXQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oCShyZXZpc2lvbiA5OTY4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDkgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwot
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgTENoYXIqLCB1bnNpZ25lZCk7CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkgeyBhcHBlbmQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9CiAKICAgICB2
b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="112973"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114363</attachid>
            <date>2011-11-09 13:59:58 -0800</date>
            <delta_ts>2011-11-09 14:55:28 -0800</delta_ts>
            <desc>Updated Patch</desc>
            <filename>71862-4.patch</filename>
            <type>text/plain</type>
            <size>39413</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk3NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAK
KzIwMTEtMTEtMDkgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6TGl0ZXJhbFBhcnNlciBj
bGFzcyBieSBjaGFyYWN0ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzE4NjIKKworICAgICAgICBDaGFuZ2VkIExpdGVyYWxQYXJzZXIgdG8g
YmUgdGVtcGxhdGl6ZWQgb2YgY2hhcmFjdGVyIHR5cGUuCisKKyAgICAgICAgTW92ZWQgZml2ZSBl
bnVtcyBvdXQgb2YgY2xhc3MgZGVmaW5pdGlvbiB0byB3b3JrIGFyb3VuZCBhIGNsYW5nIGNvbXBp
bGVyIGRlZmVjdC4KKworICAgICAgICBBZGRlZCBsZXhJZGVudGlmaWVyIHRlbXBsYXRlZCBtZXRo
b2QgdG8gYnJlYWsgb3V0IGNoYXJhY3RlciBzcGVjaWZpYyB2ZXJzaW9ucy4KKyAgICAgICAgQWRk
ZWQgc3RhdGljIHNldFBhcnNlclRva2VuU3RyaW5nIHRlbXBsYXRlZCBtZXRob2QgdG8gaGFuZGxl
IHNldHRpbmcgYXBwcm9yaWF0ZWx5CisgICAgICAgIHNpemVkIHN0cmluZyBwb2ludGVyLgorCisg
ICAgICAgIFRvIGtlZXAgY29kZSBpbiBMaXRlcmFsUGFyc2VyLmNwcCBhbmQga2VlcCBMaXRlcmFs
UGFyc2VyLmggc21hbGwsIHRoZSB0d28KKyAgICAgICAgZmxhdm9ycyBvZiBMaXRlcmFsUGFyc2Vy
IGFyZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCBhdCB0aGUgZW5kIG9mCisgICAgICAgIExpdGVy
YWxQYXJzZXIuY3BwLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZU1ha2VGcm9tSlNP
TlN0cmluZyk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU09OUHJvdG9GdW5jUGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OmlzSlNPTldoaXRlU3BhY2UpOgorICAgICAg
ICAoSlNDOjo6OnRyeUpTT05QUGFyc2UpOgorICAgICAgICAoSlNDOjo6Om1ha2VJZGVudGlmaWVy
KToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4KToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6
bGV4SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6TGV4ZXI6Om5leHQpOgorICAgICAgICAo
SlNDOjpMQ2hhcik6CisgICAgICAgIChKU0M6OlVDaGFyKToKKyAgICAgICAgKEpTQzo6aXNTYWZl
U3RyaW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4U3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6OjpMZXhlcjo6bGV4TnVtYmVyKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6
CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmg6CisgICAgICAgIChKU0M6OkxpdGVy
YWxQYXJzZXI6OkxpdGVyYWxQYXJzZXIpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpn
ZXRFcnJvck1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjp0cnlMaXRlcmFs
UGFyc2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6TGV4ZXIpOgorICAg
ICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6Y3VycmVudFRva2VuKToKKyAgICAgICAg
KEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmdldEVycm9yTWVzc2FnZSk6CisgICAgICAgICog
cnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkxDaGFyKToKKyAgICAgICAgKEpTQzo6
VUNoYXIpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kKToKKwogMjAxMS0x
MS0wOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODczCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk5Njg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw3IEBAIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNX
VEYxM1N0cmluZ0J1aWxkZXIxMXJlaWZ5U3RyaW5nRXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVy
MTFzaHJpbmtUb0ZpdEV2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjE1cmVzZXJ2ZUNhcGFjaXR5
RWoKLV9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmFwcGVuZEVQS2NqCitfX1pOM1dURjEzU3RyaW5n
QnVpbGRlcjZhcHBlbmRFUEtoagogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2YXBwZW5kRVBLdGoK
IF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNnJlc2l6ZUVqCiBfX1pOM1dURjEzV1RGVGhyZWFkRGF0
YTEwc3RhdGljRGF0YUUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFs
dWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDExIEBAIEpTVmFsdWVSZWYg
SlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKICAgICBVU3RyaW5nIHN0
ciA9IHN0cmluZy0+dXN0cmluZygpOwotICAgIExpdGVyYWxQYXJzZXIgcGFyc2VyKGV4ZWMsIHN0
ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6U3RyaWN0SlNPTik7
CisgICAgaWYgKHN0ci5pczhCaXQoKSkgeworICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBw
YXJzZXIoZXhlYywgc3RyLmNoYXJhY3RlcnM4KCksIHN0ci5sZW5ndGgoKSwgU3RyaWN0SlNPTik7
CisgICAgICAgIHJldHVybiB0b1JlZihleGVjLCBwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpOwor
ICAgIH0KKyAgICBMaXRlcmFsUGFyc2VyPFVDaGFyPiBwYXJzZXIoZXhlYywgc3RyLmNoYXJhY3Rl
cnMxNigpLCBzdHIubGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTk2ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QCBFWFBPUlRTCiAgICAgP2FkZFN0YXRpY0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVY
UEFVR2xvYmFsUHJvcGVydHlJbmZvQDEyQEhAWgogICAgID9hbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZUBKU09iamVjdEBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBJSUBaCiAgICAgP2FsbG9jYXRl
U2xvd0Nhc2VAQWxsb2NhdGlvblNwYWNlQEpTQ0BAQUFFUEFYQUFVU2l6ZUNsYXNzQE1hcmtlZFNw
YWNlQDJAQFoKLSAgICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJESUBaCisgICAg
P2FwcGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCRUlAWgogICAgID9hcHBlbmRAU3RyaW5n
QnVpbGRlckBXVEZAQFFBRVhQQl9XSUBaCiAgICAgP2FzY2lpQFVTdHJpbmdASlNDQEBRQkU/QVZD
U3RyaW5nQFdURkBAWFoKICAgICA/YXR0YWNoQERlYnVnZ2VyQEpTQ0BAUUFFWFBBVkpTR2xvYmFs
T2JqZWN0QDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUs
OSArNDQ1LDE1IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpjYWxsRXYKICAg
ICAgICAgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY2FuIHVzZSB0aGUgcHJlcGFyc2VyIGluIHN0cmljdCBtb2RlLCB3ZSBqdXN0IG5l
ZWQgYWRkaXRpb25hbCBsb2dpYwogICAgICAgICAgICAgLy8gdG8gcHJldmVudCBkdXBsaWNhdGVz
LgotICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFt
U291cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNl
cjo6Tm9uU3RyaWN0SlNPTik7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3Qg
PSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlZE9iamVjdDsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtU291cmNlLmlzOEJpdCgpKSB7Cisg
ICAgICAgICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGNhbGxGcmFtZSwg
cHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OKTsKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZWRPYmplY3Q7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExpdGVy
YWxQYXJzZXI8VUNoYXI+IHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFj
dGVyczE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOworICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFs
UGFyc2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlOwpAQCAtNzc5LDE2ICs3ODUsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAogICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBMaXRlcmFsUGFyc2VyIGxpdGVyYWxQYXJzZXIo
Y2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2UoKS5kYXRhKCksIHByb2dyYW0tPnNvdXJjZSgpLmxl
bmd0aCgpLCBMaXRlcmFsUGFyc2VyOjpKU09OUCk7Ci0gICAgVmVjdG9yPExpdGVyYWxQYXJzZXI6
OkpTT05QRGF0YT4gSlNPTlBEYXRhOwotICAgIGlmIChsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFy
c2UoSlNPTlBEYXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oKSkpIHsKKyAgICBWZWN0b3I8SlNPTlBEYXRhPiBKU09OUERhdGE7CisgICAgYm9vbCBw
YXJzZVJlc3VsdDsKKyAgICBjb25zdCBVU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBwcm9ncmFtLT5z
b3VyY2UoKS50b1N0cmluZygpOworICAgIGlmIChwcm9ncmFtU291cmNlLmlzOEJpdCgpKSB7Cisg
ICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IGxpdGVyYWxQYXJzZXIoY2FsbEZyYW1lLCBwcm9n
cmFtU291cmNlLmNoYXJhY3RlcnM4KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIEpTT05QKTsK
KyAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFyc2UoSlNPTlBE
YXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTGl0ZXJhbFBhcnNlcjxVQ2hhcj4gbGl0ZXJhbFBhcnNl
cihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHByb2dyYW1Tb3VyY2Uu
bGVuZ3RoKCksIEpTT05QKTsKKyAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRy
eUpTT05QUGFyc2UoSlNPTlBEYXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRz
UmljaFNvdXJjZUluZm8oKSk7ICAgICAgICAKKyAgICB9CisKKyAgICBpZiAocGFyc2VSZXN1bHQp
IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4tPmds
b2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgZW50cnkgPSAwOyBlbnRyeSA8IEpTT05QRGF0YS5zaXplKCk7IGVudHJ5KyspIHsK
LSAgICAgICAgICAgIFZlY3RvcjxMaXRlcmFsUGFyc2VyOjpKU09OUFBhdGhFbnRyeT4gSlNPTlBQ
YXRoOworICAgICAgICAgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBKU09OUFBhdGg7CiAgICAg
ICAgICAgICBKU09OUFBhdGguc3dhcChKU09OUERhdGFbZW50cnldLm1fcGF0aCk7CiAgICAgICAg
ICAgICBKU1ZhbHVlIEpTT05QVmFsdWUgPSBKU09OUERhdGFbZW50cnldLm1fdmFsdWUuZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoSlNPTlBQYXRoLnNpemUoKSA9PSAxICYmIEpTT05QUGF0aFswXS5t
X3R5cGUgPT0gTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZSkgeworICAg
ICAgICAgICAgaWYgKEpTT05QUGF0aC5zaXplKCkgPT0gMSAmJiBKU09OUFBhdGhbMF0ubV90eXBl
ID09IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmUpIHsKICAgICAgICAgICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIEpTT05QUGF0aFswXS5tX3BhdGhFbnRy
eU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwgSlNPTlBWYWx1
ZSwgc2xvdCk7CkBAIC04MDAsOSArODE1LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBiYXNlT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
SlNPTlBQYXRoLnNpemUoKSAtIDE7IGkrKykgewotICAgICAgICAgICAgICAgIEFTU0VSVChKU09O
UFBhdGhbaV0ubV90eXBlICE9IExpdGVyYWxQYXJzZXI6OkpTT05QUGF0aEVudHJ5VHlwZURlY2xh
cmUpOworICAgICAgICAgICAgICAgIEFTU0VSVChKU09OUFBhdGhbaV0ubV90eXBlICE9IEpTT05Q
UGF0aEVudHJ5VHlwZURlY2xhcmUpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoSlNPTlBQYXRo
W2ldLm1fdHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQ
YXRoRW50cnlUeXBlRG90OiB7CisgICAgICAgICAgICAgICAgY2FzZSBKU09OUFBhdGhFbnRyeVR5
cGVEb3Q6IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lLCBzbG90KSkgewpAQCAtODE3LDcgKzgzMiw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBMaXRlcmFs
UGFyc2VyOjpKU09OUFBhdGhFbnRyeVR5cGVMb29rdXA6IHsKKyAgICAgICAgICAgICAgICBjYXNl
IEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewogICAgICAgICAgICAgICAgICAgICBiYXNlT2Jq
ZWN0ID0gYmFzZU9iamVjdC5nZXQoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoSW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtODMwLDcgKzg0
NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgc3dp
dGNoIChKU09OUFBhdGgubGFzdCgpLm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBMaXRlcmFs
UGFyc2VyOjpKU09OUFBhdGhFbnRyeVR5cGVDYWxsOiB7CisgICAgICAgICAgICBjYXNlIEpTT05Q
UGF0aEVudHJ5VHlwZUNhbGw6IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
YmFzZU9iamVjdC5nZXQoY2FsbEZyYW1lLCBKU09OUFBhdGgubGFzdCgpLm1fcGF0aEVudHJ5TmFt
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtODQ2LDEzICs4NjEsMTMg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50
cnlUeXBlRG90OiB7CisgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZURvdDogewog
ICAgICAgICAgICAgICAgIGJhc2VPYmplY3QucHV0KGNhbGxGcmFtZSwgSlNPTlBQYXRoLmxhc3Qo
KS5tX3BhdGhFbnRyeU5hbWUsIEpTT05QVmFsdWUsIHNsb3QpOwogICAgICAgICAgICAgICAgIGlm
IChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgTGl0ZXJhbFBhcnNlcjo6SlNPTlBQYXRoRW50cnlUeXBlTG9va3VwOiB7
CisgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewogICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QucHV0KGNhbGxGcmFtZSwgSlNPTlBQYXRoLmxhc3QoKS5tX3BhdGhJ
bmRleCwgSlNPTlBWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0NSw5ICs0NDUsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRQogCiAgICAgVVN0cmluZyBzID0geC50b1N0cmluZyhleGVjKTsKIAotICAgIExpdGVyYWxQ
YXJzZXIgcHJlcGFyc2VyKGV4ZWMsIHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpLCBMaXRlcmFs
UGFyc2VyOjpOb25TdHJpY3RKU09OKTsKLSAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocGFyc2VkT2JqZWN0KTsKKyAgICBpZiAocy5pczhCaXQoKSkgeworICAgICAgICBMaXRlcmFs
UGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgp
LCBOb25TdHJpY3RKU09OKTsKKyAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJl
cGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShwYXJzZWRPYmplY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIExpdGVyYWxQYXJzZXI8
VUNoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OKTsKKyAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2Vy
LnRyeUxpdGVyYWxQYXJzZSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
YXJzZWRPYmplY3QpOyAgICAgICAgCisgICAgfQogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwg
PSBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UocyksIGZhbHNlKTsKICAg
ICBKU09iamVjdCogZXJyb3IgPSBldmFsLT5jb21waWxlKGV4ZWMsIHN0YXRpY19jYXN0PEpTR2xv
YmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+Z2xvYmFsU2NvcGVDaGFpbigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lv
biA5OTY4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MTksMTEgKzgxOSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAorICAgIEpTVmFsdWUgdW5m
aWx0ZXJlZDsKICAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
TGl0ZXJhbFBhcnNlciBqc29uUGFyc2VyKGV4ZWMsIHNvdXJjZS5jaGFyYWN0ZXJzKCksIHNvdXJj
ZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6U3RyaWN0SlNPTik7Ci0gICAgSlNWYWx1ZSB1bmZp
bHRlcmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKLSAgICBpZiAoIXVuZmlsdGVy
ZWQpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3Io
ZXhlYywganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOworICAgIGlmIChzb3VyY2UuaXM4
Qml0KCkpIHsKKyAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4ganNvblBhcnNlcihleGVjLCBz
b3VyY2UuY2hhcmFjdGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKKyAgICAg
ICAgdW5maWx0ZXJlZCA9IGpzb25QYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCk7CisgICAgICAgIGlm
ICghdW5maWx0ZXJlZCkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlU3ludGF4RXJyb3IoZXhlYywganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IGpzb25QYXJzZXIoZXhlYywg
c291cmNlLmNoYXJhY3RlcnMxNigpLCBzb3VyY2UubGVuZ3RoKCksIFN0cmljdEpTT04pOworICAg
ICAgICB1bmZpbHRlcmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKKyAgICAgICAg
aWYgKCF1bmZpbHRlcmVkKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCBqc29uUGFyc2VyLmdldEVycm9yTWVzc2FnZSgpKSk7ICAg
ICAgICAKKyAgICB9CiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodW5maWx0ZXJlZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24g
OTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNKU09OV2hpdGVTcGFjZShjb25zdCBVQ2hhciYgYykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0pTT05XaGl0
ZVNwYWNlKGNvbnN0IENoYXJUeXBlJiBjKQogewogICAgIC8vIFRoZSBKU09OIFJGQyA0NjI3IGRl
ZmluZXMgYSBsaXN0IG9mIGFsbG93ZWQgY2hhcmFjdGVycyB0byBiZSBjb25zaWRlcmVkCiAgICAg
Ly8gaW5zaWduaWZpY2FudCB3aGl0ZSBzcGFjZTogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZj
NDYyNy50eHQgKDIuIEpTT04gR3JhbW1hcikuCiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0g
MHg5IHx8IGMgPT0gMHhBIHx8IGMgPT0gMHhEOwogfQogCi1ib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yPEpTT05QRGF0YT4mIHJlc3VsdHMsIGJvb2wgbmVlZHNGdWxsU291
cmNlSW5mbykKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK2Jvb2wgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnRyeUpTT05QUGFyc2UoVmVjdG9yPEpTT05QRGF0YT4mIHJlc3VsdHMsIGJv
b2wgbmVlZHNGdWxsU291cmNlSW5mbykKIHsKICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9r
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwLDcgKzEyMiw4IEBAIGJv
b2wgTGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQYXJzZShWZWN0b3IKICAgICByZXR1cm4gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRva0VuZDsKIH0KICAgICAKLUFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyOjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlw
ZT4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyPENoYXJUeXBl
Pjo6bWFrZUlkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBtX2V4ZWMtPmdsb2JhbERhdGEo
KS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CkBAIC0xMzksNyArMTQyLDI4IEBAIEFM
V0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGEKICAgICByZXR1cm4gbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0KIAotdGVtcGxhdGUgPExpdGVyYWxQYXJz
ZXI6OlBhcnNlck1vZGUgbW9kZT4gTGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJz
ZXI6OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNlclRva2VuJiB0b2tlbikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyVHlwZT4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFy
c2VyPENoYXJUeXBlPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBtX2V4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgaWYgKGNo
YXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKQorICAgICAgICByZXR1cm4g
SWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisK
KyAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dOworICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFj
dGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XTsKKyAgICB9CisgICAgaWYgKCFtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlz
TnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVy
c1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CisgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK3RlbXBsYXRlIDxQYXJzZXJN
b2RlIG1vZGU+IFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6TGV4ZXI6OmxleChM
aXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+JiB0b2tlbikKIHsKICAgICB3aGlsZSAobV9wdHIg
PCBtX2VuZCAmJiBpc0pTT05XaGl0ZVNwYWNlKCptX3B0cikpCiAgICAgICAgICsrbV9wdHI7CkBA
IC0yNDAsMTUgKzI2NCw4IEBAIHRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1v
ZGUKICAgICAgICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CiAgICAgICAgICAgICByZXR1cm4g
VG9rQXNzaWduOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoKm1fcHRyKSB8
fCAqbV9wdHIgPT0gJ18nIHx8ICptX3B0ciA9PSAnJCcpIHsKLSAgICAgICAgICAgIHdoaWxlICht
X3B0ciA8IG1fZW5kICYmIChpc0FTQ0lJQWxwaGFudW1lcmljKCptX3B0cikgfHwgKm1fcHRyID09
ICdfJyB8fCAqbV9wdHIgPT0gJyQnKSkKLSAgICAgICAgICAgICAgICBtX3B0cisrOwotICAgICAg
ICAgICAgdG9rZW4uc3RyaW5nVG9rZW4gPSB0b2tlbi5zdGFydDsKLSAgICAgICAgICAgIHRva2Vu
LnN0cmluZ0xlbmd0aCA9IG1fcHRyIC0gdG9rZW4uc3RhcnQ7Ci0gICAgICAgICAgICB0b2tlbi50
eXBlID0gVG9rSWRlbnRpZmllcjsKLSAgICAgICAgICAgIHRva2VuLmVuZCA9IG1fcHRyOwotICAg
ICAgICAgICAgcmV0dXJuIFRva0lkZW50aWZpZXI7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYSgqbV9wdHIpIHx8ICptX3B0ciA9PSAnXycgfHwgKm1fcHRyID09ICckJykKKyAg
ICAgICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKHRva2VuKTsKICAgICAgICAgaWYgKCptX3B0
ciA9PSAnXCcnKSB7CiAgICAgICAgICAgICBpZiAobW9kZSA9PSBTdHJpY3RKU09OKSB7CiAgICAg
ICAgICAgICAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiU2luZ2xlIHF1b3RlcyAoXCcpIGFyZSBu
b3QgYWxsb3dlZCBpbiBKU09OIjsKQEAgLTI2MSw3ICsyNzgsMzQgQEAgdGVtcGxhdGUgPExpdGVy
YWxQYXJzZXI6OlBhcnNlck1vZGUgbW9kZQogICAgIHJldHVybiBUb2tFcnJvcjsKIH0KIAotTGl0
ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpuZXh0KCkKK3RlbXBs
YXRlIDw+CitBTFdBWVNfSU5MSU5FIFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPExDaGFyPjo6TGV4
ZXI6OmxleElkZW50aWZpZXIoTGl0ZXJhbFBhcnNlclRva2VuPExDaGFyPiYgdG9rZW4pCit7Cisg
ICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgKGlzQVNDSUlBbHBoYW51bWVyaWMoKm1fcHRyKSB8
fCAqbV9wdHIgPT0gJ18nIHx8ICptX3B0ciA9PSAnJCcpKQorICAgICAgICBtX3B0cisrOworICAg
IHRva2VuLnN0cmluZ0lzOEJpdCA9IDE7CisgICAgdG9rZW4uc3RyaW5nVG9rZW44ID0gdG9rZW4u
c3RhcnQ7CisgICAgdG9rZW4uc3RyaW5nTGVuZ3RoID0gbV9wdHIgLSB0b2tlbi5zdGFydDsKKyAg
ICB0b2tlbi50eXBlID0gVG9rSWRlbnRpZmllcjsKKyAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAg
ICByZXR1cm4gVG9rSWRlbnRpZmllcjsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUg
VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8VUNoYXI+OjpMZXhlcjo6bGV4SWRlbnRpZmllcihMaXRl
cmFsUGFyc2VyVG9rZW48VUNoYXI+JiB0b2tlbikKK3sKKyAgICB3aGlsZSAobV9wdHIgPCBtX2Vu
ZCAmJiAoaXNBU0NJSUFscGhhbnVtZXJpYygqbV9wdHIpIHx8ICptX3B0ciA9PSAnXycgfHwgKm1f
cHRyID09ICckJykpCisgICAgICAgIG1fcHRyKys7CisgICAgdG9rZW4uc3RyaW5nSXM4Qml0ID0g
MDsKKyAgICB0b2tlbi5zdHJpbmdUb2tlbjE2ID0gdG9rZW4uc3RhcnQ7CisgICAgdG9rZW4uc3Ry
aW5nTGVuZ3RoID0gbV9wdHIgLSB0b2tlbi5zdGFydDsKKyAgICB0b2tlbi50eXBlID0gVG9rSWRl
bnRpZmllcjsKKyAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAgICByZXR1cm4gVG9rSWRlbnRpZmll
cjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorVG9rZW5UeXBlIExpdGVyYWxQ
YXJzZXI8Q2hhclR5cGU+OjpMZXhlcjo6bmV4dCgpCiB7CiAgICAgaWYgKG1fbW9kZSA9PSBOb25T
dHJpY3RKU09OKQogICAgICAgICByZXR1cm4gbGV4PE5vblN0cmljdEpTT04+KG1fY3VycmVudFRv
a2VuKTsKQEAgLTI3MCwyMCArMzE0LDQwIEBAIExpdGVyYWxQYXJzZXI6OlRva2VuVHlwZSBMaXRl
cmFsUGFyc2VyOjoKICAgICByZXR1cm4gbGV4PFN0cmljdEpTT04+KG1fY3VycmVudFRva2VuKTsK
IH0KIAotdGVtcGxhdGUgPExpdGVyYWxQYXJzZXI6OlBhcnNlck1vZGUgbW9kZSwgVUNoYXIgdGVy
bWluYXRvcj4gc3RhdGljIGlubGluZSBib29sIGlzU2FmZVN0cmluZ0NoYXJhY3RlcihVQ2hhciBj
KQordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgdm9pZCBzZXRQYXJzZXJUb2tlblN0cmluZzxM
Q2hhcj4oTGl0ZXJhbFBhcnNlclRva2VuPExDaGFyPiYgdG9rZW4sIGNvbnN0IExDaGFyKiBzdHJp
bmcpCit7CisgICAgdG9rZW4uc3RyaW5nSXM4Qml0ID0gMTsKKyAgICB0b2tlbi5zdHJpbmdUb2tl
bjggPSBzdHJpbmc7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGFy
c2VyVG9rZW5TdHJpbmc8VUNoYXI+KExpdGVyYWxQYXJzZXJUb2tlbjxVQ2hhcj4mIHRva2VuLCBj
b25zdCBVQ2hhciogc3RyaW5nKQoreworICAgIHRva2VuLnN0cmluZ0lzOEJpdCA9IDA7CisgICAg
dG9rZW4uc3RyaW5nVG9rZW4xNiA9IHN0cmluZzsKK30KKwordGVtcGxhdGUgPFBhcnNlck1vZGUg
bW9kZSwgdHlwZW5hbWUgQ2hhclR5cGUsIExDaGFyIHRlcm1pbmF0b3I+IHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NhZmVTdHJpbmdDaGFyYWN0ZXIoTENoYXIgYykKK3sKKyAgICByZXR1cm4gKGMgPj0g
JyAnICYmIGMgIT0gJ1xcJyAmJiBjICE9IHRlcm1pbmF0b3IpIHx8IGMgPT0gJ1x0JzsKK30KKwor
dGVtcGxhdGUgPFBhcnNlck1vZGUgbW9kZSwgdHlwZW5hbWUgQ2hhclR5cGUsIFVDaGFyIHRlcm1p
bmF0b3I+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVTdHJpbmdDaGFyYWN0ZXIoVUNoYXIgYykK
IHsKLSAgICByZXR1cm4gKGMgPj0gJyAnICYmIChtb2RlID09IExpdGVyYWxQYXJzZXI6OlN0cmlj
dEpTT04gfHwgYyA8PSAweGZmKSAmJiBjICE9ICdcXCcgJiYgYyAhPSB0ZXJtaW5hdG9yKSB8fCBj
ID09ICdcdCc7CisgICAgcmV0dXJuIChjID49ICcgJyAmJiAobW9kZSA9PSBTdHJpY3RKU09OIHx8
IGMgPD0gMHhmZikgJiYgYyAhPSAnXFwnICYmIGMgIT0gdGVybWluYXRvcikgfHwgYyA9PSAnXHQn
OwogfQogCiAvLyAiaW5saW5lIiBpcyByZXF1aXJlZCBoZXJlIHRvIGhlbHAgV0lOU0NXIGNvbXBp
bGVyIHJlc29sdmUgc3BlY2lhbGl6ZWQgYXJndW1lbnQgaW4gdGVtcGxhdGVkIGZ1bmN0aW9ucy4K
LXRlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUsIFVDaGFyIHRlcm1pbmF0
b3I+IGlubGluZSBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6TGV4ZXI6
OmxleFN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQordGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJUeXBlPgordGVtcGxhdGUgPFBhcnNlck1vZGUgbW9kZSwgY2hhciB0ZXJtaW5hdG9yPiBB
TFdBWVNfSU5MSU5FIFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6TGV4ZXI6Omxl
eFN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+JiB0b2tlbikKIHsKICAgICArK21f
cHRyOwotICAgIGNvbnN0IFVDaGFyKiBydW5TdGFydCA9IG1fcHRyOworICAgIGNvbnN0IENoYXJU
eXBlKiBydW5TdGFydCA9IG1fcHRyOwogICAgIFVTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
ZG8gewogICAgICAgICBydW5TdGFydCA9IG1fcHRyOwotICAgICAgICB3aGlsZSAobV9wdHIgPCBt
X2VuZCAmJiBpc1NhZmVTdHJpbmdDaGFyYWN0ZXI8bW9kZSwgdGVybWluYXRvcj4oKm1fcHRyKSkK
KyAgICAgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlU3RyaW5nQ2hhcmFjdGVyPG1v
ZGUsIENoYXJUeXBlLCB0ZXJtaW5hdG9yPigqbV9wdHIpKQogICAgICAgICAgICAgKyttX3B0cjsK
ICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChydW5TdGFydCwgbV9wdHIgLSBydW5TdGFydCk7CkBAIC0zNDAsNyArNDA0LDcgQEAgdGVtcGxh
dGUgPExpdGVyYWxQYXJzZXI6OlBhcnNlck1vZGUgbW9kZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUb2tFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChKU0M6
OkxleGVyPFVDaGFyPjo6Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clsz
XSwgbV9wdHJbNF0pKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoSlNDOjpM
ZXhlcjxDaGFyVHlwZT46OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJb
M10sIG1fcHRyWzRdKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyICs9IDU7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zNjMsMTEgKzQyNywxNyBAQCB0ZW1wbGF0ZSA8TGl0
ZXJhbFBhcnNlcjo6UGFyc2VyTW9kZSBtb2RlCiAKICAgICBpZiAoYnVpbGRlci5pc0VtcHR5KCkp
IHsKICAgICAgICAgdG9rZW4uc3RyaW5nQnVmZmVyID0gVVN0cmluZygpOwotICAgICAgICB0b2tl
bi5zdHJpbmdUb2tlbiA9IHJ1blN0YXJ0OworICAgICAgICBzZXRQYXJzZXJUb2tlblN0cmluZzxD
aGFyVHlwZT4odG9rZW4sIHJ1blN0YXJ0KTsKICAgICAgICAgdG9rZW4uc3RyaW5nTGVuZ3RoID0g
bV9wdHIgLSBydW5TdGFydDsKICAgICB9IGVsc2UgewogICAgICAgICB0b2tlbi5zdHJpbmdCdWZm
ZXIgPSBidWlsZGVyLnRvVVN0cmluZygpOwotICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbiA9IHRv
a2VuLnN0cmluZ0J1ZmZlci5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmICh0b2tlbi5zdHJpbmdC
dWZmZXIuaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIHRva2VuLnN0cmluZ0lzOEJpdCA9IDE7Cisg
ICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbjggPSB0b2tlbi5zdHJpbmdCdWZmZXIuY2hhcmFj
dGVyczgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRva2VuLnN0cmluZ0lzOEJp
dCA9IDA7CisgICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbjE2ID0gdG9rZW4uc3RyaW5nQnVm
ZmVyLmNoYXJhY3RlcnMxNigpOworICAgICAgICB9CiAgICAgICAgIHRva2VuLnN0cmluZ0xlbmd0
aCA9IHRva2VuLnN0cmluZ0J1ZmZlci5sZW5ndGgoKTsKICAgICB9CiAgICAgdG9rZW4udHlwZSA9
IFRva1N0cmluZzsKQEAgLTM3NSw3ICs0NDUsOCBAQCB0ZW1wbGF0ZSA8TGl0ZXJhbFBhcnNlcjo6
UGFyc2VyTW9kZSBtb2RlCiAgICAgcmV0dXJuIFRva1N0cmluZzsKIH0KIAotTGl0ZXJhbFBhcnNl
cjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhOdW1iZXIoTGl0ZXJhbFBhcnNl
clRva2VuJiB0b2tlbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK1Rva2VuVHlwZSBM
aXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6TGV4ZXI6OmxleE51bWJlcihMaXRlcmFsUGFyc2VyVG9r
ZW48Q2hhclR5cGU+JiB0b2tlbikKIHsKICAgICAvLyBFUzUgYW5kIGpzb24ub3JnIGRlZmluZSBu
dW1iZXJzIGFzCiAgICAgLy8gbnVtYmVyCkBAIC00MjMsNyArNDk0LDcgQEAgTGl0ZXJhbFBhcnNl
cjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OgogICAgICAgICBpbnQgcmVzdWx0ID0gMDsKICAg
ICAgICAgdG9rZW4udHlwZSA9IFRva051bWJlcjsKICAgICAgICAgdG9rZW4uZW5kID0gbV9wdHI7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaWdpdCA9IHRva2VuLnN0YXJ0OworICAgICAgICBjb25z
dCBDaGFyVHlwZSogZGlnaXQgPSB0b2tlbi5zdGFydDsKICAgICAgICAgaW50IG5lZ2F0aXZlID0g
MTsKICAgICAgICAgaWYgKCpkaWdpdCA9PSAnLScpIHsKICAgICAgICAgICAgIG5lZ2F0aXZlID0g
LTE7CkBAIC00NzEsNyArNTQyLDggQEAgTGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQ
YXJzZXI6OgogICAgIHJldHVybiBUb2tOdW1iZXI7CiB9CiAKLUpTVmFsdWUgTGl0ZXJhbFBhcnNl
cjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQordGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgorSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2VyU3Rh
dGUgaW5pdGlhbFN0YXRlKQogewogICAgIFBhcnNlclN0YXRlIHN0YXRlID0gaW5pdGlhbFN0YXRl
OwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG9iamVjdFN0YWNrOwpAQCAtNTI2LDcgKzU5OCw3
IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjo6cGFyc2UoUGFyc2VyU3RhdGUKIAogICAgICAgICAg
ICAgICAgIFRva2VuVHlwZSB0eXBlID0gbV9sZXhlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKHR5cGUgPT0gVG9rU3RyaW5nIHx8IChtX21vZGUgIT0gU3RyaWN0SlNPTiAmJiB0eXBlID09
IFRva0lkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExleGVyOjpMaXRlcmFsUGFy
c2VyVG9rZW4gaWRlbnRpZmllclRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiBpZGVudGlmaWVyVG9r
ZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBjb2xvbgogICAgICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0g
VG9rQ29sb24pIHsKQEAgLTUzNSw3ICs2MDcsMTAgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpw
YXJzZShQYXJzZXJTdGF0ZQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllclN0YWNrLmFwcGVuZChtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyVG9r
ZW4uc3RyaW5nVG9rZW4sIGlkZW50aWZpZXJUb2tlbi5zdHJpbmdMZW5ndGgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zdHJpbmdJczhCaXQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5kKG1ha2VJZGVudGlmaWVyKGlkZW50
aWZpZXJUb2tlbi5zdHJpbmdUb2tlbjgsIGlkZW50aWZpZXJUb2tlbi5zdHJpbmdMZW5ndGgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRp
ZmllclN0YWNrLmFwcGVuZChtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyVG9rZW4uc3RyaW5nVG9r
ZW4xNiwgaWRlbnRpZmllclRva2VuLnN0cmluZ0xlbmd0aCkpOwogICAgICAgICAgICAgICAgICAg
ICBzdGF0ZVN0YWNrLmFwcGVuZChEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lvbik7CiAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gc3RhcnRQYXJzZUV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAg
fQpAQCAtNTU1LDcgKzYzMCw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjo6cGFyc2UoUGFyc2Vy
U3RhdGUKICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9yTWVzc2FnZSA9ICJQcm9wZXJ0
eSBuYW1lIG11c3QgYmUgYSBzdHJpbmcgbGl0ZXJhbCI7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIExleGVy
OjpMaXRlcmFsUGFyc2VyVG9rZW4gaWRlbnRpZmllclRva2VuID0gbV9sZXhlci5jdXJyZW50VG9r
ZW4oKTsKKyAgICAgICAgICAgICAgICBMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+IGlkZW50
aWZpZXJUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CiAKICAgICAgICAgICAgICAgICAv
LyBDaGVjayBmb3IgY29sb24KICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0g
VG9rQ29sb24pIHsKQEAgLTU2NCw3ICs2MzksMTAgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpw
YXJzZShQYXJzZXJTdGF0ZQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIG1f
bGV4ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5hcHBlbmQobWFr
ZUlkZW50aWZpZXIoaWRlbnRpZmllclRva2VuLnN0cmluZ1Rva2VuLCBpZGVudGlmaWVyVG9rZW4u
c3RyaW5nTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zdHJp
bmdJczhCaXQpCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5hcHBlbmQobWFr
ZUlkZW50aWZpZXIoaWRlbnRpZmllclRva2VuLnN0cmluZ1Rva2VuOCwgaWRlbnRpZmllclRva2Vu
LnN0cmluZ0xlbmd0aCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllclN0YWNrLmFwcGVuZChtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyVG9rZW4u
c3RyaW5nVG9rZW4xNiwgaWRlbnRpZmllclRva2VuLnN0cmluZ0xlbmd0aCkpOwogICAgICAgICAg
ICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKERvUGFyc2VPYmplY3RFbmRFeHByZXNzaW9uKTsKICAg
ICAgICAgICAgICAgICBnb3RvIHN0YXJ0UGFyc2VFeHByZXNzaW9uOwogICAgICAgICAgICAgfQpA
QCAtNTkxLDEzICs2NjksMTYgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpwYXJzZShQYXJzZXJT
dGF0ZQogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva0xCcmFjZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gc3RhcnRQYXJzZU9iamVjdDsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUb2tTdHJpbmc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExleGVyOjpMaXRlcmFsUGFy
c2VyVG9rZW4gc3RyaW5nVG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiBzdHJpbmdUb2tlbiA9
IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVy
Lm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3RyaW5nKG1f
ZXhlYywgbWFrZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4uc3RyaW5nVG9rZW4sIHN0cmluZ1Rva2Vu
LnN0cmluZ0xlbmd0aCkudXN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHJpbmdUb2tlbi5zdHJpbmdJczhCaXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dFZhbHVlID0ganNTdHJpbmcobV9leGVjLCBtYWtlSWRlbnRpZmllcihzdHJpbmdUb2tlbi5zdHJp
bmdUb2tlbjgsIHN0cmluZ1Rva2VuLnN0cmluZ0xlbmd0aCkudXN0cmluZygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFs
dWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1ha2VJZGVudGlmaWVyKHN0cmluZ1Rva2VuLnN0cmluZ1Rv
a2VuMTYsIHN0cmluZ1Rva2VuLnN0cmluZ0xlbmd0aCkudXN0cmluZygpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVG9rTnVtYmVyOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMZXhlcjo6
TGl0ZXJhbFBhcnNlclRva2VuIG51bWJlclRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4gbnVt
YmVyVG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sZXhlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBq
c051bWJlcihudW1iZXJUb2tlbi5udW1iZXJUb2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTYyMiw5ICs3MDMsMTQgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpwYXJz
ZShQYXJzZXJTdGF0ZQogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva1JCcmFjZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSAiVW5leHBlY3RlZCB0b2tl
biAnfSciOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUb2tJZGVudGlmaWVyOgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wYXJzZUVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmV4cGVjdGVkIGlkZW50
aWZpZXIgXCIlc1wiIiwgVVN0cmluZyhtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0cmluZ1Rva2Vu
LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0cmluZ0xlbmd0aCkuYXNjaWkoKS5kYXRhKCkpLmlt
cGwoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tJZGVudGlmaWVyOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+JiB0b2tl
biA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dG9rZW4uc3RyaW5nSXM4Qml0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VF
cnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5leHBlY3RlZCBpZGVudGlmaWVyIFwiJXNc
IiIsIFVTdHJpbmcobV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdHJpbmdUb2tlbjgsIG1fbGV4ZXIu
Y3VycmVudFRva2VuKCkuc3RyaW5nTGVuZ3RoKS5hc2NpaSgpLmRhdGEoKSkuaW1wbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cGFyc2VFcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5leHBlY3RlZCBpZGVudGlmaWVy
IFwiJXNcIiIsIFVTdHJpbmcobV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdHJpbmdUb2tlbjE2LCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLnN0cmluZ0xlbmd0aCkuYXNjaWkoKS5kYXRhKCkpLmltcGwo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tDb2xvbjoKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSAiVW5leHBlY3RlZCB0b2tlbiAn
OiciOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTczNyw0
ICs4MjMsOCBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlCiAgICAg
fQogfQogCisvLyBJbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgTGl0ZXJhbFBhcnNlciB3
ZSBuZWVkIGluc3RlYWQgb2YgcHV0dGluZyBtb3N0IG9mIHRoaXMgZmlsZSBpbiBMaXRlcmFsUGFy
c2VyLmgKK3RlbXBsYXRlIGNsYXNzIExpdGVyYWxQYXJzZXI8TENoYXI+OwordGVtcGxhdGUgY2xh
c3MgTGl0ZXJhbFBhcnNlcjxVQ2hhcj47CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmgJKHJldmlzaW9uIDk5Njg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMjAgKzMzLDEzMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIExpdGVy
YWxQYXJzZXIgewordHlwZWRlZiBlbnVtIHsgU3RyaWN0SlNPTiwgTm9uU3RyaWN0SlNPTiwgSlNP
TlAgfSBQYXJzZXJNb2RlOworCitlbnVtIEpTT05QUGF0aEVudHJ5VHlwZSB7CisgICAgSlNPTlBQ
YXRoRW50cnlUeXBlRGVjbGFyZSwgLy8gdmFyIHBhdGhFbnRyeU5hbWUgPSBKU09OCisgICAgSlNP
TlBQYXRoRW50cnlUeXBlRG90LCAvLyA8cHJpb3IgZW50cmllcz4ucGF0aEVudHJ5TmFtZSA9IEpT
T04KKyAgICBKU09OUFBhdGhFbnRyeVR5cGVMb29rdXAsIC8vIDxwcmlvciBlbnRyaWVzPltwYXRo
SW5kZXhdID0gSlNPTgorICAgIEpTT05QUGF0aEVudHJ5VHlwZUNhbGwgLy8gPHByaW9yIGVudHJp
ZXM+KEpTT04pCit9OworCitlbnVtIFBhcnNlclN0YXRlIHsgU3RhcnRQYXJzZU9iamVjdCwgU3Rh
cnRQYXJzZUFycmF5LCBTdGFydFBhcnNlRXhwcmVzc2lvbiwgCisgICAgICAgICAgICAgICAgICAg
U3RhcnRQYXJzZVN0YXRlbWVudCwgU3RhcnRQYXJzZVN0YXRlbWVudEVuZFN0YXRlbWVudCwgCisg
ICAgICAgICAgICAgICAgICAgRG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbiwgRG9QYXJzZU9i
amVjdEVuZEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgRG9QYXJzZUFycmF5U3RhcnRF
eHByZXNzaW9uLCBEb1BhcnNlQXJyYXlFbmRFeHByZXNzaW9uIH07CitlbnVtIFRva2VuVHlwZSB7
IFRva0xCcmFja2V0LCBUb2tSQnJhY2tldCwgVG9rTEJyYWNlLCBUb2tSQnJhY2UsIAorICAgICAg
ICAgICAgICAgICBUb2tTdHJpbmcsIFRva0lkZW50aWZpZXIsIFRva051bWJlciwgVG9rQ29sb24s
IAorICAgICAgICAgICAgICAgICBUb2tMUGFyZW4sIFRva1JQYXJlbiwgVG9rQ29tbWEsIFRva1Ry
dWUsIFRva0ZhbHNlLAorICAgICAgICAgICAgICAgICBUb2tOdWxsLCBUb2tFbmQsIFRva0RvdCwg
VG9rQXNzaWduLCBUb2tTZW1pLCBUb2tFcnJvciB9OworICAgIAorc3RydWN0IEpTT05QUGF0aEVu
dHJ5IHsKKyAgICBKU09OUFBhdGhFbnRyeVR5cGUgbV90eXBlOworICAgIElkZW50aWZpZXIgbV9w
YXRoRW50cnlOYW1lOworICAgIGludCBtX3BhdGhJbmRleDsKK307CisKK3N0cnVjdCBKU09OUERh
dGEgeworICAgIFZlY3RvcjxKU09OUFBhdGhFbnRyeT4gbV9wYXRoOworICAgIFN0cm9uZzxVbmtu
b3duPiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorc3RydWN0
IExpdGVyYWxQYXJzZXJUb2tlbiB7CisgICAgVG9rZW5UeXBlIHR5cGU7CisgICAgY29uc3QgQ2hh
clR5cGUqIHN0YXJ0OworICAgIGNvbnN0IENoYXJUeXBlKiBlbmQ7CisgICAgVVN0cmluZyBzdHJp
bmdCdWZmZXI7CisgICAgdW5pb24geworICAgICAgICBkb3VibGUgbnVtYmVyVG9rZW47CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
TENoYXIqIHN0cmluZ1Rva2VuODsKKyAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogc3RyaW5n
VG9rZW4xNjsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB1bnNpZ25lZCBzdHJpbmdJczhC
aXQgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoIDogMzE7CisgICAgICAg
IH07CisgICAgfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBzZXRQYXJzZXJUb2tlblN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5
cGU+JiwgY29uc3QgQ2hhclR5cGUqIHN0cmluZyk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4KK2NsYXNzIExpdGVyYWxQYXJzZXIgeworcHVibGljOgorICAgIExpdGVyYWxQYXJzZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBQYXJzZXJNb2RlIG1vZGUpCisgICAgICAgIDogbV9leGVjKGV4ZWMpCisgICAgICAgICwg
bV9sZXhlcihjaGFyYWN0ZXJzLCBsZW5ndGgsIG1vZGUpCisgICAgICAgICwgbV9tb2RlKG1vZGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBVU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIAorICAg
IHsgCisgICAgICAgIGlmICghbV9sZXhlci5nZXRFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIkpTT04gUGFyc2UgZXJyb3I6ICVzIiwg
bV9sZXhlci5nZXRFcnJvck1lc3NhZ2UoKS5hc2NpaSgpLmRhdGEoKSkuaW1wbCgpOworICAgICAg
ICBpZiAoIW1fcGFyc2VFcnJvck1lc3NhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJKU09OIFBhcnNlIGVycm9yOiAlcyIsIG1fcGFyc2VFcnJvck1lc3Nh
Z2UuYXNjaWkoKS5kYXRhKCkpLmltcGwoKTsKKyAgICAgICAgcmV0dXJuICJKU09OIFBhcnNlIGVy
cm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmciOworICAgIH0KKyAgICAKKyAgICBKU1Zh
bHVlIHRyeUxpdGVyYWxQYXJzZSgpCisgICAgeworICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBwYXJzZShtX21vZGUgPT0gU3RyaWN0SlNPTiA/IFN0YXJ0
UGFyc2VFeHByZXNzaW9uIDogU3RhcnRQYXJzZVN0YXRlbWVudCk7CisgICAgICAgIGlmIChtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rU2VtaSkKKyAgICAgICAgICAgIG1fbGV4ZXIu
bmV4dCgpOworICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlICE9IFRva0Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5SlNPTlBQYXJzZShWZWN0b3I8SlNPTlBEYXRhPiYs
IGJvb2wgbmVlZHNGdWxsU291cmNlSW5mbyk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTGV4ZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBlbnVtIHsgU3RyaWN0SlNPTiwgTm9uU3Ry
aWN0SlNPTiwgSlNPTlAgfSBQYXJzZXJNb2RlOwotICAgICAgICBMaXRlcmFsUGFyc2VyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFy
c2VyTW9kZSBtb2RlKQotICAgICAgICAgICAgOiBtX2V4ZWMoZXhlYykKLSAgICAgICAgICAgICwg
bV9sZXhlcihjaGFyYWN0ZXJzLCBsZW5ndGgsIG1vZGUpCi0gICAgICAgICAgICAsIG1fbW9kZSht
b2RlKQorICAgICAgICBMZXhlcihjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoLCBQYXJzZXJNb2RlIG1vZGUpCisgICAgICAgICAgICA6IG1fbW9kZShtb2RlKQorICAg
ICAgICAgICAgLCBtX3B0cihjaGFyYWN0ZXJzKQorICAgICAgICAgICAgLCBtX2VuZChjaGFyYWN0
ZXJzICsgbGVuZ3RoKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFVT
dHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgCi0gICAgICAgIHsgCi0gICAgICAgICAgICBpZiAoIW1f
bGV4ZXIuZ2V0RXJyb3JNZXNzYWdlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiSlNPTiBQYXJzZSBlcnJvcjogJXMiLCBtX2xleGVyLmdldEVycm9y
TWVzc2FnZSgpLmFzY2lpKCkuZGF0YSgpKS5pbXBsKCk7Ci0gICAgICAgICAgICBpZiAoIW1fcGFy
c2VFcnJvck1lc3NhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiSlNPTiBQYXJzZSBlcnJvcjogJXMiLCBtX3BhcnNlRXJyb3JNZXNzYWdlLmFzY2lp
KCkuZGF0YSgpKS5pbXBsKCk7Ci0gICAgICAgICAgICByZXR1cm4gIkpTT04gUGFyc2UgZXJyb3I6
IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZyI7Ci0gICAgICAgIH0KKyAgICAgICAgVG9rZW5U
eXBlIG5leHQoKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgdHJ5TGl0ZXJhbFBhcnNlKCkK
KyAgICAgICAgY29uc3QgTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiYgY3VycmVudFRva2Vu
KCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IHBhcnNlKG1fbW9kZSA9PSBTdHJpY3RKU09OID8gU3RhcnRQYXJzZUV4
cHJlc3Npb24gOiBTdGFydFBhcnNlU3RhdGVtZW50KTsKLSAgICAgICAgICAgIGlmIChtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rU2VtaSkKLSAgICAgICAgICAgICAgICBtX2xleGVy
Lm5leHQoKTsKLSAgICAgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgIT0g
VG9rRW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFRva2VuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBlbnVtIEpTT05QUGF0aEVudHJ5VHlwZSB7Ci0gICAgICAg
ICAgICBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlLCAvLyB2YXIgcGF0aEVudHJ5TmFtZSA9IEpT
T04KLSAgICAgICAgICAgIEpTT05QUGF0aEVudHJ5VHlwZURvdCwgLy8gPHByaW9yIGVudHJpZXM+
LnBhdGhFbnRyeU5hbWUgPSBKU09OCi0gICAgICAgICAgICBKU09OUFBhdGhFbnRyeVR5cGVMb29r
dXAsIC8vIDxwcmlvciBlbnRyaWVzPltwYXRoSW5kZXhdID0gSlNPTgotICAgICAgICAgICAgSlNP
TlBQYXRoRW50cnlUeXBlQ2FsbCAvLyA8cHJpb3IgZW50cmllcz4oSlNPTikKLSAgICAgICAgfTsK
LQotICAgICAgICBzdHJ1Y3QgSlNPTlBQYXRoRW50cnkgewotICAgICAgICAgICAgSlNPTlBQYXRo
RW50cnlUeXBlIG1fdHlwZTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgbV9wYXRoRW50cnlOYW1l
OwotICAgICAgICAgICAgaW50IG1fcGF0aEluZGV4OwotICAgICAgICB9OwotCi0gICAgICAgIHN0
cnVjdCBKU09OUERhdGEgewotICAgICAgICAgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBtX3Bh
dGg7Ci0gICAgICAgICAgICBTdHJvbmc8VW5rbm93bj4gbV92YWx1ZTsKLSAgICAgICAgfTsKLQot
ICAgICAgICBib29sIHRyeUpTT05QUGFyc2UoVmVjdG9yPEpTT05QRGF0YT4mLCBib29sIG5lZWRz
RnVsbFNvdXJjZUluZm8pOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBQYXJzZXJTdGF0
ZSB7IFN0YXJ0UGFyc2VPYmplY3QsIFN0YXJ0UGFyc2VBcnJheSwgU3RhcnRQYXJzZUV4cHJlc3Np
b24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRQYXJzZVN0YXRlbWVudCwgU3Rh
cnRQYXJzZVN0YXRlbWVudEVuZFN0YXRlbWVudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBEb1BhcnNlT2JqZWN0U3RhcnRFeHByZXNzaW9uLCBEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERvUGFyc2VBcnJheVN0YXJ0RXhwcmVzc2lv
biwgRG9QYXJzZUFycmF5RW5kRXhwcmVzc2lvbiB9OwotICAgICAgICBlbnVtIFRva2VuVHlwZSB7
IFRva0xCcmFja2V0LCBUb2tSQnJhY2tldCwgVG9rTEJyYWNlLCBUb2tSQnJhY2UsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgIFRva1N0cmluZywgVG9rSWRlbnRpZmllciwgVG9rTnVtYmVyLCBU
b2tDb2xvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgVG9rTFBhcmVuLCBUb2tSUGFyZW4s
IFRva0NvbW1hLCBUb2tUcnVlLCBUb2tGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBU
b2tOdWxsLCBUb2tFbmQsIFRva0RvdCwgVG9rQXNzaWduLCBUb2tTZW1pLCBUb2tFcnJvciB9Owot
ICAgICAgICAKLSAgICAgICAgY2xhc3MgTGV4ZXIgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAg
ICAgICBzdHJ1Y3QgTGl0ZXJhbFBhcnNlclRva2VuIHsKLSAgICAgICAgICAgICAgICBUb2tlblR5
cGUgdHlwZTsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQ7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVUNoYXIqIGVuZDsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ0J1
ZmZlcjsKLSAgICAgICAgICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBudW1iZXJUb2tlbjsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdHJpbmdUb2tlbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBMZXhlcihjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXJzZXJNb2RlIG1vZGUpCi0gICAgICAg
ICAgICAgICAgOiBtX21vZGUobW9kZSkKLSAgICAgICAgICAgICAgICAsIG1fcHRyKGNoYXJhY3Rl
cnMpCi0gICAgICAgICAgICAgICAgLCBtX2VuZChjaGFyYWN0ZXJzICsgbGVuZ3RoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBUb2tlblR5
cGUgbmV4dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBMaXRlcmFsUGFyc2Vy
VG9rZW4mIGN1cnJlbnRUb2tlbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFRva2VuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBVU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIG1fbGV4RXJyb3JNZXNzYWdl
OyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIFVTdHJpbmcg
bV9sZXhFcnJvck1lc3NhZ2U7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8UGFyc2VyTW9kZSBtb2Rl
PiBUb2tlblR5cGUgbGV4KExpdGVyYWxQYXJzZXJUb2tlbiYpOwotICAgICAgICAgICAgdGVtcGxh
dGUgPFBhcnNlck1vZGUgbW9kZSwgVUNoYXIgdGVybWluYXRvcj4gQUxXQVlTX0lOTElORSBUb2tl
blR5cGUgbGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tlbiYpOwotICAgICAgICAgICAgQUxXQVlT
X0lOTElORSBUb2tlblR5cGUgbGV4TnVtYmVyKExpdGVyYWxQYXJzZXJUb2tlbiYpOwotICAgICAg
ICAgICAgTGl0ZXJhbFBhcnNlclRva2VuIG1fY3VycmVudFRva2VuOwotICAgICAgICAgICAgVVN0
cmluZyBtX3N0cmluZzsKLSAgICAgICAgICAgIFBhcnNlck1vZGUgbV9tb2RlOwotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIG1fcHRyOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIG1fZW5kOwot
ICAgICAgICB9OworICAgICAgICBVU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIG1f
bGV4RXJyb3JNZXNzYWdlOyB9CiAgICAgICAgIAotICAgICAgICBjbGFzcyBTdGFja0d1YXJkOwot
ICAgICAgICBKU1ZhbHVlIHBhcnNlKFBhcnNlclN0YXRlKTsKLQotICAgICAgICBFeGVjU3RhdGUq
IG1fZXhlYzsKLSAgICAgICAgTGl0ZXJhbFBhcnNlcjo6TGV4ZXIgbV9sZXhlcjsKKyAgICBwcml2
YXRlOgorICAgICAgICBVU3RyaW5nIG1fbGV4RXJyb3JNZXNzYWdlOworICAgICAgICB0ZW1wbGF0
ZSA8UGFyc2VyTW9kZSBtb2RlPiBUb2tlblR5cGUgbGV4KExpdGVyYWxQYXJzZXJUb2tlbjxDaGFy
VHlwZT4mKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBUb2tlblR5cGUgbGV4SWRlbnRpZmllcihM
aXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+Jik7CisgICAgICAgIHRlbXBsYXRlIDxQYXJzZXJN
b2RlIG1vZGUsIGNoYXIgdGVybWluYXRvcj4gQUxXQVlTX0lOTElORSBUb2tlblR5cGUgbGV4U3Ry
aW5nKExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4mKTsKKyAgICAgICAgQUxXQVlTX0lOTElO
RSBUb2tlblR5cGUgbGV4TnVtYmVyKExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4mKTsKKyAg
ICAgICAgTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiBtX2N1cnJlbnRUb2tlbjsKKyAgICAg
ICAgVVN0cmluZyBtX3N0cmluZzsKICAgICAgICAgUGFyc2VyTW9kZSBtX21vZGU7Ci0gICAgICAg
IFVTdHJpbmcgbV9wYXJzZUVycm9yTWVzc2FnZTsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNv
bnN0IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlciA9IDEyODsKLSAgICAgICAgRml4ZWRBcnJheTxJ
ZGVudGlmaWVyLCBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXI+IG1fc2hvcnRJZGVudGlmaWVyczsK
LSAgICAgICAgRml4ZWRBcnJheTxJZGVudGlmaWVyLCBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXI+
IG1fcmVjZW50SWRlbnRpZmllcnM7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRp
ZmllciBtYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCk7CisgICAgICAgIGNvbnN0IENoYXJUeXBlKiBtX3B0cjsKKyAgICAgICAgY29uc3QgQ2hhclR5
cGUqIG1fZW5kOworICAgIH07CisgICAgCisgICAgY2xhc3MgU3RhY2tHdWFyZDsKKyAgICBKU1Zh
bHVlIHBhcnNlKFBhcnNlclN0YXRlKTsKKworICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIHR5
cGVuYW1lIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhlciBtX2xleGVyOworICAgIFBhcnNl
ck1vZGUgbV9tb2RlOworICAgIFVTdHJpbmcgbV9wYXJzZUVycm9yTWVzc2FnZTsKKyAgICBzdGF0
aWMgdW5zaWduZWQgY29uc3QgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyID0gMTI4OworICAgIEZp
eGVkQXJyYXk8SWRlbnRpZmllciwgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyPiBtX3Nob3J0SWRl
bnRpZmllcnM7CisgICAgRml4ZWRBcnJheTxJZGVudGlmaWVyLCBNYXhpbXVtQ2FjaGFibGVDaGFy
YWN0ZXI+IG1fcmVjZW50SWRlbnRpZmllcnM7CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyIG1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogICAgIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgJKHJldmlzaW9uIDk5Njg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw2ICs5NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hh
cmFjdGVyczE2KCk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgor
ICAgIGlubGluZSBjb25zdCBDaGFyVHlwZSogZ2V0Q2hhcmFjdGVycygpIGNvbnN0OworCiAgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPmlzOEJpdCgpOyB9CiAKICAgICBD
U3RyaW5nIGFzY2lpKCkgY29uc3Q7CkBAIC0xMzUsNiArMTM4LDIwIEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKIH07CiAKK3RlbXBsYXRlPD4KK2lubGluZSBjb25z
dCBMQ2hhciogVVN0cmluZzo6Z2V0Q2hhcmFjdGVyczxMQ2hhcj4oKSBjb25zdAoreworICAgIEFT
U0VSVChpczhCaXQoKSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBjb25zdCBVQ2hhciogVVN0cmluZzo6Z2V0Q2hhcmFjdGVyczxVQ2hhcj4oKSBj
b25zdAoreworICAgIEFTU0VSVCghaXM4Qml0KCkpOworICAgIHJldHVybiBjaGFyYWN0ZXJzMTYo
KTsKK30KKwogTkVWRVJfSU5MSU5FIGJvb2wgZXF1YWxTbG93Q2FzZShjb25zdCBVU3RyaW5nJiBz
MSwgY29uc3QgVVN0cmluZyYgczIpOwogCiBBTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBVU3RyaW5nJiBzMSwgY29uc3QgVVN0cmluZyYgczIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiA5OTY4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDE2ICsxNTgsMTYgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjph
cHBlbmQoY29uc3QgVUNoYXIqIAogICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkKGxlbmd0
aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIDIpOwogfQogCi12
b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAgICAgQVNTRVJUKGNoYXJhY3RlcnMpOwogCiAgICAgVUNoYXIqIGRlc3QgPSBhcHBlbmRV
bmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgY29uc3QgY2hhciogZW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKKyAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAg
ICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgKihkZXN0KyspID0gKihjb25zdCB1
bnNpZ25lZCBjaGFyKikoY2hhcmFjdGVycysrKTsKKyAgICAgICAgKihkZXN0KyspID0gKihjaGFy
YWN0ZXJzKyspOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2
aXNpb24gOTk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVkKTsKLSAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IExDaGFyKiwg
dW5zaWduZWQpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewo=
</data>
<flag name="review"
          id="112984"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>