<?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>78515</bug_id>
          
          <creation_ts>2012-02-13 12:00:49 -0800</creation_ts>
          <short_desc>DFG should be able to emit code on control flow edges</short_desc>
          <delta_ts>2012-02-16 02:11:31 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555440</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-13 12:00:49 -0800</bug_when>
    <thetext>Currently the DFG can emit code for the basic blocks that appeared in the program.  But it is often necessary or useful to emit code on synthetic basic blocks created on control flow edges.  For example we may have B1, B2, B3 such that B1 branches to B2 or some other block, and B3 jumps to B2.  We may want some code to execute only when B1 branches to B2 but not when it branches elsewhere; and for a different piece of code to execute when B3 jumps to B2.

Currently the code that emits branches makes this difficult, since if it directly emits branches, and there is no way to say that some code should be inserted just on one of the edges of the branch.

To make this work, we should add the notion of control flow edge code, and abstract this behind an API for emitting branches so that most of the code generator doesn&apos;t have to worry about it.  Since currently we do not yet use this feature, we should have a verification mode that emits dummy code in control flow edges to test that this feature is working correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555453</commentid>
    <comment_count>1</comment_count>
      <attachid>126803</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-13 12:15:58 -0800</bug_when>
    <thetext>Created attachment 126803
the patch

Note - because I was lazy this patch has verification enabled, since I&apos;m still testing it.  I will land with DFG_ENABLE_EDGE_CODE_VERIFICATION set to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555510</commentid>
    <comment_count>2</comment_count>
      <attachid>126816</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-13 13:26:06 -0800</bug_when>
    <thetext>Created attachment 126816
the patch

Fixed Mac build, turned off landing pads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555602</commentid>
    <comment_count>3</comment_count>
      <attachid>126816</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-13 14:22:30 -0800</bug_when>
    <thetext>Comment on attachment 126816
the patch

Attachment 126816 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11511601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555698</commentid>
    <comment_count>4</comment_count>
      <attachid>126816</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-02-13 15:54:24 -0800</bug_when>
    <thetext>Comment on attachment 126816
the patch

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

&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:78
&gt; +    static DoubleCondition invert(DoubleCondition cond)

At some point we should probably make double condition a common type for all assemblers (independent of machine implementation), with a guarantee that we can just invert by flipping a bit, and sue a table to map from the abstract type to a machine type.  Ditto for the integer conditions.  This looks fine for now though.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:110
&gt; +    static bool isInvertible(ResultCondition cond)

Presumably we could do away with this by introducing NoOverflow/NotSigned types? Probably worth doing at some point, though not urgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557998</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-16 02:11:31 -0800</bug_when>
    <thetext>Landed in:

main patch: http://trac.webkit.org/changeset/107741
build fixes: http://trac.webkit.org/changeset/107742 http://trac.webkit.org/changeset/107744</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126803</attachid>
            <date>2012-02-13 12:15:58 -0800</date>
            <delta_ts>2012-02-13 13:26:06 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>landingpads_patch_1.diff</filename>
            <type>text/plain</type>
            <size>41739</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTAyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIGVtaXQgY29kZSBvbiBjb250cm9sIGZsb3cgZWRnZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGdldHMgdXMgYSBmZXcgc3RlcHMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8gcGVyZm9ybSBnbG9i
YWwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwKKyAgICAgICAgYnkgYWxsb3dpbmcgdXMgdG8gaGF2ZSBs
YW5kaW5nIHBhZHMgb24gY29udHJvbCBmbG93IGVkZ2VzLiBUaGlzIHdpbGwgbGV0IHVzIHJlc2h1
ZmZsZQorICAgICAgICByZWdpc3RlcnMgaWYgaXQgaGFwcGVucyB0byBiZSBuZWNlc3NhcnkgZHVl
IHRvIGRpZmZlcmVudCByZWcgYWxsb2MgZGVjaXNpb25zIGluCisgICAgICAgIGRpZmZlcmVuIGJs
b2Nrcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBpbnRyb2R1Y2VzIHRoZSBub3Rpb24g
b2YgYSBsYW5kaW5nIHBhZCBmb3IgT1NSIGVudHJ5LCB3aGljaCB3aWxsIGFsbG93IHVzCisgICAg
ICAgIHRvIGVtaXQgY29kZSB0aGF0IHBsYWNlcyBkYXRhIGludG8gcmVnaXN0ZXJzIHdoZW4gd2Un
cmUgZW50ZXJpbmcgaW50byB0aGUgREZHIGZyb20KKyAgICAgICAgdGhlIG9sZCBKSVQuCisgICAg
ICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSB2ZXJpZmljYXRp
b24gbW9kZSB0aGF0IGNoZWNrcyB0aGF0IHRoZSBsYW5kaW5nIHBhZHMKKyAgICAgICAgYXJlIGFj
dHVhbGx5IGVtaXR0ZWQgYW5kIGRvIGFjdHVhbGx5IHdvcmsgYXMgYWR2ZXJ0aXNlZC4gV2hlbiB2
ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQsCisgICAgICAgIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBi
ZWhhdmlvci4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoTWFjcm9Bc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGVOb25aZXJvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoMzIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpicmFuY2hQdHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpicmFuY2hUZXN0UHRyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6YnJhbmNoVGVzdDgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aGF2ZUVkZ2VDb2RlVG9FbWl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEVkZ2VDb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisKIDIwMTItMDItMTMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIG9ic29sZXRlICNpZiBmcm9tIFRocmVhZFNwZWNpZmlj
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDEwNzUwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNjIgQEAg
cHVibGljOgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoUHRyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoVGVzdFB0cjsKICNlbmRpZgotCisgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZlcnQ7CisgICAgCisgICAgc3RhdGljIERvdWJsZUNv
bmRpdGlvbiBpbnZlcnQoRG91YmxlQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBEb3VibGVFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworICAgICAgICBjYXNlIERvdWJsZU5vdEVxdWFs
OgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQ7CisgICAgICAgIGNh
c2UgRG91YmxlR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQ7CisgICAgICAgIGNhc2UgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
OgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQ7CisgICAgICAg
IGNhc2UgRG91YmxlTGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQ7CisgICAgICAgIGNhc2UgRG91YmxlTGVzc1RoYW5PckVxdWFs
OgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQ7CisgICAg
ICAgIGNhc2UgRG91YmxlRXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBEb3Vi
bGVOb3RFcXVhbDsKKyAgICAgICAgY2FzZSBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOgorICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZUVxdWFsOworICAgICAgICBjYXNlIERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW5PckVxdWFs
OworICAgICAgICBjYXNlIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgorICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZUxlc3NUaGFuOworICAgICAgICBjYXNlIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsOworICAgICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgorICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgaXNJbnZlcnRpYmxlKFJlc3VsdENvbmRpdGlvbiBjb25kKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgWmVybzoKKyAgICAgICAgY2Fz
ZSBOb25aZXJvOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFJlc3VsdENvbmRpdGlvbiBpbnZlcnQoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBaZXJvOgorICAgICAgICAgICAg
cmV0dXJuIE5vblplcm87CisgICAgICAgIGNhc2UgTm9uWmVybzoKKyAgICAgICAgICAgIHJldHVy
biBaZXJvOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBQbGF0Zm9ybSBhZ25vc3RpYyBvbnZlbmll
bmNlIGZ1bmN0aW9ucywKICAgICAvLyBkZXNjcmliZWQgaW4gdGVybXMgb2Ygb3RoZXIgbWFjcm8g
YXNzZW1ibHkgbWV0aG9kcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkocmV2aXNpb24gMTA3NTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBERkdfRU5BQkxF
X1NVQ0NFU1NfU1RBVFMgMAogLy8gVXNlZCB0byBlbmFibGUgY29uZGl0aW9uYWxseSBzdXBwb3J0
ZWQgb3Bjb2RlcyB0aGF0IGN1cnJlbnRseSByZXN1bHQgaW4gcGVyZm9ybWFuY2UgcmVncmVzc2lv
bnMuCiAjZGVmaW5lIERGR19FTkFCTEVfUkVTVFJJQ1RJT05TIDEKKy8vIEVuYWJsZSB2ZXJpZmlj
YXRpb24gdGhhdCB0aGUgREZHIGlzIGFibGUgdG8gaW5zZXJ0IGNvZGUgZm9yIGNvbnRyb2wgZmxv
dyBlZGdlcy4KKyNkZWZpbmUgREZHX0VOQUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9OIDEKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTA3NTAxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMiw2ICsyMTIsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVu
dHJ5CiAgICAgU3BlY3VsYXRpdmVKSVQgc3BlY3VsYXRpdmUoKnRoaXMpOwogICAgIGNvbXBpbGVC
b2R5KHNwZWN1bGF0aXZlKTsKIAorICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMg
aWYgbmVjZXNzYXJ5LgorICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKKwogICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7
CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICBzcGVjdWxhdGl2ZS5saW5rT1NSRW50cmllcyhs
aW5rQnVmZmVyKTsKQEAgLTI2OSw2ICsyNzIsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
RnVuY3Rpb24oSklUQ29kCiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAgICBt
b3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAganVt
cChmcm9tQXJpdHlDaGVjayk7CisgICAgCisgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9s
aW5lcyBpZiBuZWNlc3NhcnkuCisgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwog
CiAKICAgICAvLyA9PT0gTGluayA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTA3NTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjM0LDIxICs2MzQsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhh
cmdQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8g
OiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBT
dHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YWtlbik7CisgICAgYnJhbmNoVGVzdDgoaW52
ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIHRha2Vu
KTsKICAgICAKICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpIHsKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICBqdW1wKG5vdFRh
a2VuLCBGb3JjZUp1bXApOwogICAgICAgICAKICAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CiAgICAgICAgIC8vIG51bGwgb3IgdW5kZWZpbmVkPwogICAgICAgICBDT01QSUxFX0FTU0VSVCgo
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZywgVW5kZWZpbmVk
VGFnX09SXzFfRVFVQUxTX051bGxUYWcpOwogICAgICAgICBtX2ppdC5tb3ZlKGFyZ1RhZ0dQUiwg
cmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihpbnZlcnQgPyBKSVRDb21waWxl
cjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSksIHRha2VuKTsKKyAgICAgICAgYnJhbmNo
MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBy
ZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHRh
a2VuKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0g
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICBqdW1wKG5vdFRh
a2VuKTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlJiBub2RlLCBOb2RlVXNlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQpAQCAtNzA4LDcgKzcw
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwg
cmVzdWx0R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBh
eWxvYWRHUFIpOwogCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJl
c3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIo
Y2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKQEAgLTcyMSwxMCArNzIwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMigpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAKLSAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiks
IHRha2VuKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXls
b2FkR1BSLCB0YWtlbik7CiAgICAgCiAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkgewotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAg
ICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICAKICAgICAgICAgICAgIHNs
b3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTczMiwxMiArNzMxLDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIs
IGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2VuKTsK
KyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIs
IHRha2VuKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9j
ayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAg
anVtcChub3RUYWtlbik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKQEAgLTgy
NSwxMyArODIzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
ICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2Vs
bChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVj
a3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2Ft
ZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFQ
YXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwor
ICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJn
MlBheWxvYWRHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQ
UiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BS
KTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICAgICAgCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklU
Q29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0UGF5bG9hZEdQUiks
IHRha2VuKTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJv
IDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdFBheWxvYWRHUFIsIHRha2VuKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aHMgZm9yIHR3b0NlbGxzLCBu
dW1iZXIgZXRjLgogCkBAIC04MzksMTEgKzgzNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwg
YXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpO
b25aZXJvLCByZXN1bHRQYXlsb2FkR1BSKSwgdGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0
UGF5bG9hZEdQUiwgdGFrZW4pOwogICAgIH0KICAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwor
ICAgIGp1bXAobm90VGFrZW4pOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCkBAIC0xNTQ2
LDcgKzE1NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIp
LCBub2RlVXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7Ci0gICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOworICAgIGp1bXAodGFrZW4sIEZvcmNlSnVt
cCk7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xNTU3LDggKzE1
NTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CiAgICAg
fQogCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CkBAIC0xNTc5LDkgKzE1NzUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgICAgICBub3RUYWtl
biA9IHRtcDsKICAgICAgICAgfQogCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoY29uZGl0aW9uLCB2YWx1ZS5ncHIoKSwgVHJ1c3RlZEltbTMyKDEpKSwgdGFrZW4pOwotICAg
ICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlv
biwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0zMigxKSwgdGFrZW4pOworICAgICAgICBqdW1wKG5v
dFRha2VuKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkgewpAQCAtMTYwMCwxNSArMTU5NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUmIG5vCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSksIHRha2VuKTsKKyAgICAgICAgICAg
IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgdGFrZW4pOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZU5vblplcm8odmFsdWUuZnByKCksIHNjcmF0Y2gu
ZnByKCkpLCB0YWtlbik7CisgICAgICAgICAgICBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLmZw
cigpLCBzY3JhdGNoLmZwcigpLCB0YWtlbik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAg
CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVsc2UgewpAQCAtMTYy
NiwxNyArMTYyMCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5v
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CiAKICAgICAgICAgZmFzdFBhdGgubGluaygmbV9qaXQp
OwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJv
LCB2YWx1ZVBheWxvYWRHUFIpLCBub3RUYWtlbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIHRha2VuKTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCB2
YWx1ZVBheWxvYWRHUFIsIG5vdFRha2VuKTsKKyAgICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1w
KTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVy
dEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
Uik7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywg
cmVzdWx0R1BSKSwgdGFrZW4pOwotICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAx
KSkKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAg
ICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsK
KyAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgIH0KQEAgLTI2MDAsOCAr
MjU5Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAg
IGNhc2UgREZHOjpKdW1wOiB7CiAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2Vu
QmxvY2tJbmRleCgpOwotICAgICAgICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKKyAgICAgICAganVtcCh0YWtl
bik7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMjYyMiw5ICsyNjE0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMy
KGNvbmRpdGlvbiwgb3AuZ3ByKCkpLCB0YWtlbik7Ci0gICAgICAgICAgICBpZiAobm90VGFrZW4g
IT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7CisgICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCBvcC5ncHIo
KSwgdGFrZW4pOworICAgICAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxMDc1MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTEsMjAgKzYxMSwxOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIG5vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1
bHRHUFIpOwotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChpbnZlcnQgPyBKSVRDb21w
aWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRha2VuKTsKKyAgICBicmFu
Y2hUZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJv
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSwgdGFrZW4pOwogICAgIAogICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgp
KSkgewotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAg
IGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxp
bmsoJm1faml0KTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFn
Qml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5j
aFB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWws
IHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oVmFsdWVOdWxsKSkpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaFB0cihpbnZlcnQgPyBK
SVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSksIHRha2VuKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsg
MSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICBqdW1w
KG5vdFRha2VuKTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlTnVsbChOb2RlJiBub2RlLCBOb2RlVXNlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQpAQCAtNjgy
LDcgKzY4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5j
dGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKIAotICAgICAgICBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2Vu
KTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiwg
dGFrZW4pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
YXJnMik7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC02OTUs
MTAgKzY5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAg
ICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIpLCB0
YWtlbik7CisgICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsK
ICAgICAKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkp
IHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgICAgICBqdW1wKG5v
dFRha2VuLCBGb3JjZUp1bXApOwogICAgIAogICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9q
aXQpOwogICAgIApAQCAtNzA2LDEyICs3MDUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaAogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlv
biwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2Vu
KTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRH
UFIsIHRha2VuKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChub3RUYWtlbiAhPSAobV9i
bG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cisg
ICAganVtcChub3RUYWtlbik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKQEAg
LTc5OCwxMyArNzk2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3du
Q2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQg
bHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUg
c2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4K
LSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFy
ZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKKyAgICAgICAgYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90
VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQub3JQdHIoYXJnMUdQUiwgYXJn
MkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCkBAIC04MTIsMTEgKzgxMCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIAogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBudW1iZXJDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwog
ICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGludmVydCA/IEpJVENv
bXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiks
IHRha2VuKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAg
ICAgICBicmFuY2gzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxl
cjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKKyAgICAgICAganVtcChub3RUYWtl
biwgRm9yY2VKdW1wKTsKICAgICAgICAgCiAgICAgICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFs
LCBhcmcxR1BSLCBhcmcyR1BSKSwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CisgICAgICAg
IGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/
IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAgICAgICAgbnVtYmVyQ2FzZS5saW5rKCZt
X2ppdCk7CiAgICAgICAgIApAQCAtODI0LDExICs4MjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENv
bXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1
bHRHUFIsIHRha2VuKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2Nr
ICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICBq
dW1wKG5vdFRha2VuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQpAQCAtMTYzMyw3ICsx
NjMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAg
ICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwotICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2Vu
KTsKKyAgICBqdW1wKHRha2VuLCBGb3JjZUp1bXApOwogICAgIAogICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwogICAgIApAQCAtMTY0Miw4ICsxNjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmlu
ZGV4KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KFZhbHVlTnVsbCkpKSk7CiAgICAgfQotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEp
KQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAganVtcChu
b3RUYWtlbik7CiAgICAgCiAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQpAQCAtMTY2
Niw5ICsxNjYyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
ICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3Rl
ZEltbTMyKHRydWUpKSwgdGFrZW4pOwotICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sg
KyAxKSkKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAg
ICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVl
KSwgdGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgCiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CkBAIC0xNjg3LDE1ICsxNjgy
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMy
KGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDogTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHZhbHVlLmdwcigpKSwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGludmVydCA/
IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDogTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlLmdw
cigpLCB0YWtlbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
RG91YmxlTm9uWmVybyh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSksIHRha2VuKTsKKyAgICAg
ICAgICAgIGJyYW5jaERvdWJsZU5vblplcm8odmFsdWUuZnByKCksIHNjcmF0Y2guZnByKCksIHRh
a2VuKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vdFRha2VuICE9IChtX2Js
b2NrICsgMSkpCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7
CisgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgIH0gZWxzZSB7CkBAIC0xNzA1LDE4ICsxNjk5LDE4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgYm9vbCBwcmVkaWN0
Qm9vbGVhbiA9IGlzQm9vbGVhblByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbihub2RlLmNo
aWxkMSgpKSk7CiAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewotICAgICAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOworICAgICAgICAgICAg
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwor
ICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0
YWtlbik7CiAKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAg
dmFsdWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpLCBub3RUYWtlbik7Ci0g
ICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCB0YWtl
bik7CisgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwg
bm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRha2VuKTsK
ICAgICAKICAgICAgICAgICAgIGlmICghcHJlZGljdEJvb2xlYW4pIHsKLSAgICAgICAgICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxz
ZSkpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOworICAgICAgICAg
ICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRh
a2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHRha2VuKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHZhbHVl
LnVzZSgpOwpAQCAtMTcyNSw5ICsxNzE5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJy
YW5jaChOb2RlJiBubwogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1
ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CiAgICAgICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAgCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIpLCB0YWtl
bik7Ci0gICAgICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAg
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgICAgICBi
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwor
ICAgICAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpA
QCAtMjYzMCw4ICsyNjIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayAr
IDEpKQotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOworICAgICAg
ICBqdW1wKHRha2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0yNjUyLDkgKzI2NDQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hUZXN0MzIoY29uZGl0aW9uLCBvcC5ncHIoKSksIHRha2VuKTsKLSAgICAgICAgICAgIGlm
IChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRp
b24sIG9wLmdwcigpLCB0YWtlbik7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTA3NTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMywxMCArODAz
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YgogICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIAotICAgIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZGl0aW9uLCBvcDEuZnByKCksIG9wMi5mcHIoKSks
IHRha2VuKTsKLSAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgIGJyYW5jaERvdWJsZShj
b25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpLCB0YWtlbik7CisgICAganVtcChub3RUYWtl
bik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFs
aXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0aW9uQ2hlY2spCkBAIC04MzUs
OSArODMzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAg
IGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BS
LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoY2xhc3NJbmZvKSkpOwogICAgIAotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29u
ZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKLSAgICBpZiAobm90VGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwor
ICAgIGJyYW5jaFB0cihjb25kaXRpb24sIG9wMUdQUiwgb3AyR1BSLCB0YWtlbik7CisgICAganVt
cChub3RUYWtlbik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUlu
dGVnZXJCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQpAQCAtODU4LDIwICs4NTUsMTgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZQogICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICBpbnQzMl90IGlt
bSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMy
KGltbSksIG9wMi5ncHIoKSksIHRha2VuKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZGl0aW9uLCBK
SVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigpLCB0YWtlbik7CiAgICAgfSBlbHNlIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIGlu
dDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsK
LSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBK
SVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZGl0
aW9uLCBvcDEuZ3ByKCksIEpJVENvbXBpbGVyOjpJbW0zMihpbW0pLCB0YWtlbik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9w
MS5ncHIoKSwgb3AyLmdwcigpKSwgdGFrZW4pOworICAgICAgICBicmFuY2gzMihjb25kaXRpb24s
IG9wMS5ncHIoKSwgb3AyLmdwcigpLCB0YWtlbik7CiAgICAgfQogCi0gICAgLy8gQ2hlY2sgZm9y
IGZhbGwgdGhyb3VnaCwgb3RoZXJ3aXNlIHdlIG5lZWQgdG8ganVtcC4KLSAgICBpZiAobm90VGFr
ZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90
VGFrZW4pOworICAgIGp1bXAobm90VGFrZW4pOwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgpAQCAtOTU3LDYgKzk1
MiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgCiAg
ICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAg
ICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigpOworICAgIAorICAgIGlmIChERkdf
RU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04pIHsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgdmVyaWZpY2F0aW9uU3VjY2VlZGVkID0KKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIEltbTMyKG1fYmxvY2spKTsKKyAgICAg
ICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgICAgICB2ZXJpZmljYXRpb25TdWNjZWVkZWQubGlu
aygmbV9qaXQpOworICAgIH0KIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRleCA8IGJsb2NrLmVu
ZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0gYXQobV9jb21waWxl
SW5kZXgpOwpAQCAtMTIxOCw2ICsxMjIwLDkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSgpCiB7CiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAKKyAgICBpZiAoREZHX0VOQUJMRV9F
REdFX0NPREVfVkVSSUZJQ0FUSU9OKQorICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKDApLCBHUFJJ
bmZvOjpyZWdUMCk7CisKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBmb3IgKG1f
YmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9i
bG9jaykKICAgICAgICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7
CkBAIC0xMjI1LDEzICsxMjMwLDM3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRy
aWVzKCkKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2smIGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07
CisgICAgICAgIGlmICghYmxvY2suaXNPU1JUYXJnZXQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1IgZW50cnkg
dHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKKyAgICAgICAgLy8gdmVyaWZpY2F0aW9u
LiBCdXQgaW4gdGhlIGZ1dHVyZSwgd2UnbGwgbmVlZCB0aGlzIGZvciBvdGhlciB0aGluZ3MgYXMg
d2VsbCAobGlrZQorICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZ2xvYmFsIHJlZyBhbGxvYykuCisg
ICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgT1NSIGVudHJ5IHRyYW1wb2xpbgorICAgICAgICBp
ZiAoIURGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikgeworICAgICAgICAgICAgbV9v
c3JFbnRyeUhlYWRzLmFwcGVuZChtX2Jsb2NrSGVhZHNbYmxvY2tJbmRleF0pOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3NyRW50cnlIZWFk
cy5hcHBlbmQobV9qaXQubGFiZWwoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIoYmxvY2tJ
bmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhtX2Js
b2NrSGVhZHNbYmxvY2tJbmRleF0sICZtX2ppdCk7CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogeworICAgIHVu
c2lnbmVkIG9zckVudHJ5SW5kZXggPSAwOwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1tibG9ja0luZGV4XTsKICAgICAgICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQotICAgICAg
ICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2ssIG1fYmxvY2tIZWFkc1tibG9ja0luZGV4
XSwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywg
bV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KKyAg
ICBBU1NFUlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKIH0KIAog
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29u
c3QgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlKQpAQCAtMjQyOCwyNCArMjQ1NywyMyBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAgICAgICAgIH0KIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9u
LCBvcDEuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKSwgdGFrZW4pOworICAgICAgICBicmFu
Y2hQdHIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpLCB0YWtlbik7
CiAjZWxzZQogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAg
ICAgICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CiAgICAgICAgIGlmIChjb25kaXRp
b24gPT0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSB7CiAgICAgICAgICAgICAvLyBEcm9wIGRvd24g
aWYgbm90IGVxdWFsLCBnbyBlbHNld2hlcmUgaWYgZXF1YWwuCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3RhbnQudGFnKCkpKTsK
LSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC5wYXlsb2FkKCkp
KSwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBw
YXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgdGFr
ZW4pOwogICAgICAgICAgICAgbm90RXF1YWwubGluaygmbV9qaXQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gRHJvcCBkb3duIGlmIGVxdWFsLCBnbyBlbHNlaHdlcmUgaWYgbm90
IGVxdWFsLgotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3RhbnQudGFn
KCkpKSwgdGFrZW4pOwotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgcGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNv
bnN0YW50LnBheWxvYWQoKSkpLCB0YWtlbik7CisgICAgICAgICAgICBicmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvbnN0YW50
LnRhZygpKSwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBwYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3RhbnQucGF5bG9h
ZCgpKSwgdGFrZW4pOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGlmIChu
b3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgbm90VGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgCiAgICAg
ICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTA3NTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDcgQEAgcHVibGljOgogICAgIFNw
ZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJik7CiAKICAgICBib29sIGNvbXBpbGUoKTsKKyAgICB2
b2lkIGNyZWF0ZU9TUkVudHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZm
ZXImKTsKIAogICAgIE5vZGUmIGF0KE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0xNDY2LDYgKzE0
NjcsMTYxIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICNlbmRpZgor
ICAgIAorICAgIHZvaWQgYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24g
Y29uZCwgRlBSUmVnIGxlZnQsIEZQUlJlZyByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikK
KyAgICB7CisgICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91YmxlKGNvbmQsIGxlZnQs
IHJpZ2h0KSwgZGVzdGluYXRpb24pOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OmludmVydChjb25k
KSwgbGVmdCwgcmlnaHQpOworICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRh
a2VuLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBicmFuY2hEb3VibGVOb25a
ZXJvKEZQUlJlZyB2YWx1ZSwgRlBSUmVnIHNjcmF0Y2gsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CisgICAgeworICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCisg
ICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZU5vblplcm8odmFs
dWUsIHNjcmF0Y2gpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaERvdWJsZVplcm9Pck5hTih2YWx1ZSwgc2Ny
YXRjaCk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJy
YW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygm
bV9qaXQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgorICAgIHZvaWQgYnJhbmNoMzIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0
dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOworICAg
ICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICB2b2lk
IGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUs
IFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChK
SVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
aGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24p
OworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUsIG1hc2spOworICAg
ICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGJyYW5jaFRlc3Qz
MihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXgg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0
aWJsZShjb25kKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChk
ZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRl
c3QzMihjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpp
bnZlcnQoY29uZCksIHZhbHVlKTsKKyAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsK
KyAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOworICAgICAgICBu
b3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+CisgICAgdm9pZCBicmFuY2hQdHIoSklUQ29tcGlsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZCwgbGVmdCwg
cmlnaHQpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RUYWtlbiA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBs
ZWZ0LCByaWdodCk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4u
bGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgorICAgIHZvaWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB7
CisgICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSwg
bWFzayksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQp
LCB2YWx1ZSwgbWFzayk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFr
ZW4ubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFQgdmFsdWUsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQo
SklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJsZShjb25kKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRk
QnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5j
aFRlc3RQdHIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUpOworICAgICAgICBlbWl0
RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBk
ZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICB2b2lkIGJyYW5jaFRl
c3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBC
bG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVy
Ojppc0ludmVydGlibGUoY29uZCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNv
ZGVUb0VtaXQoZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hUZXN0OChjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDgo
SklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUsIG1hc2spOworICAgICAgICBlbWl0RWRn
ZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0
aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikK
KyAgICB7CisgICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFs
dWUpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZh
bHVlKTsKKyAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOworICAgICAgICBub3RUYWtlbi5saW5rKCZt
X2ppdCk7CisgICAgfQorICAgIAorICAgIGVudW0gRmFsbFRocm91Z2hNb2RlIHsKKyAgICAgICAg
QXRGYWxsVGhyb3VnaFBvaW50LAorICAgICAgICBGb3JjZUp1bXAKKyAgICB9OworICAgIHZvaWQg
anVtcChCbG9ja0luZGV4IGRlc3RpbmF0aW9uLCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hN
b2RlID0gQXRGYWxsVGhyb3VnaFBvaW50KQorICAgIHsKKyAgICAgICAgaWYgKGhhdmVFZGdlQ29k
ZVRvRW1pdChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRp
b24pOworICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbV9ibG9jayArIDEKKyAgICAgICAgICAg
ICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAg
ICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgaGF2ZUVkZ2VDb2RlVG9FbWl0KEJsb2NrSW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gREZHX0VOQUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9O
OworICAgIH0KKyAgICB2b2lkIGVtaXRFZGdlQ29kZShCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKCFERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04pCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIoZGVzdGluYXRpb24p
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgfQogCiAgICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewpA
QCAtMTY5OSw2ICsxODU1LDggQEAgcHJpdmF0ZToKICAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4g
bV9mcHJzOwogCiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRz
OworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fb3NyRW50cnlIZWFkczsKKyAg
ICAKICAgICBzdHJ1Y3QgQnJhbmNoUmVjb3JkIHsKICAgICAgICAgQnJhbmNoUmVjb3JkKE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgICAgICAg
ICA6IGp1bXAoanVtcCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126816</attachid>
            <date>2012-02-13 13:26:06 -0800</date>
            <delta_ts>2012-02-13 15:54:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>landingpads_patch_2.diff</filename>
            <type>text/plain</type>
            <size>41798</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTAyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIGVtaXQgY29kZSBvbiBjb250cm9sIGZsb3cgZWRnZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGdldHMgdXMgYSBmZXcgc3RlcHMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8gcGVyZm9ybSBnbG9i
YWwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwKKyAgICAgICAgYnkgYWxsb3dpbmcgdXMgdG8gaGF2ZSBs
YW5kaW5nIHBhZHMgb24gY29udHJvbCBmbG93IGVkZ2VzLiBUaGlzIHdpbGwgbGV0IHVzIHJlc2h1
ZmZsZQorICAgICAgICByZWdpc3RlcnMgaWYgaXQgaGFwcGVucyB0byBiZSBuZWNlc3NhcnkgZHVl
IHRvIGRpZmZlcmVudCByZWcgYWxsb2MgZGVjaXNpb25zIGluCisgICAgICAgIGRpZmZlcmVuIGJs
b2Nrcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBpbnRyb2R1Y2VzIHRoZSBub3Rpb24g
b2YgYSBsYW5kaW5nIHBhZCBmb3IgT1NSIGVudHJ5LCB3aGljaCB3aWxsIGFsbG93IHVzCisgICAg
ICAgIHRvIGVtaXQgY29kZSB0aGF0IHBsYWNlcyBkYXRhIGludG8gcmVnaXN0ZXJzIHdoZW4gd2Un
cmUgZW50ZXJpbmcgaW50byB0aGUgREZHIGZyb20KKyAgICAgICAgdGhlIG9sZCBKSVQuCisgICAg
ICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSB2ZXJpZmljYXRp
b24gbW9kZSB0aGF0IGNoZWNrcyB0aGF0IHRoZSBsYW5kaW5nIHBhZHMKKyAgICAgICAgYXJlIGFj
dHVhbGx5IGVtaXR0ZWQgYW5kIGRvIGFjdHVhbGx5IHdvcmsgYXMgYWR2ZXJ0aXNlZC4gV2hlbiB2
ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQsCisgICAgICAgIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBi
ZWhhdmlvci4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoTWFjcm9Bc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGVOb25aZXJvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoMzIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpicmFuY2hQdHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpicmFuY2hUZXN0UHRyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6YnJhbmNoVGVzdDgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aGF2ZUVkZ2VDb2RlVG9FbWl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEVkZ2VDb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisKIDIwMTItMDItMTMgIENoYW8teWluZyBGdSAgPGZ1QG1pcHMuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBNSVBTIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTA3NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2MyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2hQdHI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJCYXNlOjpicmFuY2hUZXN0UHRyOwogI2VuZGlmCi0KKyAgICB1c2luZyBNYWNyb0Fz
c2VtYmxlckJhc2U6OmludmVydDsKKyAgICAKKyAgICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIGlu
dmVydChEb3VibGVDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkg
eworICAgICAgICBjYXNlIERvdWJsZUVxdWFsOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisgICAgICAgIGNhc2UgRG91YmxlTm90RXF1YWw6CisgICAgICAg
ICAgICByZXR1cm4gRG91YmxlRXF1YWxPclVub3JkZXJlZDsKKyAgICAgICAgY2FzZSBEb3VibGVH
cmVhdGVyVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZDsKKyAgICAgICAgY2FzZSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw6CisgICAgICAg
ICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDsKKyAgICAgICAgY2FzZSBEb3Vi
bGVMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZDsKKyAgICAgICAgY2FzZSBEb3VibGVMZXNzVGhhbk9yRXF1YWw6CisgICAgICAg
ICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZDsKKyAgICAgICAgY2FzZSBE
b3VibGVFcXVhbE9yVW5vcmRlcmVkOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZU5vdEVxdWFs
OworICAgICAgICBjYXNlIERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlRXF1YWw7CisgICAgICAgIGNhc2UgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGVMZXNzVGhhbk9yRXF1YWw7CisgICAgICAg
IGNhc2UgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlTGVzc1RoYW47CisgICAgICAgIGNhc2UgRG91YmxlTGVzc1RoYW5PclVub3Jk
ZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAg
ICAgIGNhc2UgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlR3JlYXRlclRoYW47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpc0ludmVydGlibGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBaZXJvOgorICAgICAgICBjYXNlIE5vblplcm86
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUmVzdWx0
Q29uZGl0aW9uIGludmVydChSZXN1bHRDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoY29uZCkgeworICAgICAgICBjYXNlIFplcm86CisgICAgICAgICAgICByZXR1cm4gTm9u
WmVybzsKKyAgICAgICAgY2FzZSBOb25aZXJvOgorICAgICAgICAgICAgcmV0dXJuIFplcm87Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNlIGJ1
aWxkcy4KKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIFBsYXRmb3JtIGFnbm9zdGljIG9udmVu
aWVuY2UgZnVuY3Rpb25zLAogICAgIC8vIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZiBvdGhlciBtYWNy
byBhc3NlbWJseSBtZXRob2RzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxMDc1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBACiAjZGVmaW5lIERGR19FTkFC
TEVfU1VDQ0VTU19TVEFUUyAwCiAvLyBVc2VkIHRvIGVuYWJsZSBjb25kaXRpb25hbGx5IHN1cHBv
cnRlZCBvcGNvZGVzIHRoYXQgY3VycmVudGx5IHJlc3VsdCBpbiBwZXJmb3JtYW5jZSByZWdyZXNz
aW9ucy4KICNkZWZpbmUgREZHX0VOQUJMRV9SRVNUUklDVElPTlMgMQorLy8gRW5hYmxlIHZlcmlm
aWNhdGlvbiB0aGF0IHRoZSBERkcgaXMgYWJsZSB0byBpbnNlcnQgY29kZSBmb3IgY29udHJvbCBm
bG93IGVkZ2VzLgorI2RlZmluZSBERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04gMAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMDc1OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEyLDYgKzIxMiw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29kZSYg
ZW50cnkKICAgICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGls
ZUJvZHkoc3BlY3VsYXRpdmUpOwogCisgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5l
cyBpZiBuZWNlc3NhcnkuCisgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOworCiAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
KTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwogICAgIHNwZWN1bGF0aXZlLmxpbmtPU1JFbnRyaWVz
KGxpbmtCdWZmZXIpOwpAQCAtMjY5LDYgKzI3Miw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbihKSVRDb2QKICAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwogICAg
IG1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBq
dW1wKGZyb21Bcml0eUNoZWNrKTsKKyAgICAKKyAgICAvLyBDcmVhdGUgT1NSIGVudHJ5IHRyYW1w
b2xpbmVzIGlmIG5lY2Vzc2FyeS4KKyAgICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7
CiAKIAogICAgIC8vID09PSBMaW5rID09PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMDc1OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MzQsMjEgKzYzNCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwot
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVy
byA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRha2VuKTsKKyAgICBicmFuY2hUZXN0OChp
bnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgdGFr
ZW4pOwogICAgIAogICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgewotICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIGp1bXAobm90
VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0
KTsKICAgICAgICAgLy8gbnVsbCBvciB1bmRlZmluZWQ/CiAgICAgICAgIENPTVBJTEVfQVNTRVJU
KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9PSBKU1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmlu
ZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7CiAgICAgICAgIG1faml0Lm1vdmUoYXJnVGFnR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGludmVydCA/IEpJVENvbXBp
bGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSwgdGFrZW4pOworICAgICAgICBicmFu
Y2gzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWws
IHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwg
dGFrZW4pOwogICAgIH0KICAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkK
LSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgIGp1bXAobm90
VGFrZW4pOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVO
dWxsKE5vZGUmIG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCkBAIC03MDgsNyAr
NzA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9u
LCByZXN1bHRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcy
UGF5bG9hZEdQUik7CiAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjYWxs
UmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaFRlc3Qz
MihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtNzIxLDEwICs3MjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcyVGFnR1BSLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgIAotICAgICAgICBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BS
KSwgdGFrZW4pOworICAgICAgICBicmFuY2gzMihjb25kLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBh
eWxvYWRHUFIsIHRha2VuKTsKICAgICAKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4
KCkpKSB7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cisg
ICAgICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgIAogICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIApAQCAtNzMyLDEyICs3MzEsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQ
UiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4p
OworICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQ
UiwgdGFrZW4pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Js
b2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAg
ICBqdW1wKG5vdFRha2VuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQpAQCAt
ODI1LDEzICs4MjMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVw
aAogICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25vd25D
ZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBs
dWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBz
YW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJn
MVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSKSwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7
CisgICAgICAgIGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBh
cmcyUGF5bG9hZEdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRQYXlsb2Fk
R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRH
UFIpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBK
SVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRQYXlsb2FkR1BS
KSwgdGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olpl
cm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0UGF5bG9hZEdQUiwgdGFrZW4pOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRocyBmb3IgdHdvQ2VsbHMs
IG51bWJlciBldGMuCiAKQEAgLTgzOSwxMSArODM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BS
LCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6
Ok5vblplcm8sIHJlc3VsdFBheWxvYWRHUFIpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1
bHRQYXlsb2FkR1BSLCB0YWtlbik7CiAgICAgfQogICAgIAotICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7
CisgICAganVtcChub3RUYWtlbik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBib29sIGludmVydCkKQEAgLTE1
NDYsNyArMTU0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiksIG5vZGVVc2UsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9P
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKLSAg
ICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CisgICAganVtcCh0YWtlbiwgRm9yY2VK
dW1wKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTE1NTcsOCAr
MTU1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKICAg
ICB9CiAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgIGp1bXAobm90VGFrZW4pOwogICAgIAog
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIH0KQEAgLTE1NzksOSArMTU3NSw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIG5vdFRh
a2VuID0gdG1wOwogICAgICAgICB9CiAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRl
c3QzMihjb25kaXRpb24sIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoMSkpLCB0YWtlbik7Ci0g
ICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0
aW9uLCB2YWx1ZS5ncHIoKSwgVHJ1c3RlZEltbTMyKDEpLCB0YWtlbik7CisgICAgICAgIGp1bXAo
bm90VGFrZW4pOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpKSB7CkBAIC0xNjAwLDE1ICsxNTk1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRC
cmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDog
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpKSwgdGFrZW4pOworICAgICAgICAg
ICAgYnJhbmNoVGVzdDMyKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDogTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCB0YWtlbik7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZS5mcHIoKSwgc2NyYXRj
aC5mcHIoKSksIHRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaERvdWJsZU5vblplcm8odmFsdWUu
ZnByKCksIHNjcmF0Y2guZnByKCksIHRha2VuKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAg
ICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgIH0gZWxzZSB7CkBAIC0x
NjI2LDE3ICsxNjIwLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYg
bm8KICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKIAogICAgICAgICBmYXN0UGF0aC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olpl
cm8sIHZhbHVlUGF5bG9hZEdQUiksIG5vdFRha2VuKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0
Lmp1bXAoKSwgdGFrZW4pOworICAgICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IHZhbHVlUGF5bG9hZEdQUiwgbm90VGFrZW4pOworICAgICAgICBqdW1wKHRha2VuLCBGb3JjZUp1
bXApOwogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252
ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2Fk
R1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJv
LCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayAr
IDEpKQotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAg
ICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4p
OworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQpAQCAtMjYwMCw4
ICsyNTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAg
ICAgY2FzZSBERkc6Okp1bXA6IHsKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQotICAg
ICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOworICAgICAgICBqdW1wKHRh
a2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0yNjIyLDkgKzI2MTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoY29uZGl0aW9uLCBvcC5ncHIoKSksIHRha2VuKTsKLSAgICAgICAgICAgIGlmIChub3RUYWtl
biAhPSAobV9ibG9jayArIDEpKQotICAgICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1w
KCksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIG9wLmdw
cigpLCB0YWtlbik7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDEwNzU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMSwyMCArNjExLDE5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGFyZ0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
c3VsdEdQUik7Ci0gICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGludmVydCA/IEpJVENv
bXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFrZW4pOworICAgIGJy
YW5jaFRlc3Q4KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblpl
cm8sIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpLCB0YWtlbik7CiAgICAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4
KCkpKSB7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAg
ICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICAgICAgCiAgICAgICAgIG5vdENlbGwu
bGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5U
YWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVh
bCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihWYWx1ZU51bGwpKSksIHRha2VuKTsKKyAgICAgICAgYnJhbmNoUHRyKGludmVydCA/
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51
bGwpKSwgdGFrZW4pOwogICAgIH0KICAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sg
KyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgIGp1
bXAobm90VGFrZW4pOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCkBAIC02
ODIsNyArNjgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1
bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwogCi0gICAgICAgIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFr
ZW4pOworICAgICAgICBicmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BS
LCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBhcmcyKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTY5
NSwxMCArNjk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
ICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiks
IHRha2VuKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4p
OwogICAgIAogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGp1bXAo
bm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CiAgICAgCkBAIC03MDYsMTIgKzcwNSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0
aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFr
ZW4pOworICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3Vs
dEdQUiwgdGFrZW4pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5vdFRha2VuICE9ICht
X2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsK
KyAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQpA
QCAtNzk4LDEzICs3OTYsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25v
d25DZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgLy8gc2VlIGlmIHdlIGdl
dCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRo
ZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFs
LgotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICBi
cmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCBpbnZlcnQgPyBu
b3RUYWtlbiA6IHRha2VuKTsKICAgICAgICAgCiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNo
KG1faml0LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBp
bGVyOjpOb25aZXJvLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRH
UFIsIHRha2VuKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBh
cmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKQEAgLTgxMiwxMSArODEwLDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG51bWJlckNhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBp
bGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CiAgICAgICAgIAotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoaW52ZXJ0ID8gSklU
Q29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BS
KSwgdGFrZW4pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cisg
ICAgICAgIGJyYW5jaDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBp
bGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4pOworICAgICAgICBqdW1wKG5vdFRh
a2VuLCBGb3JjZUp1bXApOwogICAgICAgICAKICAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1
YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKKyAgICAg
ICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0
ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBudW1iZXJDYXNlLmxpbmso
Jm1faml0KTsKICAgICAgICAgCkBAIC04MjQsMTEgKzgyMiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklU
Q29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAgICAgICAgYnJhbmNoVGVz
dDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdEdQUiwgdGFrZW4pOwogICAgIH0KICAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxv
Y2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAg
IGp1bXAobm90VGFrZW4pOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCkBAIC0xNjMzLDcg
KzE2MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwog
ICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihjbGFzc0luZm8pKSk7Ci0gICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFr
ZW4pOworICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgCiAgICAgbm90Q2VsbC5saW5r
KCZtX2ppdCk7CiAgICAgCkBAIC0xNjQyLDggKzE2MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Uu
aW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oVmFsdWVOdWxsKSkpKTsKICAgICB9Ci0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsg
MSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICBqdW1w
KG5vdFRha2VuKTsKICAgICAKICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CkBAIC0x
NjY2LDkgKzE2NjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5v
CiAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25kaXRpb24sIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIodHJ1ZSkpLCB0YWtlbik7Ci0gICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9j
ayArIDEpKQotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwor
ICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRy
dWUpLCB0YWtlbik7CisgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKQEAgLTE2ODcsMTUgKzE2
ODIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6Olplcm8gOiBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWUuZ3ByKCkpLCB0YWtlbik7CisgICAgICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gTWFjcm9Bc3NlbWJsZXI6Olplcm8gOiBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWUu
Z3ByKCksIHRha2VuKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBGUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hEb3VibGVOb25aZXJvKHZhbHVlLmZwcigpLCBzY3JhdGNoLmZwcigpKSwgdGFrZW4pOworICAg
ICAgICAgICAgYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSwg
dGFrZW4pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2Vu
KTsKKyAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNlIHsKQEAgLTE3MDUsMTggKzE2OTksMTggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBib29sIHByZWRp
Y3RCb29sZWFuID0gaXNCb29sZWFuUHJlZGljdGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGUu
Y2hpbGQxKCkpKTsKICAgICAKICAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7Ci0gICAgICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YWtlbik7CisgICAgICAgICAg
ICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7
CisgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHRha2VuKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICB2YWx1ZS51c2UoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsK
LSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIHRh
a2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkp
LCBub3RUYWtlbik7CisgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4p
OwogICAgIAogICAgICAgICAgICAgaWYgKCFwcmVkaWN0Qm9vbGVhbikgewotICAgICAgICAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6Oklt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YWtlbik7CisgICAgICAg
ICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90
VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgdGFrZW4pOwogICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgdmFs
dWUudXNlKCk7CkBAIC0xNzI1LDkgKzE3MTksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1Zh
bHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiksIHRh
a2VuKTsKLSAgICAgICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAg
ICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgICAg
IGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7
CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CkBAIC0yNjMwLDggKzI2MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAKICAgICBjYXNlIERGRzo6SnVtcDogewogICAgICAgICBCbG9ja0luZGV4IHRha2Vu
ID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgaWYgKHRha2VuICE9IChtX2Jsb2Nr
ICsgMSkpCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CisgICAg
ICAgIGp1bXAodGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTI2NTIsOSArMjY0NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFRlc3QzMihjb25kaXRpb24sIG9wLmdwcigpKSwgdGFrZW4pOwotICAgICAgICAgICAg
aWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgICAgICAgICAgYWRkQnJhbmNo
KG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRp
dGlvbiwgb3AuZ3ByKCksIHRha2VuKTsKKyAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMDc1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDEwICs4
MDMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgCi0gICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaERvdWJsZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigp
KSwgdGFrZW4pOwotICAgIAotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgYnJhbmNoRG91Ymxl
KGNvbmRpdGlvbiwgb3AxLmZwcigpLCBvcDIuZnByKCksIHRha2VuKTsKKyAgICBqdW1wKG5vdFRh
a2VuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8sIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25DaGVjaykKQEAgLTgz
NSw5ICs4MzMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAg
ICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1f
dHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJH
UFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihjbGFzc0luZm8pKSk7CiAgICAgCi0gICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihj
b25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4pOwotICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7
CisgICAgYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIsIHRha2VuKTsKKyAgICBq
dW1wKG5vdFRha2VuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
SW50ZWdlckJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRD
b21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCkBAIC04NTgsMjAgKzg1NSwx
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgIGludDMyX3Qg
aW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1t
MzIoaW1tKSwgb3AyLmdwcigpKSwgdGFrZW4pOworICAgICAgICBicmFuY2gzMihjb25kaXRpb24s
IEpJVENvbXBpbGVyOjpJbW0zMihpbW0pLCBvcDIuZ3ByKCksIHRha2VuKTsKICAgICB9IGVsc2Ug
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
aW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkp
OwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCks
IEpJVENvbXBpbGVyOjpJbW0zMihpbW0pKSwgdGFrZW4pOworICAgICAgICBicmFuY2gzMihjb25k
aXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIHRha2VuKTsKICAgICB9
IGVsc2UgewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwg
b3AxLmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlv
biwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHRha2VuKTsKICAgICB9CiAKLSAgICAvLyBDaGVjayBm
b3IgZmFsbCB0aHJvdWdoLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBqdW1wLgotICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBu
b3RUYWtlbik7CisgICAganVtcChub3RUYWtlbik7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCkBAIC05NTcsNiAr
OTUyLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAK
ICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
ICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2RlT3JpZ2luKCk7CisgICAgCisgICAgaWYgKERG
R19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikgeworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCB2ZXJpZmljYXRpb25TdWNjZWVkZWQgPQorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgSW1tMzIobV9ibG9jaykpOworICAg
ICAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgICAgIHZlcmlmaWNhdGlvblN1Y2NlZWRlZC5s
aW5rKCZtX2ppdCk7CisgICAgfQogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2su
ZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChtX2NvbXBp
bGVJbmRleCk7CkBAIC0xMjE4LDYgKzEyMjAsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKCkKIHsKICAgICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKIAorICAgIGlmIChERkdfRU5BQkxF
X0VER0VfQ09ERV9WRVJJRklDQVRJT04pCisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIoMCksIEdQ
UkluZm86OnJlZ1QwKTsKKwogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwogICAgIGZvciAo
bV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytt
X2Jsb2NrKQogICAgICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
KTsKQEAgLTEyMjUsMTMgKzEyMzAsMzcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVu
dHJpZXMoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4
XTsKKyAgICAgICAgaWYgKCFibG9jay5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IG5lZWQgdG8gY3JlYXRlIE9TUiBlbnRy
eSB0cmFtcG9saW5lcyB3aGVuIHVzaW5nIGVkZ2UgY29kZQorICAgICAgICAvLyB2ZXJpZmljYXRp
b24uIEJ1dCBpbiB0aGUgZnV0dXJlLCB3ZSdsbCBuZWVkIHRoaXMgZm9yIG90aGVyIHRoaW5ncyBh
cyB3ZWxsIChsaWtlCisgICAgICAgIC8vIHdoZW4gd2UgaGF2ZSBnbG9iYWwgcmVnIGFsbG9jKS4K
KyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCBPU1IgZW50cnkgdHJhbXBvbGluCisgICAgICAg
IGlmICghREZHX0VOQUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9OKSB7CisgICAgICAgICAgICBt
X29zckVudHJ5SGVhZHMuYXBwZW5kKG1fYmxvY2tIZWFkc1tibG9ja0luZGV4XSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vc3JFbnRyeUhl
YWRzLmFwcGVuZChtX2ppdC5sYWJlbCgpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihibG9j
a0luZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKG1f
YmxvY2tIZWFkc1tibG9ja0luZGV4XSwgJm1faml0KTsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CisgICAg
dW5zaWduZWQgb3NyRW50cnlJbmRleCA9IDA7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdOwogICAgICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCi0gICAg
ICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywgbV9ibG9ja0hlYWRzW2Jsb2NrSW5k
ZXhdLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJsb2Nr
LCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAgICAgfQor
ICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOwogfQog
CiBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihj
b25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCkBAIC0yNDI4LDI0ICsyNDU3LDIzIEBAIGJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICAgICAgfQogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kaXRp
b24sIG9wMS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpLCB0YWtlbik7CisgICAgICAgIGJy
YW5jaFB0cihjb25kaXRpb24sIG9wMS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSksIHRha2Vu
KTsKICNlbHNlCiAgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsK
ICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKICAgICAgICAgaWYgKGNvbmRp
dGlvbiA9PSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpIHsKICAgICAgICAgICAgIC8vIERyb3AgZG93
biBpZiBub3QgZXF1YWwsIGdvIGVsc2V3aGVyZSBpZiBlcXVhbC4KICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC50YWcoKSkp
OwotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgcGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvbnN0YW50LnBheWxvYWQo
KSkpLCB0YWtlbik7CisgICAgICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCB0
YWtlbik7CiAgICAgICAgICAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBEcm9wIGRvd24gaWYgZXF1YWwsIGdvIGVsc2Vod2VyZSBpZiBu
b3QgZXF1YWwuCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC50
YWcoKSkpLCB0YWtlbik7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
Y29uc3RhbnQucGF5bG9hZCgpKSksIHRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3Rh
bnQudGFnKCkpLCB0YWtlbik7CisgICAgICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC5wYXls
b2FkKCkpLCB0YWtlbik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAKLSAgICAgICAgaWYg
KG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAKICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxMDc1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAg
U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImKTsKIAogICAgIGJvb2wgY29tcGlsZSgpOworICAg
IHZvaWQgY3JlYXRlT1NSRW50cmllcygpOwogICAgIHZvaWQgbGlua09TUkVudHJpZXMoTGlua0J1
ZmZlciYpOwogCiAgICAgTm9kZSYgYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTE0NjYsNiAr
MTQ2NywxNjEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2VuZGlm
CisgICAgCisgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlv
biBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZCwgbGVm
dCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6aW52ZXJ0KGNv
bmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Cisg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90
VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJyYW5jaERvdWJsZU5v
blplcm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcgc2NyYXRjaCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91YmxlTm9uWmVybyh2
YWx1ZSwgc2NyYXRjaCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoRG91YmxlWmVyb09yTmFOKHZhbHVlLCBz
Y3JhdGNoKTsKKyAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOworICAgICAgICBub3RUYWtlbi5saW5r
KCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+CisgICAgdm9pZCBicmFuY2gzMihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgeworICAg
ICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGlu
YXRpb24pOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7Cisg
ICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHZv
aWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1
ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlv
bik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0
LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSwgbWFzayk7Cisg
ICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRl
eCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZl
cnRpYmxlKGNvbmQpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0
KGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
VGVzdDMyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOworICAgICAgICAKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
OmludmVydChjb25kKSwgdmFsdWUpOworICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24p
OworICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAg
IG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KKyAgICB2b2lkIGJyYW5jaFB0cihKSVRDb21waWxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRp
b24pCisgICAgeworICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikp
CisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kLCBsZWZ0
LCByaWdodCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCks
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKKyAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOworICAgICAgICBub3RUYWtl
bi5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+CisgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25k
aXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQorICAg
ICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVl
LCBtYXNrKSwgZGVzdGluYXRpb24pOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29u
ZCksIHZhbHVlLCBtYXNrKTsKKyAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOworICAgICAgICBub3RU
YWtlbi5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29u
ZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSk7CisgICAgICAgIGVt
aXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCks
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHZvaWQgYnJhbmNo
VGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ss
IEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoSklUQ29tcGls
ZXI6OmlzSW52ZXJ0aWJsZShjb25kKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWhhdmVFZGdl
Q29kZVRvRW1pdChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1f
aml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOworICAgICAg
ICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0
OChKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSwgbWFzayk7CisgICAgICAgIGVtaXRF
ZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRl
c3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYnJhbmNoVGVzdDgoSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24p
KQorICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2
YWx1ZSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwg
dmFsdWUpOworICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRC
cmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmso
Jm1faml0KTsKKyAgICB9CisgICAgCisgICAgZW51bSBGYWxsVGhyb3VnaE1vZGUgeworICAgICAg
ICBBdEZhbGxUaHJvdWdoUG9pbnQsCisgICAgICAgIEZvcmNlSnVtcAorICAgIH07CisgICAgdm9p
ZCBqdW1wKEJsb2NrSW5kZXggZGVzdGluYXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3Vn
aE1vZGUgPSBBdEZhbGxUaHJvdWdoUG9pbnQpCisgICAgeworICAgICAgICBpZiAoaGF2ZUVkZ2VD
b2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5h
dGlvbik7CisgICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBtX2Jsb2NrICsgMQorICAgICAgICAg
ICAgJiYgZmFsbFRocm91Z2hNb2RlID09IEF0RmFsbFRocm91Z2hQb2ludCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBoYXZlRWRnZUNvZGVUb0VtaXQoQmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJ
T047CisgICAgfQorICAgIHZvaWQgZW1pdEVkZ2VDb2RlKEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CisgICAgeworICAgICAgICBpZiAoIURGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihkZXN0aW5hdGlv
biksIEdQUkluZm86OnJlZ1QwKTsKKyAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7
CkBAIC0xNjk5LDYgKzE4NTUsOCBAQCBwcml2YXRlOgogICAgIFJlZ2lzdGVyQmFuazxGUFJJbmZv
PiBtX2ZwcnM7CiAKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2Jsb2NrSGVh
ZHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9vc3JFbnRyeUhlYWRzOwor
ICAgIAogICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQgewogICAgICAgICBCcmFuY2hSZWNvcmQoTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICAgICAg
ICAgIDoganVtcChqdW1wKQo=
</data>
<flag name="review"
          id="128751"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="128777"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>