<?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>103492</bug_id>
          
          <creation_ts>2012-11-28 00:59:25 -0800</creation_ts>
          <short_desc>Disassembly methods should be able to disassemble to any PrintStream&amp; rather than always using WTF::dataFile()</short_desc>
          <delta_ts>2012-11-30 17:24:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>103009</dependson>
          <blocked>102999</blocked>
          <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>777607</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-28 00:59:25 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777613</commentid>
    <comment_count>1</comment_count>
      <attachid>176421</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-28 01:06:11 -0800</bug_when>
    <thetext>Created attachment 176421
work in progress

This needs to wait for https://bugs.webkit.org/show_bug.cgi?id=103009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778410</commentid>
    <comment_count>2</comment_count>
      <attachid>176589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-28 15:30:10 -0800</bug_when>
    <thetext>Created attachment 176589
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778415</commentid>
    <comment_count>3</comment_count>
      <attachid>176589</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-11-28 15:34:52 -0800</bug_when>
    <thetext>Comment on attachment 176589
the patch

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

r=me with the one comment change.

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:219
&gt; +                out.print(&quot;, &quot;); // If this is the third child is the first non-empty one then make sure we have two blanks preceding it.

&quot;If the third child is the first non-empty one then make sure we have two blanks preceding it.&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780574</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-30 17:24:46 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/136069</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176421</attachid>
            <date>2012-11-28 01:06:11 -0800</date>
            <delta_ts>2012-11-28 15:30:10 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>disas.patch</filename>
            <type>text/plain</type>
            <size>31533</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1OTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEyLTExLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGlzYXNzZW1ibHkgbWV0aG9kcyBzaG91bGQgYmUgYWJsZSB0byBkaXNhc3NlbWJsZSB0byBhbnkg
