<?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>117559</bug_id>
          
          <creation_ts>2013-06-12 12:53:52 -0700</creation_ts>
          <short_desc>fourthTier: DFG should support op_switch_imm</short_desc>
          <delta_ts>2013-06-15 15:37:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>899732</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-12 12:53:52 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899733</commentid>
    <comment_count>1</comment_count>
      <attachid>204501</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-12 12:57:15 -0700</bug_when>
    <thetext>Created attachment 204501
work in progress

I still have more gluing to do before it works, but it&apos;s getting there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900242</commentid>
    <comment_count>2</comment_count>
      <attachid>204631</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 11:29:56 -0700</bug_when>
    <thetext>Created attachment 204631
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900246</commentid>
    <comment_count>3</comment_count>
      <attachid>204634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 11:32:47 -0700</bug_when>
    <thetext>Created attachment 204634
the patch

Added more to the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900249</commentid>
    <comment_count>4</comment_count>
      <attachid>204634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 11:34:35 -0700</bug_when>
    <thetext>Comment on attachment 204634
the patch

Ha!  Forgot all about 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900276</commentid>
    <comment_count>5</comment_count>
      <attachid>204640</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 13:56:35 -0700</bug_when>
    <thetext>Created attachment 204640
the patch

For real this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900293</commentid>
    <comment_count>6</comment_count>
      <attachid>204640</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-06-13 15:02:15 -0700</bug_when>
    <thetext>Comment on attachment 204640
the patch

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

How hard would it be to put the edge code removal in a separate patch?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2719
&gt; +            

nit - delete the white space</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900306</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 15:47:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 204640 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204640&amp;action=review
&gt; 
&gt; How hard would it be to put the edge code removal in a separate patch?
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2719
&gt; &gt; +            
&gt; 
&gt; nit - delete the white space

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900816</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-15 15:37:31 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151616</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204501</attachid>
            <date>2013-06-12 12:57:15 -0700</date>
            <delta_ts>2013-06-13 11:29:56 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29565</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNTE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEzLTA2LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBzdXBwb3J0IG9wX3N3aXRjaF9pbW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzU1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9n
cmVzcy4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnRpbWVzUHRyKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlu
a1RvRml0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoU3dpdGNoQ2FzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3dpdGNoRGF0
YSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N3aXRjaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6c3dpdGNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtU3VjY2Vz
c29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW1wKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRT
d2l0Y2hJbW0pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNo
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6YnJhbmNoVGVzdDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJh
bmNoNjQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hQdHIpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0UHRyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoVGVzdDgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1wKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKwogMjAxMy0wNi0xMSAgTWlj
aGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsZWQgYmFjayBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNTEzNjIuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDYgKzc4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgVGltZXNGb3VyLAogICAgICAgICBU
aW1lc0VpZ2h0LAogICAgIH07CisgICAgCisgICAgc3RhdGljIFNjYWxlIHRpbWVzUHRyKCkKKyAg
ICB7CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICByZXR1cm4g
VGltZXNGb3VyOworICAgICAgICByZXR1cm4gVGltZXNFaWdodDsKKyAgICB9CiAKICAgICAvLyBB
ZGRyZXNzOgogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MjQsMTMgKzI2MjQs
MTYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgcwogICAgICAgICBt
X2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9mdW5jdGlvbkV4cHJzLnNo
cmlua1RvRml0KCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgp
OworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlu
a1RvRml0KCk7CisgICAgICAgIH0KICAgICB9IC8vIGVsc2UgZG9uJ3Qgc2hyaW5rIHRoZXNlLCBi
ZWNhdXNlIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwb2ludGVkIHBvaW50ZXJzIGludG8gdGhlc2Ug
dGFibGVzLgogCiAgICAgaWYgKG1fcmFyZURhdGEpIHsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2lt
bWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0
YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwogI2lmIEVO
QUJMRShKSVQpCiAgICAgICAgIG1fcmFyZURhdGEtPm1fY2FsbFJldHVybkluZGV4VmVjdG9yLnNo
cmlua1RvRml0KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAy
Niw2ICsxMDI2LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcK
ICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIGZvciBub3cuCisgICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhp
bmdzLgorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVy
bjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CkBAIC0xNzg3LDYgKzE3OTMsMTcgQEAgaW5s
aW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgICAgICByZXR1cm4gY2hh
bmdlZDsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7CisgICAgICAgIC8vIEZJ
WE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIGJlIHNwYXJzZSBjb25kaXRpb25hbCBmb3IgU3dpdGNo
J3MuIEN1cnJlbnRseQorICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRv
dWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KKyAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
KyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEt
PmZhbGxUaHJvdWdoXS5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNh
c2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9j
aywgZ3JhcGgubV9ibG9ja3NbZGF0YS0+Y2FzZXNbaV0udGFyZ2V0XS5nZXQoKSk7CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
Y2FzZSBUaHJvdzoKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NSw2ICszNDUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTd2l0Y2g6IHsKKyAgICAgICAgICAgIFN3aXRjaERh
dGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEt
PmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAgICAgICAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCBOb2RlTmVlZHNOZWdaZXJvIGJlY2F1c2UgaWYgdGhlIGNhc2VzIGFy
ZSBhbGwgaW50ZWdlcnMKKyAgICAgICAgICAgICAgICAvLyB0aGVuIC0wIGFuZCAwIGFyZSB0cmVh
dGVkIHRoZSBzYW1lLiAgV2UgZG9uJ3QgbmVlZCBOb2RlVXNlZEFzT3RoZXIKKyAgICAgICAgICAg
ICAgICAvLyBiZWNhdXNlIGlmIGFsbCBvZiB0aGUgY2FzZXMgYXJlIGludGVnZXJzIHRoZW4gTmFO
IGFuZCB1bmRlZmluZWQgYXJlCisgICAgICAgICAgICAgICAgLy8gdHJlYXRlZCB0aGUgc2FtZS4K
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc0ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTQsNiAr
MTA1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pZGVudGlmaWVy
UmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudFJlbWFwOwogICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJSZW1hcDsKKyAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiBtX3N3aXRjaEltbVJlbWFwOwogICAgICAgICAKICAgICAgICAgLy8gQmxvY2tz
IGludHJvZHVjZWQgYnkgdGhpcyBjb2RlIGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nlc3NvciBsaW5r
aW5nLgogICAgICAgICAvLyBNYXkgaW5jbHVkZSB1cCB0byBvbmUgYmFzaWMgYmxvY2sgdGhhdCBp
bmNsdWRlcyB0aGUgY29udGludWF0aW9uIGFmdGVyCkBAIC0zMzgzLDYgKzMzODQsMTIgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBu
b2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldCA9IG1fZ3JhcGguYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNl
c1tpXS50YXJnZXQpOworICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0g
bV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAog
ICAgIGRlZmF1bHQ6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRh
TG9nRigiTWFya2luZyBiYXNpYyBibG9jayAlcCBhcyBsaW5rZWQuXG4iLCBibG9jayk7CkBAIC0z
NTA4LDYgKzM1MTUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5l
CiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRl
bnRpZmllcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVt
YXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CisgICAgICAg
IG1fc3dpdGNoSW1tUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGVzKCkpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJs
b2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nSW1w
bCogcmVwID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmltcGwoKTsKQEAgLTM1NDgsNiArMzU1
NiwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAg
ICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXBbaV0gPSBuZXdJbmRleDsKICAgICAgICAgICAgIGJ5
dGVDb2RlUGFyc2VyLT5tX2NvbnN0YW50QnVmZmVyQ2FjaGUuYWRkKENvbnN0YW50QnVmZmVyS2V5
KGNvZGVCbG9jaywgaSksIG5ld0luZGV4KTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMoKTsgKytpKSB7CisgICAgICAgICAgICBtX3N3aXRjaEltbVJlbWFwW2ldID0gYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsK
KyAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dp
dGNoSnVtcFRhYmxlKCkgPSBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShpKTsK
KyAgICAgICAgfQogICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gdHJ1
ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBNYWNoaW5lIGNvZGUgYmxvY2sgY2FzZS4KQEAg
LTM1NjIsMTIgKzM1NzQsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJP
ZklkZW50aWZpZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZl
clJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOworICAg
ICAgICBtX3N3aXRjaEltbVJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICAgICAgbV9pZGVudGlm
aWVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0
YW50UmVtYXBbaV0gPSBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygp
OyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXBbaV0gPSBpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGVzKCk7ICsraSkKKyAgICAgICAgICAgIG1fc3dpdGNoSW1tUmVtYXBbaV0gPSBp
OwogICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw4ICs2OCw2IEBACiAjZGVmaW5lIERGR19FTkFCTEVfT1NSX0VOVFJZ
IEVOQUJMRShERkdfSklUKQogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ug
d2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBo
b3QgcGF0aC4KICNkZWZpbmUgREZHX0VOQUJMRV9TVUNDRVNTX1NUQVRTIDAKLS8vIEVuYWJsZSB2
ZXJpZmljYXRpb24gdGhhdCB0aGUgREZHIGlzIGFibGUgdG8gaW5zZXJ0IGNvZGUgZm9yIGNvbnRy
b2wgZmxvdyBlZGdlcy4KLSNkZWZpbmUgREZHX0VOQUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9O
IDAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1NCw2ICs1NTQsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTd2l0Y2g6IHsKKyAgICAgICAgICAg
IFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBzd2l0
Y2ggKGRhdGEtPmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8SW50MzJVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0g
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFRvUHJpbWl0aXZlOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJv
eElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw2IEBA
IGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCi0K
IC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwpAQCAtNzE5LDYgKzcxOCw3IEBAIHB1YmxpYzoKICAg
ICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRy
YW5zaXRpb25EYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRhdGEsIDQ+
IG1fbmV3QXJyYXlCdWZmZXJEYXRhOworICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0
PiBtX3N3aXRjaERhdGE7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4
ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBC
aXRWZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMiBAQCBzdHJ1Y3QgTmV3QXJyYXlC
dWZmZXJEYXRhIHsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlOwogfTsKIAorc3RydWN0
IFN3aXRjaENhc2UgeworICAgIEpTVmFsdWUgdmFsdWU7CisgICAgQmxvY2tJbmRleCB0YXJnZXQ7
Cit9OworCitlbnVtIFN3aXRjaEtpbmQgeworICAgIFN3aXRjaEltbQorfTsKKworc3RydWN0IFN3
aXRjaERhdGEgeworICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKKyAgICBCbG9ja0luZGV4
IGZhbGxUaHJvdWdoOworICAgIFN3aXRjaEtpbmQga2luZDsKKyAgICB1bnNpZ25lZCBzd2l0Y2hU
YWJsZUluZGV4OworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlh
dGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1t
ZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0
cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIp
IGZyb20gYSBOb2RlKi4KQEAgLTY2NywxMiArNjgzLDE4IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7
CiAgICAgICAgIHJldHVybiBvcCgpID09IEJyYW5jaDsKICAgICB9CisgICAgCisgICAgYm9vbCBp
c1N3aXRjaCgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBTd2l0Y2g7CisgICAgfQog
CiAgICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewog
ICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFN3
aXRjaDoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAg
IGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTcxOCw2ICs3NDAsMTIgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKKyAgICBTd2l0Y2hE
YXRhKiBzd2l0Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTd2l0Y2hEYXRhKj4obV9vcEluZm8pOworICAgIH0K
KyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewpAQCAtNzI1LDYgKzc1Myw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgICAg
IHJldHVybiAxOwogICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgICAgIHJldHVybiAyOwor
ICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNh
c2VzLnNpemUoKSArIDE7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQpAQCAtNzMyLDYgKzc2MiwxMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAg
QmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgeworICAgICAgICBpZiAo
aXNTd2l0Y2goKSkgeworICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNoRGF0YSgpLT5jYXNl
cy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXNbaV0u
dGFyZ2V0OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gc3dpdGNoRGF0YSgp
LT5jYXNlcy5zaXplKCkpOworICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+ZmFsbFRo
cm91Z2g7CisgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRleCkgewogICAgICAgICBjYXNl
IDA6CiAgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
Miw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQmxv
Y2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oU3dpdGNoLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oVGhyb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhUaHJvd1Jl
ZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1
MDcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNldE15U2NvcGU6CiAgICAgICAgIGNhc2Ug
REZHOjpKdW1wOgogICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBTd2l0Y2g6CiAg
ICAgICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgog
ICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNzAsNiArMzE3MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRCcmFuY2gobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogCisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIGVtaXRTd2l0Y2gobm9kZSk7Cisg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgQVNTRVJU
KEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyNywxMyArMTYyNyw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2Rl
T3JpZ2luKCk7CiAgICAgCi0gICAgaWYgKERGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElP
TikgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB2ZXJpZmljYXRpb25TdWNjZWVkZWQgPQot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBHUFJJbmZvOjpy
ZWdUMCwgVHJ1c3RlZEltbTMyKG1fYmxvY2spKTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgp
OwotICAgICAgICB2ZXJpZmljYXRpb25TdWNjZWVkZWQubGluaygmbV9qaXQpOwotICAgIH0KLQog
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRp
ZgpAQCAtMTgxOCw5ICsxODExLDYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiB7
CiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAKLSAgICBpZiAoREZHX0VOQUJMRV9FREdFX0NP
REVfVkVSSUZJQ0FUSU9OKQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgR1BS
SW5mbzo6cmVnVDApOwotCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBmb3IgKG1f
YmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9i
bG9jaykgewogICAgICAgICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsKQEAgLTE4NDEsMTgg
KzE4MzEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKCkKICAgICAg
ICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1IgZW50cnkgdHJhbXBv
bGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKLSAgICAgICAgLy8gdmVyaWZpY2F0aW9uLiBCdXQg
aW4gdGhlIGZ1dHVyZSwgd2UnbGwgbmVlZCB0aGlzIGZvciBvdGhlciB0aGluZ3MgYXMgd2VsbCAo
bGlrZQotICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZ2xvYmFsIHJlZyBhbGxvYykuCi0gICAgICAg
IC8vIElmIHdlIGRvbid0IG5lZWQgT1NSIGVudHJ5IHRyYW1wb2xpbgotICAgICAgICBpZiAoIURG
R19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikgewotICAgICAgICAgICAgbV9vc3JFbnRy
eUhlYWRzLmFwcGVuZChtX2Jsb2NrSGVhZHNbYmxvY2tJbmRleF0pOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3NyRW50cnlIZWFkcy5hcHBl
bmQobV9qaXQubGFiZWwoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGJsb2Nr
SW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obV9i
bG9ja0hlYWRzW2Jsb2NrSW5kZXhdLCAmbV9qaXQpOworICAgICAgICAvLyBDdXJyZW50bHkgd2Ug
ZG9uJ3QgaGF2ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMuIFdlIGNvdWxkIGFkZCB0aGVtCisgICAg
ICAgIC8vIGhlcmUgaWYgbmVlZCBiZS4KKyAgICAgICAgbV9vc3JFbnRyeUhlYWRzLmFwcGVuZCht
X2Jsb2NrSGVhZHNbYmxvY2tJbmRleF0pOwogICAgIH0KIH0KIApAQCAtNDQwMSw2ICs0MzgyLDc0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICB9CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW1wKE5vZGUqLCBTd2l0Y2hE
YXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIFNpbXBsZUp1
bXBUYWJsZSYgdGFibGUgPSBtX2ppdC5jb2RlQmxvY2soKS0+aW1tZWRpYXRlU3dpdGNoSnVtcFRh
YmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgIG1faml0LnN1YjMyKEltbTMyKHRhYmxl
Lm1pbiksIHZhbHVlKTsKKyAgICBhZGRCcmFuY2goCisgICAgICAgIG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBJbW0zMih0YWJsZS5jdGlPZmZzZXRzLnNp
emUoKSkpLAorICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gpOworICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNoLCB2YWx1ZSwgSklUQ29tcGls
ZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5qdW1wKHNjcmF0Y2gpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERh
dGEqIGRhdGEpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgICAgIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVlLmdwcigpLCB0
ZW1wLmdwcigpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVS
ZWdzKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisg
ICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RJbnQgPSBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpCZWxvdywgdmFsdWVSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChub2RlLCBkYXRhLCB2
YWx1ZVJlZ3MuZ3ByKCksIHNjcmF0Y2gpOworICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOwor
ICAgICAgICBhZGRCcmFuY2goCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlUmVncy5ncHIoKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsK
KyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwg
dmFsdWVSZWdzLmdwcigpLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsK
KyNlbHNlCisgICAgICAgIEZJWE1FOworI2VuZGlmCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaChOb2RlKiBub2RlKQoreworICAgIFN3aXRj
aERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CisgICAgc3dpdGNoIChkYXRhLT5raW5k
KSB7CisgICAgY2FzZSBTd2l0Y2hJbW06IHsKKyAgICAgICAgZW1pdFN3aXRjaEltbShub2RlLCBk
YXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgsMTQ2ICsxNzA4LDY4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNv
bmQsIEZQUlJlZyBsZWZ0LCBGUFJSZWcgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAg
ICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZShjb25kLCBsZWZ0LCBy
aWdodCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdFRha2VuID0gbV9qaXQuYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCks
IGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtl
bi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91
YmxlKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB2
b2lkIGJyYW5jaERvdWJsZU5vblplcm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcgc2NyYXRjaCwgQmxv
Y2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9F
bWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoRG91YmxlTm9uWmVybyh2YWx1ZSwgc2NyYXRjaCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoRG91Ymxl
WmVyb09yTmFOKHZhbHVlLCBzY3JhdGNoKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0
aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAg
ICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZSwgc2NyYXRjaCksIGRlc3RpbmF0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lk
IGJyYW5jaDMyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwg
VSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghaGF2
ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgZW1pdEVk
Z2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVz
dGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVy
biBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlv
bik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAg
ICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBU
IHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBB
U1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJsZShjb25kKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1
cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3Rp
bmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0g
bV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZhbHVlLCBtYXNr
KTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNo
KG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2pp
dCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZh
bHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRp
b24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAg
IEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2pp
dC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUpOwotICAgICAg
ICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVt
cCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUpLCBkZXN0
aW5hdGlvbik7CiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lkIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0
aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0
aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoNjQoY29uZCwg
bGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjppbnZlcnQoY29u
ZCksIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RU
YWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
NjQoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogI2VuZGlmCiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lkIGJyYW5jaFB0
cihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQs
IEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBpZiAoIWhhdmVFZGdlQ29k
ZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0
LmJyYW5jaFB0cihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoUHRyKEpJVENv
bXBpbGVyOjppbnZlcnQoY29uZCksIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgZW1pdEVkZ2VDb2Rl
KGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRp
b24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZv
aWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFs
dWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VS
VChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSwgbWFzayk7
Ci0gICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaCht
X2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQp
OworICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFs
dWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRp
b24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAg
IEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSksIGRlc3RpbmF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSk7Ci0gICAg
ICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAg
ICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFsdWUpLCBk
ZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+CiAgICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAg
ICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUsIG1hc2sp
LCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RU
YWtlbiA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZhbHVl
LCBtYXNrKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5r
KCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29u
ZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewotICAg
ICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJsZShjb25kKSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAgICAgICAg
ICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVlKSwgZGVzdGlu
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBt
X2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSk7Ci0gICAg
ICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAg
ICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVlKSwgZGVz
dGluYXRpb24pOwogICAgIH0KICAgICAKICAgICBlbnVtIEZhbGxUaHJvdWdoTW9kZSB7CkBAIC0x
ODU2LDI1ICsxNzc4LDEyIEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZvaWQganVtcChCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uLCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlID0gQXRGYWxs
VGhyb3VnaFBvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGhhdmVFZGdlQ29kZVRvRW1pdChkZXN0
aW5hdGlvbikpCi0gICAgICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwogICAgICAg
ICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJsb2NrKCkKICAgICAgICAgICAgICYmIGZhbGxUaHJv
dWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCi0g
ICAgaW5saW5lIGJvb2wgaGF2ZUVkZ2VDb2RlVG9FbWl0KEJsb2NrSW5kZXgpCi0gICAgewotICAg
ICAgICByZXR1cm4gREZHX0VOQUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9OOwotICAgIH0KLSAg
ICB2b2lkIGVtaXRFZGdlQ29kZShCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAg
ICAgaWYgKCFERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04pCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGRlc3RpbmF0aW9uKSwgR1BS
SW5mbzo6cmVnVDApOwotICAgIH0KLQogICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAg
ICAgbV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoUmVjb3JkKGp1bXAsIGRlc3RpbmF0aW9uKSk7CkBA
IC0xOTMwLDYgKzE4MzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChO
b2RlKik7CiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9j
a0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKTsKICAgICB2b2lkIGVtaXRCcmFuY2go
Tm9kZSopOworICAgIHZvaWQgZW1pdFN3aXRjaEltbUludEp1bXAoTm9kZSosIFN3aXRjaERhdGEq
LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKTsKKyAgICB2b2lkIGVtaXRTd2l0Y2hJbW0o
Tm9kZSosIFN3aXRjaERhdGEqKTsKKyAgICB2b2lkIGVtaXRTd2l0Y2goTm9kZSopOwogICAgIAog
ICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nT25DZWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVO
ZXdTdHJpbmdPYmplY3QoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA1LDcgKzI1MDUsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX2ltCiAgICAgaWYgKHNjcnV0aW5lZS5pc0lu
dDMyKCkpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzY3J1dGluZWUuYXNJbnQzMigpKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgIGlmIChzY3J1dGluZWUuaXNEb3VibGUoKSAmJiBzY3J1dGluZWUuYXNE
b3VibGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY3J1dGluZWUuYXNEb3VibGUoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCkuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91
YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5p
bW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204631</attachid>
            <date>2013-06-13 11:29:56 -0700</date>
            <delta_ts>2013-06-13 11:32:47 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43914</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDEzLTA2LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBzdXBwb3J0IG9wX3N3aXRjaF9pbW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzU1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IGlu
