<?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>151467</bug_id>
          
          <creation_ts>2015-11-19 15:56:08 -0800</creation_ts>
          <short_desc>implement op_get_rest_length so that we can allocate the rest array with the right size from the start</short_desc>
          <delta_ts>2015-12-01 01:53:27 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>151701</dependson>
          <blocked>151454</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1143485</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 15:56:08 -0800</bug_when>
    <thetext>This will allow other optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143601</commentid>
    <comment_count>1</comment_count>
      <attachid>265945</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-20 01:13:19 -0800</bug_when>
    <thetext>Created attachment 265945
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143681</commentid>
    <comment_count>2</comment_count>
      <attachid>265945</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-20 10:20:30 -0800</bug_when>
    <thetext>Comment on attachment 265945
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143684</commentid>
    <comment_count>3</comment_count>
      <attachid>265945</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-20 10:27:45 -0800</bug_when>
    <thetext>Comment on attachment 265945
patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        it might be a constant value in the precense of inlining in the DFG.

typo: precense ==&gt; presence.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5353
&gt;      SpeculateCellOperand array(this, node-&gt;child1());
&gt; -    GPRReg arrayGPR = array.gpr();
&gt; -
&gt; -    GPRTemporary argumentsLength(this);
&gt; -    GPRReg argumentsLengthGPR = argumentsLength.gpr();
&gt; -
&gt;      GPRTemporary argumentsStart(this);
&gt; +    SpeculateStrictInt32Operand arrayLength(this, node-&gt;child2());

Do we really need a speculation (i.e. runtime check) for the int32-ness of the array length?  Since this value can only be populated with the result of op_get_rest_length, doesn&apos;t that already ensure that it is always an int32?  Would a DFG compile time assertion suffice here instead?

Hmmm, for that matter, can the array operand above be anything but a JSArray since the bytecode generator only passes an array as an operand to op_copy_rest.  Will we ever have a chance to invoke op_copy_rest on variable input?  If not, would a DFG compile time assertion suffice here as well?

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1415
&gt; +    unsigned numParamsToSkip = currentInstruction[2].u.unsignedValue;
&gt; +    load32(payloadFor(JSStack::ArgumentCount), regT0);
&gt; +    sub32(TrustedImm32(1), regT0);
&gt; +    Jump zeroLength = branch32(LessThanOrEqual, regT0, TrustedImm32(numParamsToSkip));
&gt; +    sub32(TrustedImm32(numParamsToSkip), regT0);

Technically, you should use Imm32(numParamsToSkip) here instead of TrustedImm32(...).  That is because the numParamsToSkip is defined by the user and can be any value.  Hence, we want to blind that constant if necessary.  In practice for non-malicious code, numParamsToSkip will tend to be small and not need blinding.  But if you use Imm32(), it will take care of figuring that out for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143853</commentid>
    <comment_count>4</comment_count>
      <attachid>265945</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-20 15:24:48 -0800</bug_when>
    <thetext>Comment on attachment 265945
patch

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

&gt;&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1415
&gt;&gt; +    sub32(TrustedImm32(numParamsToSkip), regT0);
&gt; 
&gt; Technically, you should use Imm32(numParamsToSkip) here instead of TrustedImm32(...).  That is because the numParamsToSkip is defined by the user and can be any value.  Hence, we want to blind that constant if necessary.  In practice for non-malicious code, numParamsToSkip will tend to be small and not need blinding.  But if you use Imm32(), it will take care of figuring that out for you.

Thanks for letting me know. I didn&apos;t know this. 
I&apos;ll make the change and also in the other places
I do TrustedImm32 w.r.t rest parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144880</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-30 12:37:41 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/192814</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265945</attachid>
            <date>2015-11-20 01:13:19 -0800</date>
            <delta_ts>2015-11-20 10:20:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>34780</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDE1LTExLTIwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IGltcGxlbWVudCBvcF9nZXRfcmVzdF9sZW5ndGggc28gdGhhdCB3ZSBjYW4gYWxsb2NhdGUgdGhl
