<?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>164582</bug_id>
          
          <creation_ts>2016-11-09 23:46:46 -0800</creation_ts>
          <short_desc>[JSC] Default parameters should be retrieved by op_get_argument opcode instead of changing arity</short_desc>
          <delta_ts>2017-03-16 06:52:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1249700</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-09 23:46:46 -0800</bug_when>
    <thetext>If you have a function like,

function func(a, b, options = {}) {
...
}

`func.length` is 2. But the number of parameters of this function is counted as 3.
So if you call it with the form `func(a, b)`, the arity check always fails.
But in the above case, not passing options is common.

Instead, we should retrieve the argument by using `op_get_argument`. It does not increase the arity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286913</commentid>
    <comment_count>1</comment_count>
      <attachid>304196</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-12 10:36:05 -0700</bug_when>
    <thetext>Created attachment 304196
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286914</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-12 10:47:37 -0700</bug_when>
    <thetext>Note that this patch improves six-speed default.es6 by 4.05x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286927</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-12 11:30:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Note that this patch improves six-speed default.es6 by 4.05x.

nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287041</commentid>
    <comment_count>4</comment_count>
      <attachid>304228</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-12 23:08:03 -0700</bug_when>
    <thetext>Created attachment 304228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288339</commentid>
    <comment_count>5</comment_count>
      <attachid>304228</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-15 16:24:45 -0700</bug_when>
    <thetext>Comment on attachment 304228
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +        The above is simple. However, it has the side effect that it always increase the arity of the function.
&gt; +        While `function.length` does not increase, internally, the number of parameters of CodeBlock increases.
&gt; +        This effectively prevent our DFG / FTL to perform inlining: currently we only allows DFG to inline
&gt; +        the function with the arity less than or equal the number of passing arguments. It is OK. But when using
&gt; +        default parameters, we frequently do not pass the argument for the parameter with the default value.
&gt; +        Thus, in our current implementation, we frequently need to fixup the arity. And we frequently fail
&gt; +        to inline the function.

Great find.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1120
&gt; +        if (!nonSimpleArguments)
&gt;              initializeNextParameter();

So our arity is just up to our first default-value parameter?

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:3468
&gt; +        // If the parameter list is non simple one, it is handled in bindValue&apos;s code.