dGVnZXIgKGkuZS4gaW1tZWRpYXRlKSBzd2l0Y2hlcyBpbiB0aGUgREZHLiBSZWR1Y2UgdGhlIG1p
bmltdW0KKyAgICAgICAgdGhyZXNob2xkIGZvciB1c2luZyBvcF9zd2l0Y2guCisKKyAgICAgICAg
KiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyOjp0aW1lc1B0cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvSnVtcFRhYmxlLmg6CisgICAgICAgIChTaW1wbGVKdW1wVGFibGUpOgorICAg
ICAgICAoSlNDOjpTaW1wbGVKdW1wVGFibGU6OmNsZWFyKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRl
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSW5saW5l
U3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVT
dGFja0VudHJ5KToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGV0
ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAg
ICAoSklUQ29tcGlsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpibG9ja0hl
YWRzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEpTQzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hDYXNlKToKKyAgICAgICAgKFN3aXRjaENhc2Up
OgorICAgICAgICAoU3dpdGNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6U3dpdGNoRGF0YTo6
U3dpdGNoRGF0YSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpp
c1N3aXRjaCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNUZXJtaW5hbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6c3dpdGNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAg
ICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjcmVhdGVP
U1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRj
aEltbUludEp1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpsaW5r
QnJhbmNoZXMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YnJhbmNoVGVzdDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YnJhbmNoNjQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hQdHIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0UHRyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoVGVzdDgpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1wKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklU
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5j
cHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuaDoKKyAgICAgICAgKENhc2VCbG9ja05vZGUpOgorCiAyMDEzLTA2LTEyICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIE1hdGggb2JqZWN0
IHNob3VsZCBub3QgYmUgcG9seW1vcnBoaWMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFj
cm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTMgQEAgcHVibGljOgog
ICAgICAgICBUaW1lc0ZvdXIsCiAgICAgICAgIFRpbWVzRWlnaHQsCiAgICAgfTsKKyAgICAKKyAg
ICBzdGF0aWMgU2NhbGUgdGltZXNQdHIoKQorICAgIHsKKyAgICAgICAgaWYgKHNpemVvZih2b2lk
KikgPT0gNCkKKyAgICAgICAgICAgIHJldHVybiBUaW1lc0ZvdXI7CisgICAgICAgIHJldHVybiBU
aW1lc0VpZ2h0OworICAgIH0KIAogICAgIC8vIEFkZHJlc3M6CiAgICAgLy8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYyNCwxMyArMjYyNCwxNiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5r
VG9GaXQoU2hyaW5rTW9kZSBzCiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgp
OwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcmFy
ZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRh
Ymxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJT
d2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQogICAgIH0g
Ly8gZWxzZSBkb24ndCBzaHJpbmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5
IHBvaW50ZWQgcG9pbnRlcnMgaW50byB0aGVzZSB0YWJsZXMuCiAKICAgICBpZiAobV9yYXJlRGF0
YSkgewogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJp
bmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJs
ZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLnNocmlua1RvRml0KCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgbV9yYXJlRGF0
YS0+bV9jYWxsUmV0dXJuSW5kZXhWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiBjdGlEZWZhdWx0OwogICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBicmFuY2hPZmZzZXRzLmNsZWFy
KCk7CisgICAgICAgICAgICBjdGlPZmZzZXRzLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAy
Niw2ICsxMDI2LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcK
ICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIGZvciBub3cuCisgICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhp
bmdzLgorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVy
bjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CkBAIC0xNzg3LDYgKzE3OTMsMTcgQEAgaW5s
aW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgICAgICByZXR1cm4gY2hh
bmdlZDsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7CisgICAgICAgIC8vIEZJ
WE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIGJlIHNwYXJzZSBjb25kaXRpb25hbCBmb3IgU3dpdGNo
J3MuIEN1cnJlbnRseQorICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRv
dWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KKyAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
KyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEt
PmZhbGxUaHJvdWdoXS5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNh
c2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9j
aywgZ3JhcGgubV9ibG9ja3NbZGF0YS0+Y2FzZXNbaV0udGFyZ2V0XS5nZXQoKSk7CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
Y2FzZSBUaHJvdzoKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NSw2ICszNDUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTd2l0Y2g6IHsKKyAgICAgICAgICAgIFN3aXRjaERh
dGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEt
PmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAgICAgICAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCBOb2RlTmVlZHNOZWdaZXJvIGJlY2F1c2UgaWYgdGhlIGNhc2VzIGFy
ZSBhbGwgaW50ZWdlcnMKKyAgICAgICAgICAgICAgICAvLyB0aGVuIC0wIGFuZCAwIGFyZSB0cmVh
dGVkIHRoZSBzYW1lLiAgV2UgZG9uJ3QgbmVlZCBOb2RlVXNlZEFzT3RoZXIKKyAgICAgICAgICAg
ICAgICAvLyBiZWNhdXNlIGlmIGFsbCBvZiB0aGUgY2FzZXMgYXJlIGludGVnZXJzIHRoZW4gTmFO
IGFuZCB1bmRlZmluZWQgYXJlCisgICAgICAgICAgICAgICAgLy8gdHJlYXRlZCB0aGUgc2FtZS4K
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc0ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTQsNiAr
MTA1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pZGVudGlmaWVy
UmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudFJlbWFwOwogICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJSZW1hcDsKKyAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiBtX3N3aXRjaEltbVJlbWFwOwogICAgICAgICAKICAgICAgICAgLy8gQmxvY2tz
IGludHJvZHVjZWQgYnkgdGhpcyBjb2RlIGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nlc3NvciBsaW5r
aW5nLgogICAgICAgICAvLyBNYXkgaW5jbHVkZSB1cCB0byBvbmUgYmFzaWMgYmxvY2sgdGhhdCBp
bmNsdWRlcyB0aGUgY29udGludWF0aW9uIGFmdGVyCkBAIC0yNzE1LDcgKzI3MTYsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KLQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7CkBAIC0yOTU4LDYgKzI5NTksMjMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpKSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5ncmVhdGVyZXEpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CisgICAg
ICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJbW07CisgICAgICAgICAgICBkYXRhLnN3aXRjaFRh
YmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaEltbVJlbWFwW2N1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9IG1f
Y3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0
c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMu
YXBwZW5kKFN3aXRjaENhc2UoanNOdW1iZXIodGFibGUubWluICsgaSksIHRhcmdldCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRj
aERhdGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9pbW0pOworICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9yZXQ6CiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFy
aWFibGVzKCk7CkBAIC0zMzgzLDYgKzM0MDEsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2NrKEJhc2ljQmxvYwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBj
YXNlIFN3aXRjaDoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgp
LT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNh
c2VzW2ldLnRhcmdldCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3Np
YmxlVGFyZ2V0cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQpOworICAgICAg
ICBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiTWFya2luZyBiYXNpYyBi
bG9jayAlcCBhcyBsaW5rZWQuXG4iLCBibG9jayk7CkBAIC0zNTA4LDYgKzM1MzIsNyBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1faWRlbnRpZmll
clJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAg
IG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0
ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CisgICAgICAgIG1fc3dpdGNoSW1tUmVtYXAucmVz
aXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCkpOwogCiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZp
ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGkpLmltcGwoKTsKQEAgLTM1NDgsNiArMzU3MywxMCBAQCBCeXRlQ29kZVBhcnNl
cjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgICAgICBtX2NvbnN0YW50QnVmZmVy
UmVtYXBbaV0gPSBuZXdJbmRleDsKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0
YW50QnVmZmVyQ2FjaGUuYWRkKENvbnN0YW50QnVmZmVyS2V5KGNvZGVCbG9jaywgaSksIG5ld0lu
ZGV4KTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJs
b2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKSB7CisgICAgICAg
ICAgICBtX3N3aXRjaEltbVJlbWFwW2ldID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5u
dW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsKKyAgICAgICAgICAgIGJ5dGVDb2Rl
UGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCkgPSBjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShpKTsKKyAgICAgICAgfQogICAgICAgICBt
X2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBNYWNoaW5lIGNvZGUgYmxvY2sgY2FzZS4KQEAgLTM1NjIsMTIgKzM1OTEsMTUgQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2lkZW50
aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAg
ICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJl
Z2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxv
Y2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOworICAgICAgICBtX3N3aXRjaEltbVJlbWFw
LnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRp
ZmllcnMoKTsgKytpKQogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSBpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJl
Z2lzdGVycygpOyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpICsgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpCiAgICAgICAgICAgICBt
X2NvbnN0YW50QnVmZmVyUmVtYXBbaV0gPSBpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCk7ICsraSkK
KyAgICAgICAgICAgIG1fc3dpdGNoSW1tUmVtYXBbaV0gPSBpOwogICAgICAgICBtX2NhbGxzaXRl
QmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfcHV0X3RvX2Jhc2U6CiAgICAgY2FzZSBvcF90
eXBlb2Y6CiAgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgog
ICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICAgICAgCiAgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3M6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJ
KHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDYgQEAKICNkZWZpbmUgREZHX0VOQUJMRV9P
U1JfRU5UUlkgRU5BQkxFKERGR19KSVQpCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vz
c2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcg
b24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBERkdfRU5BQkxFX1NVQ0NFU1NfU1RBVFMgMAotLy8g
RW5hYmxlIHZlcmlmaWNhdGlvbiB0aGF0IHRoZSBERkcgaXMgYWJsZSB0byBpbnNlcnQgY29kZSBm
b3IgY29udHJvbCBmbG93IGVkZ2VzLgotI2RlZmluZSBERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJ
RklDQVRJT04gMAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTU0LDYgKzU1NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN3aXRjaDogeworICAg
ICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZGF0YS0+a2luZCkgeworICAgICAgICAgICAgY2FzZSBTd2l0Y2hJbW06Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgICAgIHNldFVzZUtpbmRB
bmRVbmJveElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTAsNiArMjUwLDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkp
OwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJG
OiMiLCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgaWYgKG5vZGUtPmlzU3dpdGNo
KCkpIHsKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5jYXNlc1tpXS52YWx1ZSwgIjojIiwg
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVs
dDojIiwgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgIH0KICAgICBvdXQucHJpbnQoY29tbWEsICJi
YyMiLCBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIG91dC5wcmlu
dCgiKSIpOwpAQCAtMzg5LDE3ICszOTUsOCBAQCB2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKQogICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgIAogICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc0xpbmtlZCk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNz
b3Iod29ya2xpc3QsIGluZGV4LCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKG5vZGUtPmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3
b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAgIGhh
bmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgp
KTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1TdWNjZXNzb3JzKGJs
b2NrKTsgaS0tOykKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgs
IHN1Y2Nlc3NvcihibG9jaywgaSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw2IEBAIGVudW0g
QWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCi0KIC8vCiAv
LyA9PT0gR3JhcGggPT09CiAvLwpAQCAtNzE5LDYgKzcxOCw3IEBAIHB1YmxpYzoKICAgICBTZWdt
ZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CiAgICAgU2VnbWVu
dGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRyYW5zaXRp
b25EYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRhdGEsIDQ+IG1fbmV3
QXJyYXlCdWZmZXJEYXRhOworICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBtX3N3
aXRjaERhdGE7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFi
bGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0
b3IgbV9wcmVzZXJ2ZWRWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBAIEpJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQogICAgIDogQ0NhbGxIZWxw
ZXJzKCZkZmcubV92bSwgZGZnLm1fY29kZUJsb2NrKQogICAgICwgbV9ncmFwaChkZmcpCiAgICAg
LCBtX2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCisgICAgLCBtX2Jsb2NrSGVhZHMo
ZGZnLm1fYmxvY2tzLnNpemUoKSkKICAgICAsIG1fY3VycmVudENvZGVPcmlnaW5JbmRleCgwKQog
ewogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyKQpAQCAtMTU1LDYgKzE1NiwzNCBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAg
IGRhdGFMb2dGKCJKSVQgY29kZSBmb3IgJXAgc3RhcnQgYXQgWyVwLCAlcCkuIFNpemUgPSAlenUu
XG4iLCBtX2NvZGVCbG9jaywgbGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8
Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUo
KSwgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICBCaXRWZWN0b3Ig
dXNlZEp1bXBUYWJsZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3N3aXRjaERh
dGEuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSBtX2dyYXBoLm1f
c3dpdGNoRGF0YVtpXTsKKyAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQ2FzdCB0byBpbnQgdG8gYXZv
aWQgdGF1dG9sb2dpY2FsIGNvbXBhcmlzb24gd2FybmluZ3MuCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oZGF0YS5raW5kKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KFN3aXRj
aEltbSkpOworICAgICAgICAKKyAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNo
VGFibGVJbmRleCk7CisgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPQorICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxl
SW5kZXgpOworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoXSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQorICAgICAgICAgICAgdGFibGUuY3Rp
T2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNh
c2UgPSBkYXRhLmNhc2VzW2pdOworICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2Uu
dmFsdWUuYXNJbnQzMigpIC0gdGFibGUubWluXSA9CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0XSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9jb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlcygpOyBpLS07KSB7CisgICAgICAgIGlmICh1c2VkSnVtcFRhYmxlcy5n
ZXQoaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJs
b2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoaSkuY2xlYXIoKTsKKyAgICB9CiAKICAgICAv
LyBMaW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIgcmVzcGVjdGl2
ZSBmdW5jdGlvbnMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgp
OyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNSw2ICs0MzUsOCBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0
Q29kZTsgfQorICAgIAorICAgIFZlY3RvcjxMYWJlbD4mIGJsb2NrSGVhZHMoKSB7IHJldHVybiBt
X2Jsb2NrSGVhZHM7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlcjsKQEAgLTQ2MSw2ICs0NjMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxs
TGlua1JlY29yZD4gbV9jYWxsczsKICAgICBWZWN0b3I8Q2FsbEV4Y2VwdGlvblJlY29yZD4gbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgCisgICAgVmVjdG9yPExhYmVsPiBtX2Jsb2NrSGVhZHM7CisK
ICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKICAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFz
dENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlu
a0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDUwIEBA
IHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGU7CiB9OwogCisvLyBUaGUgU3dpdGNoRGF0YSBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVy
ZXMgZHVwbGljYXRlIHRoZSBpbmZvcm1hdGlvbiBpbgorLy8gSnVtcFRhYmxlLiBUaGUgREZHIG1h
eSB1bHRpbWF0ZWx5IGVuZCB1cCB1c2luZyB0aGUgSnVtcFRhYmxlLCB0aG91Z2ggaXQgbWF5Cisv
LyBpbnN0ZWFkIGRlY2lkZSB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50IC0gdGhpcyBpcyBlbnRp
cmVseSB1cCB0byB0aGUgREZHLgorLy8gVGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGdpdmUgdGhlIERG
RyBhIGhpZ2hlci1sZXZlbCBzZW1hbnRpYyBkZXNjcmlwdGlvbiBvZgorLy8gd2hhdCBpcyBnb2lu
ZyBvbiwgd2hpY2ggd2lsbCBhbGxvdyBpdCB0byBtYWtlIHRoZSByaWdodCBkZWNpc2lvbi4KK3N0
cnVjdCBTd2l0Y2hDYXNlIHsKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICAgICAgOiB0YXJnZXQoTm9C
bG9jaykKKyAgICB7CisgICAgfQorICAgIAorICAgIFN3aXRjaENhc2UoSlNWYWx1ZSB2YWx1ZSwg
QmxvY2tJbmRleCB0YXJnZXQpCisgICAgICAgIDogdmFsdWUodmFsdWUpCisgICAgICAgICwgdGFy
Z2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgdmFsdWU7CisgICAg
QmxvY2tJbmRleCB0YXJnZXQ7Cit9OworCitlbnVtIFN3aXRjaEtpbmQgeworICAgIFN3aXRjaElt
bQorfTsKKworc3RydWN0IFN3aXRjaERhdGEgeworICAgIC8vIEluaXRpYWxpemVzIG1vc3QgZmll
bGRzIHRvIG9idmlvdXNseSBpbnZhbGlkIHZhbHVlcy4gQW55b25lCisgICAgLy8gY29uc3RydWN0
aW5nIHRoaXMgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgdGhleQor
ICAgIC8vIGNhcmUgYWJvdXQgbWFudWFsbHkuCisgICAgU3dpdGNoRGF0YSgpCisgICAgICAgIDog
ZmFsbFRocm91Z2goTm9CbG9jaykKKyAgICAgICAgLCBraW5kKHN0YXRpY19jYXN0PFN3aXRjaEtp
bmQ+KC0xKSkKKyAgICAgICAgLCBzd2l0Y2hUYWJsZUluZGV4KFVJTlRfTUFYKQorICAgICAgICAs
IGRpZFVzZUp1bXBUYWJsZShmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxT
d2l0Y2hDYXNlPiBjYXNlczsKKyAgICBCbG9ja0luZGV4IGZhbGxUaHJvdWdoOworICAgIFN3aXRj
aEtpbmQga2luZDsKKyAgICB1bnNpZ25lZCBzd2l0Y2hUYWJsZUluZGV4OworICAgIGJvb2wgZGlk
VXNlSnVtcFRhYmxlOworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1l
ZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4g
aW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRh
IHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZp
ZXIpIGZyb20gYSBOb2RlKi4KQEAgLTY2NywxMiArNzExLDE4IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IEJyYW5jaDsKICAgICB9CisgICAgCisgICAgYm9v
bCBpc1N3aXRjaCgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBTd2l0Y2g7CisgICAg
fQogCiAgICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkg
ewogICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNl
IFN3aXRjaDoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAg
ICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTcxOCw2ICs3NjgsMTIgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKKyAgICBTd2l0
Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTd2l0Y2hEYXRhKj4obV9vcEluZm8pOworICAg
IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAob3AoKSkgewpAQCAtNzI1LDYgKzc4MSw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
ICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgICAgIHJldHVybiAy
OworICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCkt
PmNhc2VzLnNpemUoKSArIDE7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQpAQCAtNzMyLDYgKzc5MCwxMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAg
ICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgeworICAgICAgICBp
ZiAoaXNTd2l0Y2goKSkgeworICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNoRGF0YSgpLT5j
YXNlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXNb
aW5kZXhdLnRhcmdldDsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ID09IHN3aXRj
aERhdGEoKS0+Y2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCkt
PmZhbGxUaHJvdWdoOworICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAg
ICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTIsNiArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IC8qIEJsb2NrIHRlcm1pbmFscy4gKi9cCiAgICAgbWFjcm8oSnVtcCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEJyYW5jaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFN3
aXRjaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJldHVybiwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFRocm93LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
VGhyb3dSZWZlcmVuY2VFcnJvciwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTczLDYgKzE1NzMsMjAgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk1ha2VSb3BlMwogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7
CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5p
bW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJs
ZSgpKTsKKyAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgIGludDMy
X3QgYXNJbnQzMiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGFzRG91YmxlKTsKKyAgICBpZiAoYXNE
b3VibGUgPT0gYXNJbnQzMikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPih0YWJs
ZS5jdGlGb3JWYWx1ZShhc0ludDMyKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Cit9CisKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBh
LCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw2ICsxMTQsNyBAQCB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX1cpKFdhdGNocG9p
bnRTZXQqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90
KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVj
U3RhdGUqLCBKU09iamVjdCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNo
YXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCk7CkBAIC0yMTksNiArMjIwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblRvU3RyaW5nTwogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3Ry
aW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIEpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBh
biBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8g
dGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0
aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1MDcsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFNldE15U2NvcGU6CiAgICAgICAgIGNhc2UgREZHOjpK
dW1wOgogICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAg
IGNhc2UgQnJlYWtwb2ludDoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAg
ICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxNzAsNiArMzE3MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRCcmFuY2gobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogCisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIGVtaXRTd2l0Y2gobm9kZSk7CisgICAgICAg
IGJyZWFrOworCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgQVNTRVJUKEdQUklu
Zm86OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRp
dmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX2N1cnJlbnROb2RlKDApCiAgICAgLCBtX2luZGV4SW5C
bG9jaygwKQogICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1D
YWxsZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKQEAgLTE1ODAs
NyArMTU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmxvY2tIZWFkc1ttX2Jsb2NrXSA9IG1faml0
LmxhYmVsKCk7CisgICAgbV9qaXQuYmxvY2tIZWFkcygpW21fYmxvY2tdID0gbV9qaXQubGFiZWwo
KTsKICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5i
cmVha3BvaW50KCk7CiAjZW5kaWYKQEAgLTE2MjcsMTMgKzE2MjYsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29k
ZU9yaWdpbigpOwogICAgIAotICAgIGlmIChERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJ
T04pIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdmVyaWZpY2F0aW9uU3VjY2VlZGVkID0K
LSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIFRydXN0ZWRJbW0zMihtX2Jsb2NrKSk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQo
KTsKLSAgICAgICAgdmVyaWZpY2F0aW9uU3VjY2VlZGVkLmxpbmsoJm1faml0KTsKLSAgICB9Ci0K
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5k
aWYKQEAgLTE4MTgsOSArMTgxMCw2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQog
ewogICAgIGNoZWNrQXJndW1lbnRUeXBlcygpOwogCi0gICAgaWYgKERGR19FTkFCTEVfRURHRV9D
T0RFX1ZFUklGSUNBVElPTikKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIEdQ
UkluZm86OnJlZ1QwKTsKLQogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgZm9yICht
X2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21f
YmxvY2spIHsKICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2sobV9ibG9jayk7CkBAIC0xODQxLDE4
ICsxODMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiAgICAg
ICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBjcmVhdGUgT1NSIGVudHJ5IHRyYW1w
b2xpbmVzIHdoZW4gdXNpbmcgZWRnZSBjb2RlCi0gICAgICAgIC8vIHZlcmlmaWNhdGlvbi4gQnV0
IGluIHRoZSBmdXR1cmUsIHdlJ2xsIG5lZWQgdGhpcyBmb3Igb3RoZXIgdGhpbmdzIGFzIHdlbGwg
KGxpa2UKLSAgICAgICAgLy8gd2hlbiB3ZSBoYXZlIGdsb2JhbCByZWcgYWxsb2MpLgotICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBuZWVkIE9TUiBlbnRyeSB0cmFtcG9saW4KLSAgICAgICAgaWYgKCFE
RkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04pIHsKLSAgICAgICAgICAgIG1fb3NyRW50
cnlIZWFkcy5hcHBlbmQobV9ibG9ja0hlYWRzW2Jsb2NrSW5kZXhdKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX29zckVudHJ5SGVhZHMuYXBw
ZW5kKG1faml0LmxhYmVsKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihibG9j
a0luZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKG1f
YmxvY2tIZWFkc1tibG9ja0luZGV4XSwgJm1faml0KTsKKyAgICAgICAgLy8gQ3VycmVudGx5IHdl
IGRvbid0IGhhdmUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzLiBXZSBjb3VsZCBhZGQgdGhlbQorICAg
ICAgICAvLyBoZXJlIGlmIG5lZWQgYmUuCisgICAgICAgIG1fb3NyRW50cnlIZWFkcy5hcHBlbmQo
bV9qaXQuYmxvY2tIZWFkcygpW2Jsb2NrSW5kZXhdKTsKICAgICB9CiB9CiAKQEAgLTQ0MDEsNiAr
NDM4MSw4MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAg
fQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tSW50SnVtcChOb2RlKiwg
U3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBT
aW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9qaXQuY29kZUJsb2NrKCktPmltbWVkaWF0ZVN3aXRj
aEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBtX2ppdC5zdWIzMihJbW0z
Mih0YWJsZS5taW4pLCB2YWx1ZSk7CisgICAgYWRkQnJhbmNoKAorICAgICAgICBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zm
c2V0cy5zaXplKCkpKSwKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJ
VENvbXBpbGVyOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CisgICAgbV9qaXQuanVtcChzY3JhdGNo
KTsKKyAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEpCit7Cisg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNl
OiB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIGVtaXRT
d2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVlLmdwcigpLCB0ZW1wLmdwcigpKTsKKyAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlLnVz
ZSgpOworICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RJbnQgPSBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpC
ZWxvdywgdmFsdWVSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChub2RlLCBkYXRhLCB2YWx1ZVJlZ3MuZ3ByKCks
IHNjcmF0Y2gpOworICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOworICAgICAgICBhZGRCcmFu
Y2goCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Olplcm8sIHZhbHVlUmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLmdwcigp
LCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhzY3JhdGNoKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKKyNlbHNlCisgICAgICAg
IEZJWE1FOworI2VuZGlmCisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vZGUp
Cit7CisgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKKyAgICBzd2l0
Y2ggKGRhdGEtPmtpbmQpIHsKKyAgICBjYXNlIFN3aXRjaEltbTogeworICAgICAgICBlbWl0U3dp
dGNoSW1tKG5vZGUsIGRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfSB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnJhbmNoZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ldOwor
ICAgICAgICBicmFuY2guanVtcC5saW5rVG8obV9qaXQuYmxvY2tIZWFkcygpW2JyYW5jaC5kZXN0
aW5hdGlvbl0sICZtX2ppdCk7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTEsNiArOTExLDExIEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUodmFsdWUsIFRydXN0ZWRJbW1QdHIoaW5kZXgpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOwpAQCAtMTcwOCwxNDYgKzE3MTMsNjgg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3Vi
bGVDb25kaXRpb24gY29uZCwgRlBSUmVnIGxlZnQsIEZQUlJlZyByaWdodCwgQmxvY2tJbmRleCBk
ZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3Rp
bmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91Ymxl
KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hEb3VibGUoSklUQ29tcGlsZXI6
OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGlu
YXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAg
fQogICAgIAogICAgIHZvaWQgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJSZWcgdmFsdWUsIEZQUlJl
ZyBzY3JhdGNoLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLCBzY3JhdGNoKSwgZGVzdGluYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2pp
dC5icmFuY2hEb3VibGVaZXJvT3JOYU4odmFsdWUsIHNjcmF0Y2gpOwotICAgICAgICBlbWl0RWRn
ZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0
aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJu
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLCBzY3JhdGNoKSwgZGVz
dGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgogICAgIHZvaWQgYnJhbmNoMzIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAg
ICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAg
cmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCksIGRlc3Rp
bmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0g
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwot
ICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9q
aXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsK
KyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdo
dCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4KICAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAg
ICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZhbHVl
LCBtYXNrKSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OmludmVydChjb25k
KSwgdmFsdWUsIG1hc2spOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRh
a2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hU
ZXN0MzIoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFs
dWUpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2
YWx1ZSk7Ci0gICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJy
YW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygm
bV9qaXQpOworICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25k
LCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoNjQo
SklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBC
bG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVU
b0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVz
dGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7
Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5j
aChtX2ppdC5icmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9
CiAjZW5kaWYKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAg
IHZvaWQgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQg
bGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlm
ICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24p
OwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5i
cmFuY2hQdHIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAg
ICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVt
cCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpLCBk
ZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+CiAgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRp
b24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlLCBt
YXNrKSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCks
IHZhbHVlLCBtYXNrKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtl
bi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVz
dFB0cihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6
OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZh
bHVlKSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCks
IHZhbHVlKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5r
KCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihj
b25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpS
ZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0
aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29u
ZCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRp
b24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25k
LCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OmludmVy
dChjb25kKSwgdmFsdWUsIG1hc2spOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24p
OwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAg
IG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hUZXN0OChjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBp
bGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bikKICAgICB7Ci0gICAgICAgIEFTU0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwg
dmFsdWUpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCks
IHZhbHVlKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5r
KCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29u
ZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIGVudW0gRmFsbFRocm91
Z2hNb2RlIHsKQEAgLTE4NTYsMzcgKzE3ODMsMTggQEAgcHVibGljOgogICAgIH07CiAgICAgdm9p
ZCBqdW1wKEJsb2NrSW5kZXggZGVzdGluYXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3Vn
aE1vZGUgPSBBdEZhbGxUaHJvdWdoUG9pbnQpCiAgICAgewotICAgICAgICBpZiAoaGF2ZUVkZ2VD
b2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5h
dGlvbik7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBuZXh0QmxvY2soKQogICAgICAgICAg
ICAgJiYgZmFsbFRocm91Z2hNb2RlID09IEF0RmFsbFRocm91Z2hQb2ludCkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwog
ICAgIH0KICAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXZlRWRnZUNvZGVUb0VtaXQoQmxvY2tJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJ
T047Ci0gICAgfQotICAgIHZvaWQgZW1pdEVkZ2VDb2RlKEJsb2NrSW5kZXggZGVzdGluYXRpb24p
Ci0gICAgewotICAgICAgICBpZiAoIURGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGVz
dGluYXRpb24pLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRCcmFuY2go
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CiAgICAgewogICAgICAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hSZWNvcmQoanVtcCwgZGVz
dGluYXRpb24pKTsKICAgICB9CiAKLSAgICB2b2lkIGxpbmtCcmFuY2hlcygpCi0gICAgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnJhbmNoZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEJyYW5jaFJlY29yZCYgYnJhbmNoID0gbV9icmFuY2hlc1tpXTsKLSAgICAgICAg
ICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2Jsb2NrSGVhZHNbYnJhbmNoLmRlc3RpbmF0aW9uXSwg
Jm1faml0KTsKLSAgICAgICAgfQotICAgIH0KKyAgICB2b2lkIGxpbmtCcmFuY2hlcygpOwogCiAg
ICAgQmFzaWNCbG9jayogYmxvY2soKQogICAgIHsKQEAgLTE5MzAsNiArMTgzOCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXgg
bm90VGFrZW4pOwogICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlKik7CisgICAgdm9pZCBlbWl0U3dp
dGNoSW1tSW50SnVtcChOb2RlKiwgU3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNj
cmF0Y2gpOworICAgIHZvaWQgZW1pdFN3aXRjaEltbShOb2RlKiwgU3dpdGNoRGF0YSopOworICAg
IHZvaWQgZW1pdFN3aXRjaChOb2RlKik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmdP
bkNlbGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld1N0cmluZ09iamVjdChOb2RlKik7CkBA
IC0yMTg3LDcgKzIwOTgsNiBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+IG1f
Z3ByczsKICAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCi0gICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw+IG1fb3NyRW50cnlIZWFkczsKICAgICAKICAgICBzdHJ1Y3QgQnJhbmNoUmVj
b3JkIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUwNSw3ICsyNTA1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIG9wX3N3aXRjaF9pbQogICAgIGlmIChzY3J1dGluZWUuaXNJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3Rp
Rm9yVmFsdWUoc2NydXRpbmVlLmFzSW50MzIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBp
ZiAoc2NydXRpbmVlLmlzRG91YmxlKCkgJiYgc2NydXRpbmVlLmFzRG91YmxlKCkgPT0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAgcmV0dXJu
IGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZh
bHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0
aW5lZS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICByZXR1cm4gY29kZUJs
b2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRGVmYXVsdC5leGVj
dXRhYmxlQWRkcmVzcygpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MDgsNyArMTUwOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSB0cnlUYWJs
ZVN3aXRjaChWZWN0b3I8RXhwcmVzc2lvbk5vZGUqLCA4PiYgbGl0ZXJhbFZlY3RvciwgaW50MzJf
dCYgbWluX251bSwgaW50MzJfdCYgbWF4X251bSk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc190YWJsZVN3aXRjaE1pbmltdW0gPSAxMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzX3RhYmxlU3dpdGNoTWluaW11bSA9IDM7CiAgICAgICAgIENsYXVzZUxpc3ROb2RlKiBtX2xp
c3QxOwogICAgICAgICBDYXNlQ2xhdXNlTm9kZSogbV9kZWZhdWx0Q2xhdXNlOwogICAgICAgICBD
bGF1c2VMaXN0Tm9kZSogbV9saXN0MjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204634</attachid>
            <date>2013-06-13 11:32:47 -0700</date>
            <delta_ts>2013-06-13 13:56:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44324</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBA
CisyMDEzLTA2LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBzdXBwb3J0IG9wX3N3aXRjaF9pbW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzU1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IGlu
dGVnZXIgKGkuZS4gaW1tZWRpYXRlKSBzd2l0Y2hlcyBpbiB0aGUgREZHLiBSZWR1Y2UgdGhlIG1p
bmltdW0KKyAgICAgICAgdGhyZXNob2xkIGZvciB1c2luZyBvcF9zd2l0Y2guCisgICAgICAgIAor
ICAgICAgICBBbHNvIGdldCByaWQgb2YgZWRnZSBjb2RlIHN1cHBvcnQsIHNpbmNlIHdlIGhhdmVu
J3QgdXNlZCBpdCBpbiB0aGUgeWVhciBzaW5jZQorICAgICAgICBJIGludHJvZHVjZWQgaXQuIEl0
IHdhcyBzdXBwb3NlZCB0byBhbGxvdyB1cyB0byBicmVhayBjcml0aWNhbCBlZGdlcyBsYXRlIGlu
CisgICAgICAgIHRoZSBiYWNrZW5kLCB0aHVzIGVuYWJsaW5nIGdsb2JhbCByZWdpc3RlciBhbGxv
Y2F0aW9uIGZyb20gYW4gU1NBLWZvcm0gZ3JhcGguCisgICAgICAgIEJ1dCB3ZSBhcmVuJ3QgZG9p
bmcgdGhhdCBzbyBJIGZpZ3VyZSB3ZSBzaG91bGQganVzdCBraWxsIHRoZSBjb2RlIGZvciBub3cu
IEl0CisgICAgICAgIHdvdWxkIGhhdmUgbWFkZSBpbXBsZW1lbnRpbmcgc3dpdGNoIGhhcmRlci4K
KworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnRpbWVzUHRyKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0
KToKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKFNpbXBsZUp1bXBU
YWJsZSk6CisgICAgICAgIChKU0M6OlNpbXBsZUp1bXBUYWJsZTo6Y2xlYXIpOgorICAgICAgICAq
IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0
YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2Nlc3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
Ojpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
Lmg6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmJsb2NrSGVhZHMpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OlN3aXRjaENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAo
U3dpdGNoQ2FzZSk6CisgICAgICAgIChTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpT
d2l0Y2hEYXRhOjpTd2l0Y2hEYXRhKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmlzU3dpdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1Rlcm1pbmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzdWNj
ZXNzb3IpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNyZWF0ZU9TUkVudHJpZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoSW1tSW50SnVtcCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmxpbmtCcmFuY2hlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGVOb25aZXJvKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJyYW5jaFB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaFRl
c3RQdHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0OCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXApOgorICAgICAgICAoU3Bl
Y3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoQ2FzZUJsb2NrTm9kZSk6CisKIDIwMTMt
MDYtMTIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUg
TWF0aCBvYmplY3Qgc2hvdWxkIG5vdCBiZSBwb2x5bW9ycGhpYwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIFRpbWVzRm91ciwKICAgICAgICAgVGltZXNFaWdodCwKICAgICB9
OworICAgIAorICAgIHN0YXRpYyBTY2FsZSB0aW1lc1B0cigpCisgICAgeworICAgICAgICBpZiAo
c2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICAgICAgcmV0dXJuIFRpbWVzRm91cjsKKyAgICAg
ICAgcmV0dXJuIFRpbWVzRWlnaHQ7CisgICAgfQogCiAgICAgLy8gQWRkcmVzczoKICAgICAvLwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjI0LDEzICsyNjI0LDE2IEBAIHZvaWQgQ29kZUJs
b2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHMKICAgICAgICAgbV9mdW5jdGlvbkRlY2xzLnNo
cmlua1RvRml0KCk7CiAgICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgpOwogICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9yYXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVT
d2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICB9CiAgICAgfSAvLyBlbHNlIGRvbid0IHNocmluayB0aGVzZSwgYmVjYXVzZSB3ZSB3b3VsZCBo
YXZlIGFscmVhZHkgcG9pbnRlZCBwb2ludGVycyBpbnRvIHRoZXNlIHRhYmxlcy4KIAogICAgIGlm
IChtX3JhcmVEYXRhKSB7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMu
c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1w
VGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dp
dGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBtX3JhcmVEYXRhLT5tX2NhbGxSZXR1cm5JbmRleFZlY3Rvci5zaHJpbmtUb0ZpdCgpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIGN0aURlZmF1bHQ7CiAgICAgICAgIH0KICNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyYW5jaE9m
ZnNldHMuY2xlYXIoKTsKKyAgICAgICAgICAgIGN0aU9mZnNldHMuY2xlYXIoKTsKKyAgICAgICAg
fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDI2LDYgKzEwMjYsMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZwogICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAg
ICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7CisgICAgICAgIC8v
IE5vdGhpbmcgdG8gZG8gZm9yIG5vdy4KKyAgICAgICAgLy8gRklYTUU6IERvIHNwYXJzZSBjb25k
aXRpb25hbCB0aGluZ3MuCisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAg
IGNhc2UgUmV0dXJuOgogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKQEAgLTE3ODcsNiArMTc5
MywxNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBTd2l0Y2g6IHsKKyAg
ICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gYmUgc3BhcnNlIGNvbmRpdGlvbmFs
IGZvciBTd2l0Y2gncy4gQ3VycmVudGx5CisgICAgICAgIC8vIHdlJ3JlIG5vdC4gSG93ZXZlciBJ
IHNvbWVob3cgZG91YnQgdGhhdCB0aGlzIHdpbGwgZXZlciBiZSBhIGJpZyBkZWFsLgorICAgICAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hE
aXJlY3Rpb24pOworICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gdGVybWluYWwtPnN3aXRjaERh
dGEoKTsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9i
bG9ja3NbZGF0YS0+ZmFsbFRocm91Z2hdLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFJl
dHVybjoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ1LDYgKzM0NSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAg
ICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoZGF0YS0+a2luZCkgeworICAgICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIE5vZGVOZWVkc05lZ1plcm8gYmVjYXVzZSBpZiB0
aGUgY2FzZXMgYXJlIGFsbCBpbnRlZ2VycworICAgICAgICAgICAgICAgIC8vIHRoZW4gLTAgYW5k
IDAgYXJlIHRyZWF0ZWQgdGhlIHNhbWUuICBXZSBkb24ndCBuZWVkIE5vZGVVc2VkQXNPdGhlcgor
ICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaWYgYWxsIG9mIHRoZSBjYXNlcyBhcmUgaW50ZWdl
cnMgdGhlbiBOYU4gYW5kIHVuZGVmaW5lZCBhcmUKKyAgICAgICAgICAgICAgICAvLyB0cmVhdGVk
IHRoZSBzYW1lLgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzSW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0gfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbWVyZ2VEZWZhdWx0RmxhZ3Mobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1NCw2ICsxMDU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBt
X2lkZW50aWZpZXJSZW1hcDsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50UmVt
YXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlclJlbWFwOworICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fc3dpdGNoSW1tUmVtYXA7CiAgICAgICAgIAogICAgICAg
ICAvLyBCbG9ja3MgaW50cm9kdWNlZCBieSB0aGlzIGNvZGUgYmxvY2ssIHdoaWNoIG5lZWQgc3Vj
Y2Vzc29yIGxpbmtpbmcuCiAgICAgICAgIC8vIE1heSBpbmNsdWRlIHVwIHRvIG9uZSBiYXNpYyBi
bG9jayB0aGF0IGluY2x1ZGVzIHRoZSBjb250aW51YXRpb24gYWZ0ZXIKQEAgLTI3MTUsNyArMjcx
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfanRydWUpKSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAg
fQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKQEAgLTI5NTgsNiArMjk1OSwyMyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSkpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIG9wX3N3aXRjaF9pbW06IHsKKyAgICAgICAgICAgIFN3aXRjaERhdGEg
ZGF0YTsKKyAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsKKyAgICAgICAgICAgIGRh
dGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNoSW1tUmVtYXBb
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07CisgICAgICAgICAgICBkYXRhLmZhbGxU
aHJvdWdoID0gbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2NrLT5pbW1l
ZGlhdGVTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5i
cmFuY2hPZmZzZXRzW2ldOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxs
VGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CisgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5k
Q2FwdHVyZWRWYXJpYWJsZXMoKTsKQEAgLTMzODMsNiArMzQwMSwxMiBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5z
d2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG5vZGUtPnN3aXRj
aERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCk7CisgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBtX2dyYXBoLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERh
dGEoKS0+ZmFsbFRocm91Z2gpOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgZGVmYXVs
dDoKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJNYXJr
aW5nIGJhc2ljIGJsb2NrICVwIGFzIGxpbmtlZC5cbiIsIGJsb2NrKTsKQEAgLTM1MDgsNiArMzUz
Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAg
bV9pZGVudGlmaWVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygp
KTsKICAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29u
c3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcC5yZXNpemUo
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKKyAgICAgICAgbV9zd2l0Y2hJ
bW1SZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMoKSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJl
ck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBj
b2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgpOwpAQCAtMzU0OCw2ICszNTczLDEwIEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1fY29u
c3RhbnRCdWZmZXJSZW1hcFtpXSA9IG5ld0luZGV4OwogICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29uc3RhbnRCdWZmZXJDYWNoZS5hZGQoQ29uc3RhbnRCdWZmZXJLZXkoY29kZUJsb2Nr
LCBpKSwgbmV3SW5kZXgpOwogICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOyArK2kp
IHsKKyAgICAgICAgICAgIG1fc3dpdGNoSW1tUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9j
b2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOworICAgICAgICAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGUoKSA9IGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICB9
CiAgICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0cnVlOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgpAQCAtMzU2MiwxMiAr
MzU5MSwxNSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmll
cnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVz
aXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CisgICAgICAgIG1fc3dp
dGNoSW1tUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1w
VGFibGVzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVt
YmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtp
XSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtp
XSA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkKICAg
ICAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcFtpXSA9IGk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMoKTsgKytpKQorICAgICAgICAgICAgbV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGk7CiAgICAgICAg
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsNyBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF9wdXRfdG9fYmFzZToKICAg
ICBjYXNlIG9wX3R5cGVvZjoKICAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX3N3
aXRjaF9pbW06CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAgICAgICAK
ICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsNiBAQAogI2RlZmluZSBE
RkdfRU5BQkxFX09TUl9FTlRSWSBFTkFCTEUoREZHX0pJVCkKIC8vIEdlbmVyYXRlIHN0YXRzIG9u
IGhvdyBzdWNjZXNzZnVsIHdlIHdlcmUgaW4gbWFraW5nIHVzZSBvZiB0aGUgREZHIGppdCwgYW5k
IHJlbWFpbmluZyBvbiB0aGUgaG90IHBhdGguCiAjZGVmaW5lIERGR19FTkFCTEVfU1VDQ0VTU19T
VEFUUyAwCi0vLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRoYXQgdGhlIERGRyBpcyBhYmxlIHRvIGlu
c2VydCBjb2RlIGZvciBjb250cm9sIGZsb3cgZWRnZXMuCi0jZGVmaW5lIERGR19FTkFCTEVfRURH
RV9DT0RFX1ZFUklGSUNBVElPTiAwCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsNiArNTU0LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3dp
dGNoOiB7CisgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgp
OworICAgICAgICAgICAgc3dpdGNoIChkYXRhLT5raW5kKSB7CisgICAgICAgICAgICBjYXNlIFN3
aXRjaEltbToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQ
cm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAg
c2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MCw2ICsyNTAsMTIgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkY6IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICBpZiAobm9k
ZS0+aXNTd2l0Y2goKSkgeworICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNo
RGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmNhc2VzW2ldLnZh
bHVlLCAiOiMiLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQpOworICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJkZWZhdWx0OiMiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgfQogICAgIG91dC5wcmlu
dChjb21tYSwgImJjIyIsIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgb3V0LnByaW50KCIpIik7CkBAIC0zODksMTcgKzM5NSw4IEBAIHZvaWQgR3JhcGg6OmRldGVy
bWluZVJlYWNoYWJpbGl0eSgpCiAgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdldCgpOwot
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+bGFzdCgpOwotICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhh
bmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsK
LSAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCcmFuY2goKSkgewotICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOwotICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCkpOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVN1
Y2Nlc3NvcnMoYmxvY2spOyBpLS07KQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgc3VjY2Vzc29yKGJsb2NrLCBpKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDYgQEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07
CiAKLQogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCkBAIC03MTksNiArNzE4LDcgQEAgcHVibGlj
OgogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVmZmVyRGF0
YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CisgICAgU2VnbWVudGVkVmVjdG9yPFN3aXRjaERh
dGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hT
ZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwog
ICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAg
OiBDQ2FsbEhlbHBlcnMoJmRmZy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBo
KGRmZykKICAgICAsIG1faml0Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKKyAgICAsIG1f
YmxvY2tIZWFkcyhkZmcubV9ibG9ja3Muc2l6ZSgpKQogICAgICwgbV9jdXJyZW50Q29kZU9yaWdp
bkluZGV4KDApCiB7CiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ3JhcGgu
bV92bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkBAIC0xNTUsNiArMTU2LDM0IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgZGF0YUxvZ0YoIkpJVCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVwKS4g
U2l6ZSA9ICV6dS5cbiIsIG1fY29kZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpLCBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVy
LmRlYnVnU2l6ZSgpLCBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpKTsKICNlbmRpZgorICAgIAorICAg
IEJpdFZlY3RvciB1c2VkSnVtcFRhYmxlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBo
Lm1fc3dpdGNoRGF0YS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9
IG1fZ3JhcGgubV9zd2l0Y2hEYXRhW2ldOworICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRh
YmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBDYXN0IHRv
IGludCB0byBhdm9pZCB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5ncy4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihkYXRhLmtpbmQpID09IHN0YXRpY19jYXN0
PGludD4oU3dpdGNoSW1tKSk7CisgICAgICAgIAorICAgICAgICB1c2VkSnVtcFRhYmxlcy5zZXQo
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9
CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2hdKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gdGFibGUuY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCisgICAgICAgICAg
ICB0YWJsZS5jdGlPZmZzZXRzW2pdID0gdGFibGUuY3RpRGVmYXVsdDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gZGF0YS5jYXNlcy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgIFN3aXRj
aENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CisgICAgICAgICAgICB0YWJsZS5jdGlPZmZz
ZXRzW215Q2FzZS52YWx1ZS5hc0ludDMyKCkgLSB0YWJsZS5taW5dID0KKyAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXRdKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKHVzZWRK
dW1wVGFibGVzLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgbV9jb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShpKS5jbGVhcigpOworICAg
IH0KIAogICAgIC8vIExpbmsgYWxsIGNhbGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVp
ciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
YWxscy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDYgKzQzNSw4IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgCisgICAgVmVjdG9yPExhYmVsPiYgYmxvY2tIZWFkcygp
IHsgcmV0dXJuIG1fYmxvY2tIZWFkczsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyOwpAQCAtNDYxLDYgKzQ2Myw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPENhbGxMaW5rUmVjb3JkPiBtX2NhbGxzOwogICAgIFZlY3RvcjxDYWxsRXhjZXB0aW9u
UmVjb3JkPiBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAKKyAgICBWZWN0b3I8TGFiZWw+IG1fYmxv
Y2tIZWFkczsKKwogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewogICAgICAgICBKU0NhbGxSZWNv
cmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NiArNjYsNTAgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZTsKIH07CiAKKy8vIFRoZSBTd2l0Y2hEYXRhIGFuZCBhc3NvY2lhdGVkIGRh
dGEgc3RydWN0dXJlcyBkdXBsaWNhdGUgdGhlIGluZm9ybWF0aW9uIGluCisvLyBKdW1wVGFibGUu
IFRoZSBERkcgbWF5IHVsdGltYXRlbHkgZW5kIHVwIHVzaW5nIHRoZSBKdW1wVGFibGUsIHRob3Vn
aCBpdCBtYXkKKy8vIGluc3RlYWQgZGVjaWRlIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgLSB0
aGlzIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBERkcuCisvLyBUaGVzZSBkYXRhIHN0cnVjdHVyZXMg
Z2l2ZSB0aGUgREZHIGEgaGlnaGVyLWxldmVsIHNlbWFudGljIGRlc2NyaXB0aW9uIG9mCisvLyB3
aGF0IGlzIGdvaW5nIG9uLCB3aGljaCB3aWxsIGFsbG93IGl0IHRvIG1ha2UgdGhlIHJpZ2h0IGRl
Y2lzaW9uLgorc3RydWN0IFN3aXRjaENhc2UgeworICAgIFN3aXRjaENhc2UoKQorICAgICAgICA6
IHRhcmdldChOb0Jsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3dpdGNoQ2FzZShKU1Zh
bHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAg
ICAgICAgLCB0YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2
YWx1ZTsKKyAgICBCbG9ja0luZGV4IHRhcmdldDsKK307CisKK2VudW0gU3dpdGNoS2luZCB7Cisg
ICAgU3dpdGNoSW1tCit9OworCitzdHJ1Y3QgU3dpdGNoRGF0YSB7CisgICAgLy8gSW5pdGlhbGl6
ZXMgbW9zdCBmaWVsZHMgdG8gb2J2aW91c2x5IGludmFsaWQgdmFsdWVzLiBBbnlvbmUKKyAgICAv
LyBjb25zdHJ1Y3RpbmcgdGhpcyBzaG91bGQgbWFrZSBzdXJlIHRvIGluaXRpYWxpemUgZXZlcnl0
aGluZyB0aGV5CisgICAgLy8gY2FyZSBhYm91dCBtYW51YWxseS4KKyAgICBTd2l0Y2hEYXRhKCkK
KyAgICAgICAgOiBmYWxsVGhyb3VnaChOb0Jsb2NrKQorICAgICAgICAsIGtpbmQoc3RhdGljX2Nh
c3Q8U3dpdGNoS2luZD4oLTEpKQorICAgICAgICAsIHN3aXRjaFRhYmxlSW5kZXgoVUlOVF9NQVgp
CisgICAgICAgICwgZGlkVXNlSnVtcFRhYmxlKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgIEJsb2NrSW5kZXggZmFsbFRocm91Z2g7
CisgICAgU3dpdGNoS2luZCBraW5kOworICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7Cisg
ICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7Cit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNz
aW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGlu
Z3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29k
ZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwg
b3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtNjY3LDEyICs3MTEsMTggQEAgc3RydWN0
IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQnJhbmNoOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU3dpdGNoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IFN3
aXRjaDsKKyAgICB9CiAKICAgICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgU3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBU
aHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNzE4LDYgKzc2OCwx
MiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAg
IAorICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN3aXRjaERhdGEqPihtX29w
SW5mbyk7CisgICAgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkBAIC03MjUsNiArNzgxLDggQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC03MzIsNiArNzkwLDEyIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAKICAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7
CisgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0
Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0
YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOworICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+ZmFsbFRocm91Z2g7CisgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRl
eCkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1wLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oVGhyb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NzMsNiArMTU3MywyMCBAQCBKU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTWFrZVJvcGUzCiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZt
LCBhLCBiLCBjKTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNo
SW1tVGFyZ2V0Rm9yRG91YmxlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBzaXplX3QgdGFibGVJbmRleCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBj
b2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgQVNTRVJUKHZh
bHVlLmlzRG91YmxlKCkpOworICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7
CisgICAgaW50MzJfdCBhc0ludDMyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXNEb3VibGUpOwor
ICAgIGlmIChhc0RvdWJsZSA9PSBhc0ludDMyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcio+KHRhYmxlLmN0aUZvclZhbHVlKGFzSW50MzIpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4odGFibGUuY3RpRGVmYXVsdC5leGVjdXRhYmxl
QWRkcmVzcygpKTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgq
Vl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsK
IHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKQEAgLTIxOSw2ICsyMjAsNyBAQCBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKik7CiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQg
dG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdo
aWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQg
dG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3
LDYgKzUwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKICAgICAgICAg
Y2FzZSBERkc6Okp1bXA6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFN3aXRj
aDoKICAgICAgICAgY2FzZSBCcmVha3BvaW50OgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3MCw2ICszMTcwLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdEJyYW5jaChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgZW1pdFN3aXRjaChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFJldHVybjogewogICAgICAgICBBU1NFUlQo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIgIT0gR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIFNwZWN1bGF0aXZlSklU
OjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWwKICAgICAsIG1fY3VycmVudE5vZGUoMCkKICAgICAs
IG1faW5kZXhJbkJsb2NrKDApCiAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKLSAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgo
KS5tX2Jsb2Nrcy5zaXplKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkKICAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJz
KQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KQpAQCAtMTU4MCw3ICsxNTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9ibG9ja0hlYWRzW21fYmxv
Y2tdID0gbV9qaXQubGFiZWwoKTsKKyAgICBtX2ppdC5ibG9ja0hlYWRzKClbbV9ibG9ja10gPSBt
X2ppdC5sYWJlbCgpOwogI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX0VWRVJZX0JMT0NLKQog
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgpAQCAtMTYyNywxMyArMTYyNiw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2xhc3RTZXRPcGVy
YW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICBtX2NvZGVPcmlnaW5G
b3JPU1IgPSBDb2RlT3JpZ2luKCk7CiAgICAgCi0gICAgaWYgKERGR19FTkFCTEVfRURHRV9DT0RF
X1ZFUklGSUNBVElPTikgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB2ZXJpZmljYXRpb25T
dWNjZWVkZWQgPQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCBHUFJJbmZvOjpyZWdUMCwgVHJ1c3RlZEltbTMyKG1fYmxvY2spKTsKLSAgICAgICAgbV9qaXQu
YnJlYWtwb2ludCgpOwotICAgICAgICB2ZXJpZmljYXRpb25TdWNjZWVkZWQubGluaygmbV9qaXQp
OwotICAgIH0KLQogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigi
XG4iKTsKICNlbmRpZgpAQCAtMTgxOCw5ICsxODEwLDYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSgpCiB7CiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAKLSAgICBpZiAoREZHX0VO
QUJMRV9FREdFX0NPREVfVkVSSUZJQ0FUSU9OKQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgR1BSSW5mbzo6cmVnVDApOwotCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsK
ICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCk7ICsrbV9ibG9jaykgewogICAgICAgICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsK
QEAgLTE4NDEsMTggKzE4MzAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRy
aWVzKCkKICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1Ig
ZW50cnkgdHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKLSAgICAgICAgLy8gdmVyaWZp
Y2F0aW9uLiBCdXQgaW4gdGhlIGZ1dHVyZSwgd2UnbGwgbmVlZCB0aGlzIGZvciBvdGhlciB0aGlu
Z3MgYXMgd2VsbCAobGlrZQotICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZ2xvYmFsIHJlZyBhbGxv
YykuCi0gICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgT1NSIGVudHJ5IHRyYW1wb2xpbgotICAg
ICAgICBpZiAoIURGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikgewotICAgICAgICAg
ICAgbV9vc3JFbnRyeUhlYWRzLmFwcGVuZChtX2Jsb2NrSGVhZHNbYmxvY2tJbmRleF0pOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3NyRW50
cnlIZWFkcy5hcHBlbmQobV9qaXQubGFiZWwoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKGJsb2NrSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0Lmp1bXAo
KS5saW5rVG8obV9ibG9ja0hlYWRzW2Jsb2NrSW5kZXhdLCAmbV9qaXQpOworICAgICAgICAvLyBD
dXJyZW50bHkgd2UgZG9uJ3QgaGF2ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMuIFdlIGNvdWxkIGFk
ZCB0aGVtCisgICAgICAgIC8vIGhlcmUgaWYgbmVlZCBiZS4KKyAgICAgICAgbV9vc3JFbnRyeUhl
YWRzLmFwcGVuZChtX2ppdC5ibG9ja0hlYWRzKClbYmxvY2tJbmRleF0pOwogICAgIH0KIH0KIApA
QCAtNDQwMSw2ICs0MzgxLDgzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2Rl
KiwgRWQKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRK
dW1wKE5vZGUqLCBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNo
KQoreworICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2ppdC5jb2RlQmxvY2soKS0+aW1t
ZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgIG1faml0
LnN1YjMyKEltbTMyKHRhYmxlLm1pbiksIHZhbHVlKTsKKyAgICBhZGRCcmFuY2goCisgICAgICAg
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBJbW0zMih0
YWJsZS5jdGlPZmZzZXRzLnNpemUoKSkpLAorICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7Cisg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNj
cmF0Y2gpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNo
LCB2YWx1ZSwgSklUQ29tcGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKKyAgICBtX2ppdC5q
dW1wKHNjcmF0Y2gpOworICAgIGRhdGEtPmRpZFVzZUp1bXBUYWJsZSA9IHRydWU7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSogbm9kZSwgU3dpdGNoRGF0YSog
ZGF0YSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAg
ICAgICAgZW1pdFN3aXRjaEltbUludEp1bXAobm9kZSwgZGF0YSwgdmFsdWUuZ3ByKCksIHRlbXAu
Z3ByKCkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3Mo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSB0ZW1wLmdwcigpOworICAgICAgICAKKyAgICAg
ICAgdmFsdWUudXNlKCk7CisgICAgICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdEludCA9IG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkJlbG93LCB2YWx1ZVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CisgICAgICAgIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVl
UmVncy5ncHIoKSwgc2NyYXRjaCk7CisgICAgICAgIG5vdEludC5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGFkZEJyYW5jaCgKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6WmVybywgdmFsdWVSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpLAorICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1
ZVJlZ3MuZ3ByKCksIGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHNjcmF0Y2gpOworICAgICAgICBtX2ppdC5qdW1wKHNjcmF0Y2gpOworI2Vs
c2UKKyAgICAgICAgRklYTUU7CisjZW5kaWYKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2go
Tm9kZSogbm9kZSkKK3sKKyAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgp
OworICAgIHN3aXRjaCAoZGF0YS0+a2luZCkgeworICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAg
ICAgIGVtaXRTd2l0Y2hJbW0obm9kZSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpsaW5rQnJhbmNoZXMoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9icmFu
Y2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBCcmFuY2hSZWNvcmQmIGJyYW5jaCA9IG1fYnJh
bmNoZXNbaV07CisgICAgICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2ppdC5ibG9ja0hlYWRzKClb
YnJhbmNoLmRlc3RpbmF0aW9uXSwgJm1faml0KTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkxMSw2
ICs5MTEsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoY2VsbCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1c3RlZEltbVB0cihpbmRleCkpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CkBAIC0xNzA4LDE0
NiArMTcxMyw2OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29t
cGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBC
bG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVU
b0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaERvdWJsZShK
SVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7Ci0gICAgICAgIGVtaXRFZGdl
Q29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3Rp
bmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgICAgICByZXR1cm4g
YWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZShjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0
aW9uKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBicmFuY2hEb3VibGVOb25aZXJvKEZQUlJlZyB2
YWx1ZSwgRlBSUmVnIHNjcmF0Y2gsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewotICAg
ICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAgICAgICAgICBy
ZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZU5vblplcm8odmFsdWUsIHNjcmF0Y2gp
LCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RU
YWtlbiA9IG1faml0LmJyYW5jaERvdWJsZVplcm9Pck5hTih2YWx1ZSwgc2NyYXRjaCk7Ci0gICAg
ICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAg
ICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZU5vblplcm8odmFsdWUsIHNj
cmF0Y2gpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+CiAgICAgdm9pZCBicmFuY2gzMihKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CiAgICAgewotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0g
ICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGxlZnQsIHJp
Z2h0KSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90VGFrZW4gPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0
LCByaWdodCk7Ci0gICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGlu
aygmbV9qaXQpOworICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQs
IGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3Rp
bmF0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUo
Y29uZCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGlu
YXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIo
Y29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
aW52ZXJ0KGNvbmQpLCB2YWx1ZSwgbWFzayk7Ci0gICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5h
dGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1f
aml0LmJyYW5jaFRlc3QzMihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVz
dGluYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJs
ZShjb25kKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0
aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Qz
Mihjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjppbnZl
cnQoY29uZCksIHZhbHVlKTsKLSAgICAgICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RU
YWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
VGVzdDMyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9p
ZCBicmFuY2g2NChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQs
IFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBpZiAoIWhh
dmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJh
bmNoKG1faml0LmJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2g2
NChKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7Ci0gICAgICAgIGVtaXRF
ZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRl
c3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgICAgICByZXR1
cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRp
b24pOwogICAgIH0KICNlbmRpZgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+CiAgICAgdm9pZCBicmFuY2hQdHIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsK
LSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAg
ICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpLCBk
ZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtl
biA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdo
dCk7Ci0gICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9q
aXQpOworICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kLCBsZWZ0
LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5kZXggZGVzdGluYXRp
b24pCiAgICAgewotICAgICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJsZShjb25k
KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlv
bikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29u
ZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Omlu
dmVydChjb25kKSwgdmFsdWUsIG1hc2spOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRp
b24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAg
ICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0K
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVz
dGluYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52ZXJ0aWJs
ZShjb25kKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0
aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQ
dHIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Omlu
dmVydChjb25kKSwgdmFsdWUpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5v
dFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hUZXN0UHRyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoVGVzdDgoSklU
Q29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5k
ZXggZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoSklUQ29tcGlsZXI6OmlzSW52
ZXJ0aWJsZShjb25kKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1p
dChkZXN0aW5hdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5j
aFRlc3Q4KGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21w
aWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSwgbWFzayk7Ci0gICAgICAgIGVtaXRFZGdlQ29kZShk
ZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9u
KTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgICAgICByZXR1cm4gYWRkQnJh
bmNoKG1faml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYnJhbmNoVGVz
dDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4
IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVy
dGlibGUoY29uZCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQo
ZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hU
ZXN0OChjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Omlu
dmVydChjb25kKSwgdmFsdWUpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5v
dFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hUZXN0OChjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgZW51
bSBGYWxsVGhyb3VnaE1vZGUgewpAQCAtMTg1NiwzNyArMTc4MywxOCBAQCBwdWJsaWM6CiAgICAg
fTsKICAgICB2b2lkIGp1bXAoQmxvY2tJbmRleCBkZXN0aW5hdGlvbiwgRmFsbFRocm91Z2hNb2Rl
IGZhbGxUaHJvdWdoTW9kZSA9IEF0RmFsbFRocm91Z2hQb2ludCkKICAgICB7Ci0gICAgICAgIGlm
IChoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgZW1pdEVkZ2VD
b2RlKGRlc3RpbmF0aW9uKTsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IG5leHRCbG9jaygp
CiAgICAgICAgICAgICAmJiBmYWxsVGhyb3VnaE1vZGUgPT0gQXRGYWxsVGhyb3VnaFBvaW50KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0
aW5hdGlvbik7CiAgICAgfQogICAgIAotICAgIGlubGluZSBib29sIGhhdmVFZGdlQ29kZVRvRW1p
dChCbG9ja0luZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIERGR19FTkFCTEVfRURHRV9DT0RF
X1ZFUklGSUNBVElPTjsKLSAgICB9Ci0gICAgdm9pZCBlbWl0RWRnZUNvZGUoQmxvY2tJbmRleCBk
ZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICghREZHX0VOQUJMRV9FREdFX0NPREVfVkVS
SUZJQ0FUSU9OKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihkZXN0aW5hdGlvbiksIEdQUkluZm86OnJlZ1QwKTsKLSAgICB9Ci0KICAgICB2b2lk
IGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBk
ZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaFJlY29y
ZChqdW1wLCBkZXN0aW5hdGlvbikpOwogICAgIH0KIAotICAgIHZvaWQgbGlua0JyYW5jaGVzKCkK
LSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9icmFuY2hlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ld
OwotICAgICAgICAgICAgYnJhbmNoLmp1bXAubGlua1RvKG1fYmxvY2tIZWFkc1ticmFuY2guZGVz
dGluYXRpb25dLCAmbV9qaXQpOwotICAgICAgICB9Ci0gICAgfQorICAgIHZvaWQgbGlua0JyYW5j
aGVzKCk7CiAKICAgICBCYXNpY0Jsb2NrKiBibG9jaygpCiAgICAgewpAQCAtMTkzMCw2ICsxODM4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwogICAgIHZv
aWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKKyAgICB2
b2lkIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKE5vZGUqLCBTd2l0Y2hEYXRhKiwgR1BSUmVnIHZhbHVl
LCBHUFJSZWcgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNoSW1tKE5vZGUqLCBTd2l0Y2hE
YXRhKik7CisgICAgdm9pZCBlbWl0U3dpdGNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBp
bGVUb1N0cmluZ09uQ2VsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3U3RyaW5nT2JqZWN0
KE5vZGUqKTsKQEAgLTIxODcsNyArMjA5OCw2IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckJhbms8
R1BSSW5mbz4gbV9ncHJzOwogICAgIFJlZ2lzdGVyQmFuazxGUFJJbmZvPiBtX2ZwcnM7CiAKLSAg
ICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2Jsb2NrSGVhZHM7CiAgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9vc3JFbnRyeUhlYWRzOwogICAgIAogICAgIHN0cnVj
dCBCcmFuY2hSZWNvcmQgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA1LDcgKzI1MDUsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX2ltCiAgICAgaWYgKHNjcnV0aW5lZS5pc0ludDMyKCkp
CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KS5jdGlGb3JWYWx1ZShzY3J1dGluZWUuYXNJbnQzMigpKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogICAgIGlmIChzY3J1dGluZWUuaXNEb3VibGUoKSAmJiBzY3J1dGluZWUuYXNEb3VibGUo
KSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY3J1dGluZWUuYXNEb3VibGUoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCkuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkp
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oc2NydXRpbmVlLmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIHJl
dHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlE
ZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwOCw3ICsxNTA4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTd2l0Y2hJbmZvOjpTd2l0Y2hU
eXBlIHRyeVRhYmxlU3dpdGNoKFZlY3RvcjxFeHByZXNzaW9uTm9kZSosIDg+JiBsaXRlcmFsVmVj
dG9yLCBpbnQzMl90JiBtaW5fbnVtLCBpbnQzMl90JiBtYXhfbnVtKTsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzX3RhYmxlU3dpdGNoTWluaW11bSA9IDEwOworICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfdGFibGVTd2l0Y2hNaW5pbXVtID0gMzsKICAgICAgICAgQ2xhdXNlTGlz
dE5vZGUqIG1fbGlzdDE7CiAgICAgICAgIENhc2VDbGF1c2VOb2RlKiBtX2RlZmF1bHRDbGF1c2U7
CiAgICAgICAgIENsYXVzZUxpc3ROb2RlKiBtX2xpc3QyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204640</attachid>
            <date>2013-06-13 13:56:35 -0700</date>
            <delta_ts>2013-06-13 15:02:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47883</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxMy0wNi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc3VwcG9ydCBvcF9zd2l0Y2hfaW1tCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc1NTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBp
bnRlZ2VyIChpLmUuIGltbWVkaWF0ZSkgc3dpdGNoZXMgaW4gdGhlIERGRy4gUmVkdWNlIHRoZSBt
aW5pbXVtCisgICAgICAgIHRocmVzaG9sZCBmb3IgdXNpbmcgb3Bfc3dpdGNoLgorICAgICAgICAK
KyAgICAgICAgQWxzbyBnZXQgcmlkIG9mIGVkZ2UgY29kZSBzdXBwb3J0LCBzaW5jZSB3ZSBoYXZl
bid0IHVzZWQgaXQgaW4gdGhlIHllYXIgc2luY2UKKyAgICAgICAgSSBpbnRyb2R1Y2VkIGl0LiBJ
dCB3YXMgc3VwcG9zZWQgdG8gYWxsb3cgdXMgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMgbGF0ZSBp
bgorICAgICAgICB0aGUgYmFja2VuZCwgdGh1cyBlbmFibGluZyBnbG9iYWwgcmVnaXN0ZXIgYWxs
b2NhdGlvbiBmcm9tIGFuIFNTQS1mb3JtIGdyYXBoLgorICAgICAgICBCdXQgd2UgYXJlbid0IGRv
aW5nIHRoYXQgc28gSSBmaWd1cmUgd2Ugc2hvdWxkIGp1c3Qga2lsbCB0aGUgY29kZSBmb3Igbm93
LiBJdAorICAgICAgICB3b3VsZCBoYXZlIG1hZGUgaW1wbGVtZW50aW5nIHN3aXRjaCBoYXJkZXIu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjp0aW1lc1B0cik6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSk6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXApOgorICAgICAg
ICAoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KToKKyAgICAgICAgKiBieXRlY29kZS9KdW1w
VGFibGUuaDoKKyAgICAgICAgKFNpbXBsZUp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OlNpbXBs
ZUp1bXBUYWJsZTo6Y2xlYXIpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMpOgorICAgICAg
ICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChJbmxpbmVTdGFja0VudHJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxp
dHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKSVRDb21waWxlcik6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJsb2NrSGVhZHMpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlN3aXRj
aENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAoU3dpdGNoQ2FzZSk6CisgICAgICAgIChTd2l0
Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpTd2l0Y2hEYXRhKToKKyAg
ICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzU3dpdGNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjppc1Rlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojpzd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1TdWNjZXNzb3JzKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0
aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tSW50SnVtcCk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hEb3VibGVOb25aZXJvKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJyYW5jaFB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaFRl
c3RQdHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hUZXN0OCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXApOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChDYXNlQmxvY2tOb2RlKToKKwog
MjAxMy0wNi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZv
dXJ0aFRpZXI6IERGRyBzaG91bGQgc3VwcG9ydCBvcF9pbiBhbmQgaXQgc2hvdWxkIHVzZSBwYXRj
aGluZyB0byBtYWtlIGl0IGZhc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTMgQEAgcHVibGljOgogICAgICAg
ICBUaW1lc0ZvdXIsCiAgICAgICAgIFRpbWVzRWlnaHQsCiAgICAgfTsKKyAgICAKKyAgICBzdGF0
aWMgU2NhbGUgdGltZXNQdHIoKQorICAgIHsKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0g
NCkKKyAgICAgICAgICAgIHJldHVybiBUaW1lc0ZvdXI7CisgICAgICAgIHJldHVybiBUaW1lc0Vp
Z2h0OworICAgIH0KIAogICAgIC8vIEFkZHJlc3M6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTMy
MSw2ICszMjIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOwogICAgIH0KIAorICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZXhlY3V0YWJsZUFk
ZHJlc3MoKSA9PSBkYXRhTG9jYXRpb24oKSkgeworICAgICAgICAgICAgb3V0LnByaW50KG5hbWUs
ICIoIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcygpKSwgIikiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQobmFtZSwgIihleGVjdXRhYmxl
ID0gIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcygpKSwgIiwgZGF0YUxvY2F0aW9uID0g
IiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24oKSksICIpIik7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcFdpdGhO
YW1lKCJDb2RlUHRyIiwgb3V0KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCogbV92YWx1
ZTsKIH07CkBAIC0zOTMsNiArNDA4LDExIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBtX2NvZGVQdHIu
ZHVtcFdpdGhOYW1lKCJDb2RlUmVmIiwgb3V0KTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYyNCwxMyArMjYyNCwxNiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9k
ZSBzCiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX2Z1
bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5z
aHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0Zp
dCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVz
LnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQogICAgIH0gLy8gZWxzZSBkb24ndCBz
aHJpbmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRl
cnMgaW50byB0aGVzZSB0YWJsZXMuCiAKICAgICBpZiAobV9yYXJlRGF0YSkgewogICAgICAgICBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1f
cmFyZURhdGEtPm1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jYWxsUmV0dXJu
SW5kZXhWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw2ICs5NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjdGlEZWZh
dWx0OwogICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXIoKQor
ICAgICAgICB7CisgICAgICAgICAgICBicmFuY2hPZmZzZXRzLmNsZWFyKCk7CisgICAgICAgICAg
ICBjdGlPZmZzZXRzLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNiw2ICsxMDI2LDEyIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIFN3aXRjaDogeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciBub3cuCisg
ICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhpbmdzLgorICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7CkBAIC0xNzg3LDYgKzE3OTMsMTcgQEAgaW5saW5lIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgU3dpdGNoOiB7CisgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBjb29sIHRvIGJlIHNwYXJzZSBjb25kaXRpb25hbCBmb3IgU3dpdGNoJ3MuIEN1cnJlbnRseQor
ICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhpcyB3
aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KKyAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNmYUJy
YW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKKyAgICAgICAgU3dpdGNo
RGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7CisgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdoXS5n
ZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0t
OykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbZGF0YS0+Y2FzZXNbaV0udGFyZ2V0XS5nZXQoKSk7CisgICAgICAgIHJldHVybiBjaGFuZ2Vk
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUaHJvdzoKICAg
ICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsMjAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBTd2l0Y2g6IHsKKyAgICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2Rl
LT5zd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEtPmtpbmQpIHsKKyAgICAg
ICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCBOb2RlTmVlZHNOZWdaZXJvIGJlY2F1c2UgaWYgdGhlIGNhc2VzIGFyZSBhbGwgaW50ZWdlcnMK
KyAgICAgICAgICAgICAgICAvLyB0aGVuIC0wIGFuZCAwIGFyZSB0cmVhdGVkIHRoZSBzYW1lLiAg
V2UgZG9uJ3QgbmVlZCBOb2RlVXNlZEFzT3RoZXIKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNl
IGlmIGFsbCBvZiB0aGUgY2FzZXMgYXJlIGludGVnZXJzIHRoZW4gTmFOIGFuZCB1bmRlZmluZWQg
YXJlCisgICAgICAgICAgICAgICAgLy8gdHJlYXRlZCB0aGUgc2FtZS4KKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c0ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTQsNiArMTA1NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pZGVudGlmaWVyUmVtYXA7CiAgICAgICAg
IFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudFJlbWFwOwogICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IG1fY29uc3RhbnRCdWZmZXJSZW1hcDsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3N3
aXRjaEltbVJlbWFwOwogICAgICAgICAKICAgICAgICAgLy8gQmxvY2tzIGludHJvZHVjZWQgYnkg
dGhpcyBjb2RlIGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nlc3NvciBsaW5raW5nLgogICAgICAgICAv
LyBNYXkgaW5jbHVkZSB1cCB0byBvbmUgYmFzaWMgYmxvY2sgdGhhdCBpbmNsdWRlcyB0aGUgY29u
dGludWF0aW9uIGFmdGVyCkBAIC0yNzE1LDcgKzI3MTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiBjb25k
aXRpb24gPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CkBAIC0yOTU4LDYg
KzI5NTksMjUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRp
dmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVh
dGVyZXEpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hf
aW1tOiB7CisgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CisgICAgICAgICAgICBkYXRhLmtp
bmQgPSBTd2l0Y2hJbW07CisgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3N3aXRjaEltbVJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmRdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9IG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICgh
dGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5i
cmFuY2hPZmZzZXRzW2ldOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxs
VGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CisgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5k
Q2FwdHVyZWRWYXJpYWJsZXMoKTsKQEAgLTMzODMsNiArMzQwMywxMiBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5z
d2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG5vZGUtPnN3aXRj
aERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCk7CisgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBtX2dyYXBoLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERh
dGEoKS0+ZmFsbFRocm91Z2gpOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgZGVmYXVs
dDoKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJNYXJr
aW5nIGJhc2ljIGJsb2NrICVwIGFzIGxpbmtlZC5cbiIsIGJsb2NrKTsKQEAgLTM1MDgsNiArMzUz
NCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAg
bV9pZGVudGlmaWVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygp
KTsKICAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29u
c3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcC5yZXNpemUo
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKKyAgICAgICAgbV9zd2l0Y2hJ
bW1SZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMoKSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJl
ck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBj
b2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgpOwpAQCAtMzU0OCw2ICszNTc1LDEwIEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1fY29u
c3RhbnRCdWZmZXJSZW1hcFtpXSA9IG5ld0luZGV4OwogICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29uc3RhbnRCdWZmZXJDYWNoZS5hZGQoQ29uc3RhbnRCdWZmZXJLZXkoY29kZUJsb2Nr
LCBpKSwgbmV3SW5kZXgpOwogICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOyArK2kp
IHsKKyAgICAgICAgICAgIG1fc3dpdGNoSW1tUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9j
b2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOworICAgICAgICAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGUoKSA9IGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICB9
CiAgICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0cnVlOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgpAQCAtMzU2MiwxMiAr
MzU5MywxNSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmll
cnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVz
aXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CisgICAgICAgIG1fc3dp
dGNoSW1tUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1w
VGFibGVzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVt
YmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtp
XSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtp
XSA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkKICAg
ICAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcFtpXSA9IGk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMoKTsgKytpKQorICAgICAgICAgICAgbV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGk7CiAgICAgICAg
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsNyBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF9wdXRfdG9fYmFzZToKICAg
ICBjYXNlIG9wX3R5cGVvZjoKICAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX3N3
aXRjaF9pbW06CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAgICAgICAK
ICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsNiBAQAogI2RlZmluZSBE
RkdfRU5BQkxFX09TUl9FTlRSWSBFTkFCTEUoREZHX0pJVCkKIC8vIEdlbmVyYXRlIHN0YXRzIG9u
IGhvdyBzdWNjZXNzZnVsIHdlIHdlcmUgaW4gbWFraW5nIHVzZSBvZiB0aGUgREZHIGppdCwgYW5k
IHJlbWFpbmluZyBvbiB0aGUgaG90IHBhdGguCiAjZGVmaW5lIERGR19FTkFCTEVfU1VDQ0VTU19T
VEFUUyAwCi0vLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRoYXQgdGhlIERGRyBpcyBhYmxlIHRvIGlu
c2VydCBjb2RlIGZvciBjb250cm9sIGZsb3cgZWRnZXMuCi0jZGVmaW5lIERGR19FTkFCTEVfRURH
RV9DT0RFX1ZFUklGSUNBVElPTiAwCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsNiArNTU0LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3dp
dGNoOiB7CisgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgp
OworICAgICAgICAgICAgc3dpdGNoIChkYXRhLT5raW5kKSB7CisgICAgICAgICAgICBjYXNlIFN3
aXRjaEltbToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQ
cm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAg
c2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MCw2ICsyNTAsMTIgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkY6IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICBpZiAobm9k
ZS0+aXNTd2l0Y2goKSkgeworICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNo
RGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmNhc2VzW2ldLnZh
bHVlLCAiOiMiLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQpOworICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJkZWZhdWx0OiMiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgfQogICAgIG91dC5wcmlu
dChjb21tYSwgImJjIyIsIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgb3V0LnByaW50KCIpIik7CkBAIC0zODksMTcgKzM5NSw4IEBAIHZvaWQgR3JhcGg6OmRldGVy
bWluZVJlYWNoYWJpbGl0eSgpCiAgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdldCgpOwot
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+bGFzdCgpOwotICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhh
bmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsK
LSAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCcmFuY2goKSkgewotICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOwotICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCkpOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVN1
Y2Nlc3NvcnMoYmxvY2spOyBpLS07KQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgc3VjY2Vzc29yKGJsb2NrLCBpKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDYgQEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07
CiAKLQogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCkBAIC03MTksNiArNzE4LDcgQEAgcHVibGlj
OgogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVmZmVyRGF0
YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CisgICAgU2VnbWVudGVkVmVjdG9yPFN3aXRjaERh
dGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hT
ZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwog
ICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAg
OiBDQ2FsbEhlbHBlcnMoJmRmZy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBo
KGRmZykKICAgICAsIG1faml0Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKKyAgICAsIG1f
YmxvY2tIZWFkcyhkZmcubV9ibG9ja3Muc2l6ZSgpKQogICAgICwgbV9jdXJyZW50Q29kZU9yaWdp
bkluZGV4KDApCiB7CiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ3JhcGgu
bV92bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkBAIC0xNTUsNiArMTU2LDM0IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgZGF0YUxvZ0YoIkpJVCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVwKS4g
U2l6ZSA9ICV6dS5cbiIsIG1fY29kZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpLCBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVy
LmRlYnVnU2l6ZSgpLCBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpKTsKICNlbmRpZgorICAgIAorICAg
IEJpdFZlY3RvciB1c2VkSnVtcFRhYmxlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBo
Lm1fc3dpdGNoRGF0YS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9
IG1fZ3JhcGgubV9zd2l0Y2hEYXRhW2ldOworICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRh
YmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBDYXN0IHRv
IGludCB0byBhdm9pZCB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5ncy4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihkYXRhLmtpbmQpID09IHN0YXRpY19jYXN0
PGludD4oU3dpdGNoSW1tKSk7CisgICAgICAgIAorICAgICAgICB1c2VkSnVtcFRhYmxlcy5zZXQo
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9
CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2hdKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gdGFibGUuY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCisgICAgICAgICAg
ICB0YWJsZS5jdGlPZmZzZXRzW2pdID0gdGFibGUuY3RpRGVmYXVsdDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gZGF0YS5jYXNlcy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgIFN3aXRj
aENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CisgICAgICAgICAgICB0YWJsZS5jdGlPZmZz
ZXRzW215Q2FzZS52YWx1ZS5hc0ludDMyKCkgLSB0YWJsZS5taW5dID0KKyAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXRdKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKHVzZWRK
dW1wVGFibGVzLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgbV9jb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShpKS5jbGVhcigpOworICAg
IH0KIAogICAgIC8vIExpbmsgYWxsIGNhbGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVp
ciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
YWxscy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDYgKzQzNSw4IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgCisgICAgVmVjdG9yPExhYmVsPiYgYmxvY2tIZWFkcygp
IHsgcmV0dXJuIG1fYmxvY2tIZWFkczsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyOwpAQCAtNDYxLDYgKzQ2Myw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPENhbGxMaW5rUmVjb3JkPiBtX2NhbGxzOwogICAgIFZlY3RvcjxDYWxsRXhjZXB0aW9u
UmVjb3JkPiBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAKKyAgICBWZWN0b3I8TGFiZWw+IG1fYmxv
Y2tIZWFkczsKKwogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewogICAgICAgICBKU0NhbGxSZWNv
cmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NiArNjYsNTAgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZTsKIH07CiAKKy8vIFRoZSBTd2l0Y2hEYXRhIGFuZCBhc3NvY2lhdGVkIGRh
dGEgc3RydWN0dXJlcyBkdXBsaWNhdGUgdGhlIGluZm9ybWF0aW9uIGluCisvLyBKdW1wVGFibGUu
IFRoZSBERkcgbWF5IHVsdGltYXRlbHkgZW5kIHVwIHVzaW5nIHRoZSBKdW1wVGFibGUsIHRob3Vn
aCBpdCBtYXkKKy8vIGluc3RlYWQgZGVjaWRlIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgLSB0
aGlzIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBERkcuCisvLyBUaGVzZSBkYXRhIHN0cnVjdHVyZXMg
Z2l2ZSB0aGUgREZHIGEgaGlnaGVyLWxldmVsIHNlbWFudGljIGRlc2NyaXB0aW9uIG9mCisvLyB3
aGF0IGlzIGdvaW5nIG9uLCB3aGljaCB3aWxsIGFsbG93IGl0IHRvIG1ha2UgdGhlIHJpZ2h0IGRl
Y2lzaW9uLgorc3RydWN0IFN3aXRjaENhc2UgeworICAgIFN3aXRjaENhc2UoKQorICAgICAgICA6
IHRhcmdldChOb0Jsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3dpdGNoQ2FzZShKU1Zh
bHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAg
ICAgICAgLCB0YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2
YWx1ZTsKKyAgICBCbG9ja0luZGV4IHRhcmdldDsKK307CisKK2VudW0gU3dpdGNoS2luZCB7Cisg
ICAgU3dpdGNoSW1tCit9OworCitzdHJ1Y3QgU3dpdGNoRGF0YSB7CisgICAgLy8gSW5pdGlhbGl6
ZXMgbW9zdCBmaWVsZHMgdG8gb2J2aW91c2x5IGludmFsaWQgdmFsdWVzLiBBbnlvbmUKKyAgICAv
LyBjb25zdHJ1Y3RpbmcgdGhpcyBzaG91bGQgbWFrZSBzdXJlIHRvIGluaXRpYWxpemUgZXZlcnl0
aGluZyB0aGV5CisgICAgLy8gY2FyZSBhYm91dCBtYW51YWxseS4KKyAgICBTd2l0Y2hEYXRhKCkK
KyAgICAgICAgOiBmYWxsVGhyb3VnaChOb0Jsb2NrKQorICAgICAgICAsIGtpbmQoc3RhdGljX2Nh
c3Q8U3dpdGNoS2luZD4oLTEpKQorICAgICAgICAsIHN3aXRjaFRhYmxlSW5kZXgoVUlOVF9NQVgp
CisgICAgICAgICwgZGlkVXNlSnVtcFRhYmxlKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgIEJsb2NrSW5kZXggZmFsbFRocm91Z2g7
CisgICAgU3dpdGNoS2luZCBraW5kOworICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7Cisg
ICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7Cit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNz
aW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGlu
Z3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29k
ZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwg
b3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtNjY3LDEyICs3MTEsMTggQEAgc3RydWN0
IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQnJhbmNoOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU3dpdGNoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IFN3
aXRjaDsKKyAgICB9CiAKICAgICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgU3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBU
aHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNzE4LDYgKzc2OCwx
MiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAg
IAorICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN3aXRjaERhdGEqPihtX29w
SW5mbyk7CisgICAgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkBAIC03MjUsNiArNzgxLDggQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC03MzIsNiArNzkwLDEyIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAKICAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7
CisgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0
Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0
YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOworICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+ZmFsbFRocm91Z2g7CisgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRl
eCkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1wLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oVGhyb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NzMsNiArMTU3MywyMCBAQCBKU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTWFrZVJvcGUzCiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZt
LCBhLCBiLCBjKTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNo
SW1tVGFyZ2V0Rm9yRG91YmxlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBzaXplX3QgdGFibGVJbmRleCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBj
b2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgQVNTRVJUKHZh
bHVlLmlzRG91YmxlKCkpOworICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7
CisgICAgaW50MzJfdCBhc0ludDMyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXNEb3VibGUpOwor
ICAgIGlmIChhc0RvdWJsZSA9PSBhc0ludDMyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcio+KHRhYmxlLmN0aUZvclZhbHVlKGFzSW50MzIpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4odGFibGUuY3RpRGVmYXVsdC5leGVjdXRhYmxl
QWRkcmVzcygpKTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgq
Vl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsK
IHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKQEAgLTIxOSw2ICsyMjAsNyBAQCBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKik7CiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQg
dG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdo
aWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQg
dG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3
LDYgKzUwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKICAgICAgICAg
Y2FzZSBERkc6Okp1bXA6CiAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFN3aXRj
aDoKICAgICAgICAgY2FzZSBCcmVha3BvaW50OgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyNSw2ICszMjI1LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJyYW5jaDoKICAg
ICAgICAgZW1pdEJyYW5jaChub2RlKTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgU3dpdGNoOgorICAgICAgICBlbWl0U3dpdGNoKG5vZGUpOworICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgUmV0dXJuOiB7CiAgICAgICAgIEFTU0VSVChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciAhPSBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNzAsNiArMzE3MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRCcmFuY2gobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIGVtaXRTd2l0Y2gobm9kZSk7CisgICAgICAgIGJy
ZWFrOworCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgQVNTRVJUKEdQUkluZm86
OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsCiAgICAgLCBtX2N1cnJlbnROb2RlKDApCiAgICAgLCBtX2luZGV4SW5CbG9j
aygwKQogICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6
ZSgpKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
CiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFz
dFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKQEAgLTE1ODAsNyAr
MTU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmxvY2tIZWFkc1ttX2Jsb2NrXSA9IG1faml0Lmxh
YmVsKCk7CisgICAgbV9qaXQuYmxvY2tIZWFkcygpW21fYmxvY2tdID0gbV9qaXQubGFiZWwoKTsK
ICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVh
a3BvaW50KCk7CiAjZW5kaWYKQEAgLTE2MjcsMTMgKzE2MjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9y
aWdpbigpOwogICAgIAotICAgIGlmIChERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04p
IHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdmVyaWZpY2F0aW9uU3VjY2VlZGVkID0KLSAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgR1BSSW5mbzo6cmVn
VDAsIFRydXN0ZWRJbW0zMihtX2Jsb2NrKSk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsK
LSAgICAgICAgdmVyaWZpY2F0aW9uU3VjY2VlZGVkLmxpbmsoJm1faml0KTsKLSAgICB9Ci0KICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYK
QEAgLTE4MTgsOSArMTgxMCw2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogewog
ICAgIGNoZWNrQXJndW1lbnRUeXBlcygpOwogCi0gICAgaWYgKERGR19FTkFCTEVfRURHRV9DT0RF
X1ZFUklGSUNBVElPTikKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIEdQUklu
Zm86OnJlZ1QwKTsKLQogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgZm9yIChtX2Js
b2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxv
Y2spIHsKICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2sobV9ibG9jayk7CkBAIC0xODQxLDE4ICsx
ODMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiAgICAgICAg
IGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBjcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xp
bmVzIHdoZW4gdXNpbmcgZWRnZSBjb2RlCi0gICAgICAgIC8vIHZlcmlmaWNhdGlvbi4gQnV0IGlu
IHRoZSBmdXR1cmUsIHdlJ2xsIG5lZWQgdGhpcyBmb3Igb3RoZXIgdGhpbmdzIGFzIHdlbGwgKGxp
a2UKLSAgICAgICAgLy8gd2hlbiB3ZSBoYXZlIGdsb2JhbCByZWcgYWxsb2MpLgotICAgICAgICAv
LyBJZiB3ZSBkb24ndCBuZWVkIE9TUiBlbnRyeSB0cmFtcG9saW4KLSAgICAgICAgaWYgKCFERkdf
RU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT04pIHsKLSAgICAgICAgICAgIG1fb3NyRW50cnlI
ZWFkcy5hcHBlbmQobV9ibG9ja0hlYWRzW2Jsb2NrSW5kZXhdKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX29zckVudHJ5SGVhZHMuYXBwZW5k
KG1faml0LmxhYmVsKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihibG9ja0lu
ZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKG1fYmxv
Y2tIZWFkc1tibG9ja0luZGV4XSwgJm1faml0KTsKKyAgICAgICAgLy8gQ3VycmVudGx5IHdlIGRv
bid0IGhhdmUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzLiBXZSBjb3VsZCBhZGQgdGhlbQorICAgICAg
ICAvLyBoZXJlIGlmIG5lZWQgYmUuCisgICAgICAgIG1fb3NyRW50cnlIZWFkcy5hcHBlbmQobV9q
aXQuYmxvY2tIZWFkcygpW2Jsb2NrSW5kZXhdKTsKICAgICB9CiB9CiAKQEAgLTQ0MDEsNiArNDM4
MSw5NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgfQog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tSW50SnVtcChOb2RlKiwgU3dp
dGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBTaW1w
bGVKdW1wVGFibGUmIHRhYmxlID0gbV9qaXQuY29kZUJsb2NrKCktPmltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBtX2ppdC5zdWIzMihJbW0zMih0
YWJsZS5taW4pLCB2YWx1ZSk7CisgICAgYWRkQnJhbmNoKAorICAgICAgICBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0
cy5zaXplKCkpKSwKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRzLmJlZ2luKCkpLCBzY3JhdGNoKTsKKyAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENv
bXBpbGVyOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoKTsK
KyAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEpCit7CisgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7
CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIGVtaXRTd2l0
Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVlLmdwcigpLCB0ZW1wLmdwcigpKTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlLnVzZSgp
OworICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RJbnQgPSBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCZWxv
dywgdmFsdWVSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
ICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChub2RlLCBkYXRhLCB2YWx1ZVJlZ3MuZ3ByKCksIHNj
cmF0Y2gpOworICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOworICAgICAgICBhZGRCcmFuY2go
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Olplcm8sIHZhbHVlUmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLmdwcigpLCBk
YXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhz
Y3JhdGNoKTsKKyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKKyNlbHNlCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdEludCA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOworICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChub2RlLCBkYXRh
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoKTsKKyAgICAgICAgbm90SW50Lmxpbmso
Jm1faml0KTsKKyAgICAgICAgYWRkQnJhbmNoKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVSZWdzLnRh
Z0dQUigpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMoc2NyYXRjaCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmlu
ZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0
Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoKTsK
KyAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKKyNlbmRpZgorICAgICAgICBub1Jlc3VsdChu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdFN3aXRjaChOb2RlKiBub2RlKQoreworICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5z
d2l0Y2hEYXRhKCk7CisgICAgc3dpdGNoIChkYXRhLT5raW5kKSB7CisgICAgY2FzZSBTd2l0Y2hJ
bW06IHsKKyAgICAgICAgZW1pdFN3aXRjaEltbShub2RlLCBkYXRhKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0gfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2JyYW5jaGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJyYW5jaFJlY29yZCYgYnJh
bmNoID0gbV9icmFuY2hlc1tpXTsKKyAgICAgICAgYnJhbmNoLmp1bXAubGlua1RvKG1faml0LmJs
b2NrSGVhZHMoKVticmFuY2guZGVzdGluYXRpb25dLCAmbV9qaXQpOworICAgIH0KK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIxNiw2ICsxMjE2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
IAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRUpT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUodmFsdWUsIFRy
dXN0ZWRJbW1QdHIoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxKTsKQEAgLTE0NDUsNiArMTQ1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTVmFs
dWVSZWdzIHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUodmFsdWUucGF5bG9hZEdQUigpLCB2YWx1ZS50YWdHUFIoKSwg
VHJ1c3RlZEltbVB0cihpbmRleCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxv
YWQsIGFyZzFUYWcpOwpAQCAtMTcwOCwxNDYgKzE3MjAsNjggQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRlBS
UmVnIGxlZnQsIEZQUlJlZyByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0g
ICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAg
IHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91YmxlKGNvbmQsIGxlZnQsIHJpZ2h0KSwg
ZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFr
ZW4gPSBtX2ppdC5icmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVmdCwg
cmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRC
cmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmso
Jm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29u
ZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgYnJh
bmNoRG91YmxlTm9uWmVybyhGUFJSZWcgdmFsdWUsIEZQUlJlZyBzY3JhdGNoLCBCbG9ja0luZGV4
IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVz
dGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3Vi
bGVOb25aZXJvKHZhbHVlLCBzY3JhdGNoKSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hEb3VibGVaZXJvT3JO
YU4odmFsdWUsIHNjcmF0Y2gpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5v
dFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hEb3VibGVOb25aZXJvKHZhbHVlLCBzY3JhdGNoKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNo
MzIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0
LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNv
ZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2pp
dC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUo
ZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlv
bik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJy
YW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICB2b2lk
IGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUs
IFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChK
SVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgh
aGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24p
OwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUsIG1hc2spOwotICAg
ICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUsIG1h
c2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiAgICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
LCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJyYW5j
aFRlc3QzMihKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCB2YWx1ZSk7Ci0gICAgICAgIGVtaXRF
ZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRl
c3RpbmF0aW9uKTsKLSAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgICAgICByZXR1
cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9u
KTsKICAgICB9CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoNjQoSklUQ29tcGlsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQogICAgIHsKLSAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2g2NChjb25kLCBsZWZ0LCBy
aWdodCksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdFRha2VuID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVm
dCwgcmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxp
bmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2g2NChjb25k
LCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAjZW5kaWYKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoUHRyKEpJVENv
bXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJ
bmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0
KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGlu
YXRpb24pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAgfQog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9pZCBicmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBt
YXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKEpJVENv
bXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXZl
RWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwot
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZhbHVlLCBtYXNrKTsKLSAgICAg
ICAgZW1pdEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAg
ICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSwgbWFz
ayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
LCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOwot
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZhbHVlKTsKLSAgICAgICAgZW1p
dEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
ZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSksIGRlc3RpbmF0
aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
ICAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwg
VCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvbXBpbGVyOjppc0ludmVydGlibGUoY29uZCkpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQotICAgICAgICAgICAgcmV0
dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2YWx1ZSwgbWFzayksIGRlc3Rp
bmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0g
bV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgdmFsdWUsIG1hc2sp
OwotICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOwotICAgICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0
KTsKKyAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2YWx1
ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIEFT
U0VSVChKSVRDb21waWxlcjo6aXNJbnZlcnRpYmxlKGNvbmQpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgIHJldHVy
biBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUYWtlbiA9IG1faml0LmJy
YW5jaFRlc3Q4KEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCksIHZhbHVlKTsKLSAgICAgICAgZW1p
dEVkZ2VDb2RlKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
ZGVzdGluYXRpb24pOwotICAgICAgICBub3RUYWtlbi5saW5rKCZtX2ppdCk7CisgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlv
bik7CiAgICAgfQogICAgIAogICAgIGVudW0gRmFsbFRocm91Z2hNb2RlIHsKQEAgLTE4NTYsMzcg
KzE3OTAsMTggQEAgcHVibGljOgogICAgIH07CiAgICAgdm9pZCBqdW1wKEJsb2NrSW5kZXggZGVz
dGluYXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUgPSBBdEZhbGxUaHJvdWdo
UG9pbnQpCiAgICAgewotICAgICAgICBpZiAoaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9u
KSkKLSAgICAgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CiAgICAgICAgIGlmIChk
ZXN0aW5hdGlvbiA9PSBuZXh0QmxvY2soKQogICAgICAgICAgICAgJiYgZmFsbFRocm91Z2hNb2Rl
ID09IEF0RmFsbFRocm91Z2hQb2ludCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKLSAgICBpbmxp
bmUgYm9vbCBoYXZlRWRnZUNvZGVUb0VtaXQoQmxvY2tJbmRleCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBERkdfRU5BQkxFX0VER0VfQ09ERV9WRVJJRklDQVRJT047Ci0gICAgfQotICAgIHZvaWQg
ZW1pdEVkZ2VDb2RlKEJsb2NrSW5kZXggZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBpZiAo
IURGR19FTkFCTEVfRURHRV9DT0RFX1ZFUklGSUNBVElPTikKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGVzdGluYXRpb24pLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBtX2Jy
YW5jaGVzLmFwcGVuZChCcmFuY2hSZWNvcmQoanVtcCwgZGVzdGluYXRpb24pKTsKICAgICB9CiAK
LSAgICB2b2lkIGxpbmtCcmFuY2hlcygpCi0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYnJhbmNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEJyYW5jaFJlY29y
ZCYgYnJhbmNoID0gbV9icmFuY2hlc1tpXTsKLSAgICAgICAgICAgIGJyYW5jaC5qdW1wLmxpbmtU
byhtX2Jsb2NrSGVhZHNbYnJhbmNoLmRlc3RpbmF0aW9uXSwgJm1faml0KTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICB2b2lkIGxpbmtCcmFuY2hlcygpOwogCiAgICAgQmFzaWNCbG9jayogYmxvY2so
KQogICAgIHsKQEAgLTE5MzAsNiArMTg0NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ug
dmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4pOwogICAgIHZvaWQg
ZW1pdEJyYW5jaChOb2RlKik7CisgICAgdm9pZCBlbWl0U3dpdGNoSW1tSW50SnVtcChOb2RlKiwg
U3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpOworICAgIHZvaWQgZW1p
dFN3aXRjaEltbShOb2RlKiwgU3dpdGNoRGF0YSopOworICAgIHZvaWQgZW1pdFN3aXRjaChOb2Rl
Kik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmdPbkNlbGwoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZU5ld1N0cmluZ09iamVjdChOb2RlKik7CkBAIC0yMTg3LDcgKzIxMDUsNiBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKICAgICBSZWdpc3RlckJh
bms8RlBSSW5mbz4gbV9mcHJzOwogCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4g
bV9ibG9ja0hlYWRzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fb3NyRW50
cnlIZWFkczsKICAgICAKICAgICBzdHJ1Y3QgQnJhbmNoUmVjb3JkIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwNSw3
ICsyNTA1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9pbQogICAg
IGlmIChzY3J1dGluZWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1l
ZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc2NydXRpbmVlLmFz
SW50MzIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoc2NydXRpbmVlLmlzRG91Ymxl
KCkgJiYgc2NydXRpbmVlLmFzRG91YmxlKCkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NydXRp
bmVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0YXRpY19jYXN0PGludDMy
X3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
cmV0dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0
aUZvclZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCkuY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNTE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1MDgsNyArMTUwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSB0cnlUYWJsZVN3aXRjaChWZWN0b3I8RXhwcmVz
c2lvbk5vZGUqLCA4PiYgbGl0ZXJhbFZlY3RvciwgaW50MzJfdCYgbWluX251bSwgaW50MzJfdCYg
bWF4X251bSk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc190YWJsZVN3aXRjaE1pbmlt
dW0gPSAxMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX3RhYmxlU3dpdGNoTWluaW11
bSA9IDM7CiAgICAgICAgIENsYXVzZUxpc3ROb2RlKiBtX2xpc3QxOwogICAgICAgICBDYXNlQ2xh
dXNlTm9kZSogbV9kZWZhdWx0Q2xhdXNlOwogICAgICAgICBDbGF1c2VMaXN0Tm9kZSogbV9saXN0
MjsK
</data>
<flag name="review"
          id="226024"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>