IHJlc3QgYXJyYXkgd2l0aCB0aGUgcmlnaHQgc2l6ZSBmcm9tIHRoZSBzdGFydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnRzIG9wX2dldF9yZXN0X2xlbmd0aCB3aGljaCByZXR1cm5zIHRoZSBsZW5ndGgKKyAgICAgICAg
dGhhdCB0aGUgcmVzdCBwYXJhbWV0ZXIgYXJyYXkgd2lsbCBiZS4gV2UncmUgaW1wbGVtZW50aW5n
IHRoaXMgYmVjYXVzZQorICAgICAgICBpdCBtaWdodCBiZSBhIGNvbnN0YW50IHZhbHVlIGluIHRo
ZSBwcmVjZW5zZSBvZiBpbmxpbmluZyBpbiB0aGUgREZHLgorICAgICAgICBXZSB3aWxsIHRha2Ug
YWR2YW50YWdlIG9mIHRoaXMgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGluIGEgZnV0dXJlIHBh
dGNoOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUx
NDU0CisgICAgICAgIHRvIGVtaXQgYmV0dGVyIGNvZGUgZm9yIG9wX2NvcHlfcmVzdC4KKworICAg
ICAgICBvcF9nZXRfcmVzdF9sZW5ndGggaGFzIHR3byBvcGVyYW5kczogCisgICAgICAgIDEpIGEg
ZGVzdGluYXRpb24KKyAgICAgICAgMikgQSBjb25zdGFudCBpbmRpY2F0aW5nIHRoZSBudW1iZXIg
b2YgcGFyYW1ldGVycyB0byBza2lwIHdoZW4gY29weWluZyB0aGUgcmVzdCBhcnJheS4KKworICAg
ICAgICBvcF9nZXRfcmVzdF9sZW5ndGggbG93ZXJzIHRvIGEgSlNDb25zdGFudCBub2RlIHdoZW4g
d2UncmUgaW5saW5lZAorICAgICAgICBhbmQgbm90IGEgdmFyYXJncyBjYWxsIChpbiB0aGlzIGNh
c2UsIHdlIHN0YXRpY2FsbHkga25vdyB0aGUgYXJndW1lbnRzCisgICAgICAgIGxlbmd0aCkuIFdo
ZW4gdGhhdCBjb25kaXRpb24gaXNuJ3QgbWV0LCB3ZSBsb3dlciBvcF9nZXRfcmVzdF9sZW5ndGgg
dG8gCisgICAgICAgIEdldFJlc3RBcnJheS4gR2V0UmVzdEFycmF5IHByb2R1Y2VzIGl0cyByZXN1
bHQgYXMgYW4gaW50MzIuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbjoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TmV3QXJyYXkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHBlY3Rl
ZEZ1bmN0aW9uU25pcHBldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UmVzdFBhcmFtZXRlcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
Lmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChK
U0M6OlJlc3RQYXJhbWV0ZXJOb2RlOjplbWl0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
RG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpt
YXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Om51bWJlck9mQXJndW1lbnRzVG9Ta2lwKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9w
YWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFJlc3RMZW5ndGgp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb3B5UmVzdCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldFJlc3RMZW5ndGgpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAq
IGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb3B5X3Jlc3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVD
TCk6CisKIDIwMTUtMTEtMTkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OKHIxODk0MzMpIFdlYiBJbnNwZWN0b3I6IEpTQ29udGV4dCBp
bnNwZWN0aW9uIGV4Y2VwdGlvbnMgc2hvdWxkIGluY2x1ZGUgbmF0aXZlIGNhbGwgZnJhbWVzIGJ5
IGRlZmF1bHQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEy
OSw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVu
Z3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2xvYWRfYXJyb3dmdW5jdGlv
bl90aGlzIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9hc3Nl
cnQiLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfcmVz
dCIsICJsZW5ndGgiOiAzIH0KKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfcmVzdCIs
ICJsZW5ndGgiOiA0IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfcmVzdF9sZW5n
dGgiLCAibGVuZ3RoIjogMyB9CiAgICAgICAgIF0KICAgICB9LAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lv
biAxOTI2NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKICAgICBj
YXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgogICAgIGNhc2Ugb3BfY3JlYXRlX291dF9v
Zl9iYW5kX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2Ugb3BfYXNzZXJ0OgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgpAQCAt
NzAsOCArNzEsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2Fz
ZSBvcF9qZXFfbnVsbDoKICAgICBjYXNlIG9wX2puZXFfbnVsbDoKICAgICBjYXNlIG9wX2RlYzoK
LSAgICBjYXNlIG9wX2luYzogCi0gICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICBjYXNlIG9w
X2luYzogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODIsNyArODIsOCBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2Fz
ZSBvcF9qbmxlc3NlcToKICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICBjYXNlIG9wX2puZ3Jl
YXRlcmVxOgotICAgIGNhc2Ugb3Bfamxlc3M6IHsKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNh
c2Ugb3BfY29weV9yZXN0OiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlv
biwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM3Nyw3ICszNzgsOCBAQCB2b2lkIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CiAgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgogICAgIGNhc2Ugb3BfdW5zaWduZWQ6Ci0gICAgY2FzZSBvcF9nZXRf
ZnJvbV9hcmd1bWVudHM6IHsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czogCisgICAg
Y2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxOTI2NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgzLDcgKzc4MywxNiBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfY29weV9yZXN0OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRPZmZzZXQgPSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKICAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvcHlfcmVz
dCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiQXJndW1lbnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9yZXN0X2xlbmd0aCIpOwog
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVk
VmFsdWU7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJn
dW1lbnRPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE5MjY3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDcxLDYgKzI0NzEsMTYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdBcgogICAgIHJldHVybiBkc3Q7CiB9CiAKK1JlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJyYXlXaXRoU2l6ZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGxlbmd0aCkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19hcnJheV93aXRo
X3NpemUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChsZW5ndGgtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChuZXdBcnJheUFsbG9jYXRpb25Qcm9maWxlKCkpOworCisgICAgcmV0dXJuIGRzdDsK
K30KKwogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdp
c3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbikKIHsKICAgICByZXR1
cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpKTsKQEAgLTI2MDAsMTIgKzI2MTAsOSBAQCBFeHBl
Y3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZWFsQ2FsbC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAg
ICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSAy
KSB7Ci0gICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsK
LSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5hcmd1bWVu
dFJlZ2lzdGVyKDApLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobmV3QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpID09IDIpCisgICAgICAgICAgICAgICAgZW1pdE5ld0FycmF5V2l0aFNpemUoZHN0LCBjYWxs
QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCkpOworICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX25ld19hcnJheSk7CiAg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CkBAIC0z
ODMzLDEwICszODQwLDE2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmludmFsaWRhdGVGb3JJ
bkMKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKFJl
Z2lzdGVySUQqIHJlc3VsdCwgdW5zaWduZWQgbnVtUGFyYW1ldGVyc1RvU2tpcCkKIHsKLSAgICBl
bWl0TmV3QXJyYXkocmVzdWx0LCBudWxscHRyLCAwKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmVzdEFycmF5TGVuZ3RoID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgZW1pdE9wY29kZShvcF9nZXRf
cmVzdF9sZW5ndGgpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN0QXJyYXlMZW5ndGgt
PmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lw
KTsKKworICAgIGVtaXROZXdBcnJheVdpdGhTaXplKHJlc3VsdCwgcmVzdEFycmF5TGVuZ3RoLmdl
dCgpKTsKIAogICAgIGVtaXRPcGNvZGUob3BfY29weV9yZXN0KTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocmVzdWx0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVz
dEFycmF5TGVuZ3RoLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobnVtUGFy
YW1ldGVyc1RvU2tpcCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNiArNDk3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbGlmdFREWkNoZWNrSWZQb3NzaWJsZShjb25zdCBW
YXJpYWJsZSYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQq
IGRzdCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3Qs
IEVsZW1lbnROb2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lv
bgorICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyYXlXaXRoU2l6ZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGxlbmd0aCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1
bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNp
Z25lZCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxOTI2NzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NzcsNyArMzQ3Nyw4IEBAIHZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmVtaXQoQnl0ZWNv
ZGVHZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZXN0UGFyYW1ldGVyQXJyYXkgPSBnZW5lcmF0b3IuZW1pdFJlc3RQYXJhbWV0ZXIoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBtX251bVBhcmFtZXRlcnNUb1NraXApOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZXN0UGFyYW1ldGVyQXJyYXkgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKHJlc3RQYXJhbWV0ZXJBcnJheS5nZXQoKSwg
bV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJl
c3RQYXJhbWV0ZXJBcnJheS5nZXQoKSwgdmFyLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIHZhcik7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90
RW5kLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYzLDYgKzE3NjMsMTAg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAor
ICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjog
ewogICAgICAgICBKU1ZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3ZhbHVl
OwogICAgICAgICBpZiAoYmFzZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzMxLDEwICszMzMxLDMxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9
CiAKKyAgICAgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6IHsKKyAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgICAgICAgICBOb2RlKiBsZW5ndGg7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
ICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRzTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS51bnNpZ25lZFZhbHVlOworICAgICAgICAgICAgICAgIEpTVmFsdWUg
cmVzdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IG51bVBh
cmFtc1RvU2tpcCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKDAp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9
IGpzTnVtYmVyKGFyZ3VtZW50c0xlbmd0aCAtIG51bVBhcmFtc1RvU2tpcCk7CisKKyAgICAgICAg
ICAgICAgICBsZW5ndGggPSBqc0NvbnN0YW50KHJlc3RMZW5ndGgpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYWRkVG9HcmFwaChHZXRSZXN0TGVuZ3RoLCBP
cEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUudW5zaWduZWRWYWx1ZSkpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
bGVuZ3RoKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9yZXN0X2xlbmd0aCk7Cisg
ICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2NvcHlfcmVzdDogewogICAgICAgICAgICAgbm90
aWNlQXJndW1lbnRzVXNlKCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKENvcHlSZXN0LAotICAg
ICAgICAgICAgICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS51bnNpZ25lZFZhbHVl
KSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkp
OworICAgICAgICAgICAgTm9kZSogYXJyYXkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5TGVuZ3Ro
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKENvcHlSZXN0LCBPcEluZm8oY3VycmVudEluc3RydWN0
aW9uWzNdLnUudW5zaWduZWRWYWx1ZSksCisgICAgICAgICAgICAgICAgYXJyYXksIGFycmF5TGVu
Z3RoKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvcHlfcmVzdCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDcg
QEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3Bf
Z2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9wX2NhdGNoOgogICAgIGNhc2Ugb3BfY29weV9y
ZXN0OgorICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgogICAgICAgICByZXR1cm4gQ2FuQ29t
cGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyNjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyOCw2ICs0MjgsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJz
dHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIExhenlOb2RlKG5vZGUp
KTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgorICAgICAgICBy
ZWFkKFN0YWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTkyNjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0
QXJndW1lbnRDb3VudDoKKyAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgY2FzZSBHZXRMb2Nh
bDoKICAgICBjYXNlIFNldExvY2FsOgogICAgIGNhc2UgTW92SGludDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTkyNjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM3MCw2ICsxMzcwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIENvcHlS
ZXN0OiB7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMzgxLDYgKzEzODIsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIEdldENhbGxlZToKICAg
ICAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50OgorICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6
CiAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAg
ICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBF
eGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kCiAgICAgY2FzZSBHZXRTdGFj
azoKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnQ6CisgICAg
Y2FzZSBHZXRSZXN0TGVuZ3RoOgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxOTI2NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2MSw3ICsyMTYxLDcgQEAgc3RydWN0
IE5vZGUgewogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ29weVJlc3QpOworICAgICAgICBBU1NFUlQob3AoKSA9
PSBDb3B5UmVzdCB8fCBvcCgpID09IEdldFJlc3RMZW5ndGgpOwogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BJbmZvKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYg
KzI2Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdB
cnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9k
ZVJlc3VsdEpTKSBcCisgICAgLyogUmVzdCBQYXJhbWV0ZXIgKi9cCisgICAgbWFjcm8oR2V0UmVz
dExlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oQ29weVJlc3QsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5n
LiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDExICs4MTgsMTEgQEAgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db3B5UmVzdChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYXJyYXlBc0NlbGwsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1i
ZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29weVJlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5
QXNDZWxsLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbXNU
b1NraXAsIHVuc2lnbmVkIGFycmF5U2l6ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJP
ZkFyZ3VtZW50cyA+IG51bWJlck9mUGFyYW1zVG9Ta2lwKTsgLy8gV2Ugc2hvdWxkIG9ubHkgY2Fs
bCB0aGlzIGZyb20gSklUIGNvZGUgd2hlbiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIEFT
U0VSVChhcnJheVNpemUpOwogICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihh
cnJheUFzQ2VsbCk7Ci0gICAgdW5zaWduZWQgYXJyYXlTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMg
LSBudW1iZXJPZlBhcmFtc1RvU2tpcDsKKyAgICBBU1NFUlQoYXJyYXlTaXplID09IGFycmF5LT5s
ZW5ndGgoKSk7CiAgICAgYXJyYXktPnNldExlbmd0aChleGVjLCBhcnJheVNpemUpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIGFyZ3VtZW50U3RhcnRbaSArIG51bWJlck9mUGFyYW1zVG9T
a2lwXS5qc1ZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBS
ZWdpc3RlciogYXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxG
cmFtZSosIEpTRnVuY3Rpb24qLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rp
b24qIGNhbGxlZSk7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29weVJlc3QoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
UGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBhcmd1bWVudHNDb3VudCk7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29weVJlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUmVnaXN0ZXIqIGFyZ3Vt
ZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNp
emUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBp
bnQzMl90KSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmpl
Y3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxOSw2ICsyMTksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKICAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAg
Y2FzZSBHZXRBcnJheUxlbmd0aDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsNyBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDcmVh
dGVUaGlzOgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoK
KyAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIFNl
dExvY2FsOgogICAgIGNhc2UgUHV0U3RhY2s6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5MjY3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NDMsNiArNDQ0MywxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNh
c2UgR2V0UmVzdExlbmd0aDogeworICAgICAgICBjb21waWxlR2V0UmVzdExlbmd0aChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICBjYXNl
IE5ld0Fycm93RnVuY3Rpb246CiAgICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbihub2RlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyNyw2ICszODI3LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaW50MzJS
ZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
Y2FzZSBHZXRSZXN0TGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGU6CiAg
ICAgICAgIGNvbXBpbGVHZXRTY29wZShub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTI2NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTM0OSwyMiArNTM0OSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q29weVJlc3QoTm9kCiAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29weVJlc3QpOwogCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJyYXkodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQ
UlJlZyBhcnJheUdQUiA9IGFycmF5LmdwcigpOwotCi0gICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50
c0xlbmd0aCh0aGlzKTsKLSAgICBHUFJSZWcgYXJndW1lbnRzTGVuZ3RoR1BSID0gYXJndW1lbnRz
TGVuZ3RoLmdwcigpOwotCiAgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcnJheUxlbmd0aCh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisKKyAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJheS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsKKyAgICBHUFJSZWcg
YXJyYXlMZW5ndGhHUFIgPSBhcnJheUxlbmd0aC5ncHIoKTsKIAotICAgIGVtaXRHZXRMZW5ndGgo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBhcmd1bWVudHNMZW5ndGhHUFIpOwotICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCwgYXJndW1lbnRzTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIobm9kZS0+bnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKSkpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhcnJheUxlbmd0aEdQUiwgVHJ1c3RlZElt
bTMyKDApKTsKIAogICAgIGVtaXRHZXRBcmd1bWVudFN0YXJ0KG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgYXJndW1lbnRzU3RhcnRHUFIpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGFyZ3Vt
ZW50c0xlbmd0aEdQUiwgYXJndW1lbnRzU3RhcnRHUFIpOwotICAgIC8vIEFyZ3VtZW50czogMDpl
eGVjLCAxOkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1
bWVudHMgdG8gc2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db3B5UmVzdCwgYXJyYXlHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBUcnVzdGVkSW1t
MzIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSksIGFyZ3VtZW50c0xlbmd0aEdQUik7
Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhhcmd1bWVudHNMZW5ndGhHUFIpOworICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKGFyZ3VtZW50c1N0YXJ0R1BSKTsKKyAgICAvLyBBcmd1bWVu
dHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIg
b2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db3B5UmVzdCwgYXJyYXlHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBUcnVzdGVkSW1t
MzIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSksIGFycmF5TGVuZ3RoR1BSKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGFyZ3VtZW50c1N0YXJ0R1BSKTsKICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01MzcyLDYgKzUz
NzAsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KE5vZAogICAgIG5v
UmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UmVzdExl
bmd0aChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldFJlc3RMZW5n
dGgpOworCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgZW1pdEdldExlbmd0aChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIHJlc3VsdEdQUik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhc05vblplcm9MZW5n
dGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsKKyAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBoYXNOb25aZXJvTGVuZ3RoLmxpbmsoJm1faml0KTsK
KyAgICBpZiAobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSkKKyAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpLCByZXN1
bHRHUFIpOworICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShO
b2RlKiBub2RlKQogewogICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndhdGNocG9pbnRT
ZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjI0NSw2ICsyMjQ1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVDb3B5UmVzdChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0aChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoTm9kZSopOwogICAgIGJvb2wgY29tcGlsZVJl
Z0V4cEV4ZWMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFB1dEdldHRlckJ5VmFsOgog
ICAgIGNhc2UgUHV0U2V0dGVyQnlWYWw6CiAgICAgY2FzZSBDb3B5UmVzdDoKKyAgICBjYXNlIEdl
dFJlc3RMZW5ndGg6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxOTI2NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0NSwyMiArMzY0NSw0MiBAQCBw
cml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBkb0NvcHlSZXN0ID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJDb3B5UmVzdCBDIGNhbGwiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRmlsbFJlc3RQYXJhbWV0ZXIgY29udGludWF0
aW9uIikpOwogCi0gICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0
LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAg
TFZhbHVlIG51bWJlck9mQXJndW1lbnRzID0gZ2V0QXJndW1lbnRzTGVuZ3RoKCkudmFsdWU7Cisg
ICAgICAgIExWYWx1ZSBhcnJheUxlbmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwog
CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKG51bWJlck9m
QXJndW1lbnRzLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCi0gICAgICAgICAgICB1bnN1cmUo
ZG9Db3B5UmVzdCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIG1fb3V0LmVx
dWFsKGFycmF5TGVuZ3RoLCBtX291dC5jb25zdEludDMyKDApKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShjb250aW51YXRpb24pLCB1bnN1cmUoZG9Db3B5UmVzdCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZG9Db3B5UmVzdCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6SlNDZWxsKiBhcnJh
eSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLCA0Om51
bWJlciBvZiBhcmd1bWVudHMKKyAgICAgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6SlNDZWxs
KiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lw
LCA0OmFycmF5IGxlbmd0aAorICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CiAg
ICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Db3B5UmVzdCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLAotICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAsIG51bWJlck9mQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0
KCksIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7CiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCkK
KyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vblplcm9MZW5ndGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldFJlc3RMZW5ndGggbm9uIHplcm8iKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0UmVzdExlbmd0aCBjb250
aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayB6ZXJvTGVuZ3Ro
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworCisgICAgICAgIExW
YWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAgTFZhbHVlIGFyZ3VtZW50c0xlbmd0
aCA9IGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlOworICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCisgICAg
ICAgICAgICB1bnN1cmUobm9uWmVyb0xlbmd0aCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm9u
WmVyb0xlbmd0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uWmVy
b0xlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCB6ZXJvTGVuZ3Ro
UmVzdWx0LCBub25aZXJvTGVuZ3RoUmVzdWx0KSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZU5ld09iamVjdCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMp
CiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKQogICAg
ICAgICBERUZJTkVfT1Aob3BfY29weV9yZXN0KQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Jl
c3RfbGVuZ3RoKQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJ
TkVfT1Aob3BfYXNzZXJ0KQogICAgICAgICBERUZJTkVfT1Aob3BfZGVidWcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw2ICs0OTEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJn
dW1lbnRzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb3B5X3Jlc3QoSW5z
dHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9yZXN0X2xlbmd0aChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9hc3NlcnQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2RlYnVnKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDUsNiArMTQwNSwz
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb3B5X3Jlc3QoSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUudW5zaWduZWRWYWx1ZTsKKyAgICBsb2FkMzIocGF5bG9h
ZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVnVDApOworICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOworICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICBzdWIz
MihUcnVzdGVkSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisjZW5kaWYKKyAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoMCkpKSwgcmVnVDApOworI2Vsc2UKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOworI2VuZGlmCisKKyAgICBkb25lLmxpbmsodGhpcyk7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworI2Vsc2UKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisjZW5kaWYKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMw
LDMgKzI0MzAsMjAgQEAgX2xsaW50X29wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzOgogICAgIHN0
b3JlaSBDZWxsVGFnLCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KICAgICBzdG9yZWkgdDAsIFBheWxv
YWRPZmZzZXRbY2ZyLCB0MSwgOF0KICAgICBkaXNwYXRjaCgyKQorCisKK19sbGludF9vcF9nZXRf
cmVzdF9sZW5ndGg6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyBBcmd1bWVudENvdW50W2Nmcl0sIHQwCisgICAgc3ViaSAxLCB0MAorICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigyLCB0MSkKKyAgICBiaWx0ZXEgdDAsIHQxLCAuc3RvcmVaZXJvCisgICAg
c3ViaSB0MSwgdDAKKyAgICBqbXAgLmZpbmlzaAorLnN0b3JlWmVybzoKKyAgICBtb3ZlIDAsIHQw
CisuZmluaXNoOgorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKKyAgICBzdG9yZWkg
dDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0KKyAgICBzdG9yZWkgSW50MzJUYWcsIFRhZ09m
ZnNldFtjZnIsIHQxLCA4XQorICAgIGRpc3BhdGNoKDMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMTkyNjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTIyOTgsMyArMjI5OCwyMCBAQCBfbGxpbnRf
b3BfbG9hZF9hcnJvd2Z1bmN0aW9uX3RoaXM6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQxKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCiAgICAgZGlzcGF0Y2goMikKKworCitf
bGxpbnRfb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudFtjZnJdLCB0MAorICAgIHN1YmkgMSwgdDAK
KyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisgICAgYmlsdGVxIHQwLCB0MSwgLnN0
b3JlWmVybworICAgIHN1YmkgdDEsIHQwCisgICAgam1wIC5ib3hVcAorLnN0b3JlWmVybzoKKyAg
ICBtb3ZlIDAsIHQwCisuYm94VXA6CisgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCisgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCisg
ICAgZGlzcGF0Y2goMykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5MjY3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgX2xsaW50X29wX3RvX2luZGV4X3N0cmluZzoKIF9sbGlu
dF9vcF9jb3B5X3Jlc3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChf
c2xvd19wYXRoX2NvcHlfcmVzdCkKLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDQpCiAK
IAogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRv
bid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE5MjY3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwMywxNSArNzAzLDE2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNv
bHZlX3Njb3BlKQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29weV9yZXN0KQogeworICAg
IGRhdGFMb2coIiV1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGludCktMSkpOwogICAgIEJF
R0lOKCk7Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gcGNbMl0udS51bnNpZ25lZFZh
bHVlOwotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gPSBleGVjLT5hcmd1bWVu
dENvdW50KCk7Ci0gICAgaWYgKG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gPD0gbnVtUGFyYW1zVG9T
a2lwKQorICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IE9QX0MoMikuanNWYWx1ZSgpLmFzVUludDMy
KCk7CisgICAgaWYgKCFhcnJheVNpemUpIHsKKyAgICAgICAgQVNTRVJUKCFqc0Nhc3Q8SlNBcnJh
eSo+KE9QKDEpLmpzVmFsdWUoKSktPmxlbmd0aCgpKTsKICAgICAgICAgRU5EKCk7Ci0KKyAgICB9
CiAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUoKSk7
Ci0gICAgdW5zaWduZWQgYXJyYXlTaXplID0gbnVtQXJndW1lbnRzVG9GdW5jdGlvbiAtIG51bVBh
cmFtc1RvU2tpcDsKLSAgICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7CisgICAg
QVNTRVJUKGFycmF5U2l6ZSA9PSBhcnJheS0+bGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIG51bVBh
cmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7CiAg
ICAgRU5EKCk7Cg==
</data>
<flag name="review"
          id="290974"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>