UHJpbnRTdHJlYW0mIHJhdGhlciB0aGFuIGFsd2F5cyB1c2luZyBXVEY6OmRhdGFGaWxlKCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaGVkIGRp
c2Fzc2VtYmx5IGNvZGUgdG8gdXNlIFByaW50U3RyZWFtJiwgYW5kIHRvIHVzZSBwcmludCgpIHJh
dGhlciB0aGFuIHByaW50ZigpLgorCisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkpOgorICAg
ICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKERpc2Fzc2VtYmxlcik6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmludFdoaXRl
U3BhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQ29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgICogaml0L0pJVERpc2Fzc2VtYmxlci5jcHA6CisgICAgICAg
IChKU0M6OkpJVERpc2Fzc2VtYmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkpJVERpc2Fzc2Vt
Ymxlcjo6ZHVtcEZvckluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkpJVERpc2Fzc2VtYmxl
cjo6ZHVtcERpc2Fzc2VtYmx5KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKSVREaXNhc3NlbWJsZXIpOgorCiAyMDEyLTExLTI3ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBzb21lIHJlbWFpbmluZyB1c2VzIG9m
IEZJTEUqIHRvIFByaW50U3RyZWFtJi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDEzNTk1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTIgKzM5LDEyIEBAIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAg
ICBtX2xhYmVsRm9yTm9kZUluZGV4LnJlc2l6ZShncmFwaC5zaXplKCkpOwogfQogCi12b2lkIERp
c2Fzc2VtYmxlcjo6ZHVtcChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQordm9pZCBEaXNhc3NlbWJs
ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKICAg
ICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CiAgICAg
Ci0gICAgZGF0YUxvZ0YoIkdlbmVyYXRlZCBKSVQgY29kZSBmb3IgREZHIENvZGVCbG9jayAlcCwg
aW5zdHJ1Y3Rpb24gY291bnQgPSAldTpcbiIsIG1fZ3JhcGgubV9jb2RlQmxvY2ssIG1fZ3JhcGgu
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7Ci0gICAgZGF0YUxvZ0YoIiAgICBDb2Rl
IGF0IFslcCwgJXApOlxuIiwgbGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8
Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUo
KSk7CisgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgSklUIGNvZGUgZm9yIERGRyBDb2RlQmxvY2sg
IiwgUmF3UG9pbnRlcihtX2dyYXBoLm1fY29kZUJsb2NrKSwgIiwgaW5zdHJ1Y3Rpb24gY291bnQg
PSAiLCBtX2dyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKTsKKyAg
ICBvdXQucHJpbnQoIiAgICBDb2RlIGF0IFsiLCBSYXdQb2ludGVyKGxpbmtCdWZmZXIuZGVidWdB
ZGRyZXNzKCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmRlYnVnQWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpLCAiKTpcbiIpOwogICAg
IAogICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAgICBjb25zdCBjaGFyKiBkaXNh
c3NlbWJseVByZWZpeCA9ICIgICAgICAgICI7CkBAIC01NSw4ICs1NSw4IEBAIHZvaWQgRGlzYXNz
ZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGxpbmsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGR1bXBEaXNhc3NlbWJseShkaXNhc3Nl
bWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9sYWJlbEZvckJsb2NrSW5k
ZXhbYmxvY2tJbmRleF0sIGxhc3ROb2RlSW5kZXgpOwotICAgICAgICBtX2dyYXBoLmR1bXBCbG9j
a0hlYWRlcihwcmVmaXgsIGJsb2NrSW5kZXgsIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKKyAg
ICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIs
IHByZXZpb3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXhdLCBsYXN0Tm9k
ZUluZGV4KTsKKyAgICAgICAgbV9ncmFwaC5kdW1wQmxvY2tIZWFkZXIob3V0LCBwcmVmaXgsIGJs
b2NrSW5kZXgsIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKICAgICAgICAgTm9kZUluZGV4IGxh
c3ROb2RlSW5kZXhGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtibG9jay0+YXQoaSldLndpbGxIYXZlQ29kZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6
OnNob3dBbGxERkdOb2RlcygpKQpAQCAtNzQsMTkgKzc0LDI0IEBAIHZvaWQgRGlzYXNzZW1ibGVy
OjpkdW1wKExpbmtCdWZmZXImIGxpbmsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseShkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZl
ciwgcHJldmlvdXNMYWJlbCwgY3VycmVudExhYmVsLCBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1i
bHkpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1wQ29kZU9yaWdpbihwcmVmaXgsIGxhc3ROb2Rl
SW5kZXgsIGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAocHJlZml4LCBi
bG9jay0+YXQoaSkpOworICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1i
bHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIGN1cnJlbnRMYWJlbCwgbGFzdE5v
ZGVJbmRleEZvckRpc2Fzc2VtYmx5KTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcENvZGVPcmln
aW4ob3V0LCBwcmVmaXgsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAob3V0LCBwcmVmaXgsIGJsb2NrLT5hdChpKSk7CiAgICAgICAgICAgICBs
YXN0Tm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgbGFzdE5vZGVJbmRleEZv
ckRpc2Fzc2VtYmx5ID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgfQotICAgIGR1bXBE
aXNhc3NlbWJseShkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwg
bV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKLSAgICBkYXRhTG9nRigiJXMoRW5kIE9m
IE1haW4gUGF0aClcbiIsIHByZWZpeCk7Ci0gICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2VtYmx5
UHJlZml4LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9mQ29kZSwgTm9Ob2RlKTsK
KyAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwg
cHJldmlvdXNMYWJlbCwgbV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKKyAgICBvdXQu
cHJpbnQocHJlZml4LCAiKEVuZCBPZiBNYWluIFBhdGgpXG4iKTsKKyAgICBkdW1wRGlzYXNzZW1i
bHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9l
bmRPZkNvZGUsIE5vTm9kZSk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpCit7CisgICAgZHVtcChXVEY6OmRhdGFGaWxlKCksIGxpbmtCdWZmZXIp
OwogfQogCi12b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIHBy
ZWZpeCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2
aW91c0xhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXgg
Y29udGV4dCkKK3ZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjdXJy
ZW50TGFiZWwsIE5vZGVJbmRleCBjb250ZXh0KQogewogICAgIHNpemVfdCBwcmVmaXhMZW5ndGgg
PSBzdHJsZW4ocHJlZml4KTsKICAgICBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZTsKQEAgLTEw
NCw3ICsxMDksNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KGNvbnN0CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGN1cnJlbnRM
YWJlbCk7CiAgICAgcHJldmlvdXNMYWJlbCA9IGN1cnJlbnRMYWJlbDsKICAgICBBU1NFUlQoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICBkaXNhc3Nl
bWJsZShzdGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNz
KCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSks
IHByZWZpeEJ1ZmZlci5nZXQoKSwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkaXNhc3NlbWJsZShz
dGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSksIHByZWZp
eEJ1ZmZlci5nZXQoKSwgb3V0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lv
biAxMzU5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Vu
ZE9mQ29kZSA9IGxhYmVsOwogICAgIH0KICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
LCBMaW5rQnVmZmVyJik7CiAgICAgdm9pZCBkdW1wKExpbmtCdWZmZXImKTsKICAgICAKIHByaXZh
dGU6Ci0gICAgdm9pZCBkdW1wRGlzYXNzZW1ibHkoY29uc3QgY2hhciogcHJlZml4LCBMaW5rQnVm
ZmVyJiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xhYmVsLCBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29udGV4dCk7CisgICAgdm9pZCBkdW1w
RGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWZmZXIm
LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBjdXJyZW50TGFiZWwsIE5vZGVJbmRleCBjb250ZXh0KTsKICAgICAKICAgICBHcmFwaCYg
bV9ncmFwaDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydE9mQ29kZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMzU5NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsMTMgKzk1LDEzIEBAIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vz
c0QKICAgICByZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UodW5z
aWduZWQgYW1vdW50KQorc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiBv
dXQsIHVuc2lnbmVkIGFtb3VudCkKIHsKICAgICB3aGlsZSAoYW1vdW50LS0gPiAwKQotICAgICAg
ICBkYXRhTG9nRigiICIpOworICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotdm9pZCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggcHJldk5vZGVJ
bmRleCwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3ZvaWQgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4IHByZXZOb2RlSW5k
ZXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCiB7CiAgICAgaWYgKHByZXZOb2RlSW5kZXggPT0gTm9O
b2RlKQogICAgICAgICByZXR1cm47CkBAIC0xMjQsMTYgKzEyNCwxNiBAQCB2b2lkIEdyYXBoOjpk
dW1wQ29kZU9yaWdpbihjb25zdCBjaGFyKiBwCiAgICAgCiAgICAgLy8gUHJpbnQgdGhlIHBvcHMu
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7IGktLSA+
IGluZGV4T2ZEaXZlcmdlbmNlOykgewotICAgICAgICBkYXRhTG9nRigiJXMiLCBwcmVmaXgpOwot
ICAgICAgICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOwotICAgICAgICBkYXRhTG9nRigiPC0tICVw
XG4iLCBwcmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5n
ZXQoKSk7CisgICAgICAgIG91dC5wcmludChwcmVmaXgpOworICAgICAgICBwcmludFdoaXRlU3Bh
Y2Uob3V0LCBpICogMik7CisgICAgICAgIG91dC5wcmludCgiPC0tICIsIFJhd1BvaW50ZXIocHJl
dmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLCAi
XG4iKTsKICAgICB9CiAgICAgCiAgICAgLy8gUHJpbnQgdGhlIHB1c2hlcy4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpbmRleE9mRGl2ZXJnZW5jZTsgaSA8IGN1cnJlbnRJbmxpbmVTdGFjay5zaXpl
KCk7ICsraSkgewotICAgICAgICBkYXRhTG9nRigiJXMiLCBwcmVmaXgpOwotICAgICAgICBwcmlu
dFdoaXRlU3BhY2UoaSAqIDIpOwotICAgICAgICBkYXRhTG9nRigiLS0+ICVwXG4iLCBjdXJyZW50
SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICAg
ICAgb3V0LnByaW50KHByZWZpeCk7CisgICAgICAgIHByaW50V2hpdGVTcGFjZShvdXQsIGkgKiAy
KTsKKyAgICAgICAgb3V0LnByaW50KCItLT4gIiwgUmF3UG9pbnRlcihjdXJyZW50SW5saW5lU3Rh
Y2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKSwgIlxuIik7CiAgICAgfQog
fQogCkBAIC0xNDIsMTIgKzE0MiwyMSBAQCBpbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3Bh
Y2UoTm9kZSYgCiAgICAgcmV0dXJuIChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEp
ICogMjsKIH0KIAotdm9pZCBHcmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZShOb2RlJiBub2RlKQor
dm9pZCBHcmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYgb3V0LCBOb2RlJiBu
b2RlKQogewotICAgIHByaW50V2hpdGVTcGFjZShhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUp
KTsKKyAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUp
KTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBu
b2RlSW5kZXgpCit2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEVkZ2UgZWRnZSkK
K3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQo
KSksCisgICAgICAgICJAIiwgZWRnZS5pbmRleCgpLAorICAgICAgICBzcGVjdWxhdGlvblRvQWJi
cmV2aWF0ZWRTdHJpbmcoCisgICAgICAgICAgICBhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKK30K
Kwordm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgs
IE5vZGVJbmRleCBub2RlSW5kZXgpCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CkBAIC0xNTcsOSArMTY2LDkgQEAgdm9pZCBH
cmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgIGJvb2wgbXVzdEdlbmVyYXRl
ID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAt
LXJlZkNvdW50OwotICAgIAotICAgIGRhdGFMb2dGKCIlcyIsIHByZWZpeCk7Ci0gICAgcHJpbnRO
b2RlV2hpdGVTcGFjZShub2RlKTsKKworICAgIG91dC5wcmludChwcmVmaXgpOworICAgIHByaW50
Tm9kZVdoaXRlU3BhY2Uob3V0LCBub2RlKTsKIAogICAgIC8vIEV4YW1wbGUvZXhwbGFuYXRpb24g
b2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtMTc4LDk1ICsxODcsODQgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgIC8vICAgICAgICAgJCMg
ICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJp
YyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90
aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4g
dGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0
byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAg
Ly8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0
LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBkYXRh
TG9nRigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBza2lwcGVkID8gIiAgc2tpcHBl
ZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQp
OworICAgIG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBl
ZCA/ICIgIHNraXBwZWQgICIgOiAiICAgICAgICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAn
ICcsIHJlZkNvdW50KTsKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCAmJiBu
b2RlLmhhc1ZpcnR1YWxSZWdpc3RlcigpKQotICAgICAgICBkYXRhTG9nRigiJXUiLCBub2RlLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgb3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YUxvZ0YoIi0iKTsKLSAgICBkYXRhTG9nRigiPlx0
JXMoIiwgb3BOYW1lKG9wKSk7CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgIG91dC5wcmlu
dCgiPlx0Iiwgb3BOYW1lKG9wKSwgIigiKTsKICAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsK
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAg
ICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZGF0
YUxvZ0YoIiVzQCV1JXMiLAotICAgICAgICAgICAgICAgICAgICB1c2VLaW5kVG9TdHJpbmcobV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0udXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0uaW5kZXgoKSwKLSAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25Ub0FiYnJldmlhdGVkU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAg
YXQobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pLnByZWRpY3Rpb24oKSkpOworICAgICAgICAg
ICAgZHVtcChvdXQsIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmICghIW5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIlc0AldSVzIiwKLSAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG5v
ZGUuY2hpbGQxKCkudXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEo
KS5pbmRleCgpLAotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblRvQWJicmV2aWF0ZWRT
dHJpbmcoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBkdW1w
KG91dCwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nRigiLCAlc0AldSVzIiwKLSAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG5v
ZGUuY2hpbGQyKCkudXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDIo
KS5pbmRleCgpLAotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblRvQWJicmV2aWF0ZWRT
dHJpbmcoYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7IC8vIFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdl
IHByaW50IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhl
cmUgd2Fzbid0IG9uZS4KKyAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghIW5v
ZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIsICVzQCV1JXMiLAotICAgICAg
ICAgICAgICAgICAgICB1c2VLaW5kVG9TdHJpbmcobm9kZS5jaGlsZDMoKS51c2VLaW5kKCkpLAot
ICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkMygpLmluZGV4KCksCi0gICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyhhdChub2RlLmNoaWxkMygpKS5w
cmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5j
aGlsZDIoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIElmIHRoaXMgaXMg
dGhlIHRoaXJkIGNoaWxkIGlzIHRoZSBmaXJzdCBub24tZW1wdHkgb25lIHRoZW4gbWFrZSBzdXJl
IHdlIGhhdmUgdHdvIGJsYW5rcyBwcmVjZWRpbmcgaXQuCisgICAgICAgICAgICBvdXQucHJpbnQo
IiwgIik7CisgICAgICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBoYXNQcmludGVkID0gISFu
b2RlLmNoaWxkMSgpOwogICAgIH0KIAogICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmco
bm9kZS5mbGFncygpKSkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiVzJXMiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKKyAgICAgICAgb3V0
LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxh
Z3MoKSkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUu
aGFzQXJyYXlNb2RlKCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiVzJXMiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQucHJp
bnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5hcnJheU1vZGUoKS50b1N0cmluZygpKTsK
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmIChub2RlLmhhc1Zhck51
bWJlcigpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlc3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgbm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8g
IiwgIiA6ICIiLCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewotICAg
ICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICIlc2dsb2JhbCV1KCVwKSIsIGhhc1ByaW50ZWQg
PyAiLCAiIDogIiIsCi0gICAgICAgICAgICBnbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksCi0gICAgICAgICAg
ICBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQg
PyAiLCAiIDogIiIsICJnbG9iYWwiLCBnbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
ZmluZFJlZ2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRl
cihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgIikiKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CiAgICAgfQogICAgIGlmIChub2RlLmhhc0lkZW50aWZpZXIoKSkgewotICAgICAgICBkYXRh
TG9nRigiJXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7
CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNTdHJ1
Y3R1cmVTZXQoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0
dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlc3N0cnVjdCgl
cDogJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSwg
aW5kZXhpbmdUeXBlVG9TdHJpbmcobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3Ry
dWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIGluZGV4aW5n
VHlwZVRvU3RyaW5nKG5vZGUuc3RydWN0dXJlU2V0KClbaV0tPmluZGV4aW5nVHlwZSgpKSwgIiki
KTsKICAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAg
IGlmIChub2RlLmhhc1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlc3N0cnVjdCgl
cDogJXMpIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUoKSwgaW5kZXhp
bmdUeXBlVG9TdHJpbmcobm9kZS5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAg
ICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRl
cihub2RlLnN0cnVjdHVyZSgpKSwgIjogIiwgaW5kZXhpbmdUeXBlVG9TdHJpbmcobm9kZS5zdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkgewot
ICAgICAgICBkYXRhTG9nRigiJXNzdHJ1Y3QoJXAgLT4gJXApIiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLCBu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgb3V0
LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAiIC0+ICIsIFJh
d1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIp
Iik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNG
dW5jdGlvbigpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyVwIiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgbm9kZS5mdW5jdGlvbigpKTsKKyAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIFJhd1BvaW50ZXIobm9kZS5mdW5jdGlvbigpKSk7CiAgICAgICAgIGhhc1ByaW50
ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNzRGF0YSgpKSB7
CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwotICAgICAgICBkYXRh
TG9nRigiJXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nl
c3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAKLSAgICAgICAgZGF0YUxvZ0YoIiwgJWx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
c3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAi
eyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJO
dW1iZXIpLnN0cmluZygpLCAifSIpOworICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RvcmFnZUFj
Y2Vzc0RhdGEub2Zmc2V0KTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAg
IEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUuaGFzTG9jYWwoKSk7
CkBAIC0yNzQsMTM4ICsyNzIsMTM5IEBAIHZvaWQgR3JhcGg6OmR1bXAoY29uc3QgY2hhciogcHJl
Zml4LCBOb2QKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpbnQgb3BlcmFuZCA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpCi0gICAgICAgICAgICBkYXRhTG9nRigiJXNhcmcldSglcykiLCBoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgbmFtZU9mVmFyaWFibGVB
Y2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAgICAgICAgb3V0LnByaW50KGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwg
IigiLCBuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YUxvZ0YoIiVzciV1KCVzKSIsIGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsIG9wZXJhbmQsIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCAiciIsIG9wZXJhbmQsICIoIiwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxl
QWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAg
ICBpZiAobm9kZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVk
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIiwgIik7Ci0gICAgICAgIGRhdGFMb2dGKCIldTpbIiwg
bm9kZS5zdGFydENvbnN0YW50KCkpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAg
ICAgICBvdXQucHJpbnQobm9kZS5zdGFydENvbnN0YW50KCksICI6WyIpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsKLSAgICAgICAgICAg
IGRhdGFMb2dGKCIlcyIsIG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLnN0YXJ0Q29u
c3RhbnQoKSlbaV0uZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIs
ICIpOworICAgICAgICAgICAgb3V0LnByaW50KG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihu
b2RlLnN0YXJ0Q29uc3RhbnQoKSlbaV0uZGVzY3JpcHRpb24oKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZGF0YUxvZ0YoIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCJdIik7CiAgICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNJbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIsICIpOwotICAg
ICAgICBkYXRhTG9nRigiJXMiLCBpbmRleGluZ1R5cGVUb1N0cmluZyhub2RlLmluZGV4aW5nVHlw
ZSgpKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludChp
bmRleGluZ1R5cGVUb1N0cmluZyhub2RlLmluZGV4aW5nVHlwZSgpKSk7CiAgICAgfQogICAgIGlm
IChvcCA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyQldSIsIGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIG91dC5wcmlu
dChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiJCIsIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAg
ICAgICBkYXRhTG9nRigiID0gJXMiLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgb3V0
LnByaW50KCIgPSAiLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9
IHRydWU7CiAgICAgfQogICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICBk
YXRhTG9nRigiJXMlcCIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUud2Vha0NvbnN0YW50
KCkpOworICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRl
cihub2RlLndlYWtDb25zdGFudCgpKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAg
IGRhdGFMb2dGKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS50YWtlbkJs
b2NrSW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAi
VDojIiwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBkYXRhTG9nRigi
JXNGOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4
KCkpOworICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIkY6IyIsIG5v
ZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAg
ICB9Ci0gICAgZGF0YUxvZ0YoIiVzYmMjJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2Rl
LmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsICJiYyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgaGFz
UHJpbnRlZCA9IHRydWU7CisgICAgCiAgICAgKHZvaWQpaGFzUHJpbnRlZDsKICAgICAKLSAgICBk
YXRhTG9nRigiKSIpOworICAgIG91dC5wcmludCgiKSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7
CiAgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgcHJlZGljdGluZyAlcyVzIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIHNwZWN1bGF0aW9uVG9TdHJp
bmcobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBmb3JjaW5nIGRvdWJs
ZSIgOiAiIik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIgIHByZWRpY3RpbmcgJXMiLCBzcGVjdWxhdGlvblRvU3RyaW5n
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHBy
ZWRpY3RpbmcgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkp
KTsKICAgICB9CiAgICAgCi0gICAgZGF0YUxvZ0YoIlxuIik7CisgICAgb3V0LnByaW50KCJcbiIp
OwogfQogCi12b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoY29uc3QgY2hhciogcHJlZml4LCBC
bG9ja0luZGV4IGJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUpCit2
b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciog
cHJlZml4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVt
cE1vZGUpCiB7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKIAotICAgIGRhdGFMb2dGKCIlc0Jsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCBwcmVm
aXgsIChpbnQpYmxvY2tJbmRleCwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNo
YWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFy
Z2V0KSIgOiAiIik7Ci0gICAgZGF0YUxvZ0YoIiVzICBQcmVkZWNlc3NvcnM6IiwgcHJlZml4KTsK
KyAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKGJjIyIsIGJs
b2NrLT5ieXRlY29kZUJlZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNr
aXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIp
OworICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKLSAgICAg
ICAgZGF0YUxvZ0YoIiAjJXUiLCBibG9jay0+bV9wcmVkZWNlc3NvcnNbaV0pOwotICAgIGRhdGFM
b2dGKCJcbiIpOworICAgICAgICBvdXQucHJpbnQoIiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2ldKTsKKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiVzICBEb21pbmF0ZWQgYnk6IiwgcHJlZml4KTsKKyAg
ICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBp
ZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoaSwgYmxvY2tJbmRleCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBkYXRhTG9nRigiICMlbHUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihpKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAg
ICAgIH0KLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyAgRG9t
aW5hdGVzOiIsIHByZWZpeCk7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIW1fZG9taW5h
dG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihpKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZGF0YUxvZ0YoIlxuIik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9Ci0gICAg
ZGF0YUxvZ0YoIiVzICBQaGkgTm9kZXM6IiwgcHJlZml4KTsKKyAgICBvdXQucHJpbnQocHJlZml4
LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhp
cy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gYmxvY2st
PnBoaXNbaV07CiAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBhdChwaGlOb2RlSW5kZXgpOwogICAg
ICAgICBpZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0g
RHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkYXRhTG9n
RigiIEAldS0+KCIsIHBoaU5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlO
b2RlSW5kZXgsICItPigiKTsKICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCJAJXUiLCBwaGlOb2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAg
ICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAg
ICAgIGlmIChwaGlOb2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiwg
QCV1IiwgcGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgQCIsIHBoaU5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KHBoaU5vZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIsIEAldSIs
IHBoaU5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBkYXRhTG9nRigiKSVzIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkg
PyAiLCIgOiAiIik7CisgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMu
c2l6ZSgpID8gIiwiIDogIiIpOwogICAgIH0KLSAgICBkYXRhTG9nRigiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXAoKQordm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KQogewogICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2Rl
OwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkdW1wQmxvY2tIZWFkZXIo
IiIsIGIsIER1bXBBbGxQaGlzKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgdmFycyBiZWZvcmU6ICIp
OworICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYiwgRHVtcEFsbFBoaXMpOworICAg
ICAgICBvdXQucHJpbnQoIiAgdmFycyBiZWZvcmU6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNm
YUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVh
ZCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFs
dWVzQXRIZWFkLCBvdXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nRigiPGVt
cHR5PiIpOwotICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgdmFy
IGxpbmtzOiAiKTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQs
IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAg
b3V0LnByaW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+
dmFyaWFibGVzQXRIZWFkLCBvdXQpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBkdW1wQ29kZU9yaWdpbigiIiwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKTsKLSAgICAg
ICAgICAgIGR1bXAoIiIsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdp
bihvdXQsICIiLCBsYXN0Tm9kZUluZGV4LCBibG9jay0+YXQoaSkpOworICAgICAgICAgICAgZHVt
cChvdXQsICIiLCBibG9jay0+YXQoaSkpOwogICAgICAgICAgICAgbGFzdE5vZGVJbmRleCA9IGJs
b2NrLT5hdChpKTsKICAgICAgICAgfQotICAgICAgICBkYXRhTG9nRigiICB2YXJzIGFmdGVyOiAi
KTsKKyAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAgICBpZiAoYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVl
c0F0VGFpbCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9j
ay0+dmFsdWVzQXRUYWlsLCBvdXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9n
RigiPGVtcHR5PiIpOwotICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgdmFyIGxpbmtzOiAiKTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAg
ICAgICAgb3V0LnByaW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhi
bG9jay0+dmFyaWFibGVzQXRUYWlsLCBvdXQpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxMzU5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5MCwxNiArMTkwLDE3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBD
b2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlv
biB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCi0gICAgdm9pZCBkdW1wKCk7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgZW51
bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwotICAg
IHZvaWQgZHVtcEJsb2NrSGVhZGVyKGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhp
Tm9kZUR1bXBNb2RlKTsKLSAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5k
ZXgpOworICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUpOworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYsIEVkZ2UpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIq
IHByZWZpeCwgTm9kZUluZGV4KTsKICAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3Bh
Y2UoTm9kZSYpOwotICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoTm9kZSYpOwor
ICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlJik7
CiAKICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRp
ZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuCi0g
ICAgdm9pZCBkdW1wQ29kZU9yaWdpbihjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9k
ZUluZGV4KTsKKyAgICB2b2lkIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hh
ciogcHJlZml4LCBOb2RlSW5kZXgsIE5vZGVJbmRleCk7CiAKICAgICBCbG9ja0luZGV4IGJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWdu
ZWQgYnl0ZWNvZGVCZWdpbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDEzNTk1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEg
KzQ0LDExIEBAIEpJVERpc2Fzc2VtYmxlcjo6fkpJVERpc2Fzc2VtYmxlcigpCiB7CiB9CiAKLXZv
aWQgSklURGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJ
VERpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogewotICAgIGRhdGFMb2dGKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgQ29kZUJsb2NrICVw
LCBpbnN0cnVjdGlvbiBjb3VudCA9ICV1OlxuIiwgbV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkpOwotICAgIGRhdGFMb2dGKCIgICAgQ29kZSBhdCBbJXAsICVwKTpc
biIsIGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVm
ZmVyLmRlYnVnQWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpOwotICAgIGR1bXBE
aXNhc3NlbWJseShsaW5rQnVmZmVyLCBtX3N0YXJ0T2ZDb2RlLCBtX2xhYmVsRm9yQnl0ZWNvZGVJ
bmRleEluTWFpblBhdGhbMF0pOworICAgIG91dC5wcmludCgiQmFzZWxpbmUgSklUIGNvZGUgZm9y
IENvZGVCbG9jayAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiwgaW5zdHJ1Y3Rpb24gY291
bnQgPSAiLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIiAgIENvZGUgYXQgWyIsIFJhd1BvaW50ZXIobGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3Mo
KSksICIsICIsIFJhd1BvaW50ZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdB
ZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSksICIpOlxuIik7CisgICAgZHVtcERp
c2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZlciwgbV9zdGFydE9mQ29kZSwgbV9sYWJlbEZvckJ5dGVj
b2RlSW5kZXhJbk1haW5QYXRoWzBdKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
Zmlyc3RTbG93TGFiZWw7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGFiZWxGb3JC
eXRlY29kZUluZGV4SW5TbG93UGF0aC5zaXplKCk7ICsraSkgewpAQCAtNTcsMzAgKzU3LDM1IEBA
IHZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGwKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMobGlua0J1ZmZl
ciwgIiAgICAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGgsIGZpcnN0U2xvd0xh
YmVsLmlzU2V0KCkgPyBmaXJzdFNsb3dMYWJlbCA6IG1fZW5kT2ZTbG93UGF0aCk7Ci0gICAgZGF0
YUxvZ0YoIiAgICAoRW5kIE9mIE1haW4gUGF0aClcbiIpOwotICAgIGR1bXBGb3JJbnN0cnVjdGlv
bnMobGlua0J1ZmZlciwgIiAgICAoUykgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJblNsb3dQ
YXRoLCBtX2VuZE9mU2xvd1BhdGgpOwotICAgIGRhdGFMb2dGKCIgICAgKEVuZCBPZiBTbG93IFBh
dGgpXG4iKTsKKyAgICBkdW1wRm9ySW5zdHJ1Y3Rpb25zKG91dCwgbGlua0J1ZmZlciwgIiAgICAi
LCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGgsIGZpcnN0U2xvd0xhYmVsLmlzU2V0
KCkgPyBmaXJzdFNsb3dMYWJlbCA6IG1fZW5kT2ZTbG93UGF0aCk7CisgICAgb3V0LnByaW50KCIg
ICAgKEVuZCBPZiBNYWluIFBhdGgpXG4iKTsKKyAgICBkdW1wRm9ySW5zdHJ1Y3Rpb25zKG91dCwg
bGlua0J1ZmZlciwgIiAgICAoUykgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJblNsb3dQYXRo
LCBtX2VuZE9mU2xvd1BhdGgpOworICAgIG91dC5wcmludCgiICAgIChFbmQgT2YgU2xvdyBQYXRo
KVxuIik7CisKKyAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBsaW5rQnVmZmVyLCBtX2VuZE9mU2xv
d1BhdGgsIG1fZW5kT2ZDb2RlKTsKK30KIAotICAgIGR1bXBEaXNhc3NlbWJseShsaW5rQnVmZmVy
LCBtX2VuZE9mU2xvd1BhdGgsIG1fZW5kT2ZDb2RlKTsKK3ZvaWQgSklURGlzYXNzZW1ibGVyOjpk
dW1wKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgZHVtcChXVEY6OmRhdGFGaWxlKCks
IGxpbmtCdWZmZXIpOwogfQogCi12b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcEZvckluc3RydWN0
aW9ucyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBjb25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw+JiBsYWJlbHMsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRM
YWJlbCkKK3ZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRm9ySW5zdHJ1Y3Rpb25zKFByaW50U3Ry
ZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIGNvbnN0IGNoYXIqIHByZWZpeCwgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4mIGxhYmVscywgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGVuZExhYmVsKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGFiZWxzLnNpemUo
KTspIHsKICAgICAgICAgaWYgKCFsYWJlbHNbaV0uaXNTZXQoKSkgewogICAgICAgICAgICAgaSsr
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgZGF0YUxvZ0YoIiVz
IiwgcHJlZml4KTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCk7CiAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKGkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5leHRJbmRleCA9IGkgKyAxOyA7
IG5leHRJbmRleCsrKSB7CiAgICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IGxhYmVscy5zaXpl
KCkpIHsKLSAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHkobGlua0J1ZmZlciwgbGFiZWxz
W2ldLCBlbmRMYWJlbCk7CisgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlu
a0J1ZmZlciwgbGFiZWxzW2ldLCBlbmRMYWJlbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxhYmVsc1tuZXh0SW5kZXhdLmlzU2V0KCkp
IHsKLSAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHkobGlua0J1ZmZlciwgbGFiZWxzW2ld
LCBsYWJlbHNbbmV4dEluZGV4XSk7CisgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91
dCwgbGlua0J1ZmZlciwgbGFiZWxzW2ldLCBsYWJlbHNbbmV4dEluZGV4XSk7CiAgICAgICAgICAg
ICAgICAgaSA9IG5leHRJbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTg4LDExICs5MywxMSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcEZvckluc3Ry
dWN0aW9uCiAgICAgfQogfQogCi12b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmcm9tLCBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgdG8pCit2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2Vt
Ymx5KFByaW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCiB7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGZyb20pOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
dG8pOwotICAgIGRpc2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odG9Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGZyb21Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgIiAgICAgICAgIiwgV1RGOjpk
YXRhRmlsZSgpKTsKKyAgICBkaXNhc3NlbWJsZShmcm9tTG9jYXRpb24sIGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHRvTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pihmcm9tTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksICIgICAgICAgICIs
IG91dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzU5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NywxMCArNTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5kT2ZDb2RlKE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBsYWJlbCkgeyBtX2VuZE9mQ29kZSA9IGxhYmVsOyB9CiAgICAgCiAgICAgdm9p
ZCBkdW1wKExpbmtCdWZmZXImKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBMaW5rQnVm
ZmVyJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkdW1wRm9ySW5zdHJ1Y3Rpb25zKExpbmtCdWZm
ZXImLCBjb25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+JiBs
YWJlbHMsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCk7Ci0gICAgdm9pZCBkdW1wRGlz
YXNzZW1ibHkoTGlua0J1ZmZlciYsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmcm9tLCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgdG8pOworICAgIHZvaWQgZHVtcEZvckluc3RydWN0aW9ucyhQcmludFN0
cmVhbSYsIExpbmtCdWZmZXImLCBjb25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw+JiBsYWJlbHMsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCk7Cisg
ICAgdm9pZCBkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJiwgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGZyb20sIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0byk7CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydE9mQ29kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176589</attachid>
            <date>2012-11-28 15:30:10 -0800</date>
            <delta_ts>2012-11-28 15:34:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>disas.patch</filename>
            <type>text/plain</type>
            <size>31584</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2MDY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEyLTExLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGlzYXNzZW1ibHkgbWV0aG9kcyBzaG91bGQgYmUgYWJsZSB0byBkaXNhc3NlbWJsZSB0byBhbnkg