This will be true for every parameter?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1444
&gt; +    if (codeBlock-&gt;numParameters() &gt; argumentCountIncludingThis) {

numParameters() includes |this|?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288458</commentid>
    <comment_count>6</comment_count>
      <attachid>304228</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-15 22:00:39 -0700</bug_when>
    <thetext>Comment on attachment 304228
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1120
&gt;&gt;              initializeNextParameter();
&gt; 
&gt; So our arity is just up to our first default-value parameter?

Yes. And it is the same to the ECMAScript&apos;s function.length.

&gt;&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:3468
&gt;&gt; +        // If the parameter list is non simple one, it is handled in bindValue&apos;s code.
&gt; 
&gt; This will be true for every parameter?

Yes. BytecodeGenerator::initializeDefaultParameterValuesAndSetupFunctionScopeStack does so.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1444
&gt;&gt; +    if (codeBlock-&gt;numParameters() &gt; argumentCountIncludingThis) {
&gt; 
&gt; numParameters() includes |this|?

Yes. CodeBlock&apos;s numParameter includes |this| since it is part of arg from the point of virtual register view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288465</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-15 22:13:02 -0700</bug_when>
    <thetext>Committed r214029: &lt;http://trac.webkit.org/changeset/214029&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288533</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-16 06:06:38 -0700</bug_when>
    <thetext>I&apos;ll soon fix the failures in debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288537</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-16 06:24:57 -0700</bug_when>
    <thetext>Committed r214040: &lt;http://trac.webkit.org/changeset/214040&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288540</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-16 06:52:53 -0700</bug_when>
    <thetext>Committed r214041: &lt;http://trac.webkit.org/changeset/214041&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304196</attachid>
            <date>2017-03-12 10:36:05 -0700</date>
            <delta_ts>2017-03-12 23:07:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164582-20170313023603.patch</filename>
            <type>text/plain</type>
            <size>35681</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzNzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NDRjNzI1ZWYwZGUzY2MyZjhkNTEzOWIwNjlhYTMyZTdmNDRiMTAzLi4zOGEyMjE2MzlkNGM5NmZj
ZDE2MTJhZDFjYTdhZWM0ODQ4NDkyYjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxNy0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBEZWZhdWx0IHBhcmFtZXRlciBwYXJ0IHNob3VsZCBiZSBy
ZXRyaWV2ZWQgYnkgb3BfZ2V0X2FyZ3VtZW50IG9wY29kZSBpbnN0ZWFkIG9mIGNoYW5naW5nIGFy
aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVu
Y3Rpb25TY29wZVN0YWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Omlu
aXRpYWxpemVQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QpOgorICAgICAgICAqIHBhcnNl
ci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9u
TWV0YWRhdGEpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uTWV0YWRhdGFOb2RlOjpGdW5jdGlvbk1ldGFkYXRhTm9kZSk6CisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAg
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVt
ZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzeW5jRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvcm1hbFBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkJvZHkpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBw
YXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVh
dGVGdW5jdGlvbk1ldGFkYXRhKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OnJlaWZ5TGVuZ3RoKToKKwogMjAxNy0wMy0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2Zm
QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGJlIHVz
ZWQgd2hlbiBzZWxlY3RpbmcgYSBwcm9jZXNzIG5hbWUgaW4gSlNDIGNvbmZpZyBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCAwNjZiYzY3YzhjMGNmMjk2NjkwMmQ4NDc0YTQxNDk3
ZDFhNzc5ZTdlLi4yNDgxZGI1ZGRlZDhmZDViZjhjMjE0MDA4MzY0NzIwOGJjM2MxNzZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKQEAgLTg4LDcgKzg4LDYgQEAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3QKICAgICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0aW9u
S2V5d29yZFN0YXJ0KCkpCiAgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQobm9kZS0+c3Rh
cnRTdGFydE9mZnNldCgpICsgbm9kZS0+c291cmNlKCkubGVuZ3RoKCkgLSAxKQogICAgICwgbV9w
YXJhbWV0ZXJDb3VudChub2RlLT5wYXJhbWV0ZXJDb3VudCgpKQotICAgICwgbV9mdW5jdGlvbkxl
bmd0aChub2RlLT5mdW5jdGlvbkxlbmd0aCgpKQogICAgICwgbV9mZWF0dXJlcygwKQogICAgICwg
bV9zb3VyY2VQYXJzZU1vZGUobm9kZS0+cGFyc2VNb2RlKCkpCiAgICAgLCBtX2lzSW5TdHJpY3RD
b250ZXh0KG5vZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmlu
ZGV4IDA4NzlkZmIzNmU5ZDZjYjliMTdiOWVhMWRkNDU5MDI4NTRjODk1ZGUuLjljMjU4NTA1YjJk
NjVjMjM0MjVhMGNiNGM0ZDMyMDgzNmJiZDA2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCkBA
IC03Nyw3ICs3Nyw2IEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBzZXRFY21hTmFtZShjb25zdCBJZGVudGlmaWVyJiBu
YW1lKSB7IG1fZWNtYU5hbWUgPSBuYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJy
ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KICAgICB1bnNpZ25lZCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH07IC8vIEV4
Y2x1ZGluZyAndGhpcychCi0gICAgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2Z1bmN0aW9uTGVuZ3RoOyB9CiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNvdXJjZVBhcnNlTW9kZT4obV9zb3VyY2VQYXJz
ZU1vZGUpOyB9OwogCiAgICAgY29uc3QgU291cmNlQ29kZSYgY2xhc3NTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX2NsYXNzU291cmNlOyB9OwpAQCAtMTU5LDcgKzE1OCw2IEBAIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdW5zaWdu
ZWQgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV90eXBlUHJvZmls
aW5nRW5kT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyQ291bnQ7Ci0gICAgdW5zaWdu
ZWQgbV9mdW5jdGlvbkxlbmd0aDsKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBT
b3VyY2VQYXJzZU1vZGUgbV9zb3VyY2VQYXJzZU1vZGU7CiAgICAgdW5zaWduZWQgbV9pc0luU3Ry
aWN0Q29udGV4dCA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDE3MjEwMDY0NjEwMGQwNTE0ODFh
YzZiODEwMDJlMDMyZTQ0YTI1ZWMuLmQyYmYyOWNhM2E2YmJhYTY0NGMzZmYyOTdjYmU3NTlkYjNl
OGU4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC05ODMsMTAgKzk4MywxMiBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVu
Y3Rpb25TY29wZVN0YQogICAgICAgICAgICAgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJu
Tm9kZSosIEV4cHJlc3Npb25Ob2RlKj4gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChpKTsKICAg
ICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZmlyc3QtPmlzUmVzdFBhcmFtZXRlcigpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBhcmFt
ZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBp
KSk7Ci0gICAgICAgICAgICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5nZXQo
KSk7CisgICAgICAgICAgICBpZiAoKGkgKyAxKSA8IG1fcGFyYW1ldGVycy5zaXplKCkpCisgICAg
ICAgICAgICAgICAgZW1pdE1vdmUodGVtcC5nZXQoKSwgJm1fcGFyYW1ldGVyc1tpICsgMV0pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVtaXRHZXRBcmd1bWVudCh0ZW1wLmdl
dCgpLCBpKTsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuc2Vjb25kKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbmRpdGlvbiA9IGVtaXRJc1VuZGVmaW5lZChuZXdU
ZW1wb3JhcnkoKSwgcGFyYW1ldGVyVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBjb25kaXRpb24gPSBlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCks
IHRlbXAuZ2V0KCkpOwogICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gc2tpcERlZmF1bHRQYXJh
bWV0ZXJCZWNhdXNlTm90VW5kZWZpbmVkID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAgICAgICBl
bWl0SnVtcElmRmFsc2UoY29uZGl0aW9uLmdldCgpLCBza2lwRGVmYXVsdFBhcmFtZXRlckJlY2F1
c2VOb3RVbmRlZmluZWQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGVtaXROb2RlKHRlbXAuZ2V0
KCksIHBhcmFtZXRlci5zZWNvbmQpOwpAQCAtMTA5NCw3ICsxMDk2LDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRlZChT
eW1ib2xUYWJsZSoKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4
dFBhcmFtZXRlcigpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIFJlZ2lzdGVy
SUQmIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7CisgICAgbV9wYXJhbWV0ZXJzLmdyb3co
bV9wYXJhbWV0ZXJzLnNpemUoKSArIDEpOworICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVy
Rm9yKHJlZyk7CiAgICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CiAgICAgbV9j
b2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwogICAgIHJldHVybiAmcGFyYW1ldGVyOwpAQCAtMTEw
NCwxNCArMTEwNywyMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1l
dGVycyhGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1h
a2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJl
IG5vdGVkLgotICAgIG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8v
IHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgogICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCisKKyAgICBib29sIG5v
blNpbXBsZUFyZ3VtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRl
cnMuYXQoaSkuZmlyc3Q7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChp
KTsKKyAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVyLmZpcnN0OwogICAgICAgICBpZiAo
cGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3Jlc3RQYXJhbWV0ZXIpOwogICAgICAgICAgICAgbV9yZXN0UGFyYW1ldGVyID0gc3RhdGlj
X2Nhc3Q8UmVzdFBhcmFtZXRlck5vZGUqPihwYXR0ZXJuKTsKLSAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBub25TaW1wbGVBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcmFtZXRlci5zZWNvbmQpIHsKKyAgICAgICAgICAg
IG5vblNpbXBsZUFyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIW5vblNpbXBsZUFyZ3VtZW50cykKICAgICAgICAgICAgIGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDY5YmExMGI5
NGNmMzg5Mjc2NjNjYTNiMWQ4MmMyMTU3NzQxNTRhNDUuLmQ3YzNiMzI3MmEwOTY3NTY4YTNmZTY0
ZjU2ZTQ0MDViOThjYWM3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTY0MCw3ICs2NDAsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEJ5VmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogdGhpc1ZhbHVl
LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRBcmd1
bWVudEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
cHJvcGVydHkpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFB1dEJ5VmFsKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHRo
aXNWYWx1ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdERpcmVjdFB1dEJ5VmFsKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDNhNDU0ZGQzMTRjZTk4ZmE5
MzVmODdhYzU3ZWMxZWJhYjA3YjY0ZWQuLjMxZTBlMGI3ZjU5NmI1ZjMwMDUwOGQ5NGYzZDc1NjVm
NmE3ODUwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCkBAIC0xNDI0LDE1ICsxNDI0LDYgQEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluaW5nQ29zdChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHUK
ICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKLSAgICAvLyBEb2VzIHRoZSBu
dW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0
YXJnZXQ/IFdlIGN1cnJlbnRseQotICAgIC8vIGlubGluZSBvbmx5IGlmIHRoZSBudW1iZXIgb2Yg
YXJndW1lbnRzIHBhc3NlZCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlcgot
ICAgIC8vIGFyZ3VtZW50cyBleHBlY3RlZC4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihleGVj
dXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSArIDEgPiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWls
aW5nIGJlY2F1c2Ugb2YgYXJpdHkgbWlzbWF0Y2guXG4iKTsKLSAgICAgICAgcmV0dXJuIFVJTlRf
TUFYOwotICAgIH0KLSAgICAKICAgICAvLyBEbyB3ZSBoYXZlIGEgY29kZSBibG9jaywgYW5kIGRv
ZXMgdGhlIGNvZGUgYmxvY2sncyBzaXplIG1hdGNoIHRoZSBoZXVyaXN0aWNzL3JlcXVpcmVtZW50
cyBmb3IKICAgICAvLyBiZWluZyBhbiBpbmxpbmUgY2FuZGlkYXRlPyBXZSBtaWdodCBub3QgaGF2
ZSBhIGNvZGUgYmxvY2sgKDEpIGlmIGNvZGUgd2FzIHRocm93biBhd2F5LAogICAgIC8vICgyKSBp
ZiB3ZSBzaW1wbHkgaGFkbid0IGFjdHVhbGx5IG1hZGUgdGhpcyBjYWxsIHlldCBvciAoMykgY29k
ZSBpcyBhIGJ1aWx0aW4gZnVuY3Rpb24gYW5kCkBAIC0xNDQ2LDYgKzE0MzcsMTYgQEAgdW5zaWdu
ZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBh
cmd1bWVudENvdW50SW5jbHUKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1
c2Ugbm8gY29kZSBibG9jayBhdmFpbGFibGUuXG4iKTsKICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwogICAgIH0KKworICAgIC8vIERvZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgd2UncmUgcGFz
c2luZyBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHRhcmdldD8gV2UgY3VycmVudGx5CisgICAgLy8g
aW5saW5lIG9ubHkgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGlzIGdyZWF0ZXIg
dGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyCisgICAgLy8gYXJndW1lbnRzIGV4cGVjdGVkLgor
ICAgIGlmIChjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZhaWxpbmcgYmVjYXVzZSBvZiBhcml0eSBtaXNtYXRjaC5cbiIpOworICAgICAgICByZXR1cm4g
VUlOVF9NQVg7CisgICAgfQorCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9
IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAgICBjb2RlQmxvY2ssIGtp
bmQsIGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlmICh2ZXJib3NlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IDIwMzZlOWQ2ZGZjY2FkMjk5
NjcxYTEwM2JkN2NjZjVjMjAxOGU2NTQuLjY4MjQ2YThkM2NlZGViYzgxZjdjODAyMGVlZmMxN2Qw
NmRkNGEzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBA
IC00MjcsMTQgKzQyNywxNCBAQCBjbGFzcyBBU1RCdWlsZGVyIHsKICAgICAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0
LCAKICAgICAgICAgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVyc1N0YXJ0LCBi
b29sIGluU3RyaWN0Q29udGV4dCwgCiAgICAgICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsCi0gICAgICAgIHVuc2lnbmVkIHBhcmFt
ZXRlckNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCwKKyAgICAgICAgdW5zaWduZWQgcGFy
YW1ldGVyQ291bnQsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIGlzQXJyb3dG
dW5jdGlvbkJvZHlFeHByZXNzaW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgRnVuY3Rpb25NZXRhZGF0YU5vZGUoCiAgICAgICAgICAgICBtX3BhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgCiAg
ICAgICAgICAgICBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBhcmFt
ZXRlcnNTdGFydCwgCiAgICAgICAgICAgICBpblN0cmljdENvbnRleHQsIGNvbnN0cnVjdG9yS2lu
ZCwgc3VwZXJCaW5kaW5nLAotICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQsIGZ1bmN0aW9uTGVu
Z3RoLCBtb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBw
YXJhbWV0ZXJDb3VudCwgbW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOwogICAg
IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVp
bGRlcj4mIGZ1bmN0aW9uSW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAK
aW5kZXggODBjNjU3ZWM1Yjg3YjM5YzViMDQ0YzVjOWViNGNjZWZmZWRlNzhiNi4uM2EwOGI2MzU0
N2QxMzAwNzA0N2VjODM2Y2Y0NTBhMmJhZThiYzgyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBGdW5jdGlvbk1ldGFkYXRhTm9kZTo6
RnVuY3Rpb25NZXRhZGF0YU5vZGUoCiAgICAgUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0TG9jYXRpb24sIAogICAgIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIAogICAgIGlu
dCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1l
dGVyc1N0YXJ0LCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCAKLSAgICBDb25zdHJ1Y3RvcktpbmQg
Y29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCB1bnNpZ25lZCBwYXJh
bWV0ZXJDb3VudCwgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgsIFNvdXJjZVBhcnNlTW9kZSBtb2Rl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKQorICAgIENvbnN0cnVjdG9yS2lu
ZCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIHVuc2lnbmVkIHBh
cmFtZXRlckNvdW50LCBTb3VyY2VQYXJzZU1vZGUgbW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25C
b2R5RXhwcmVzc2lvbikKICAgICAgICAgOiBOb2RlKGVuZExvY2F0aW9uKQogICAgICAgICAsIG1f
c3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQpAQCAtMTQ0LDcgKzE0NCw2IEBAIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpGdW5jdGlvbk1ldGFk
YXRhTm9kZSgKICAgICAgICAgLCBtX3BhcmFtZXRlcnNTdGFydChwYXJhbWV0ZXJzU3RhcnQpCiAg
ICAgICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3RhcnRPZmZzZXQpCiAg
ICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudChwYXJhbWV0ZXJDb3VudCkKLSAgICAgICAgLCBtX2Z1
bmN0aW9uTGVuZ3RoKGZ1bmN0aW9uTGVuZ3RoKQogICAgICAgICAsIG1fcGFyc2VNb2RlKG1vZGUp
CiAgICAgICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4dCkKICAgICAg
ICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VwZXJCaW5kaW5nKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA2ZjJjZDZkNWI0OGNlMzhkMjll
YWNhNTliNDAxYTEyZjU4NzFiOTk5Li5mMGIwNDVhOTcxZjhlNWRjZmU2ODhmZGEyYTVkY2MxNmZh
YmEwMmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xODkxLDcgKzE4
OTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIAogICAg
ICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgaW50IGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCAKICAgICAgICAgICAgIGludCBmdW5jdGlvbk5hbWVTdGFydCwg
aW50IHBhcmFtZXRlcnNTdGFydCwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgCi0gICAgICAgICAg
ICBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQs
IHVuc2lnbmVkIGZ1bmN0aW9uTGVuZ3RoLAorICAgICAgICAgICAgQ29uc3RydWN0b3JLaW5kLCBT
dXBlckJpbmRpbmcsIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgU291cmNl
UGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKIAogICAgICAg
ICB2b2lkIGZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IElkZW50aWZpZXIm
LCBGdW5jdGlvbk1vZGUpOwpAQCAtMTkxMSw3ICsxOTExLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVt
bjsgfQogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENv
bHVtbjsgfQogICAgICAgICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyYW1ldGVyQ291bnQ7IH0KLSAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTGVuZ3RoOyB9CiAgICAgICAgIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfQogCiAgICAgICAgIHZv
aWQgc2V0RW5kUG9zaXRpb24oSlNUZXh0UG9zaXRpb24pOwpAQCAtMTk0OCw3ICsxOTQ3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9jbGFzc1NvdXJjZTsKICAgICAg
ICAgaW50IG1fc3RhcnRTdGFydE9mZnNldDsKICAgICAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJD
b3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9mdW5jdGlvbkxlbmd0aDsKICAgICAgICAgaW50IG1f
bGFzdExpbmU7CiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKICAgICAgICAg
dW5zaWduZWQgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKaW5kZXggMmE5NDA4YmVmYWUyNzc1MzdjZTQxMzUwM2E4NzdkMjEwOWQ5
NWQ4OC4uYzlkOWJhZGI2MzI2Y2NlODZjMDE3YjA0NWU0YzcxOTU1OWQzYjQxZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtMjg2LDkgKzI4Niw4IEBAIGJvb2wg
UGFyc2VyPExleGVyVHlwZT46OmlzQXJyb3dGdW5jdGlvblBhcmFtZXRlcnMoKQogICAgICAgICAg
ICAgZmFrZVNjb3BlLT5zZXRTb3VyY2VQYXJzZU1vZGUoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1
bmN0aW9uTW9kZSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNDb3VudCA9IDA7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCA9IDA7CiAgICAgICAgICAgICBi
b29sIGlzQXJyb3dGdW5jdGlvblBhcmFtZXRlckxpc3QgPSB0cnVlOwotICAgICAgICAgICAgaXNB
cnJvd0Z1bmN0aW9uID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIHN5bnRh
eENoZWNrZXIuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpLCBpc0Fycm93RnVuY3Rpb25QYXJh
bWV0ZXJMaXN0LCBwYXJhbWV0ZXJzQ291bnQsIGZ1bmN0aW9uTGVuZ3RoKSAmJiBjb25zdW1lKENM
T1NFUEFSRU4pICYmIG1hdGNoKEFSUk9XRlVOQ1RJT04pOworICAgICAgICAgICAgaXNBcnJvd0Z1
bmN0aW9uID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIHN5bnRheENoZWNr
ZXIuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpLCBpc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJM
aXN0LCBwYXJhbWV0ZXJzQ291bnQpICYmIGNvbnN1bWUoQ0xPU0VQQVJFTikgJiYgbWF0Y2goQVJS
T1dGVU5DVElPTik7CiAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwogICAgICAgICAgICAg
cG9wU2NvcGUoZmFrZVNjb3BlLCBzeW50YXhDaGVja2VyLk5lZWRzRnJlZVZhcmlhYmxlSW5mbyk7
CiAgICAgICAgIH0KQEAgLTQ2NSw3ICs0NjQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZW5lcmF0bwog
ICAgICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKGdlbmVyYXRvckZ1bmN0aW9u
Q29udGV4dCwgbW9kZSksICJDYW5ub3QgcGFyc2UgdGhlIGJvZHkgb2YgYSBnZW5lcmF0b3IiKTsK
ICAgICAgICAgcG9wU2NvcGUoZ2VuZXJhdG9yQm9keVNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNG
cmVlVmFyaWFibGVJbmZvKTsKICAgICB9Ci0gICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVG
dW5jdGlvbk1ldGFkYXRhKHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1
bW4sIHRva2VuQ29sdW1uKCksIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFy
dCwgcGFyYW1ldGVyc1N0YXJ0LCBzdHJpY3RNb2RlKCksIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
bV9zdXBlckJpbmRpbmcsIGluZm8ucGFyYW1ldGVyQ291bnQsIGluZm8uZnVuY3Rpb25MZW5ndGgs
IFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGUsIGZhbHNlKTsKKyAgICBpbmZvLmJv
ZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5M
b2NhdGlvbigpLCBzdGFydENvbHVtbiwgdG9rZW5Db2x1bW4oKSwgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgQ29u
c3RydWN0b3JLaW5kOjpOb25lLCBtX3N1cGVyQmluZGluZywgaW5mby5wYXJhbWV0ZXJDb3VudCwg
U291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JCb2R5TW9kZSwgZmFsc2UpOwogCiAgICAgaW5mby5l
bmRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgaW5mby5lbmRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0
YS5vZmZzZXQ7CkBAIC01MTYsNyArNTE1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNGdW4KICAg
ICAgICAgfQogICAgICAgICBwb3BTY29wZShhc3luY0Z1bmN0aW9uQm9keVNjb3BlLCBUcmVlQnVp
bGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKTsKICAgICB9Ci0gICAgaW5mby5ib2R5ID0gY29u
dGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24o
KSwgc3RhcnRDb2x1bW4sIHRva2VuQ29sdW1uKCksIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5j
dGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBzdHJpY3RNb2RlKCksIENvbnN0cnVjdG9y
S2luZDo6Tm9uZSwgbV9zdXBlckJpbmRpbmcsIGluZm8ucGFyYW1ldGVyQ291bnQsIGluZm8uZnVu
Y3Rpb25MZW5ndGgsIGlubmVyUGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lv
bik7CisgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0
TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHRva2VuQ29sdW1uKCksIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBz
dHJpY3RNb2RlKCksIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgbV9zdXBlckJpbmRpbmcsIGluZm8u
cGFyYW1ldGVyQ291bnQsIGlubmVyUGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVz
c2lvbik7CiAKICAgICBpbmZvLmVuZExpbmUgPSB0b2tlbkxpbmUoKTsKICAgICBpbmZvLmVuZE9m
ZnNldCA9IGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uID8gdG9rZW5Mb2NhdGlvbigpLmVu
ZE9mZnNldCA6IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKQEAgLTE4MzMsNyArMTgzMiw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6bWF5YmVQ
YXJzZUFzeW5jRnVuY3Rpb25EZWNsCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCwgVHJlZUZvcm1hbFBhcmFt
ZXRlckxpc3QgbGlzdCwgYm9vbCBpc0Fycm93RnVuY3Rpb24sIHVuc2lnbmVkJiBwYXJhbWV0ZXJD
b3VudCwgdW5zaWduZWQmIGZ1bmN0aW9uTGVuZ3RoKQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1
aWxkZXImIGNvbnRleHQsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3QsIGJvb2wgaXNBcnJv
d0Z1bmN0aW9uLCB1bnNpZ25lZCYgcGFyYW1ldGVyQ291bnQpCiB7CiAjZGVmaW5lIGZhaWxJZkR1
cGxpY2F0ZUlmVmlvbGF0aW9uKCkgXAogICAgIGlmIChkdXBsaWNhdGVQYXJhbWV0ZXIpIHtcCkBA
IC0xODQ3LDYgKzE4NDYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQgogICAgIGJvb2wgaGFz
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4gPSBmYWxzZTsKICAgICBib29sIGlzUmVzdFBhcmFtZXRlciA9
IGZhbHNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxw
dHI7CisgICAgdW5zaWduZWQgcmVzdFBhcmFtZXRlclN0YXJ0ID0gMDsKICAgICBkbyB7CiAgICAg
ICAgIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXJhbWV0ZXIgPSAwOwogICAgICAgICBUcmVl
RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUgPSAwOwpAQCAtMTg1OSw3ICsxODU5LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1h
bFBhcmFtZXRlcnMoVHJlZUIKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSghbV9wYXJz
ZXJTdGF0ZS5hbGxvd0F3YWl0ICYmIG1hdGNoKEFXQUlUKSwgIkNhbid0IHVzZSAnYXdhaXQnIGFz
IGEgcGFyYW1ldGVyIG5hbWUgaW4gYW4gYXN5bmMgZnVuY3Rpb24iKTsKICAgICAgICAgICAgIFRy
ZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBkZXN0cnVjdHVyaW5nUGF0dGVybiA9IHBhcnNlRGVzdHJ1
Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmluZ0tpbmQ6OkRlc3RydWN0dXJlVG9Q
YXJhbWV0ZXJzLCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgJmR1cGxpY2F0ZVBhcmFtZXRlciwg
Jmhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuKTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7
Ci0gICAgICAgICAgICBwYXJhbWV0ZXIgPSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoZGVz
dHJ1Y3R1cmluZ1BhdHRlcm4sIHBhcmFtZXRlckNvdW50KTsKKyAgICAgICAgICAgIHBhcmFtZXRl
ciA9IGNvbnRleHQuY3JlYXRlUmVzdFBhcmFtZXRlcihkZXN0cnVjdHVyaW5nUGF0dGVybiwgcmVz
dFBhcmFtZXRlclN0YXJ0KTsKICAgICAgICAgICAgIGZhaWxJZlRydWUobWF0Y2goQ09NTUEpLCAi
UmVzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9u
IGRlY2xhcmF0aW9uIik7IC8vIExldCdzIGhhdmUgYSBnb29kIGVycm9yIG1lc3NhZ2UgZm9yIHRo
aXMgY29tbW9uIGNhc2UuCiAgICAgICAgICAgICBpc1Jlc3RQYXJhbWV0ZXIgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UKQEAgLTE4NzYsOSArMTg3Niw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVC
CiAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SGFzTm9uU2ltcGxlUGFyYW1ldGVyTGlz
dCgpOwogICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRl
ZmF1bHRWYWx1ZSk7CiAgICAgICAgIGlmICghaXNSZXN0UGFyYW1ldGVyKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJDb3VudCsrOworICAgICAgICAgICAgcmVzdFBhcmFtZXRlclN0YXJ0Kys7CiAg
ICAgICAgICAgICBpZiAoIWhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpCi0gICAgICAgICAgICAg
ICAgZnVuY3Rpb25MZW5ndGgrKzsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJDb3VudCsrOwog
ICAgICAgICB9CiAgICAgfSB3aGlsZSAoIWlzUmVzdFBhcmFtZXRlciAmJiBjb25zdW1lKENPTU1B
KSk7CiAKQEAgLTE4ODksNyArMTg4OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
Ym9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keSgKICAg
ICBUcmVlQnVpbGRlciYgY29udGV4dCwgU3ludGF4Q2hlY2tlciYgc3ludGF4Q2hlY2tlciwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBpbnQgc3RhcnRDb2x1bW4sIGludCBm
dW5jdGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVy
c1N0YXJ0LAotICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGlu
ZyBzdXBlckJpbmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUgYm9keVR5cGUsIHVuc2lnbmVkIHBhcmFt
ZXRlckNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCwgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSkKKyAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcg
c3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlIGJvZHlUeXBlLCB1bnNpZ25lZCBwYXJhbWV0
ZXJDb3VudCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKIHsKICAgICBib29sIGlzQXJyb3dG
dW5jdGlvbkJvZHlFeHByZXNzaW9uID0gYm9keVR5cGUgPT0gQXJyb3dGdW5jdGlvbkJvZHlFeHBy
ZXNzaW9uOwogICAgIGlmICghaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pIHsKQEAgLTE4
OTcsNyArMTg5Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9u
Qm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvCiAgICAgICAgIGlmIChtYXRj
aChDTE9TRUJSQUNFKSkgewogICAgICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5D
b2x1bW4oKTsKICAgICAgICAgICAgIFN1cGVyQmluZGluZyBmdW5jdGlvblN1cGVyQmluZGluZyA9
IGFkanVzdFN1cGVyQmluZGluZ0ZvckJhc2VDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcktpbmQsIHN1
cGVyQmluZGluZywgY3VycmVudFNjb3BlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlRnVuY3Rpb25NZXRhZGF0YShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0
YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVT
dGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2luZCwgZnVu
Y3Rpb25TdXBlckJpbmRpbmcsIHBhcmFtZXRlckNvdW50LCBmdW5jdGlvbkxlbmd0aCwgcGFyc2VN
b2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbik7CisgICAgICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRp
b24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JL
aW5kLCBmdW5jdGlvblN1cGVyQmluZGluZywgcGFyYW1ldGVyQ291bnQsIHBhcnNlTW9kZSwgaXNB
cnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTE2
LDcgKzE5MTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJv
ZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25CbwogICAgIH0KICAgICB1bnNpZ25l
ZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgIFN1cGVyQmluZGluZyBmdW5jdGlvblN1
cGVyQmluZGluZyA9IGFkanVzdFN1cGVyQmluZGluZ0ZvckJhc2VDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3RvcktpbmQsIHN1cGVyQmluZGluZywgY3VycmVudFNjb3BlKCkpOwotICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigp
LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25O
YW1lU3RhcnQsIHBhcmFtZXRlcnNTdGFydCwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3RvcktpbmQs
IGZ1bmN0aW9uU3VwZXJCaW5kaW5nLCBwYXJhbWV0ZXJDb3VudCwgZnVuY3Rpb25MZW5ndGgsIHBh
cnNlTW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigp
LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25O
YW1lU3RhcnQsIHBhcmFtZXRlcnNTdGFydCwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3RvcktpbmQs
IGZ1bmN0aW9uU3VwZXJCaW5kaW5nLCBwYXJhbWV0ZXJDb3VudCwgcGFyc2VNb2RlLCBpc0Fycm93
RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdG
b3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCkBAIC0xOTcwLDE2ICsxOTcwLDE0
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlciwgY2xhc3MgRnVuY3Rpb25JbmZvVHlwCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoKENMT1NFUEFSRU4pKSB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uSW5mby5wYXJhbWV0ZXJDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
SW5mby5mdW5jdGlvbkxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCwgcGFyYW1l
dGVyTGlzdCwgaXNBcnJvd0Z1bmN0aW9uLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIGZ1
bmN0aW9uSW5mby5mdW5jdGlvbkxlbmd0aCksICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3Ig
dGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOworICAgICAgICAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCwgcGFyYW1ldGVyTGlz
dCwgaXNBcnJvd0Z1bmN0aW9uLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQpLCAiQ2Fubm90
IHBhcnNlIHBhcmFtZXRlcnMgZm9yIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y29uc3VtZU9yRmFpbChDTE9TRVBBUkVOLCAiRXhwZWN0ZWQgYSAnKScgb3IgYSAnLCcgYWZ0ZXIg
YSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50ID0gMTsKLSAgICAgICAgICAgICAg
ICBmdW5jdGlvbkluZm8uZnVuY3Rpb25MZW5ndGggPSAxOwogICAgICAgICAgICAgICAgIGF1dG8g
cGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVy
aW5nS2luZDo6RGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVk
KTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2Ug
cGFyYW1ldGVyIHBhdHRlcm4iKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFt
ZXRlcihwYXJhbWV0ZXJMaXN0LCBwYXJhbWV0ZXIsIDApOwpAQCAtMTk5Nyw3ICsxOTk1LDYgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4gdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
LCBjbGFzcyBGdW5jdGlvbkluZm9UeXAKICAgICBpZiAobW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6
OkdldHRlck1vZGUpIHsKICAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOLCAiZ2V0dGVy
IGZ1bmN0aW9ucyBtdXN0IGhhdmUgbm8gcGFyYW1ldGVycyIpOwogICAgICAgICBmdW5jdGlvbklu
Zm8ucGFyYW1ldGVyQ291bnQgPSAwOwotICAgICAgICBmdW5jdGlvbkluZm8uZnVuY3Rpb25MZW5n
dGggPSAwOwogICAgIH0gZWxzZSBpZiAobW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OlNldHRlck1v
ZGUpIHsKICAgICAgICAgZmFpbElmVHJ1ZShtYXRjaChDTE9TRVBBUkVOKSwgInNldHRlciBmdW5j
dGlvbnMgbXVzdCBoYXZlIG9uZSBwYXJhbWV0ZXIiKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogZHVwbGljYXRlUGFyYW1ldGVyID0gbnVsbHB0cjsKQEAgLTIwMTEsMTcgKzIwMDgsMTUgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4gdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
LCBjbGFzcyBGdW5jdGlvbkluZm9UeXAKICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRI
YXNOb25TaW1wbGVQYXJhbWV0ZXJMaXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgY29udGV4dC5h
cHBlbmRQYXJhbWV0ZXIocGFyYW1ldGVyTGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwot
ICAgICAgICBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQgPSAxOwotICAgICAgICBmdW5jdGlv
bkluZm8uZnVuY3Rpb25MZW5ndGggPSBkZWZhdWx0VmFsdWUgPyAwIDogMTsKKyAgICAgICAgZnVu
Y3Rpb25JbmZvLnBhcmFtZXRlckNvdW50ID0gZGVmYXVsdFZhbHVlID8gMCA6IDE7CiAgICAgICAg
IGZhaWxJZlRydWUobWF0Y2goQ09NTUEpLCAic2V0dGVyIGZ1bmN0aW9ucyBtdXN0IGhhdmUgb25l
IHBhcmFtZXRlciIpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4sICJFeHBlY3Rl
ZCBhICcpJyBhZnRlciBhIHBhcmFtZXRlciBkZWNsYXJhdGlvbiIpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChtYXRjaChDTE9TRVBBUkVOKSkgewogICAgICAgICAgICAgZnVuY3Rpb25JbmZv
LnBhcmFtZXRlckNvdW50ID0gMDsKLSAgICAgICAgICAgIGZ1bmN0aW9uSW5mby5mdW5jdGlvbkxl
bmd0aCA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBib29sIGlzQXJyb3dGdW5j
dGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VGb3JtYWxQYXJhbWV0
ZXJzKGNvbnRleHQsIHBhcmFtZXRlckxpc3QsIGlzQXJyb3dGdW5jdGlvbiwgZnVuY3Rpb25JbmZv
LnBhcmFtZXRlckNvdW50LCBmdW5jdGlvbkluZm8uZnVuY3Rpb25MZW5ndGgpLCAiQ2Fubm90IHBh
cnNlIHBhcmFtZXRlcnMgZm9yIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsK
KyAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlRm9ybWFsUGFyYW1ldGVycyhjb250ZXh0LCBw
YXJhbWV0ZXJMaXN0LCBpc0Fycm93RnVuY3Rpb24sIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3Vu
dCksICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlv
bk1vZGUobW9kZSkpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJF
TiwgIkV4cGVjdGVkIGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9u
Iik7CiAgICAgfQpAQCAtMjEyMywxMSArMjExOCwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWls
ZAogICAgICAgICAgICAgICAgIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVt
biwgYm9keUVuZENvbHVtbiwgCiAgICAgICAgICAgICAgICAgZnVuY3Rpb25LZXl3b3JkU3RhcnQs
IGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIAogICAgICAgICAgICAgICAgIGNh
Y2hlZEluZm8tPnN0cmljdE1vZGUsIGNvbnN0cnVjdG9yS2luZCwgZnVuY3Rpb25TdXBlckJpbmRp
bmcsCi0gICAgICAgICAgICAgICAgY2FjaGVkSW5mby0+cGFyYW1ldGVyQ291bnQsIGNhY2hlZElu
Zm8tPmZ1bmN0aW9uTGVuZ3RoLAorICAgICAgICAgICAgICAgIGNhY2hlZEluZm8tPnBhcmFtZXRl
ckNvdW50LAogICAgICAgICAgICAgICAgIG1vZGUsIGZ1bmN0aW9uQm9keVR5cGUgPT0gQXJyb3dG
dW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKICAgICAgICAgICAgIGZ1bmN0aW9uSW5mby5lbmRPZmZz
ZXQgPSBjYWNoZWRJbmZvLT5lbmRGdW5jdGlvbk9mZnNldDsKICAgICAgICAgICAgIGZ1bmN0aW9u
SW5mby5wYXJhbWV0ZXJDb3VudCA9IGNhY2hlZEluZm8tPnBhcmFtZXRlckNvdW50OwotICAgICAg
ICAgICAgZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVuZ3RoID0gY2FjaGVkSW5mby0+ZnVuY3Rpb25M
ZW5ndGg7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGcm9tU291cmNlUHJv
dmlkZXJDYWNoZShjYWNoZWRJbmZvKTsKICAgICAgICAgICAgIHBvcFNjb3BlKGZ1bmN0aW9uU2Nv
cGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pOwpAQCAtMjI5NSw3ICsyMjg5
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICB9KTsKIAogICAgIGF1dG8gcGVyZm9y
bVBhcnNpbmdGdW5jdGlvbkJvZHkgPSBbJl0gewotICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlv
bkJvZHkoY29udGV4dCwgc3ludGF4Q2hlY2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4s
IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0
LCBjb25zdHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBl
LCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIGZ1bmN0aW9uSW5mby5mdW5jdGlvbkxlbmd0
aCwgbW9kZSk7CisgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBzeW50
YXhDaGVja2VyLCBzdGFydExvY2F0aW9uLCBzdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIGNvbnN0cnVjdG9yS2luZCwg
ZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGZ1bmN0aW9uQm9keVR5cGUsIGZ1bmN0aW9uSW5mby5wYXJh
bWV0ZXJDb3VudCwgbW9kZSk7CiAgICAgfTsKIAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNG
dW5jdGlvbldyYXBwZXJQYXJzZU1vZGUobW9kZSkpIHsKQEAgLTIzNTAsMTAgKzIzNDQsMTAgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICAvLyBBbnkgZnV0dXJlIHJlcGFyc2luZyBjYW4g
dGhlbiBza2lwIHRoZSBmdW5jdGlvbi4KICAgICAvLyBGb3IgYXJyb3cgZnVuY3Rpb24gaXMgOCA9
IHg9PnggKyA0IHN5bWJvbHM7CiAgICAgLy8gRm9yIG9yZGluYXJ5IGZ1bmN0aW9uIGlzIDE2ICA9
IGZ1bmN0aW9uKCl7fSArIDQgc3ltYm9scwotICAgIGNvbnN0IGludCBtaW5pbXVtRnVuY3Rpb25M
ZW5ndGhUb0NhY2hlID0gZnVuY3Rpb25Cb2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9keUJs
b2NrID8gMTYgOiA4OworICAgIGNvbnN0IGludCBtaW5pbXVtU291cmNlTGVuZ3RoVG9DYWNoZSA9
IGZ1bmN0aW9uQm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/IDE2IDogODsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+IG5ld0luZm87Ci0g
ICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb25JbmZvLmVuZE9mZnNldCAtIGZ1bmN0aW9u
SW5mby5zdGFydE9mZnNldDsKLSAgICBpZiAoVHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2Fj
aGUgJiYgbV9mdW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9u
TGVuZ3RoVG9DYWNoZSkgeworICAgIGludCBzb3VyY2VMZW5ndGggPSBmdW5jdGlvbkluZm8uZW5k
T2Zmc2V0IC0gZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0OworICAgIGlmIChUcmVlQnVpbGRlcjo6
Q2FuVXNlRnVuY3Rpb25DYWNoZSAmJiBtX2Z1bmN0aW9uQ2FjaGUgJiYgc291cmNlTGVuZ3RoID4g
bWluaW11bVNvdXJjZUxlbmd0aFRvQ2FjaGUpIHsKICAgICAgICAgU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5l
bmRGdW5jdGlvbk9mZnNldCA9IGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQ7CiAgICAgICAgIHBhcmFt
ZXRlcnMuZnVuY3Rpb25OYW1lU3RhcnQgPSBmdW5jdGlvbk5hbWVTdGFydDsKQEAgLTIzNjIsNyAr
MjM1Niw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgICAgIHBhcmFtZXRlcnMubGFz
dFRva2VuRW5kT2Zmc2V0ID0gbG9jYXRpb24uZW5kT2Zmc2V0OwogICAgICAgICBwYXJhbWV0ZXJz
Lmxhc3RUb2tlbkxpbmVTdGFydE9mZnNldCA9IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAg
ICAgICAgcGFyYW1ldGVycy5wYXJhbWV0ZXJDb3VudCA9IGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJD
b3VudDsKLSAgICAgICAgcGFyYW1ldGVycy5mdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uSW5mby5m
dW5jdGlvbkxlbmd0aDsKICAgICAgICAgcGFyYW1ldGVycy5jb25zdHJ1Y3RvcktpbmQgPSBjb25z
dHJ1Y3RvcktpbmQ7CiAgICAgICAgIHBhcmFtZXRlcnMuZXhwZWN0ZWRTdXBlckJpbmRpbmcgPSBl
eHBlY3RlZFN1cGVyQmluZGluZzsKICAgICAgICAgaWYgKGZ1bmN0aW9uQm9keVR5cGUgPT0gQXJy
b3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAppbmRleCAxZDZlZGRkODVhMmE3NmRlOTMwZDcxZTgzMWQxZDMxZDhkNzNkZDMyLi5kOGY5
MmMwMGZiNDEzNTg0MzVhYWUwZWJmZDYwOTEyZWYzYTFlYmI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTE1MzIsOCArMTUzMiw4IEBAIGNsYXNzIFBhcnNlciB7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VQcm9wZXJ0
eShUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1aWxkZXImIGNv
bnRleHQsIGNvbnN0IElkZW50aWZpZXIqIG1ldGhvZE5hbWUsIGJvb2wgaXNHZW5lcmF0b3IsIGJv
b2wgaXNBc3luY01ldGhvZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
UHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJv
cGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBDb25z
dHJ1Y3RvcktpbmQsIGJvb2wgaXNDbGFzc1Byb3BlcnR5KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9u
Qm9keShUcmVlQnVpbGRlciYsIFN5bnRheENoZWNrZXImLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBp
bnQgcGFyYW1ldGVyc1N0YXJ0LCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgRnVuY3Rp
b25Cb2R5VHlwZSwgdW5zaWduZWQsIHVuc2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUpOwotICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBib29sIHBhcnNlRm9ybWFs
UGFyYW1ldGVycyhUcmVlQnVpbGRlciYsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0LCBib29sIGlz
QXJyb3dGdW5jdGlvbiwgdW5zaWduZWQmLCB1bnNpZ25lZCYpOworICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rp
b25Cb2R5KFRyZWVCdWlsZGVyJiwgU3ludGF4Q2hlY2tlciYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQs
IGludCBwYXJhbWV0ZXJzU3RhcnQsIENvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCBGdW5j
dGlvbkJvZHlUeXBlLCB1bnNpZ25lZCwgU291cmNlUGFyc2VNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZUZvcm1hbFBhcmFtZXRl
cnMoVHJlZUJ1aWxkZXImLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCwgYm9vbCBpc0Fycm93RnVu
Y3Rpb24sIHVuc2lnbmVkJik7CiAgICAgZW51bSBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0IHsg
Rm9yTG9vcENvbnRleHQsIFZhckRlY2xhcmF0aW9uQ29udGV4dCB9OwogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
TGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm4mIGxhc3RQYXR0ZXJuLCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1Rl
eHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0
UG9zaXRpb24mIGluaXRFbmQsIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQsIERlY2xhcmF0aW9u
VHlwZSwgRXhwb3J0VHlwZSwgYm9vbCYgZm9yTG9vcENvbnN0RG9lc05vdEhhdmVJbml0aWFsaXpl
cik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMg
cGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50cyhUcmVl
QnVpbGRlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAppbmRleCA1NmQ2NzM3NWZkMmM3M2MyYjhjZGZlM2Y4MzViM2IzODliZmUzNzhkLi5lNDRhMWRm
YTg0YjYxZDQ2M2MzODU5MTNjY2NjOWJiM2IyMTQ4YzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtMTg3LDcgKzE4Nyw3IEBAIGNsYXNzIFN5
bnRheENoZWNrZXIgewogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tl
cj4mKSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVH
ZW5lcmF0b3JGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2Vy
RnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJu
IEZ1bmN0aW9uRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzeW5jRnVuY3Rpb25C
b2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50
YXhDaGVja2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVGdW5j
dGlvbk1ldGFkYXRhKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50LCBib29sLCBpbnQsIGludCwgaW50LCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVy
QmluZGluZywgdW5zaWduZWQsIGludCwgU291cmNlUGFyc2VNb2RlLCBib29sLCBJbm5lckFycm93
RnVuY3Rpb25Db2RlRmVhdHVyZXMgPSBOb0lubmVyQXJyb3dGdW5jdGlvbkZlYXR1cmVzKSB7IHJl
dHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRnVuY3Rpb25NZXRhZGF0
YShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCwgYm9vbCwgaW50LCBpbnQsIGludCwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIHVu
c2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcyA9IE5vSW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVyZXMpIHsgcmV0dXJuIEZ1bmN0aW9uQm9k
eVJlc3VsdDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycm93RnVuY3Rpb25FeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVj
a2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU1ldGhvZERlZmluaXRpb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVu
Y3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JikgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9CiAgICAg
dm9pZCBzZXRGdW5jdGlvbk5hbWVTdGFydChpbnQsIGludCkgeyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IGU3NzRiNTUz
Yjg0N2JlZDgwNjhmMzhkZDRmYTBhODg3OTcyNDA2NGUuLmNlZTQxMGRmOTI0ZTBiM2M5N2ZkN2Rl
MjE2N2Y5OThiYWY3ODE3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0xNDUsNyArMTQ1LDYgQEAgY2xhc3MgRnVuY3Rp
b25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewogICAgIGNvbnN0
IElkZW50aWZpZXImIGVjbWFOYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmVj
bWFOYW1lKCk7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KICAgICB1bnNpZ25lZCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5wYXJh
bWV0ZXJDb3VudCgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCi0gICAgdW5zaWduZWQgZnVuY3Rp
b25MZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25M
ZW5ndGgoKTsgfQogICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyc2VNb2RlKCk7IH0KICAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5z
Y3JpcHRNb2RlKCk7IH0KICAgICBjb25zdCBTb3VyY2VDb2RlJiBjbGFzc1NvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCmluZGV4IDgxNmYwZjMxN2Mz
ZGQ3MzFiYzQzZmIyMWVlNDJlYmNjN2YzNzc3NDguLjdjNTMxMzAxMDIzNzE5ZDUwMDMxOTg3ZDMw
N2UwMjZjMmU3ZTJmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3Jl
YXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXQKIHsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFs
T2JqZWN0KTsKICAgICBmdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc1N0cmluZygmdm0sIGV4ZWN1dGFibGUtPm5hbWUoKS5zdHJpbmcoKSksIFJlYWRPbmx5
IHwgRG9udEVudW0pOwotICAgIGZ1bmN0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoZXhlY3V0YWJsZS0+ZnVuY3Rpb25MZW5ndGgoKSksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIGZ1bmN0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoZXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKSksIFJl
YWRPbmx5IHwgRG9udEVudW0pOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIApAQCAtMTEyLDcg
KzExMiw3IEBAIEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihW
TSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0CiB7CiAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBjcmVhdGUodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7CiAgICAgZnVuY3Rp
b24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoJnZtLCBu
YW1lKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgZnVuY3Rpb24tPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihleGVjdXRhYmxlLT5mdW5jdGlvbkxl
bmd0aCgpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgZnVuY3Rpb24tPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihleGVjdXRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwog
fQogCkBAIC02MjMsNyArNjIzLDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeUxlbmd0aChWTSYg
dm0pCiAKICAgICBBU1NFUlQoIWhhc1JlaWZpZWRMZW5ndGgoKSk7CiAgICAgQVNTRVJUKCFpc0hv
c3RGdW5jdGlvbigpKTsKLSAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IGpzTnVtYmVyKGpzRXhl
Y3V0YWJsZSgpLT5mdW5jdGlvbkxlbmd0aCgpKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9
IGpzTnVtYmVyKGpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICB1bnNpZ25l
ZCBpbml0aWFsQXR0cmlidXRlcyA9IERvbnRFbnVtIHwgUmVhZE9ubHk7CiAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciA9IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aDsKICAgICBwdXRE
aXJlY3Qodm0sIGlkZW50aWZpZXIsIGluaXRpYWxWYWx1ZSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304228</attachid>
            <date>2017-03-12 23:08:03 -0700</date>
            <delta_ts>2017-03-15 16:24:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164582-20170313150802.patch</filename>
            <type>text/plain</type>
            <size>45117</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
OGZhODFkYjUyNjg2MDAwYTJmOGJkZTdiN2IyYzg0NDY3NWUxZDE5Li43ZjVhNmM1MTcxOGI2OGI4
OGE2NmY3Y2UyMDFkNDJhNDM1ODM5YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MSBAQAorMjAxNy0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBEZWZhdWx0IHBhcmFtZXRlciBwYXJ0IHNob3VsZCBiZSBy
ZXRyaWV2ZWQgYnkgb3BfZ2V0X2FyZ3VtZW50IG9wY29kZSBpbnN0ZWFkIG9mIGNoYW5naW5nIGFy
aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2
aW91c2x5IHdlIGltcGxlbWVudCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFzIGZvbGxvd3MuCisK
KyAgICAgICAgICAgIDEuIFdlIGNvdW50IHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgYXMgdGhlIHVz
dWFsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAyLiBXZSBqdXN0IGdldCB0aGUgYXJndW1lbnQg
cmVnaXN0ZXIuCisgICAgICAgICAgICAzLiBDaGVjayBpdCB3aXRoIG9wX2lzX3VuZGVmaW5lZC4K
KyAgICAgICAgICAgIDQuIEFuZCBmaWxsIHRoZSBiaW5kaW5nIHdpdGggZWl0aGVyIHRoZSBhcmd1
bWVudCByZWdpc3RlciBvciBkZWZhdWx0IHZhbHVlLgorCisgICAgICAgIFRoZSBhYm92ZSBpcyBz
aW1wbGUuIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2lkZSBlZmZlY3QgdGhhdCBpdCBhbHdheXMgaW5j
cmVhc2UgdGhlIGFyaXR5IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgV2hpbGUgYGZ1bmN0aW9u
Lmxlbmd0aGAgZG9lcyBub3QgaW5jcmVhc2UsIGludGVybmFsbHksIHRoZSBudW1iZXIgb2YgcGFy
YW1ldGVycyBvZiBDb2RlQmxvY2sgaW5jcmVhc2VzLgorICAgICAgICBUaGlzIGVmZmVjdGl2ZWx5
IHByZXZlbnQgb3VyIERGRyAvIEZUTCB0byBwZXJmb3JtIGlubGluaW5nOiBjdXJyZW50bHkgd2Ug
b25seSBhbGxvd3MgREZHIHRvIGlubGluZQorICAgICAgICB0aGUgZnVuY3Rpb24gd2l0aCB0aGUg
YXJpdHkgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBudW1iZXIgb2YgcGFzc2luZyBhcmd1bWVudHMu
IEl0IGlzIE9LLiBCdXQgd2hlbiB1c2luZworICAgICAgICBkZWZhdWx0IHBhcmFtZXRlcnMsIHdl
IGZyZXF1ZW50bHkgZG8gbm90IHBhc3MgdGhlIGFyZ3VtZW50IGZvciB0aGUgcGFyYW1ldGVyIHdp
dGggdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIFRodXMsIGluIG91ciBjdXJyZW50IGltcGxl
bWVudGF0aW9uLCB3ZSBmcmVxdWVudGx5IG5lZWQgdG8gZml4dXAgdGhlIGFyaXR5LiBBbmQgd2Ug
ZnJlcXVlbnRseSBmYWlsCisgICAgICAgIHRvIGlubGluZSB0aGUgZnVuY3Rpb24uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBmaXhlcyB0aGUgYWJvdmUgcHJvYmxlbSBieSBub3QgaW5jcmVhc2luZyB0
aGUgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLiBXaGVuIHdlIGVuY291bnRlciB0aGUKKyAgICAgICAg
cGFyYW1ldGVyIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUsIHdlIHVzZSBgb3BfYXJndW1lbnRgIHRv
IGdldCB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1c2luZyB0aGUgYXJndW1lbnQKKyAgICAgICAg
cmVnaXN0ZXJzLgorCisgICAgICAgIFRoaXMgaW1wcm92ZXMgc2l4LXNwZWVkIGRlZmF1bHRzLmVz
NiBwZXJmb3JtYW5jZSBieSA0LjQ1eC4KKworICAgICAgICAgICAgZGVmYXVsdHMuZXM2ICAgICAg
ICA5NjguNDEyNistMTAxLjIzNTAgICBeICAgIDIxNy42NjAyKy0xNC44ODMxICAgICAgIF4gZGVm
aW5pdGVseSA0LjQ0OTJ4IGZhc3RlcgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxp
emVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMpOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KToKKyAgICAgICAg
KiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVG
dW5jdGlvbk1ldGFkYXRhKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbk1ldGFkYXRhTm9kZTo6RnVuY3Rpb25NZXRhZGF0YU5vZGUpOgorICAgICAg
ICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OnNp
emUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmF0KToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25QYXJhbWV0ZXJzOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBh
cmFtZXRlcnM6OmlzU2ltcGxlUGFyYW1ldGVyTGlzdCk6CisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25Q
YXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2VuZXJh
dG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUFzeW5jRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlND
OjpTeW50YXhDaGVja2VyOjpjcmVhdGVGdW5jdGlvbk1ldGFkYXRhKToKKyAgICAgICAgKiBydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnJlaWZ5TGVuZ3RoKToKKwogMjAxNy0wMy0xMSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cnVjdHVyZTo6d2lsbFN0
b3JlVmFsdWVTbG93IG5lZWRzIHRvIGtlZXAgdGhlIHByb3BlcnR5IHRhYmxlIGFsaXZlIHVudGls
IHRoZSBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IDA2NmJjNjdjOGMwY2YyOTY2
OTAyZDg0NzRhNDE0OTdkMWE3NzllN2UuLjI0ODFkYjVkZGVkOGZkNWJmOGMyMTQwMDgzNjQ3MjA4
YmMzYzE3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtODgsNyArODgsNiBAQCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdAogICAgICwgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
bm9kZS0+ZnVuY3Rpb25LZXl3b3JkU3RhcnQoKSkKICAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9m
ZnNldChub2RlLT5zdGFydFN0YXJ0T2Zmc2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAt
IDEpCiAgICAgLCBtX3BhcmFtZXRlckNvdW50KG5vZGUtPnBhcmFtZXRlckNvdW50KCkpCi0gICAg
LCBtX2Z1bmN0aW9uTGVuZ3RoKG5vZGUtPmZ1bmN0aW9uTGVuZ3RoKCkpCiAgICAgLCBtX2ZlYXR1
cmVzKDApCiAgICAgLCBtX3NvdXJjZVBhcnNlTW9kZShub2RlLT5wYXJzZU1vZGUoKSkKICAgICAs
IG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENvbnRleHQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgKaW5kZXggMDg3OWRmYjM2ZTlkNmNiOWIxN2I5ZWExZGQ0NTkwMjg1NGM4OTVk
ZS4uOWMyNTg1MDViMmQ2NWMyMzQyNWEwY2I0YzRkMzIwODM2YmJkMDYzNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgKQEAgLTc3LDcgKzc3LDYgQEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB2b2lkIHNldEVjbWFOYW1lKGNvbnN0
IElkZW50aWZpZXImIG5hbWUpIHsgbV9lY21hTmFtZSA9IG5hbWU7IH0KICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpbmZlcnJlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkTmFtZTsgfQog
ICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJD
b3VudDsgfTsgLy8gRXhjbHVkaW5nICd0aGlzJyEKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25MZW5ndGg7IH0KICAgICBTb3VyY2VQYXJzZU1v
ZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U291cmNlUGFyc2VNb2Rl
PihtX3NvdXJjZVBhcnNlTW9kZSk7IH07CiAKICAgICBjb25zdCBTb3VyY2VDb2RlJiBjbGFzc1Nv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NTb3VyY2U7IH07CkBAIC0xNTksNyArMTU4LDYg
QEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKICAgICB1bnNpZ25l
ZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJDb3Vu
dDsKLSAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTGVuZ3RoOwogICAgIENvZGVGZWF0dXJlcyBtX2Zl
YXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3NvdXJjZVBhcnNlTW9kZTsKICAgICB1bnNp
Z25lZCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMTcyMTAw
NjQ2MTAwZDA1MTQ4MWFjNmI4MTAwMmUwMzJlNDRhMjVlYy4uMDQ0NTQzOTExZGRlNTQ4ODE3ZWVi
NTYzNmM2ODRkZDA4NzI2Mjc5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTI1NCwxNSArMjU0LDgg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25O
b2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICAvLyBJZiBJc1NpbXBsZVBhcmFtZXRlckxp
c3QgaXMgZmFsc2UsIHdlIHdpbGwgY3JlYXRlIGEgc3RyaWN0LW1vZGUgbGlrZSBhcmd1bWVudHMg
b2JqZWN0LgogICAgIC8vIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpcyBmYWxzZSBpZiB0aGUgYXJn
dW1lbnQgbGlzdCBjb250YWlucyBhbnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLAogICAgIC8v
IGEgcmVzdCBwYXJhbWV0ZXIsIG9yIGFueSBkZXN0cnVjdHVyaW5nIHBhdHRlcm5zLgotICAgIGJv
b2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gdHJ1ZTsKICAgICAvLyBJZiB3ZSBkbyBoYXZlIGRl
ZmF1bHQgcGFyYW1ldGVycywgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzLCBvciBhIHJlc3QgcGFy
YW1ldGVyLCBvdXIgcGFyYW1ldGVycyB3aWxsIGJlIGFsbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBz
Y29wZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Np
b25Ob2RlKj4gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChpKTsKLSAgICAgICAgYm9vbCBoYXNE
ZWZhdWx0UGFyYW1ldGVyVmFsdWUgPSAhIXBhcmFtZXRlci5zZWNvbmQ7Ci0gICAgICAgIGF1dG8g
cGF0dGVybiA9IHBhcmFtZXRlci5maXJzdDsKLSAgICAgICAgYm9vbCBpc1NpbXBsZVBhcmFtZXRl
ciA9ICFoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWUgJiYgcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgp
OwotICAgICAgICBpc1NpbXBsZVBhcmFtZXRlckxpc3QgJj0gaXNTaW1wbGVQYXJhbWV0ZXI7Ci0g
ICAgfQorICAgIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gcGFyYW1ldGVycy5pc1NpbXBs
ZVBhcmFtZXRlckxpc3QoKTsKIAogICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBjb2Rl
QmxvY2stPnBhcnNlTW9kZSgpOwogCkBAIC05ODMsMTAgKzk3NiwxMiBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rp
b25TY29wZVN0YQogICAgICAgICAgICAgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJuTm9k
ZSosIEV4cHJlc3Npb25Ob2RlKj4gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChpKTsKICAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuZmlyc3QtPmlzUmVzdFBhcmFtZXRlcigpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBhcmFtZXRl
clZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7
Ci0gICAgICAgICAgICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7
CisgICAgICAgICAgICBpZiAoKGkgKyAxKSA8IG1fcGFyYW1ldGVycy5zaXplKCkpCisgICAgICAg
ICAgICAgICAgZW1pdE1vdmUodGVtcC5nZXQoKSwgJm1fcGFyYW1ldGVyc1tpICsgMV0pOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVtaXRHZXRBcmd1bWVudCh0ZW1wLmdldCgp
LCBpKTsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuc2Vjb25kKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbmRpdGlvbiA9IGVtaXRJc1VuZGVmaW5lZChuZXdUZW1w
b3JhcnkoKSwgcGFyYW1ldGVyVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBjb25kaXRpb24gPSBlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHRl
bXAuZ2V0KCkpOwogICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gc2tpcERlZmF1bHRQYXJhbWV0
ZXJCZWNhdXNlTm90VW5kZWZpbmVkID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAgICAgICBlbWl0
SnVtcElmRmFsc2UoY29uZGl0aW9uLmdldCgpLCBza2lwRGVmYXVsdFBhcmFtZXRlckJlY2F1c2VO
b3RVbmRlZmluZWQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGVtaXROb2RlKHRlbXAuZ2V0KCks
IHBhcmFtZXRlci5zZWNvbmQpOwpAQCAtMTA5NCw3ICsxMDg5LDggQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRlZChTeW1i
b2xUYWJsZSoKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBh
cmFtZXRlcigpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIFJlZ2lzdGVySUQm
IHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7CisgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9w
YXJhbWV0ZXJzLnNpemUoKSArIDEpOworICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9y
KHJlZyk7CiAgICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CiAgICAgbV9jb2Rl
QmxvY2stPmFkZFBhcmFtZXRlcigpOwogICAgIHJldHVybiAmcGFyYW1ldGVyOwpAQCAtMTEwNCwx
NCArMTEwMCwyMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyhGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBjb2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ug
c3VyZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5v
dGVkLgotICAgIG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJl
c2VydmUgc3BhY2UgZm9yICJ0aGlzIgogICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCisKKyAgICBib29sIG5vblNp
bXBsZUFyZ3VtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJh
bWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMu
YXQoaSkuZmlyc3Q7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChpKTsK
KyAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVyLmZpcnN0OwogICAgICAgICBpZiAocGF0
dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3Jlc3RQYXJhbWV0ZXIpOwogICAgICAgICAgICAgbV9yZXN0UGFyYW1ldGVyID0gc3RhdGljX2Nh
c3Q8UmVzdFBhcmFtZXRlck5vZGUqPihwYXR0ZXJuKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBub25TaW1wbGVBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHBhcmFtZXRlci5zZWNvbmQpIHsKKyAgICAgICAgICAgIG5v
blNpbXBsZUFyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIW5vblNpbXBsZUFyZ3VtZW50cykKICAgICAgICAgICAgIGluaXRpYWxp
emVOZXh0UGFyYW1ldGVyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDY5YmExMGI5NGNm
Mzg5Mjc2NjNjYTNiMWQ4MmMyMTU3NzQxNTRhNDUuLmQ3YzNiMzI3MmEwOTY3NTY4YTNmZTY0ZjU2
ZTQ0MDViOThjYWM3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTY0MCw3ICs2NDAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIHByb3BlcnR5KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEJ5VmFsKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogdGhpc1ZhbHVlLCBS
ZWdpc3RlcklEKiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRBcmd1bWVu
dEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHkpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdFB1dEJ5VmFsKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHRoaXNW
YWx1ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdERpcmVjdFB1dEJ5VmFsKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggM2Q2NjhlZWNhODNi
M2VjYWM3MzcyOTBjOGQzMzBhOTQ4MDJlMGM3MS4uYmFiNDUyYmFhMmEwNTdjMTI0ZDA2Mzc1OWU1
MzhjZmU5MzZmY2ZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMzQ2NSwxMyArMzQ2NSwxMyBAQCB2b2lkIEV2YWxO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCopCiB2b2lkIEZ1bmN0aW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVBy
b2ZpbGVyKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmFtZXRlcnMt
PnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBEZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMg
YXJlIGhhbmRsZWQgaW4gZGVzdHJ1Y3R1cmluZyBub2Rlcy4KLSAgICAgICAgICAgIGlmICghbV9w
YXJhbWV0ZXJzLT5hdChpKS5maXJzdC0+aXNCaW5kaW5nTm9kZSgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQmluZGluZ05vZGUqIHBhcmFtZXRlciA9IHN0YXRpY19j
YXN0PEJpbmRpbmdOb2RlKj4obV9wYXJhbWV0ZXJzLT5hdChpKS5maXJzdCk7Ci0gICAgICAgICAg
ICBSZWdpc3RlcklEIHJlZyhDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKLSAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoJnJlZywgUHJvZmlsZVR5cGVCeXRlY29kZUZ1
bmN0aW9uQXJndW1lbnQsIHBhcmFtZXRlci0+ZGl2b3RTdGFydCgpLCBwYXJhbWV0ZXItPmRpdm90
RW5kKCkpOworICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGxpc3QgaXMgbm9uIHNpbXBsZSBv
bmUsIGl0IGlzIGhhbmRsZWQgaW4gYmluZFZhbHVlJ3MgY29kZS4KKyAgICAgICAgaWYgKG1fcGFy
YW1ldGVycy0+aXNTaW1wbGVQYXJhbWV0ZXJMaXN0KCkpIHsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
ICAgIEJpbmRpbmdOb2RlKiBiaW5kaW5nTm9kZSA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4o
bV9wYXJhbWV0ZXJzLT5hdChpKS5maXJzdCk7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBy
ZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZSgmcmVnLCBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25Bcmd1
bWVudCwgYmluZGluZ05vZGUtPmRpdm90U3RhcnQoKSwgYmluZGluZ05vZGUtPmRpdm90RW5kKCkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDNhNDU0ZGQzMTRjZTk4ZmE5
MzVmODdhYzU3ZWMxZWJhYjA3YjY0ZWQuLjMxZTBlMGI3ZjU5NmI1ZjMwMDUwOGQ5NGYzZDc1NjVm
NmE3ODUwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCkBAIC0xNDI0LDE1ICsxNDI0LDYgQEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluaW5nQ29zdChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHUK
ICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKLSAgICAvLyBEb2VzIHRoZSBu
dW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0
YXJnZXQ/IFdlIGN1cnJlbnRseQotICAgIC8vIGlubGluZSBvbmx5IGlmIHRoZSBudW1iZXIgb2Yg
YXJndW1lbnRzIHBhc3NlZCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlcgot
ICAgIC8vIGFyZ3VtZW50cyBleHBlY3RlZC4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihleGVj
dXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSArIDEgPiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWls
aW5nIGJlY2F1c2Ugb2YgYXJpdHkgbWlzbWF0Y2guXG4iKTsKLSAgICAgICAgcmV0dXJuIFVJTlRf
TUFYOwotICAgIH0KLSAgICAKICAgICAvLyBEbyB3ZSBoYXZlIGEgY29kZSBibG9jaywgYW5kIGRv
ZXMgdGhlIGNvZGUgYmxvY2sncyBzaXplIG1hdGNoIHRoZSBoZXVyaXN0aWNzL3JlcXVpcmVtZW50
cyBmb3IKICAgICAvLyBiZWluZyBhbiBpbmxpbmUgY2FuZGlkYXRlPyBXZSBtaWdodCBub3QgaGF2
ZSBhIGNvZGUgYmxvY2sgKDEpIGlmIGNvZGUgd2FzIHRocm93biBhd2F5LAogICAgIC8vICgyKSBp
ZiB3ZSBzaW1wbHkgaGFkbid0IGFjdHVhbGx5IG1hZGUgdGhpcyBjYWxsIHlldCBvciAoMykgY29k
ZSBpcyBhIGJ1aWx0aW4gZnVuY3Rpb24gYW5kCkBAIC0xNDQ2LDYgKzE0MzcsMTYgQEAgdW5zaWdu
ZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBh
cmd1bWVudENvdW50SW5jbHUKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1
c2Ugbm8gY29kZSBibG9jayBhdmFpbGFibGUuXG4iKTsKICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwogICAgIH0KKworICAgIC8vIERvZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgd2UncmUgcGFz
c2luZyBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHRhcmdldD8gV2UgY3VycmVudGx5CisgICAgLy8g
aW5saW5lIG9ubHkgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGlzIGdyZWF0ZXIg
dGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyCisgICAgLy8gYXJndW1lbnRzIGV4cGVjdGVkLgor
ICAgIGlmIChjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZhaWxpbmcgYmVjYXVzZSBvZiBhcml0eSBtaXNtYXRjaC5cbiIpOworICAgICAgICByZXR1cm4g
VUlOVF9NQVg7CisgICAgfQorCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9
IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAgICBjb2RlQmxvY2ssIGtp
bmQsIGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlmICh2ZXJib3NlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IDIwMzZlOWQ2ZGZjY2FkMjk5
NjcxYTEwM2JkN2NjZjVjMjAxOGU2NTQuLjY4MjQ2YThkM2NlZGViYzgxZjdjODAyMGVlZmMxN2Qw
NmRkNGEzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBA
IC00MjcsMTQgKzQyNywxNCBAQCBjbGFzcyBBU1RCdWlsZGVyIHsKICAgICAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0
LCAKICAgICAgICAgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVyc1N0YXJ0LCBi
b29sIGluU3RyaWN0Q29udGV4dCwgCiAgICAgICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsCi0gICAgICAgIHVuc2lnbmVkIHBhcmFt
ZXRlckNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCwKKyAgICAgICAgdW5zaWduZWQgcGFy
YW1ldGVyQ291bnQsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIGlzQXJyb3dG
dW5jdGlvbkJvZHlFeHByZXNzaW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgRnVuY3Rpb25NZXRhZGF0YU5vZGUoCiAgICAgICAgICAgICBtX3BhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgCiAg
ICAgICAgICAgICBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBhcmFt
ZXRlcnNTdGFydCwgCiAgICAgICAgICAgICBpblN0cmljdENvbnRleHQsIGNvbnN0cnVjdG9yS2lu
ZCwgc3VwZXJCaW5kaW5nLAotICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQsIGZ1bmN0aW9uTGVu
Z3RoLCBtb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBw
YXJhbWV0ZXJDb3VudCwgbW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOwogICAg
IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVp
bGRlcj4mIGZ1bmN0aW9uSW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAK
aW5kZXggODBjNjU3ZWM1Yjg3YjM5YzViMDQ0YzVjOWViNGNjZWZmZWRlNzhiNi4uM2EwOGI2MzU0
N2QxMzAwNzA0N2VjODM2Y2Y0NTBhMmJhZThiYzgyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBGdW5jdGlvbk1ldGFkYXRhTm9kZTo6
RnVuY3Rpb25NZXRhZGF0YU5vZGUoCiAgICAgUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0TG9jYXRpb24sIAogICAgIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIAogICAgIGlu
dCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1l
dGVyc1N0YXJ0LCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCAKLSAgICBDb25zdHJ1Y3RvcktpbmQg
Y29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCB1bnNpZ25lZCBwYXJh
bWV0ZXJDb3VudCwgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgsIFNvdXJjZVBhcnNlTW9kZSBtb2Rl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKQorICAgIENvbnN0cnVjdG9yS2lu
ZCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIHVuc2lnbmVkIHBh
cmFtZXRlckNvdW50LCBTb3VyY2VQYXJzZU1vZGUgbW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25C
b2R5RXhwcmVzc2lvbikKICAgICAgICAgOiBOb2RlKGVuZExvY2F0aW9uKQogICAgICAgICAsIG1f
c3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQpAQCAtMTQ0LDcgKzE0NCw2IEBAIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpGdW5jdGlvbk1ldGFk
YXRhTm9kZSgKICAgICAgICAgLCBtX3BhcmFtZXRlcnNTdGFydChwYXJhbWV0ZXJzU3RhcnQpCiAg
ICAgICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3RhcnRPZmZzZXQpCiAg
ICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudChwYXJhbWV0ZXJDb3VudCkKLSAgICAgICAgLCBtX2Z1
bmN0aW9uTGVuZ3RoKGZ1bmN0aW9uTGVuZ3RoKQogICAgICAgICAsIG1fcGFyc2VNb2RlKG1vZGUp
CiAgICAgICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4dCkKICAgICAg
ICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VwZXJCaW5kaW5nKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA2ZjJjZDZkNWI0OGNlMzhkMjll
YWNhNTliNDAxYTEyZjU4NzFiOTk5Li43OTJlNDNjNjMwNzNkNDM2MzJjNzIwNjNmNDIwY2Q3NzM5
MWMyMzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xODY3LDIyICsx
ODY3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1vZHVsZU5hbWVOb2RlKiBtX21vZHVs
ZU5hbWUgeyBudWxscHRyIH07CiAgICAgfTsKIAotICAgIGNsYXNzIEZ1bmN0aW9uUGFyYW1ldGVy
cyA6IHB1YmxpYyBQYXJzZXJBcmVuYURlbGV0YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBG
dW5jdGlvblBhcmFtZXRlcnMoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJucy5zaXplKCk7IH0KLSAgICAgICAgQUxXQVlTX0lO
TElORSBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUq
PiBhdCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wYXR0ZXJuc1tpbmRleF07IH0KLSAgICAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBh
dHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBkZWZhdWx0VmFsdWUpIAotICAgICAgICB7IAotICAgICAg
ICAgICAgQVNTRVJUKHBhdHRlcm4pOyAKLSAgICAgICAgICAgIG1fcGF0dGVybnMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHBhdHRlcm4sIGRlZmF1bHRWYWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICBw
cml2YXRlOgotCi0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqPiwgMz4gbV9wYXR0ZXJuczsKLSAgICB9OwotCiAgICAgY2xh
c3MgRnVuY3Rpb25NZXRhZGF0YU5vZGUgZmluYWwgOiBwdWJsaWMgTm9kZSwgcHVibGljIFBhcnNl
ckFyZW5hRGVsZXRhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5h
RGVsZXRhYmxlOjpvcGVyYXRvciBuZXc7CkBAIC0xODkxLDcgKzE4NzUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIAogICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0
LCAKICAgICAgICAgICAgIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFy
dCwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgCi0gICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQs
IFN1cGVyQmluZGluZywgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIHVuc2lnbmVkIGZ1bmN0aW9u
TGVuZ3RoLAorICAgICAgICAgICAgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIHVuc2ln
bmVkIHBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgU291cmNlUGFyc2VNb2RlLCBib29sIGlz
QXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKIAogICAgICAgICB2b2lkIGZpbmlzaFBhcnNp
bmcoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbk1vZGUpOwpA
QCAtMTkxMSw3ICsxODk1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQogICAgICAgICB1bnNp
Z25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogICAgICAgICB1
bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7
IH0KLSAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Z1
bmN0aW9uTGVuZ3RoOyB9CiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfQogCiAgICAgICAgIHZvaWQgc2V0RW5kUG9zaXRpb24o
SlNUZXh0UG9zaXRpb24pOwpAQCAtMTk0OCw3ICsxOTMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFNvdXJjZUNvZGUgbV9jbGFzc1NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFy
dE9mZnNldDsKICAgICAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJDb3VudDsKLSAgICAgICAgdW5z
aWduZWQgbV9mdW5jdGlvbkxlbmd0aDsKICAgICAgICAgaW50IG1fbGFzdExpbmU7CiAgICAgICAg
IFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKICAgICAgICAgdW5zaWduZWQgbV9pc0luU3Ry
aWN0Q29udGV4dCA6IDE7CkBAIC0yMjM5LDYgKzIyMjEsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2luaXRpYWxpemVyOwogICAgIH07CiAKKyAgICBjbGFz
cyBGdW5jdGlvblBhcmFtZXRlcnMgOiBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKCk7CisgICAgICAgIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybnMuc2l6ZSgpOyB9
CisgICAgICAgIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJuTm9k
ZSosIEV4cHJlc3Npb25Ob2RlKj4gYXQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcGF0dGVy
bnNbaW5kZXhdOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1Y3R1
cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGF0dGVybik7CisKKyAgICAgICAgICAgIC8v
IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRt
bCNzZWMtZnVuY3Rpb25kZWNsYXJhdGlvbmluc3RhbnRpYXRpb24KKyAgICAgICAgICAgIC8vIFRo
aXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFtZXRlckxpc3QgaW4gdGhlIEVjbWEgMjAxNSBzcGVj
LgorICAgICAgICAgICAgLy8gSWYgSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlLCB3ZSB3
aWxsIGNyZWF0ZSBhIHN0cmljdC1tb2RlIGxpa2UgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAg
ICAgIC8vIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpcyBmYWxzZSBpZiB0aGUgYXJndW1lbnQgbGlz
dCBjb250YWlucyBhbnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLAorICAgICAgICAgICAgLy8g
YSByZXN0IHBhcmFtZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisgICAgICAg
ICAgICAvLyBJZiB3ZSBkbyBoYXZlIGRlZmF1bHQgcGFyYW1ldGVycywgZGVzdHJ1Y3R1cmluZyBw
YXJhbWV0ZXJzLCBvciBhIHJlc3QgcGFyYW1ldGVyLCBvdXIgcGFyYW1ldGVycyB3aWxsIGJlIGFs
bG9jYXRlZCBpbiBhIGRpZmZlcmVudCBzY29wZS4KKworICAgICAgICAgICAgYm9vbCBoYXNEZWZh
dWx0UGFyYW1ldGVyVmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgICAgICAgICBib29sIGlzU2lt
cGxlUGFyYW1ldGVyID0gIWhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZSAmJiBwYXR0ZXJuLT5pc0Jp
bmRpbmdOb2RlKCk7CisgICAgICAgICAgICBtX2lzU2ltcGxlUGFyYW1ldGVyTGlzdCAmPSBpc1Np
bXBsZVBhcmFtZXRlcjsKKworICAgICAgICAgICAgbV9wYXR0ZXJucy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIocGF0dGVybiwgZGVmYXVsdFZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
aW1wbGVQYXJhbWV0ZXJMaXN0OyB9CisKKyAgICBwcml2YXRlOgorCisgICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqPiwgMz4g
bV9wYXR0ZXJuczsKKyAgICAgICAgYm9vbCBtX2lzU2ltcGxlUGFyYW1ldGVyTGlzdCB7IHRydWUg
fTsKKyAgICB9OworCiAgICAgY2xhc3MgRnVuY0RlY2xOb2RlIDogcHVibGljIFN0YXRlbWVudE5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIGNvbnN0IFNv
dXJjZUNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCAy
YTk0MDhiZWZhZTI3NzUzN2NlNDEzNTAzYTg3N2QyMTA5ZDk1ZDg4Li5jOWQ5YmFkYjYzMjZjY2U4
NmMwMTdiMDQ1ZTRjNzE5NTU5ZDNiNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCkBAIC0yODYsOSArMjg2LDggQEAgYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNB
cnJvd0Z1bmN0aW9uUGFyYW1ldGVycygpCiAgICAgICAgICAgICBmYWtlU2NvcGUtPnNldFNvdXJj
ZVBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlKTsKIAogICAgICAg
ICAgICAgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGZ1bmN0aW9uTGVuZ3RoID0gMDsKICAgICAgICAgICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uUGFy
YW1ldGVyTGlzdCA9IHRydWU7Ci0gICAgICAgICAgICBpc0Fycm93RnVuY3Rpb24gPSBwYXJzZUZv
cm1hbFBhcmFtZXRlcnMoc3ludGF4Q2hlY2tlciwgc3ludGF4Q2hlY2tlci5jcmVhdGVGb3JtYWxQ
YXJhbWV0ZXJMaXN0KCksIGlzQXJyb3dGdW5jdGlvblBhcmFtZXRlckxpc3QsIHBhcmFtZXRlcnND
b3VudCwgZnVuY3Rpb25MZW5ndGgpICYmIGNvbnN1bWUoQ0xPU0VQQVJFTikgJiYgbWF0Y2goQVJS
T1dGVU5DVElPTik7CisgICAgICAgICAgICBpc0Fycm93RnVuY3Rpb24gPSBwYXJzZUZvcm1hbFBh
cmFtZXRlcnMoc3ludGF4Q2hlY2tlciwgc3ludGF4Q2hlY2tlci5jcmVhdGVGb3JtYWxQYXJhbWV0
ZXJMaXN0KCksIGlzQXJyb3dGdW5jdGlvblBhcmFtZXRlckxpc3QsIHBhcmFtZXRlcnNDb3VudCkg
JiYgY29uc3VtZShDTE9TRVBBUkVOKSAmJiBtYXRjaChBUlJPV0ZVTkNUSU9OKTsKICAgICAgICAg
ICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgICAgICAgICBwb3BTY29wZShmYWtlU2NvcGUsIHN5
bnRheENoZWNrZXIuTmVlZHNGcmVlVmFyaWFibGVJbmZvKTsKICAgICAgICAgfQpAQCAtNDY1LDcg
KzQ2NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdlbmVyYXRvCiAgICAgICAgIGZhaWxJZkZhbHNlKHBh
cnNlU291cmNlRWxlbWVudHMoZ2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0LCBtb2RlKSwgIkNhbm5v
dCBwYXJzZSB0aGUgYm9keSBvZiBhIGdlbmVyYXRvciIpOwogICAgICAgICBwb3BTY29wZShnZW5l
cmF0b3JCb2R5U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pOwogICAg
IH0KLSAgICBpbmZvLmJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRM
b2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgdG9rZW5Db2x1bW4oKSwgZnVu
Y3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0
cmljdE1vZGUoKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBtX3N1cGVyQmluZGluZywgaW5mby5w
YXJhbWV0ZXJDb3VudCwgaW5mby5mdW5jdGlvbkxlbmd0aCwgU291cmNlUGFyc2VNb2RlOjpHZW5l
cmF0b3JCb2R5TW9kZSwgZmFsc2UpOworICAgIGluZm8uYm9keSA9IGNvbnRleHQuY3JlYXRlRnVu
Y3Rpb25NZXRhZGF0YShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1u
LCB0b2tlbkNvbHVtbigpLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQs
IHBhcmFtZXRlcnNTdGFydCwgc3RyaWN0TW9kZSgpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIG1f
c3VwZXJCaW5kaW5nLCBpbmZvLnBhcmFtZXRlckNvdW50LCBTb3VyY2VQYXJzZU1vZGU6OkdlbmVy
YXRvckJvZHlNb2RlLCBmYWxzZSk7CiAKICAgICBpbmZvLmVuZExpbmUgPSB0b2tlbkxpbmUoKTsK
ICAgICBpbmZvLmVuZE9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKQEAgLTUxNiw3ICs1
MTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bgogICAgICAgICB9CiAgICAgICAgIHBvcFNj
b3BlKGFzeW5jRnVuY3Rpb25Cb2R5U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJs
ZUluZm8pOwogICAgIH0KLSAgICBpbmZvLmJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0
YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgdG9rZW5D
b2x1bW4oKSwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0
ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBtX3N1cGVyQmlu
ZGluZywgaW5mby5wYXJhbWV0ZXJDb3VudCwgaW5mby5mdW5jdGlvbkxlbmd0aCwgaW5uZXJQYXJz
ZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKKyAgICBpbmZvLmJvZHkgPSBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlv
bigpLCBzdGFydENvbHVtbiwgdG9rZW5Db2x1bW4oKSwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1
bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmljdE1vZGUoKSwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLCBtX3N1cGVyQmluZGluZywgaW5mby5wYXJhbWV0ZXJDb3VudCwgaW5uZXJQ
YXJzZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKIAogICAgIGluZm8uZW5k
TGluZSA9IHRva2VuTGluZSgpOwogICAgIGluZm8uZW5kT2Zmc2V0ID0gaXNBcnJvd0Z1bmN0aW9u
Qm9keUV4cHJlc3Npb24gPyB0b2tlbkxvY2F0aW9uKCkuZW5kT2Zmc2V0IDogbV90b2tlbi5tX2Rh
dGEub2Zmc2V0OwpAQCAtMTgzMyw3ICsxODMyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjptYXliZVBhcnNlQXN5bmNGdW5jdGlvbkRlY2wK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRy
ZWVCdWlsZGVyJiBjb250ZXh0LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCBib29sIGlz
QXJyb3dGdW5jdGlvbiwgdW5zaWduZWQmIHBhcmFtZXRlckNvdW50LCB1bnNpZ25lZCYgZnVuY3Rp
b25MZW5ndGgpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCwgVHJlZUZv
cm1hbFBhcmFtZXRlckxpc3QgbGlzdCwgYm9vbCBpc0Fycm93RnVuY3Rpb24sIHVuc2lnbmVkJiBw
YXJhbWV0ZXJDb3VudCkKIHsKICNkZWZpbmUgZmFpbElmRHVwbGljYXRlSWZWaW9sYXRpb24oKSBc
CiAgICAgaWYgKGR1cGxpY2F0ZVBhcmFtZXRlcikge1wKQEAgLTE4NDcsNiArMTg0Niw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
b3JtYWxQYXJhbWV0ZXJzKFRyZWVCCiAgICAgYm9vbCBoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiA9
IGZhbHNlOwogICAgIGJvb2wgaXNSZXN0UGFyYW1ldGVyID0gZmFsc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogZHVwbGljYXRlUGFyYW1ldGVyID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCByZXN0
UGFyYW1ldGVyU3RhcnQgPSAwOwogICAgIGRvIHsKICAgICAgICAgVHJlZURlc3RydWN0dXJpbmdQ
YXR0ZXJuIHBhcmFtZXRlciA9IDA7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGRlZmF1bHRWYWx1
ZSA9IDA7CkBAIC0xODU5LDcgKzE4NTksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQgogICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCFtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQgJiYg
bWF0Y2goQVdBSVQpLCAiQ2FuJ3QgdXNlICdhd2FpdCcgYXMgYSBwYXJhbWV0ZXIgbmFtZSBpbiBh
biBhc3luYyBmdW5jdGlvbiIpOwogICAgICAgICAgICAgVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJu
IGRlc3RydWN0dXJpbmdQYXR0ZXJuID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0
LCBEZXN0cnVjdHVyaW5nS2luZDo6RGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6
Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4pOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKLSAgICAgICAgICAgIHBhcmFtZXRl
ciA9IGNvbnRleHQuY3JlYXRlUmVzdFBhcmFtZXRlcihkZXN0cnVjdHVyaW5nUGF0dGVybiwgcGFy
YW1ldGVyQ291bnQpOworICAgICAgICAgICAgcGFyYW1ldGVyID0gY29udGV4dC5jcmVhdGVSZXN0
UGFyYW1ldGVyKGRlc3RydWN0dXJpbmdQYXR0ZXJuLCByZXN0UGFyYW1ldGVyU3RhcnQpOwogICAg
ICAgICAgICAgZmFpbElmVHJ1ZShtYXRjaChDT01NQSksICJSZXN0IHBhcmFtZXRlciBzaG91bGQg
YmUgdGhlIGxhc3QgcGFyYW1ldGVyIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24iKTsgLy8gTGV0
J3MgaGF2ZSBhIGdvb2QgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBjb21tb24gY2FzZS4KICAgICAg
ICAgICAgIGlzUmVzdFBhcmFtZXRlciA9IHRydWU7CiAgICAgICAgIH0gZWxzZQpAQCAtMTg3Niw5
ICsxODc2LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUIKICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT5zZXRIYXNOb25TaW1wbGVQYXJhbWV0ZXJMaXN0KCk7CiAgICAgICAgIGNvbnRleHQu
YXBwZW5kUGFyYW1ldGVyKGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKICAgICAgICAg
aWYgKCFpc1Jlc3RQYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlckNvdW50Kys7Cisg
ICAgICAgICAgICByZXN0UGFyYW1ldGVyU3RhcnQrKzsKICAgICAgICAgICAgIGlmICghaGFzRGVm
YXVsdFBhcmFtZXRlclZhbHVlcykKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkxlbmd0aCsrOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CiAgICAgICAgIH0KICAgICB9IHdoaWxl
ICghaXNSZXN0UGFyYW1ldGVyICYmIGNvbnN1bWUoQ09NTUEpKTsKIApAQCAtMTg4OSw3ICsxODg5
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUIKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KAogICAgIFRyZWVCdWlsZGVyJiBjb250ZXh0
LCBTeW50YXhDaGVja2VyJiBzeW50YXhDaGVja2VyLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGludCBzdGFydENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBp
bnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsCi0gICAgQ29uc3RydWN0
b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgRnVuY3Rp
b25Cb2R5VHlwZSBib2R5VHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIHVuc2lnbmVkIGZ1
bmN0aW9uTGVuZ3RoLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQorICAgIENvbnN0cnVjdG9y
S2luZCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIEZ1bmN0aW9u
Qm9keVR5cGUgYm9keVR5cGUsIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50LCBTb3VyY2VQYXJzZU1v
ZGUgcGFyc2VNb2RlKQogewogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24g
PSBib2R5VHlwZSA9PSBBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb247CiAgICAgaWYgKCFpc0Fy
cm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbikgewpAQCAtMTg5Nyw3ICsxODk3LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZ1bmN0aW9uQm8KICAgICAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgICAgICAgICAg
U3VwZXJCaW5kaW5nIGZ1bmN0aW9uU3VwZXJCaW5kaW5nID0gYWRqdXN0U3VwZXJCaW5kaW5nRm9y
QmFzZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yS2luZCwgc3VwZXJCaW5kaW5nLCBjdXJyZW50U2Nv
cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRh
KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQs
IHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5kLCBmdW5jdGlvblN1cGVyQmluZGluZywgcGFy
YW1ldGVyQ291bnQsIGZ1bmN0aW9uTGVuZ3RoLCBwYXJzZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJv
ZHlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
TWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5k
Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBhcmFtZXRl
cnNTdGFydCwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3RvcktpbmQsIGZ1bmN0aW9uU3VwZXJCaW5k
aW5nLCBwYXJhbWV0ZXJDb3VudCwgcGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVz
c2lvbik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5MTYsNyArMTkxNiw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkJvCiAgICAgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29s
dW1uKCk7CiAgICAgU3VwZXJCaW5kaW5nIGZ1bmN0aW9uU3VwZXJCaW5kaW5nID0gYWRqdXN0U3Vw
ZXJCaW5kaW5nRm9yQmFzZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yS2luZCwgc3VwZXJCaW5kaW5n
LCBjdXJyZW50U2NvcGUoKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25NZXRh
ZGF0YShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1
bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0
YXJ0LCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2luZCwgZnVuY3Rpb25TdXBlckJpbmRpbmcs
IHBhcmFtZXRlckNvdW50LCBmdW5jdGlvbkxlbmd0aCwgcGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rp
b25Cb2R5RXhwcmVzc2lvbik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25NZXRh
ZGF0YShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1
bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0
YXJ0LCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2luZCwgZnVuY3Rpb25TdXBlckJpbmRpbmcs
IHBhcmFtZXRlckNvdW50LCBwYXJzZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9u
KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShTb3VyY2VQ
YXJzZU1vZGUgbW9kZSkKQEAgLTE5NzAsMTYgKzE5NzAsMTQgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4gdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyLCBjbGFzcyBGdW5jdGlvbklu
Zm9UeXAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWF0Y2goQ0xPU0VQ
QVJFTikpIHsKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVuZ3RoID0g
MDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBib29sIGlz
QXJyb3dGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBh
cnNlRm9ybWFsUGFyYW1ldGVycyhjb250ZXh0LCBwYXJhbWV0ZXJMaXN0LCBpc0Fycm93RnVuY3Rp
b24sIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCwgZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVu
Z3RoKSwgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXJzIGZvciB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0
aW9uTW9kZShtb2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlRm9y
bWFsUGFyYW1ldGVycyhjb250ZXh0LCBwYXJhbWV0ZXJMaXN0LCBpc0Fycm93RnVuY3Rpb24sIGZ1
bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCksICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3Ig
dGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFS
RU4sICJFeHBlY3RlZCBhICcpJyBvciBhICcsJyBhZnRlciBhIHBhcmFtZXRlciBkZWNsYXJhdGlv
biIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmdW5jdGlvbkluZm8u
cGFyYW1ldGVyQ291bnQgPSAxOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5mby5mdW5jdGlv
bkxlbmd0aCA9IDE7CiAgICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZURlc3Ry
dWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJpbmdLaW5kOjpEZXN0cnVjdHVyZVRv
UGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQpOwogICAgICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKHBhcmFtZXRlciwgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kUGFyYW1ldGVyKHBhcmFtZXRlckxpc3QsIHBh
cmFtZXRlciwgMCk7CkBAIC0xOTk3LDcgKzE5OTUsNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXIsIGNsYXNzIEZ1bmN0aW9uSW5mb1R5
cAogICAgIGlmIChtb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6R2V0dGVyTW9kZSkgewogICAgICAg
ICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4sICJnZXR0ZXIgZnVuY3Rpb25zIG11c3QgaGF2ZSBu
byBwYXJhbWV0ZXJzIik7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCA9IDA7
Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5mdW5jdGlvbkxlbmd0aCA9IDA7CiAgICAgfSBlbHNlIGlm
IChtb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZSkgewogICAgICAgICBmYWlsSWZU
cnVlKG1hdGNoKENMT1NFUEFSRU4pLCAic2V0dGVyIGZ1bmN0aW9ucyBtdXN0IGhhdmUgb25lIHBh
cmFtZXRlciIpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBkdXBsaWNhdGVQYXJhbWV0ZXIg
PSBudWxscHRyOwpAQCAtMjAxMSwxNyArMjAwOCwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXIsIGNsYXNzIEZ1bmN0aW9uSW5mb1R5
cAogICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEhhc05vblNpbXBsZVBhcmFtZXRlckxp
c3QoKTsKICAgICAgICAgfQogICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihwYXJhbWV0
ZXJMaXN0LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5w
YXJhbWV0ZXJDb3VudCA9IDE7Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5mdW5jdGlvbkxlbmd0aCA9
IGRlZmF1bHRWYWx1ZSA/IDAgOiAxOworICAgICAgICBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291
bnQgPSBkZWZhdWx0VmFsdWUgPyAwIDogMTsKICAgICAgICAgZmFpbElmVHJ1ZShtYXRjaChDT01N
QSksICJzZXR0ZXIgZnVuY3Rpb25zIG11c3QgaGF2ZSBvbmUgcGFyYW1ldGVyIik7CiAgICAgICAg
IGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTiwgIkV4cGVjdGVkIGEgJyknIGFmdGVyIGEgcGFyYW1l
dGVyIGRlY2xhcmF0aW9uIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1hdGNoKENMT1NF
UEFSRU4pKSB7CiAgICAgICAgICAgICBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQgPSAwOwot
ICAgICAgICAgICAgZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVuZ3RoID0gMDsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAg
ICAgICBmYWlsSWZGYWxzZShwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCwgcGFyYW1ldGVy
TGlzdCwgaXNBcnJvd0Z1bmN0aW9uLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIGZ1bmN0
aW9uSW5mby5mdW5jdGlvbkxlbmd0aCksICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhp
cyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOworICAgICAgICAgICAgZmFpbElmRmFs
c2UocGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNvbnRleHQsIHBhcmFtZXRlckxpc3QsIGlzQXJyb3dG
dW5jdGlvbiwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50KSwgIkNhbm5vdCBwYXJzZSBwYXJh
bWV0ZXJzIGZvciB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSk7CiAgICAgICAg
IH0KICAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOLCAiRXhwZWN0ZWQgYSAnKScgb3Ig
YSAnLCcgYWZ0ZXIgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iKTsKICAgICB9CkBAIC0yMTIzLDEx
ICsyMTE4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgICAgICAgICAgICAgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCAKICAg
ICAgICAgICAgICAgICBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBh
cmFtZXRlcnNTdGFydCwgCiAgICAgICAgICAgICAgICAgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSwg
Y29uc3RydWN0b3JLaW5kLCBmdW5jdGlvblN1cGVyQmluZGluZywKLSAgICAgICAgICAgICAgICBj
YWNoZWRJbmZvLT5wYXJhbWV0ZXJDb3VudCwgY2FjaGVkSW5mby0+ZnVuY3Rpb25MZW5ndGgsCisg
ICAgICAgICAgICAgICAgY2FjaGVkSW5mby0+cGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAg
ICAgbW9kZSwgZnVuY3Rpb25Cb2R5VHlwZSA9PSBBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24p
OwogICAgICAgICAgICAgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCA9IGNhY2hlZEluZm8tPmVuZEZ1
bmN0aW9uT2Zmc2V0OwogICAgICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50ID0g
Y2FjaGVkSW5mby0+cGFyYW1ldGVyQ291bnQ7Ci0gICAgICAgICAgICBmdW5jdGlvbkluZm8uZnVu
Y3Rpb25MZW5ndGggPSBjYWNoZWRJbmZvLT5mdW5jdGlvbkxlbmd0aDsKIAogICAgICAgICAgICAg
ZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8p
OwogICAgICAgICAgICAgcG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRz
RnJlZVZhcmlhYmxlSW5mbyk7CkBAIC0yMjk1LDcgKzIyODksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRy
ZWVCdWlsZAogICAgIH0pOwogCiAgICAgYXV0byBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9uQm9keSA9
IFsmXSB7Ci0gICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBzeW50YXhD
aGVja2VyLCBzdGFydExvY2F0aW9uLCBzdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQs
IGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIGNvbnN0cnVjdG9yS2luZCwgZXhw
ZWN0ZWRTdXBlckJpbmRpbmcsIGZ1bmN0aW9uQm9keVR5cGUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0
ZXJDb3VudCwgZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVuZ3RoLCBtb2RlKTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQsIHN5bnRheENoZWNrZXIsIHN0YXJ0TG9jYXRp
b24sIHN0YXJ0Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQs
IHBhcmFtZXRlcnNTdGFydCwgY29uc3RydWN0b3JLaW5kLCBleHBlY3RlZFN1cGVyQmluZGluZywg
ZnVuY3Rpb25Cb2R5VHlwZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50LCBtb2RlKTsKICAg
ICB9OwogCiAgICAgaWYgKGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9k
ZShtb2RlKSkgewpAQCAtMjM1MCwxMCArMjM0NCwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWls
ZAogICAgIC8vIEFueSBmdXR1cmUgcmVwYXJzaW5nIGNhbiB0aGVuIHNraXAgdGhlIGZ1bmN0aW9u
LgogICAgIC8vIEZvciBhcnJvdyBmdW5jdGlvbiBpcyA4ID0geD0+eCArIDQgc3ltYm9sczsKICAg
ICAvLyBGb3Igb3JkaW5hcnkgZnVuY3Rpb24gaXMgMTYgID0gZnVuY3Rpb24oKXt9ICsgNCBzeW1i
b2xzCi0gICAgY29uc3QgaW50IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUgPSBmdW5jdGlv
bkJvZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAxNiA6IDg7CisgICAgY29u
c3QgaW50IG1pbmltdW1Tb3VyY2VMZW5ndGhUb0NhY2hlID0gZnVuY3Rpb25Cb2R5VHlwZSA9PSBT
dGFuZGFyZEZ1bmN0aW9uQm9keUJsb2NrID8gMTYgOiA4OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
b3VyY2VQcm92aWRlckNhY2hlSXRlbT4gbmV3SW5mbzsKLSAgICBpbnQgZnVuY3Rpb25MZW5ndGgg
PSBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0IC0gZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0OwotICAg
IGlmIChUcmVlQnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSAmJiBtX2Z1bmN0aW9uQ2FjaGUg
JiYgZnVuY3Rpb25MZW5ndGggPiBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlKSB7CisgICAg
aW50IHNvdXJjZUxlbmd0aCA9IGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQgLSBmdW5jdGlvbkluZm8u
c3RhcnRPZmZzZXQ7CisgICAgaWYgKFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlICYm
IG1fZnVuY3Rpb25DYWNoZSAmJiBzb3VyY2VMZW5ndGggPiBtaW5pbXVtU291cmNlTGVuZ3RoVG9D
YWNoZSkgewogICAgICAgICBTb3VyY2VQcm92aWRlckNhY2hlSXRlbUNyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmVuZEZ1bmN0aW9uT2Zmc2V0ID0gZnVu
Y3Rpb25JbmZvLmVuZE9mZnNldDsKICAgICAgICAgcGFyYW1ldGVycy5mdW5jdGlvbk5hbWVTdGFy
dCA9IGZ1bmN0aW9uTmFtZVN0YXJ0OwpAQCAtMjM2Miw3ICsyMzU2LDYgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5m
byhUcmVlQnVpbGQKICAgICAgICAgcGFyYW1ldGVycy5sYXN0VG9rZW5FbmRPZmZzZXQgPSBsb2Nh
dGlvbi5lbmRPZmZzZXQ7CiAgICAgICAgIHBhcmFtZXRlcnMubGFzdFRva2VuTGluZVN0YXJ0T2Zm
c2V0ID0gbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICBwYXJhbWV0ZXJzLnBhcmFt
ZXRlckNvdW50ID0gZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50OwotICAgICAgICBwYXJhbWV0
ZXJzLmZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb25JbmZvLmZ1bmN0aW9uTGVuZ3RoOwogICAgICAg
ICBwYXJhbWV0ZXJzLmNvbnN0cnVjdG9yS2luZCA9IGNvbnN0cnVjdG9yS2luZDsKICAgICAgICAg
cGFyYW1ldGVycy5leHBlY3RlZFN1cGVyQmluZGluZyA9IGV4cGVjdGVkU3VwZXJCaW5kaW5nOwog
ICAgICAgICBpZiAoZnVuY3Rpb25Cb2R5VHlwZSA9PSBBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Np
b24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDFkNmVkZGQ4NWEy
YTc2ZGU5MzBkNzFlODMxZDFkMzFkOGQ3M2RkMzIuLmQ4ZjkyYzAwZmI0MTM1ODQzNWFhZTBlYmZk
NjA5MTJlZjNhMWViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAt
MTUzMiw4ICsxNTMyLDggQEAgY2xhc3MgUGFyc2VyIHsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiwgYm9vbCBz
dHJpY3QpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24g
cGFyc2VQcm9wZXJ0eU1ldGhvZChUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgSWRlbnRpZmll
ciogbWV0aG9kTmFtZSwgYm9vbCBpc0dlbmVyYXRvciwgYm9vbCBpc0FzeW5jTWV0aG9kKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZUdldHRlclNl
dHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6OlR5cGUsIHVuc2ln
bmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIENvbnN0cnVjdG9yS2luZCwgYm9vbCBpc0Ns
YXNzUHJvcGVydHkpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lO
TElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgU3lu
dGF4Q2hlY2tlciYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50IGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsIENv
bnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlLCB1bnNpZ25lZCwg
dW5zaWduZWQsIFNvdXJjZVBhcnNlTW9kZSk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVy
JiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uLCB1bnNpZ25l
ZCYsIHVuc2lnbmVkJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNf
SU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBT
eW50YXhDaGVja2VyJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQgZnVuY3Rpb25L
ZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwg
Q29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUsIHVuc2lnbmVk
LCBTb3VyY2VQYXJzZU1vZGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBib29sIHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYsIFRyZWVG
b3JtYWxQYXJhbWV0ZXJMaXN0LCBib29sIGlzQXJyb3dGdW5jdGlvbiwgdW5zaWduZWQmKTsKICAg
ICBlbnVtIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVj
bGFyYXRpb25Db250ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50
JiBkZWNsYXJhdGlvbnMsIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRy
ZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0
LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwgVmFy
RGVjbGFyYXRpb25MaXN0Q29udGV4dCwgRGVjbGFyYXRpb25UeXBlLCBFeHBvcnRUeXBlLCBib29s
JiBmb3JMb29wQ29uc3REb2VzTm90SGF2ZUluaXRpYWxpemVyKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFycm93RnVuY3Rpb25TaW5n
bGVFeHByZXNzaW9uQm9keVNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IDU2ZDY3Mzc1ZmQyYzcz
YzJiOGNkZmUzZjgzNWIzYjM4OWJmZTM3OGQuLmU0NGExZGZhODRiNjFkNDYzYzM4NTkxM2NjY2M5
YmIzYjIxNDhjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCkBAIC0xODcsNyArMTg3LDcgQEAgY2xhc3MgU3ludGF4Q2hlY2tlciB7CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9u
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUdlbmVyYXRvckZ1bmN0aW9uQm9keShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hl
Y2tlcj4mLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlQXN5bmNGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JikgeyByZXR1cm4g
RnVuY3Rpb25FeHByOyB9Ci0gICAgaW50IGNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wsIGlu
dCwgaW50LCBpbnQsIENvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCB1bnNpZ25lZCwgaW50
LCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyA9
IE5vSW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVyZXMpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3Vs
dDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbk1ldGFkYXRhKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sLCBpbnQsIGludCwgaW50
LCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgdW5zaWduZWQsIFNvdXJjZVBhcnNlTW9k
ZSwgYm9vbCwgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzID0gTm9Jbm5lckFycm93RnVu
Y3Rpb25GZWF0dXJlcykgeyByZXR1cm4gRnVuY3Rpb25Cb2R5UmVzdWx0OyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JikgeyByZXR1cm4gRnVuY3Rp
b25FeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tl
cj4mKSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0
YXJ0KGludCwgaW50KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggZTc3NGI1NTNiODQ3YmVkODA2OGYzOGRkNGZhMGE4
ODc5NzI0MDY0ZS4uY2VlNDEwZGY5MjRlMGIzYzk3ZmQ3ZGUyMTY3Zjk5OGJhZjc4MTc2YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgKQEAgLTE0NSw3ICsxNDUsNiBAQCBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CiAgICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUo
KSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZWNtYU5hbWUoKTsgfQogICAgIGNvbnN0
IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxl
LT5pbmZlcnJlZE5hbWUoKTsgfQogICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7IH0gLy8gRXhj
bHVkaW5nICd0aGlzJyEKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvbkxlbmd0aCgpOyB9CiAgICAgU291cmNl
UGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxl
LT5wYXJzZU1vZGUoKTsgfQogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsgfQogICAgIGNv
bnN0IFNvdXJjZUNvZGUmIGNsYXNzU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4
ZWN1dGFibGUtPmNsYXNzU291cmNlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggODE2ZjBmMzE3YzNkZDczMWJjNDNmYjIxZWU0MmViY2M3
ZjM3Nzc0OC4uN2M1MzEzMDEwMjM3MTlkNTAwMzE5ODdkMzA3ZTAyNmMyZTdlMmZiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTEwNCw3ICsx
MDQsNyBAQCBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0m
IHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dAogewogICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gY3JlYXRlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOwogICAgIGZ1bmN0aW9u
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKCZ2bSwgZXhl
Y3V0YWJsZS0+bmFtZSgpLnN0cmluZygpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgZnVu
Y3Rpb24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihl
eGVjdXRhYmxlLT5mdW5jdGlvbkxlbmd0aCgpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
ZnVuY3Rpb24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cihleGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAg
ICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCkBAIC0xMTIsNyArMTEyLDcgQEAgSlNGdW5jdGlvbiog
SlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXQKIHsKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNyZWF0ZSh2bSwgZXhl
Y3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKICAgICBmdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZygmdm0sIG5hbWUpLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKLSAgICBmdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKGV4ZWN1dGFibGUtPmZ1bmN0aW9uTGVuZ3RoKCkpLCBSZWFkT25seSB8IERv
bnRFbnVtKTsKKyAgICBmdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKQEAgLTYyMyw3ICs2MjMsNyBA
QCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TGVuZ3RoKFZNJiB2bSkKIAogICAgIEFTU0VSVCghaGFz
UmVpZmllZExlbmd0aCgpKTsKICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIEpT
VmFsdWUgaW5pdGlhbFZhbHVlID0ganNOdW1iZXIoanNFeGVjdXRhYmxlKCktPmZ1bmN0aW9uTGVu
Z3RoKCkpOworICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0ganNOdW1iZXIoanNFeGVjdXRhYmxl
KCktPnBhcmFtZXRlckNvdW50KCkpOwogICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1dGVzID0g
RG9udEVudW0gfCBSZWFkT25seTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoOwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
aW5pdGlhbFZhbHVlLCBpbml0aWFsQXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA1YmIwMTAxNThlMTU0ZGM0ZWFjZWNm
MjgzMDMzZjgyMTE3MDM5ZmYuLmQzZGEyOTc0NDdjZjUyOWYwYTcxODhmYjA0NmU1NTVkZjVlNDBk
YWYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gRGVmYXVsdCBwYXJhbWV0ZXIgcGFydCBzaG91
bGQgYmUgcmV0cmlldmVkIGJ5IG9wX2dldF9hcmd1bWVudCBvcGNvZGUgaW5zdGVhZCBvZiBjaGFu
Z2luZyBhcml0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0NTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzdHJlc3MvZnVuY3Rpb24td2l0aC1kZWZhdWx0cy1pbmxpbmluZy5qczogQWRkZWQuCisg
ICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChvayk6CisgICAgICAgIChhKToKKyAgICAgICAg
KiBzdHJlc3MvZnVuY3Rpb24td2l0aC1kZWZhdWx0cy1ub24taW5saW5pbmcuanM6IEFkZGVkLgor
ICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAob2spOgorICAgICAgICAoYSk6CisKIDIwMTct
MDMtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNz
ZW1ibHk6IE1ha2UgbW9yZSBkZW1vcyBydW4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Z1
bmN0aW9uLXdpdGgtZGVmYXVsdHMtaW5saW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9mdW5jdGlv
bi13aXRoLWRlZmF1bHRzLWlubGluaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiOWVhMTczNzAwNWRkZjAy
N2ViNWE2YjIzYTFjNDU1MzhjNjdkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVz
cy9mdW5jdGlvbi13aXRoLWRlZmF1bHRzLWlubGluaW5nLmpzCkBAIC0wLDAgKzEsMjQgQEAKKyhm
dW5jdGlvbiAoKSB7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBvayh2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK2Z1bmN0aW9uIGEoYiA9IDQyLCBjID0gNDMs
IGQpCit7CisgICAgcmV0dXJuIGMgKyBvayhiKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgeworICAgIHNob3VsZEJlKGEoKSwgODUpOworICAgIHNob3VsZEJlKGEoMzMpLCA3
Nik7CisgICAgc2hvdWxkQmUoYSgzMywgMjIpLCA1NSk7Cit9Cit9KCkpOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvZnVuY3Rpb24td2l0aC1kZWZhdWx0cy1ub24taW5saW5pbmcuanMgYi9K
U1Rlc3RzL3N0cmVzcy9mdW5jdGlvbi13aXRoLWRlZmF1bHRzLW5vbi1pbmxpbmluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kZWRjYmE1NTg1MjYyZTFlNTNlZDEzYTk0ZGIzY2E0YTYyOTNiYjBiCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZnVuY3Rpb24td2l0aC1kZWZhdWx0cy1ub24taW5s
aW5pbmcuanMKQEAgLTAsMCArMSwyNSBAQAorKGZ1bmN0aW9uICgpIHsKKyd1c2Ugc3RyaWN0JzsK
KworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFj
dHVhbCk7Cit9CisKK2Z1bmN0aW9uIG9rKHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZTsKK30K
KworZnVuY3Rpb24gYShiID0gNDIsIGMgPSA0MywgZCkKK3sKKyAgICByZXR1cm4gYyArIG9rKGIp
OworfQorbm9JbmxpbmUoYSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICBzaG91bGRCZShhKCksIDg1KTsKKyAgICBzaG91bGRCZShhKDMzKSwgNzYpOworICAgIHNob3Vs
ZEJlKGEoMzMsIDIyKSwgNTUpOworfQorfSgpKTsK
</data>
<flag name="review"
          id="325786"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>