UHJpbnRTdHJlYW0mIHJhdGhlciB0aGFuIGFsd2F5cyB1c2luZyBXVEY6OmRhdGFGaWxlKCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaGVkIGRp
c2Fzc2VtYmx5IGNvZGUgdG8gdXNlIFByaW50U3RyZWFtJiwgYW5kIHRvIHVzZSBwcmludCgpIHJh
dGhlciB0aGFuIHByaW50ZigpLgorCisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkpOgorICAg
ICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKERpc2Fzc2VtYmxlcik6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmludFdoaXRl
U3BhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQ29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgICogaml0L0pJVERpc2Fzc2VtYmxlci5jcHA6CisgICAgICAg
IChKU0M6OkpJVERpc2Fzc2VtYmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkpJVERpc2Fzc2Vt
Ymxlcjo6ZHVtcEZvckluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkpJVERpc2Fzc2VtYmxl
cjo6ZHVtcERpc2Fzc2VtYmx5KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKSVREaXNhc3NlbWJsZXIpOgorCiAyMDEyLTExLTI4ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHNheSBk
YXRhTG9nKCJjb3VudCA9ICIsIGNvdW50LCAiXG4iKSBpbnN0ZWFkIG9mIGRhdGFMb2dGKCJjb3Vu
dCA9ICVkXG4iLCBjb3VudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlz
YXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDEzNjA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5
LDEyIEBAIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICBtX2xh
YmVsRm9yTm9kZUluZGV4LnJlc2l6ZShncmFwaC5zaXplKCkpOwogfQogCi12b2lkIERpc2Fzc2Vt
Ymxlcjo6ZHVtcChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQordm9pZCBEaXNhc3NlbWJsZXI6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKICAgICBtX2dy
YXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CiAgICAgCi0gICAg
ZGF0YUxvZ0YoIkdlbmVyYXRlZCBKSVQgY29kZSBmb3IgREZHIENvZGVCbG9jayAlcCwgaW5zdHJ1
Y3Rpb24gY291bnQgPSAldTpcbiIsIG1fZ3JhcGgubV9jb2RlQmxvY2ssIG1fZ3JhcGgubV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7Ci0gICAgZGF0YUxvZ0YoIiAgICBDb2RlIGF0IFsl
cCwgJXApOlxuIiwgbGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+
KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSk7Cisg
ICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgSklUIGNvZGUgZm9yIERGRyBDb2RlQmxvY2sgIiwgUmF3
UG9pbnRlcihtX2dyYXBoLm1fY29kZUJsb2NrKSwgIiwgaW5zdHJ1Y3Rpb24gY291bnQgPSAiLCBt
X2dyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKTsKKyAgICBvdXQu
cHJpbnQoIiAgICBDb2RlIGF0IFsiLCBSYXdQb2ludGVyKGxpbmtCdWZmZXIuZGVidWdBZGRyZXNz
KCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVn
QWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpLCAiKTpcbiIpOwogICAgIAogICAg
IGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAgICBjb25zdCBjaGFyKiBkaXNhc3NlbWJs
eVByZWZpeCA9ICIgICAgICAgICI7CkBAIC01NSw4ICs1NSw4IEBAIHZvaWQgRGlzYXNzZW1ibGVy
OjpkdW1wKExpbmtCdWZmZXImIGxpbmsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGR1bXBEaXNhc3NlbWJseShkaXNhc3NlbWJseVBy
ZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxv
Y2tJbmRleF0sIGxhc3ROb2RlSW5kZXgpOwotICAgICAgICBtX2dyYXBoLmR1bXBCbG9ja0hlYWRl
cihwcmVmaXgsIGJsb2NrSW5kZXgsIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKKyAgICAgICAg
ZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZp
b3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXhdLCBsYXN0Tm9kZUluZGV4
KTsKKyAgICAgICAgbV9ncmFwaC5kdW1wQmxvY2tIZWFkZXIob3V0LCBwcmVmaXgsIGJsb2NrSW5k
ZXgsIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKICAgICAgICAgTm9kZUluZGV4IGxhc3ROb2Rl
SW5kZXhGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghbV9ncmFw
aFtibG9jay0+YXQoaSldLndpbGxIYXZlQ29kZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6OnNob3dB
bGxERkdOb2RlcygpKQpAQCAtNzQsMTkgKzc0LDI0IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1w
KExpbmtCdWZmZXImIGxpbmsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGR1bXBEaXNhc3NlbWJseShkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJl
dmlvdXNMYWJlbCwgY3VycmVudExhYmVsLCBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1ibHkpOwot
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wQ29kZU9yaWdpbihwcmVmaXgsIGxhc3ROb2RlSW5kZXgs
IGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAocHJlZml4LCBibG9jay0+
YXQoaSkpOworICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVm
aXgsIGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIGN1cnJlbnRMYWJlbCwgbGFzdE5vZGVJbmRl
eEZvckRpc2Fzc2VtYmx5KTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcENvZGVPcmlnaW4ob3V0
LCBwcmVmaXgsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBtX2dy
YXBoLmR1bXAob3V0LCBwcmVmaXgsIGJsb2NrLT5hdChpKSk7CiAgICAgICAgICAgICBsYXN0Tm9k
ZUluZGV4ID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgbGFzdE5vZGVJbmRleEZvckRpc2Fz
c2VtYmx5ID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgfQotICAgIGR1bXBEaXNhc3Nl
bWJseShkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9lbmRP
Zk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKLSAgICBkYXRhTG9nRigiJXMoRW5kIE9mIE1haW4g
UGF0aClcbiIsIHByZWZpeCk7Ci0gICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2VtYmx5UHJlZml4
LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9mQ29kZSwgTm9Ob2RlKTsKKyAgICBk
dW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlv
dXNMYWJlbCwgbV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKKyAgICBvdXQucHJpbnQo
cHJlZml4LCAiKEVuZCBPZiBNYWluIFBhdGgpXG4iKTsKKyAgICBkdW1wRGlzYXNzZW1ibHkob3V0
LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9lbmRPZkNv
ZGUsIE5vTm9kZSk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpCit7CisgICAgZHVtcChXVEY6OmRhdGFGaWxlKCksIGxpbmtCdWZmZXIpOwogfQog
Ci12b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIHByZWZpeCwg
TGlua0J1ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xh
YmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29udGV4
dCkKK3ZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjdXJyZW50TGFi
ZWwsIE5vZGVJbmRleCBjb250ZXh0KQogewogICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJs
ZW4ocHJlZml4KTsKICAgICBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZTsKQEAgLTEwNCw3ICsx
MDksNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KGNvbnN0CiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGN1cnJlbnRMYWJlbCk7
CiAgICAgcHJldmlvdXNMYWJlbCA9IGN1cnJlbnRMYWJlbDsKICAgICBBU1NFUlQoYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICBkaXNhc3NlbWJsZShz
dGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSksIHByZWZp
eEJ1ZmZlci5nZXQoKSwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkaXNhc3NlbWJsZShzdGFydCwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSksIHByZWZpeEJ1ZmZl
ci5nZXQoKSwgb3V0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzYw
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2VuZE9mQ29k
ZSA9IGxhYmVsOwogICAgIH0KICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBMaW5r
QnVmZmVyJik7CiAgICAgdm9pZCBkdW1wKExpbmtCdWZmZXImKTsKICAgICAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBkdW1wRGlzYXNzZW1ibHkoY29uc3QgY2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiwg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29udGV4dCk7CisgICAgdm9pZCBkdW1wRGlzYXNz
ZW1ibHkoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWZmZXImLCBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBj
dXJyZW50TGFiZWwsIE5vZGVJbmRleCBjb250ZXh0KTsKICAgICAKICAgICBHcmFwaCYgbV9ncmFw
aDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydE9mQ29kZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMzYwNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUs
MTMgKzk1LDEzIEBAIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0QKICAg
ICByZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UodW5zaWduZWQg
YW1vdW50KQorc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiBvdXQsIHVu
c2lnbmVkIGFtb3VudCkKIHsKICAgICB3aGlsZSAoYW1vdW50LS0gPiAwKQotICAgICAgICBkYXRh
TG9nRigiICIpOworICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVt
cENvZGVPcmlnaW4oY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggcHJldk5vZGVJbmRleCwg
Tm9kZUluZGV4IG5vZGVJbmRleCkKK3ZvaWQgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4IHByZXZOb2RlSW5kZXgsIE5v
ZGVJbmRleCBub2RlSW5kZXgpCiB7CiAgICAgaWYgKHByZXZOb2RlSW5kZXggPT0gTm9Ob2RlKQog
ICAgICAgICByZXR1cm47CkBAIC0xMjQsMTYgKzEyNCwxNiBAQCB2b2lkIEdyYXBoOjpkdW1wQ29k
ZU9yaWdpbihjb25zdCBjaGFyKiBwCiAgICAgCiAgICAgLy8gUHJpbnQgdGhlIHBvcHMuCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7IGktLSA+IGluZGV4
T2ZEaXZlcmdlbmNlOykgewotICAgICAgICBkYXRhTG9nRigiJXMiLCBwcmVmaXgpOwotICAgICAg
ICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOwotICAgICAgICBkYXRhTG9nRigiPC0tICVwXG4iLCBw
cmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7
CisgICAgICAgIG91dC5wcmludChwcmVmaXgpOworICAgICAgICBwcmludFdoaXRlU3BhY2Uob3V0
LCBpICogMik7CisgICAgICAgIG91dC5wcmludCgiPC0tICIsIFJhd1BvaW50ZXIocHJldmlvdXNJ
bmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLCAiXG4iKTsK
ICAgICB9CiAgICAgCiAgICAgLy8gUHJpbnQgdGhlIHB1c2hlcy4KICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpbmRleE9mRGl2ZXJnZW5jZTsgaSA8IGN1cnJlbnRJbmxpbmVTdGFjay5zaXplKCk7ICsr
aSkgewotICAgICAgICBkYXRhTG9nRigiJXMiLCBwcmVmaXgpOwotICAgICAgICBwcmludFdoaXRl
U3BhY2UoaSAqIDIpOwotICAgICAgICBkYXRhTG9nRigiLS0+ICVwXG4iLCBjdXJyZW50SW5saW5l
U3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICAgICAgb3V0
LnByaW50KHByZWZpeCk7CisgICAgICAgIHByaW50V2hpdGVTcGFjZShvdXQsIGkgKiAyKTsKKyAg
ICAgICAgb3V0LnByaW50KCItLT4gIiwgUmF3UG9pbnRlcihjdXJyZW50SW5saW5lU3RhY2tbaV0u
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKSwgIlxuIik7CiAgICAgfQogfQogCkBA
IC0xNDIsMTIgKzE0MiwyMSBAQCBpbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9k
ZSYgCiAgICAgcmV0dXJuIChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMjsK
IH0KIAotdm9pZCBHcmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZShOb2RlJiBub2RlKQordm9pZCBH
cmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYgb3V0LCBOb2RlJiBub2RlKQog
ewotICAgIHByaW50V2hpdGVTcGFjZShhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKKyAg
ICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKIH0K
IAotdm9pZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBub2RlSW5k
ZXgpCit2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEVkZ2UgZWRnZSkKK3sKKyAg
ICBvdXQucHJpbnQoCisgICAgICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCisg
ICAgICAgICJAIiwgZWRnZS5pbmRleCgpLAorICAgICAgICBzcGVjdWxhdGlvblRvQWJicmV2aWF0
ZWRTdHJpbmcoCisgICAgICAgICAgICBhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKK30KKwordm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJ
bmRleCBub2RlSW5kZXgpCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
Tm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CkBAIC0xNTcsOSArMTY2LDkgQEAgdm9pZCBHcmFwaDo6
ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9k
ZS5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNv
dW50OwotICAgIAotICAgIGRhdGFMb2dGKCIlcyIsIHByZWZpeCk7Ci0gICAgcHJpbnROb2RlV2hp
dGVTcGFjZShub2RlKTsKKworICAgIG91dC5wcmludChwcmVmaXgpOworICAgIHByaW50Tm9kZVdo
aXRlU3BhY2Uob3V0LCBub2RlKTsKIAogICAgIC8vIEV4YW1wbGUvZXhwbGFuYXRpb24gb2YgZGF0
YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtMTc4LDk1ICsxODcsODQgQEAgdm9pZCBHcmFw
aDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgIC8vICAgICAgICAgJCMgICAtIHRo
ZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25z
dGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNp
bWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENv
ZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1w
KCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAg
ICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2Vk
IGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBkYXRhTG9nRigi
JSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6
ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOworICAg
IG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIg
IHNraXBwZWQgICIgOiAiICAgICAgICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJl
ZkNvdW50KTsKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCAmJiBub2RlLmhh
c1ZpcnR1YWxSZWdpc3RlcigpKQotICAgICAgICBkYXRhTG9nRigiJXUiLCBub2RlLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgb3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgZGF0YUxvZ0YoIi0iKTsKLSAgICBkYXRhTG9nRigiPlx0JXMoIiwg
b3BOYW1lKG9wKSk7CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgIG91dC5wcmludCgiPlx0
Iiwgb3BOYW1lKG9wKSwgIigiKTsKICAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICBpZiAo
aGFzUHJpbnRlZCkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIiwgIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZGF0YUxvZ0Yo
IiVzQCV1JXMiLAotICAgICAgICAgICAgICAgICAgICB1c2VLaW5kVG9TdHJpbmcobV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0udXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0uaW5kZXgoKSwKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25Ub0FiYnJldmlhdGVkU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgYXQobV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgZHVt
cChvdXQsIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmICghIW5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dG
KCIlc0AldSVzIiwKLSAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG5vZGUuY2hp
bGQxKCkudXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpLAotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblRvQWJicmV2aWF0ZWRTdHJpbmco
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBkdW1wKG91dCwg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigi
LCAlc0AldSVzIiwKLSAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG5vZGUuY2hp
bGQyKCkudXNlS2luZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDIoKS5pbmRl
eCgpLAotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblRvQWJicmV2aWF0ZWRTdHJpbmco
YXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBvdXQucHJpbnQo
IiwgIik7IC8vIFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdlIHByaW50
IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhlcmUgd2Fz
bid0IG9uZS4KKyAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghIW5vZGUuY2hp
bGQzKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIsICVzQCV1JXMiLAotICAgICAgICAgICAg
ICAgICAgICB1c2VLaW5kVG9TdHJpbmcobm9kZS5jaGlsZDMoKS51c2VLaW5kKCkpLAotICAgICAg
ICAgICAgICAgICAgICBub2RlLmNoaWxkMygpLmluZGV4KCksCi0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyhhdChub2RlLmNoaWxkMygpKS5wcmVkaWN0
aW9uKCkpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5jaGlsZDIo
KSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIElmIHRoaXMgaXMgdGhlIHRo
aXJkIGNoaWxkIGlzIHRoZSBmaXJzdCBub24tZW1wdHkgb25lIHRoZW4gbWFrZSBzdXJlIHdlIGhh
dmUgdHdvIGJsYW5rcyBwcmVjZWRpbmcgaXQuCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
CisgICAgICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBoYXNQ
cmludGVkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBoYXNQcmludGVkID0gISFub2RlLmNo
aWxkMSgpOwogICAgIH0KIAogICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS5m
bGFncygpKSkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKKyAgICAgICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkp
OwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUuaGFzQXJy
YXlNb2RlKCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBub2RlLmFycmF5TW9kZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBvdXQucHJpbnQoaGFz
UHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5hcnJheU1vZGUoKS50b1N0cmluZygpKTsKICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigp
KSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlc3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewotICAgICAgICBk
YXRhTG9nRigKLSAgICAgICAgICAgICIlc2dsb2JhbCV1KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsCi0gICAgICAgICAgICBnbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Zmlu
ZFJlZ2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksCi0gICAgICAgICAgICBub2Rl
LnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsICJnbG9iYWwiLCBnbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZmluZFJl
Z2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2Rl
LnJlZ2lzdGVyUG9pbnRlcigpKSwgIikiKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAg
ICAgfQogICAgIGlmIChub2RlLmhhc0lkZW50aWZpZXIoKSkgewotICAgICAgICBkYXRhTG9nRigi
JXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmllck51bWJl
cigpLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwg
IiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7CiAgICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVT
ZXQoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlc3N0cnVjdCglcDogJXMp
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSwgaW5kZXhp
bmdUeXBlVG9TdHJpbmcobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIs
IFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIGluZGV4aW5nVHlwZVRv
U3RyaW5nKG5vZGUuc3RydWN0dXJlU2V0KClbaV0tPmluZGV4aW5nVHlwZSgpKSwgIikiKTsKICAg
ICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChu
b2RlLmhhc1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlc3N0cnVjdCglcDogJXMp
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUoKSwgaW5kZXhpbmdUeXBl
VG9TdHJpbmcobm9kZS5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgb3V0
LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2Rl
LnN0cnVjdHVyZSgpKSwgIjogIiwgaW5kZXhpbmdUeXBlVG9TdHJpbmcobm9kZS5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkgewotICAgICAg
ICBkYXRhTG9nRigiJXNzdHJ1Y3QoJXAgLT4gJXApIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLCBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAiIC0+ICIsIFJhd1BvaW50
ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIpIik7CiAg
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNGdW5jdGlv
bigpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyVwIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bm9kZS5mdW5jdGlvbigpKTsKKyAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIFJhd1BvaW50ZXIobm9kZS5mdW5jdGlvbigpKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNzRGF0YSgpKSB7CiAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwotICAgICAgICBkYXRhTG9nRigi
JXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlk
ZW50aWZpZXJOdW1iZXIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAKLSAg
ICAgICAgZGF0YUxvZ0YoIiwgJWx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwg
IiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIp
LnN0cmluZygpLCAifSIpOworICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0KTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIEFTU0VS
VChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUuaGFzTG9jYWwoKSk7CkBAIC0y
NzQsMTM4ICsyNzIsMTM5IEBAIHZvaWQgR3JhcGg6OmR1bXAoY29uc3QgY2hhciogcHJlZml4LCBO
b2QKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpOwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpCi0gICAgICAgICAgICBkYXRhTG9nRigiJXNhcmcldSglcykiLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgbmFtZU9mVmFyaWFibGVBY2Nlc3NE
YXRhKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAgICAgICAgb3V0LnByaW50KGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgIigiLCBu
YW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZGF0YUxvZ0YoIiVzciV1KCVzKSIsIGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIG9wZXJhbmQsIG5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vz
c0RhdGEpKTsKKyAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAi
ciIsIG9wZXJhbmQsICIoIiwgbmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNz
RGF0YSksICIpIik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAg
ICAgICAgICAgZGF0YUxvZ0YoIiwgIik7Ci0gICAgICAgIGRhdGFMb2dGKCIldTpbIiwgbm9kZS5z
dGFydENvbnN0YW50KCkpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgICAgICBv
dXQucHJpbnQobm9kZS5zdGFydENvbnN0YW50KCksICI6WyIpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpKSB7CiAgICAgICAgICAgICBp
ZiAoaSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIlcyIsIG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLnN0YXJ0Q29uc3RhbnQo
KSlbaV0uZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLnN0
YXJ0Q29uc3RhbnQoKSlbaV0uZGVzY3JpcHRpb24oKSk7CiAgICAgICAgIH0KLSAgICAgICAgZGF0
YUxvZ0YoIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCJdIik7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNJbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIsICIpOwotICAgICAgICBk
YXRhTG9nRigiJXMiLCBpbmRleGluZ1R5cGVUb1N0cmluZyhub2RlLmluZGV4aW5nVHlwZSgpKSk7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludChpbmRleGlu
Z1R5cGVUb1N0cmluZyhub2RlLmluZGV4aW5nVHlwZSgpKSk7CiAgICAgfQogICAgIGlmIChvcCA9
PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyQldSIsIGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCAiJCIsIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICBk
YXRhTG9nRigiID0gJXMiLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgb3V0LnByaW50
KCIgPSAiLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7
CiAgICAgfQogICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICBkYXRhTG9n
RigiJXMlcCIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUud2Vha0NvbnN0YW50KCkpOwor
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2Rl
LndlYWtDb25zdGFudCgpKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAg
ICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAgIGRhdGFM
b2dGKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS50YWtlbkJsb2NrSW5k
ZXgoKSk7CisgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwg
bm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBkYXRhTG9nRigiJXNGOiMl
dSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIkY6IyIsIG5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Ci0g
ICAgZGF0YUxvZ0YoIiVzYmMjJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsICJiYyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7CisgICAgCiAgICAgKHZvaWQpaGFzUHJpbnRlZDsKICAgICAKLSAgICBkYXRhTG9n
RigiKSIpOworICAgIG91dC5wcmludCgiKSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7CiAgICAg
ICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQotICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgcHJlZGljdGluZyAlcyVzIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5z
aG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIHNwZWN1bGF0aW9uVG9TdHJpbmcobm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBmb3JjaW5nIGRvdWJsZSIgOiAi
Iik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgIHByZWRpY3RpbmcgJXMiLCBzcGVjdWxhdGlvblRvU3RyaW5nKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3Rp
bmcgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKICAg
ICB9CiAgICAgCi0gICAgZGF0YUxvZ0YoIlxuIik7CisgICAgb3V0LnByaW50KCJcbiIpOwogfQog
Ci12b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUpCit2b2lkIEdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUp
CiB7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
IAotICAgIGRhdGFMb2dGKCIlc0Jsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCBwcmVmaXgsIChp
bnQpYmxvY2tJbmRleCwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/
ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIg
OiAiIik7Ci0gICAgZGF0YUxvZ0YoIiVzICBQcmVkZWNlc3NvcnM6IiwgcHJlZml4KTsKKyAgICBv
dXQucHJpbnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKGJjIyIsIGJsb2NrLT5i
eXRlY29kZUJlZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQp
IiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAg
IG91dC5wcmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKLSAgICAgICAgZGF0
YUxvZ0YoIiAjJXUiLCBibG9jay0+bV9wcmVkZWNlc3NvcnNbaV0pOwotICAgIGRhdGFMb2dGKCJc
biIpOworICAgICAgICBvdXQucHJpbnQoIiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsK
KyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZGF0YUxvZ0YoIiVzICBEb21pbmF0ZWQgYnk6IiwgcHJlZml4KTsKKyAgICAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIW1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoaSwgYmxvY2tJbmRleCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBkYXRhTG9nRigiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihpKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0K
LSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyAgRG9taW5hdGVz
OiIsIHByZWZpeCk7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgb3V0LnByaW50
KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBkYXRhTG9nRigiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpKSk7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KLSAgICAgICAgZGF0
YUxvZ0YoIlxuIik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9Ci0gICAgZGF0YUxv
Z0YoIiVzICBQaGkgTm9kZXM6IiwgcHJlZml4KTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiICBQ
aGkgTm9kZXM6Iik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNb
aV07CiAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBhdChwaGlOb2RlSW5kZXgpOwogICAgICAgICBp
ZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExp
dmVQaGlzT25seSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkYXRhTG9nRigiIEAl
dS0+KCIsIHBoaU5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlSW5k
ZXgsICItPigiKTsKICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAg
IGRhdGFMb2dGKCJAJXUiLCBwaGlOb2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAg
b3V0LnByaW50KCJAIiwgcGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiwgQCV1Iiwg
cGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
QCIsIHBoaU5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIsIEAldSIsIHBoaU5v
ZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBA
IiwgcGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBkYXRhTG9nRigiKSVzIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIg
OiAiIik7CisgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6ZSgp
ID8gIiwiIDogIiIpOwogICAgIH0KLSAgICBkYXRhTG9nRigiXG4iKTsKKyAgICBvdXQucHJpbnQo
IlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXAoKQordm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KQogewogICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOwogICAg
IGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9j
aykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkdW1wQmxvY2tIZWFkZXIoIiIsIGIs
IER1bXBBbGxQaGlzKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgdmFycyBiZWZvcmU6ICIpOworICAg
ICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYiwgRHVtcEFsbFBoaXMpOworICAgICAgICBv
dXQucHJpbnQoIiAgdmFycyBiZWZvcmU6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zp
c2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgV1RG
OjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRI
ZWFkLCBvdXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nRigiPGVtcHR5PiIp
OwotICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgdmFyIGxpbmtz
OiAiKTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCI8ZW1wdHk+Iik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgb3V0LnBy
aW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFi
bGVzQXRIZWFkLCBvdXQpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBkdW1w
Q29kZU9yaWdpbigiIiwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKTsKLSAgICAgICAgICAg
IGR1bXAoIiIsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQs
ICIiLCBsYXN0Tm9kZUluZGV4LCBibG9jay0+YXQoaSkpOworICAgICAgICAgICAgZHVtcChvdXQs
ICIiLCBibG9jay0+YXQoaSkpOwogICAgICAgICAgICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5h
dChpKTsKICAgICAgICAgfQotICAgICAgICBkYXRhTG9nRigiICB2YXJzIGFmdGVyOiAiKTsKKyAg
ICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNm
YUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFp
bCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFs
dWVzQXRUYWlsLCBvdXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nRigiPGVt
cHR5PiIpOwotICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgdmFy
IGxpbmtzOiAiKTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWws
IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAg
b3V0LnByaW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+
dmFyaWFibGVzQXRUYWlsLCBvdXQpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMzYw
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MCwxNiArMTkwLDE3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBDb2RlQmxv
Y2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBi
ZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCi0gICAgdm9pZCBkdW1wKCk7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgZW51bSBQaGlO
b2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwotICAgIHZvaWQg
ZHVtcEJsb2NrSGVhZGVyKGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1
bXBNb2RlKTsKLSAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgpOwor
ICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYsIEVkZ2UpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZUluZGV4KTsKICAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9k
ZSYpOwotICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoTm9kZSYpOworICAgIHN0
YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlJik7CiAKICAg
ICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJv
bSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuCi0gICAgdm9p
ZCBkdW1wQ29kZU9yaWdpbihjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4
KTsKKyAgICB2b2lkIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlSW5kZXgsIE5vZGVJbmRleCk7CiAKICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0
ZWNvZGVCZWdpbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNz
ZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERp
c2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDEzNjA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDEx
IEBAIEpJVERpc2Fzc2VtYmxlcjo6fkpJVERpc2Fzc2VtYmxlcigpCiB7CiB9CiAKLXZvaWQgSklU
RGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJVERpc2Fz
c2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQog
ewotICAgIGRhdGFMb2dGKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgQ29kZUJsb2NrICVwLCBpbnN0
cnVjdGlvbiBjb3VudCA9ICV1OlxuIiwgbV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkpOwotICAgIGRhdGFMb2dGKCIgICAgQ29kZSBhdCBbJXAsICVwKTpcbiIsIGxp
bmtCdWZmZXIuZGVidWdBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRl
YnVnQWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpOwotICAgIGR1bXBEaXNhc3Nl
bWJseShsaW5rQnVmZmVyLCBtX3N0YXJ0T2ZDb2RlLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleElu
TWFpblBhdGhbMF0pOworICAgIG91dC5wcmludCgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIENvZGVC
bG9jayAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiwgaW5zdHJ1Y3Rpb24gY291bnQgPSAi
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
IiAgIENvZGUgYXQgWyIsIFJhd1BvaW50ZXIobGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSksICIs
ICIsIFJhd1BvaW50ZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNz
KCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSksICIpOlxuIik7CisgICAgZHVtcERpc2Fzc2Vt
Ymx5KG91dCwgbGlua0J1ZmZlciwgbV9zdGFydE9mQ29kZSwgbV9sYWJlbEZvckJ5dGVjb2RlSW5k
ZXhJbk1haW5QYXRoWzBdKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmlyc3RT
bG93TGFiZWw7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGFiZWxGb3JCeXRlY29k
ZUluZGV4SW5TbG93UGF0aC5zaXplKCk7ICsraSkgewpAQCAtNTcsMzAgKzU3LDM1IEBAIHZvaWQg
SklURGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZmZXImIGwKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQotICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMobGlua0J1ZmZlciwgIiAg
ICAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGgsIGZpcnN0U2xvd0xhYmVsLmlz
U2V0KCkgPyBmaXJzdFNsb3dMYWJlbCA6IG1fZW5kT2ZTbG93UGF0aCk7Ci0gICAgZGF0YUxvZ0Yo
IiAgICAoRW5kIE9mIE1haW4gUGF0aClcbiIpOwotICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMobGlu
a0J1ZmZlciwgIiAgICAoUykgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJblNsb3dQYXRoLCBt
X2VuZE9mU2xvd1BhdGgpOwotICAgIGRhdGFMb2dGKCIgICAgKEVuZCBPZiBTbG93IFBhdGgpXG4i
KTsKKyAgICBkdW1wRm9ySW5zdHJ1Y3Rpb25zKG91dCwgbGlua0J1ZmZlciwgIiAgICAiLCBtX2xh
YmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGgsIGZpcnN0U2xvd0xhYmVsLmlzU2V0KCkgPyBm
aXJzdFNsb3dMYWJlbCA6IG1fZW5kT2ZTbG93UGF0aCk7CisgICAgb3V0LnByaW50KCIgICAgKEVu
ZCBPZiBNYWluIFBhdGgpXG4iKTsKKyAgICBkdW1wRm9ySW5zdHJ1Y3Rpb25zKG91dCwgbGlua0J1
ZmZlciwgIiAgICAoUykgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJblNsb3dQYXRoLCBtX2Vu
ZE9mU2xvd1BhdGgpOworICAgIG91dC5wcmludCgiICAgIChFbmQgT2YgU2xvdyBQYXRoKVxuIik7
CisKKyAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBsaW5rQnVmZmVyLCBtX2VuZE9mU2xvd1BhdGgs
IG1fZW5kT2ZDb2RlKTsKK30KIAotICAgIGR1bXBEaXNhc3NlbWJseShsaW5rQnVmZmVyLCBtX2Vu
ZE9mU2xvd1BhdGgsIG1fZW5kT2ZDb2RlKTsKK3ZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgZHVtcChXVEY6OmRhdGFGaWxlKCksIGxpbmtC
dWZmZXIpOwogfQogCi12b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcEZvckluc3RydWN0aW9ucyhM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBjb25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlcjo6TGFiZWw+JiBsYWJlbHMsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCkK
K3ZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wRm9ySW5zdHJ1Y3Rpb25zKFByaW50U3RyZWFtJiBv
dXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIGNvbnN0IGNoYXIqIHByZWZpeCwgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbD4mIGxhYmVscywgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVuZExh
YmVsKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGFiZWxzLnNpemUoKTspIHsK
ICAgICAgICAgaWYgKCFsYWJlbHNbaV0uaXNTZXQoKSkgewogICAgICAgICAgICAgaSsrOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgZGF0YUxvZ0YoIiVzIiwgcHJl
Zml4KTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5k
dW1wKGkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5leHRJbmRleCA9IGkgKyAxOyA7IG5leHRJ
bmRleCsrKSB7CiAgICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IGxhYmVscy5zaXplKCkpIHsK
LSAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHkobGlua0J1ZmZlciwgbGFiZWxzW2ldLCBl
bmRMYWJlbCk7CisgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZl
ciwgbGFiZWxzW2ldLCBlbmRMYWJlbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGxhYmVsc1tuZXh0SW5kZXhdLmlzU2V0KCkpIHsKLSAg
ICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHkobGlua0J1ZmZlciwgbGFiZWxzW2ldLCBsYWJl
bHNbbmV4dEluZGV4XSk7CisgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlu
a0J1ZmZlciwgbGFiZWxzW2ldLCBsYWJlbHNbbmV4dEluZGV4XSk7CiAgICAgICAgICAgICAgICAg
aSA9IG5leHRJbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTg4LDExICs5MywxMSBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcEZvckluc3RydWN0aW9u
CiAgICAgfQogfQogCi12b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KExpbmtC
dWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmcm9tLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgdG8pCit2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFBy
aW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCiB7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZnJvbUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGZyb20pOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHRvTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodG8pOwot
ICAgIGRpc2Fzc2VtYmxlKGZyb21Mb2NhdGlvbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odG9M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZy
b21Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgIiAgICAgICAgIiwgV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICBkaXNhc3NlbWJsZShmcm9tTG9jYXRpb24sIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHRvTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihmcm9tTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksICIgICAgICAgICIsIG91dCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVREaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVERpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzYwNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMCAr
NTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5kT2ZDb2RlKE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBsYWJlbCkgeyBtX2VuZE9mQ29kZSA9IGxhYmVsOyB9CiAgICAgCiAgICAgdm9pZCBkdW1w
KExpbmtCdWZmZXImKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkdW1wRm9ySW5zdHJ1Y3Rpb25zKExpbmtCdWZmZXImLCBj
b25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+JiBsYWJlbHMs
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCk7Ci0gICAgdm9pZCBkdW1wRGlzYXNzZW1i
bHkoTGlua0J1ZmZlciYsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmcm9tLCBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgdG8pOworICAgIHZvaWQgZHVtcEZvckluc3RydWN0aW9ucyhQcmludFN0cmVhbSYs
IExpbmtCdWZmZXImLCBjb25zdCBjaGFyKiBwcmVmaXgsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw+JiBsYWJlbHMsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCk7CisgICAgdm9p
ZCBkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJiwgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGZyb20sIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0byk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydE9m
Q29kZTsK
</data>
<flag name="review"
          id="192429"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>