<?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>237306</bug_id>
          
          <creation_ts>2022-02-28 20:05:37 -0800</creation_ts>
          <short_desc>Add a DeferTraps scope</short_desc>
          <delta_ts>2022-03-03 11:52:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>237409</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1846897</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 20:05:37 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846898</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 20:06:11 -0800</bug_when>
    <thetext>&lt;rdar://83494949&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846911</commentid>
    <comment_count>2</comment_count>
      <attachid>453471</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 21:14:40 -0800</bug_when>
    <thetext>Created attachment 453471
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846912</commentid>
    <comment_count>3</comment_count>
      <attachid>453472</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 21:17:50 -0800</bug_when>
    <thetext>Created attachment 453472
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846915</commentid>
    <comment_count>4</comment_count>
      <attachid>453474</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 21:46:07 -0800</bug_when>
    <thetext>Created attachment 453474
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846916</commentid>
    <comment_count>5</comment_count>
      <attachid>453475</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 21:48:08 -0800</bug_when>
    <thetext>Created attachment 453475
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846920</commentid>
    <comment_count>6</comment_count>
      <attachid>453475</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-28 22:03:19 -0800</bug_when>
    <thetext>Comment on attachment 453475
patch

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

&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:99
&gt; +        {

nit: You can remove this inner { } since this is already in the DeferTraps scope and is at the tail end.

&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:104
&gt; +        // Execute the code:
&gt; +        throwScope.release();

I think it&apos;s more logical to group these 2 lines with the execute call below.  There&apos;s no reason this needs to be here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846926</commentid>
    <comment_count>7</comment_count>
      <attachid>453475</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-28 23:12:53 -0800</bug_when>
    <thetext>Comment on attachment 453475
patch

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

&gt;&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:99
&gt;&gt; +        {
&gt; 
&gt; nit: You can remove this inner { } since this is already in the DeferTraps scope and is at the tail end.

I think it’s nice to keep this isolated as is. It shows exactly the region of code we’re asserting against

&gt;&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:104
&gt;&gt; +        throwScope.release();
&gt; 
&gt; I think it&apos;s more logical to group these 2 lines with the execute call below.  There&apos;s no reason this needs to be here.

If we make release() ever service traps we wouldn’t want to put it below. We want maximal things in this scope as long as we don’t recurse. Maybe we won’t ever make release() do that, but I see no downside to keeping it in here. An alternative I considered is to add a release() style function call to DeferTraps, and to use it in these types of situations so we have fewer scopes, but it seems a bit overkill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846927</commentid>
    <comment_count>8</comment_count>
      <attachid>453475</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-28 23:17:37 -0800</bug_when>
    <thetext>Comment on attachment 453475
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:99
&gt;&gt;&gt; +        {
&gt;&gt; 
&gt;&gt; nit: You can remove this inner { } since this is already in the DeferTraps scope and is at the tail end.
&gt; 
&gt; I think it’s nice to keep this isolated as is. It shows exactly the region of code we’re asserting against

ok, SGTM.

&gt;&gt;&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:104
&gt;&gt;&gt; +        throwScope.release();
&gt;&gt; 
&gt;&gt; I think it&apos;s more logical to group these 2 lines with the execute call below.  There&apos;s no reason this needs to be here.
&gt; 
&gt; If we make release() ever service traps we wouldn’t want to put it below. We want maximal things in this scope as long as we don’t recurse. Maybe we won’t ever make release() do that, but I see no downside to keeping it in here. An alternative I considered is to add a release() style function call to DeferTraps, and to use it in these types of situations so we have fewer scopes, but it seems a bit overkill

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847087</commentid>
    <comment_count>9</comment_count>
      <attachid>453509</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-03-01 10:20:12 -0800</bug_when>
    <thetext>Created attachment 453509
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847202</commentid>
    <comment_count>10</comment_count>
      <attachid>453509</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-03-01 14:55:38 -0800</bug_when>
    <thetext>Comment on attachment 453509
patch

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

r=me

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:955
&gt; +        DeferTraps deferTraps(vm); // We can&apos;t jettison this code if we&apos;re about to run it.

nit: can you add a newline after this decl?

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1020
&gt; +        DeferTraps deferTraps(vm); // We can&apos;t jettison this code if we&apos;re about to run it.

nit: can you add a newline after this decl?

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1311
&gt; +        DeferTraps deferTraps(vm); // We can&apos;t jettison this code if we&apos;re about to run it.

nit: can you add a newline after this decl?

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1407
&gt;      // Execute the code:
&gt;      throwScope.release();

You didn&apos;t put this ThrowScope::release() in the DeferScope unlike in `Interpreter::execute(CallFrameClosure&amp; closure)` below.  The same is true for all Interpreter execute functions above.  Realistically, I don&apos;t think we will or should ever handle traps in ThrowScope::release() because on release builds, we rely on it being a no-op.  I still think that it is the better idiom to keep the ThrowScope::release() close to the statement that the release applies to i.e. the execute.  Also, the code reads more naturally this way.  Regardless, let&apos;s make it consistent every where.

&gt; Source/JavaScriptCore/interpreter/InterpreterInlines.h:91
&gt; +        DeferTraps deferTraps(vm); // We can&apos;t jettison this code if we&apos;re about to run it.

nit: can you add a newline after this decl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847274</commentid>
    <comment_count>11</comment_count>
      <attachid>453557</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-03-01 18:00:30 -0800</bug_when>
    <thetext>Created attachment 453557
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847289</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-01 19:43:53 -0800</bug_when>
    <thetext>Committed r290717 (247964@main): &lt;https://commits.webkit.org/247964@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453557.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847757</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-03-02 23:06:12 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 237409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847970</commentid>
    <comment_count>14</comment_count>
      <attachid>453759</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-03-03 10:33:15 -0800</bug_when>
    <thetext>Created attachment 453759
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847977</commentid>
    <comment_count>15</comment_count>
      <attachid>453759</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-03-03 10:36:53 -0800</bug_when>
    <thetext>Comment on attachment 453759
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848017</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-03 11:52:40 -0800</bug_when>
    <thetext>Committed r290788 (248030@main): &lt;https://commits.webkit.org/248030@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453759.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453471</attachid>
            <date>2022-02-28 21:14:40 -0800</date>
            <delta_ts>2022-02-28 21:17:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25233</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDIyLTAyLTI4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6Om5lZWRIYW5kbGluZyBjb25zdCk6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6Omhhc1RyYXBCaXQpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpzZXRUcmFwQml0KToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRlZmVy
VHJhcHM6OkRlZmVyVHJhcHMpOgorICAgICAgICAoSlNDOjpEZWZlclRyYXBzOjp+RGVmZXJUcmFw
cyk6CisKIDIwMjItMDItMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBBZGQgb3B0aW9ucyB0byBzaG93IGVhY2gg
YXJlYSdzIENTUyBgb3JkZXJgIGFuZC9vciBET00gaW5kZXggaW4gdGhlIHBhcmVudCBmbGV4IGNv
bnRhaW5lcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29t
cGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faXNKZXR0aXNvbmVk
KGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMp
CiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpAQCAtMzMwLDYgKzMz
MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBt
X2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAg
LTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9pc0pldHRpc29uZWQgPSB0cnVlOwor
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAvLyBQbGFjYXRlIEdDQyBmb3IgdXNl
IGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBsaWtlIHRoaXMpLgogICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24s
ICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwg
PSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIzNTYsNiArMjM2MCw4IEBAIHByaXZh
dGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0pldHRpc29uZWQpOworCiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICJOb3RpY2lu
ZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIs
ICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYgKzc3NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7
CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAgICBib29sIG1fdmlzaXRDaGlsZHJl
blNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGFueSBjb2Rl
IHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0s
IGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0cikKQEAgLTE4Nyw2ICsxOTIsOSBA
QCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsCiAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGlmIHdlJ3Jl
IGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKICNpZiBFTkFCTEUo
SklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2ICszNzEzLDggQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxw
dHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24g
dGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8gaXQuCisKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVsc2UgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjYsMjIgKzkyNiwyNSBAQCBmYWlsZWRK
U09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAKLSAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sq
IHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb248UHJv
Z3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2Rl
QmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRS
ZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpz
Q2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChj
b2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1l
dGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAg
ICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IHByb2dyYW0tPmdlbmVy
YXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgRGVmZXJUcmFw
cyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3Jl
IGFib3V0IHRvIHJ1biBpdC4KKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAg
ICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFByb2dyYW1FeGVjdXRhYmxlPih2bSwg
bnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFt
Q29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
ICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3Ig
J3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC05ODgsMjMgKzk5MSwyNiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGlzSlNDYWxsKSB7Ci0gICAgICAgIC8vIENvbXBpbGUg
dGhlIGNhbGxlZToKLSAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwsIG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBpZiAoaXNKU0NhbGwpCi0gICAgICAgICAgICBqaXRDb2RlID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwotICAgICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwg
dGhpc1ZhbHVlLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgRGVmZXJUcmFwcyBk
ZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFi
b3V0IHRvIHJ1biBpdC4KKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRy
OworICAgICAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNh
bGxlZToKKyAgICAgICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdDb2RlQmxvY2spOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Cisg
ICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ2FsbCkKKyAgICAgICAgICAgICAgICBq
aXRDb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEo
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTEwNjQsMjMg
KzEwNzAsMjcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBuZXdDb2Rl
QmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ29uc3RydWN0KSB7Ci0gICAgICAgIC8vIENv
bXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwganNDYXN0
PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0LCBuZXdD
b2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwotCi0gICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2spOwotICAgICAgICBuZXdDb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAg
ICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBw
ZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaWYg
KGlzSlNDb25zdHJ1Y3QpCi0gICAgICAgICAgICBqaXRDb2RlID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKLSAgICAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIERlZmVy
VHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3
ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0
LCBuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7CisgICAg
ICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhl
Y3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICAgICAgICAg
IGppdENvZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChu
ZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIG5ld1RhcmdldCwgYXJnc0Nv
dW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dDsKQEAgLTEyNzIsMjIgKzEyODIsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIGVsc2UKICAgICAgICAgY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICAvLyBSZWxvYWQgQ29kZUJsb2NrLiBJdCBp
cyBwb3NzaWJsZSB0aGF0IHdlIHJlcGxhY2VkIENvZGVCbG9jayB3aGlsZSBzZXR0aW5nIHVwIHRo
ZSBlbnZpcm9ubWVudC4KLSAgICB7Ci0gICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsK
LSAgICAgICAgZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbjxFdmFsRXhlY3V0YWJsZT4odm0sIG51
bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxvY2sqPih0
ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOwotICAgICAgICBwcm90
b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIHRoaXNWYWx1
ZSwgMSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisgICAgICAgIC8vIFJl
bG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwbGFjZWQgQ29kZUJsb2Nr
IHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAgICAgICBldmFsLT5wcmVwYXJlRm9y
RXhlY3V0aW9uPEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxs
LCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAg
ICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Cisg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAg
eworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFw
cGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAg
ICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCB0aGlzVmFsdWUs
IDEpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEz
MjksMTcgKzEzNDIsOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3Jh
CiAKICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihBYnN0cmFjdE1vZHVsZVJlY29yZDo6QXJndW1lbnQ6Ok51bWJlck9mQXJndW1lbnRz
KTsKICAgICBKU0NhbGxlZSogY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwotICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0
ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IG51bWJlck9mQXJndW1lbnRzICsgMSk7Ci0gICAgfQotCiAg
ICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICBKU1ZhbHVlIGFyZ3NbbnVtYmVyT2ZBcmd1bWVudHNdID0gewogICAgICAg
ICByZWNvcmQsCkBAIC0xMzUwLDE2ICsxMzU0LDMxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVNb2R1bGVQcm9ncmEKICAgICB9OwogCiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGUoKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2Fu
J3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBz
Y29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1bWVudHMgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIC8vIFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMg
YHVuZGVmaW5lZGAuCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1oYXN0aGlzYmlu
ZGluZwotICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKLSAg
ICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVl
LCBqc1VuZGVmaW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOwotICAgIH0KIAot
ICAgIHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5z
ZXQodm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6
U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZSgpOworCisgICAgICAgICAgICAvLyBUaGUgfHRoaXN8IG9mIHRoZSBtb2R1
bGUgaXMgYWx3YXlzIGB1bmRlZmluZWRgLgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9ubWVudC1y
ZWNvcmRzLWhhc3RoaXNiaW5kaW5nCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29y
ZHMtZ2V0dGhpc2JpbmRpbmcKKyAgICAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGNhbGxlZSwganNVbmRlZmluZWQoKSwgbnVtYmVyT2ZBcmd1bWVu
dHMgKyAxLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY29yZC0+aW50ZXJuYWxGaWVs
ZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5zZXQodm0sIHJlY29yZCwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAg
ICB9CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NiwyMSArODcsMjQgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdQogICAgICAgICAgICAgcmV0dXJuIHRocm93U2NvcGUuZXhj
ZXB0aW9uKCk7CiAgICAgfQogCi0gICAgLy8gUmVsb2FkIENvZGVCbG9jayBzaW5jZSBHQyBjYW4g
cmVwbGFjZSBDb2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJsZS4KLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKLSAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNj
b3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1
cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUu
Ci0gICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb2RlQmxvY2sp
OworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNv
biB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorICAgICAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgY2xvc3VyZS5mdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgY2xvc3VyZS5mdW5jdGlvbiwgY2xvc3VyZS5zY29wZSwgQ29kZUZvckNhbGwsIGNvZGVCbG9j
ayk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVy
bih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAg
ICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8g
R0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAg
ICAgICAgICBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgorICAgICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKLSAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xvc3Vy
ZS5wcm90b0NhbGxGcmFtZSk7CiAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xv
c3VyZS5wcm90b0NhbGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CiAKQEAgLTE5MDQsOCArMTkwNSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGwKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsK
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwog
CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhp
cyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTE5MTksNyArMTkyMSw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGwKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5w
cmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUs
IGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJ
T04oZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgaWYgKGdlbmVyaWND
b2RlQmxvY2spIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OmlzRXhlY3V0YWJsZVNjcmlwdChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAg
ICAgICBnZW5lcmljQ29kZUJsb2NrLT5tX2lzSmV0dGlzb25lZCA9IGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiSW5zdGFsbGluZyAi
LCAqZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyAr
NDAyLDcgQEAgYXV0byBWTVRyYXBzOjp0YWtlVG9wUHJpb3JpdHlUcmFwKFZNVHJhcAogCiAgICAg
Ly8gTm90ZTogdGhlIEV2ZW50Qml0U2hpZnQgaXMgYWxyZWFkeSBzb3J0ZWQgaW4gaGlnaGVzdCB0
byBsb3dlc3QgcHJpb3JpdHkKICAgICAvLyBpLmUuIGEgYml0IHNoaWZ0IG9mIDAgaXMgaGlnaGVz
dCBwcmlvcml0eSwgZXRjLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZkV2ZW50czsgKytp
KSB7CiAgICAgICAgIEV2ZW50IGV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZlbnQ+KDEgPDwgaSk7CiAg
ICAgICAgIGlmIChoYXNUcmFwQml0KGV2ZW50LCBtYXNrKSkgewogICAgICAgICAgICAgY2xlYXJU
cmFwQml0KGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE1ICsxNDksMjEgQEAgcHVibGljOgogICAg
IHYoTmVlZFRlcm1pbmF0aW9uKSBcCiAgICAgdihOZWVkV2F0Y2hkb2dDaGVjaykgXAogICAgIHYo
TmVlZERlYnVnZ2VyQnJlYWspIFwKLSAgICB2KE5lZWRFeGNlcHRpb25IYW5kbGluZykKKyAgICB2
KE5lZWRFeGNlcHRpb25IYW5kbGluZykgXAorICAgIHYoRGVmZXJUcmFwSGFuZGxpbmcpIC8vIE11
c3QgY29tZSBsYXN0IGluIHRoZSBlbnVtLiBUaGlzIGRlZmVycyBhbGwgZXZlbnRzIGV4Y2VwdCBO
ZWVkRXhjZXB0aW9uSGFuZGxpbmcuCiAKICNkZWZpbmUgREVDTEFSRV9WTVRSQVBTX0VWRU5UX0JJ
VF9TSElGVChldmVudF9fKSAgZXZlbnRfXyMjQml0U2hpZnQsCiAgICAgZW51bSBFdmVudEJpdFNo
aWZ0IHsKICAgICAgICAgRk9SX0VBQ0hfVk1UUkFQU19FVkVOVFMoREVDTEFSRV9WTVRSQVBTX0VW
RU5UX0JJVF9TSElGVCkKLSAgICAgICAgTnVtYmVyT2ZFdmVudHMsIC8vIFRoaXMgZW50cnkgbXVz
dCBiZSBsYXN0IGluIHRoaXMgbGlzdC4KICAgICB9OwogI3VuZGVmIERFQ0xBUkVfVk1UUkFQU19F
VkVOVF9CSVRfU0hJRlQKIAorCisjZGVmaW5lIENPVU5UX0VWRU5UKGV2ZW50KSArIDEKKyAgICBz
dGF0aWMgY29uc3RleHByIEJpdEZpZWxkIE51bWJlck9mRXZlbnRzID0gRk9SX0VBQ0hfVk1UUkFQ
U19FVkVOVFMoQ09VTlRfRVZFTlQpIC0gMTsgLy8gRG9uJ3QgY291bnQgRGVmZXJUcmFwaGFuZGxp
bmcuCisgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOdW1iZXJPZkV2ZW50c0luY2x1ZGlu
Z0RlZmVyID0gRk9SX0VBQ0hfVk1UUkFQU19FVkVOVFMoQ09VTlRfRVZFTlQpOworI3VuZGVmIENP
VU5UX0VWRU5UCisKICAgICB1c2luZyBFdmVudCA9IEJpdEZpZWxkOwogCiAjZGVmaW5lIERFQ0xB
UkVfVk1UUkFQU19FVkVOVChldmVudF9fKSBcCkBAIC0xNzAsOCArMTc2LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBFdmVudCBOb0V2ZW50ID0gMDsKIAotICAgIHN0YXRpY19h
c3NlcnQoTnVtYmVyT2ZFdmVudHMgPD0gYml0c0luQml0RmllbGQpOworICAgIHN0YXRpY19hc3Nl
cnQoTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlciA8PSBiaXRzSW5CaXRGaWVsZCk7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBBbGxFdmVudHMgPSAoMXVsbCA8PCBOdW1iZXJPZkV2
ZW50cykgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQWxsRXZlbnRzSW5jbHVk
aW5nRGVmZXIgPSAoMXVsbCA8PCBOdW1iZXJPZkV2ZW50c0luY2x1ZGluZ0RlZmVyKSAtIDE7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBBc3luY0V2ZW50cyA9IEFsbEV2ZW50cyAmIH5O
ZWVkRXhjZXB0aW9uSGFuZGxpbmc7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOb25E
ZWJ1Z2dlckV2ZW50cyA9IEFsbEV2ZW50cyAmIH5OZWVkRGVidWdnZXJCcmVhazsKICAgICBzdGF0
aWMgY29uc3RleHByIEJpdEZpZWxkIE5vbkRlYnVnZ2VyQXN5bmNFdmVudHMgPSBBc3luY0V2ZW50
cyAmIH5OZWVkRGVidWdnZXJCcmVhazsKQEAgLTE4OCw3ICsxOTUsMTMgQEAgcHVibGljOgogCiAg
ICAgdm9pZCB3aWxsRGVzdHJveVZNKCk7CiAKLSAgICBib29sIG5lZWRIYW5kbGluZyhCaXRGaWVs
ZCBtYXNrKSBjb25zdCB7IHJldHVybiBtX3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiBtYXNrOyB9
CisgICAgYm9vbCBuZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykgY29uc3QKKyAgICB7CisgICAg
ICAgIGF1dG8gbWFza2VkVmFsdWUgPSBtX3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiAobWFzayB8
IERlZmVyVHJhcEhhbmRsaW5nKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1hc2tlZFZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiAobWFza2VkVmFsdWUgJiBOZWVkRXhjZXB0aW9uSGFuZGxpbmcp
IHx8ICEobWFza2VkVmFsdWUgJiBEZWZlclRyYXBIYW5kbGluZyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAgICAgdm9pZCogdHJhcEJpdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fdHJh
cEJpdHM7IH0KIAogICAgIGVudW0gY2xhc3MgRGVmZXJBY3Rpb24gewpAQCAtMjA2LDYgKzIxOSwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKTsK
ICAgICB9CiAKKyAgICBib29sIGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgZXZlbnQ7CisgICAgfQogICAgIGJv
b2wgaGFzVHJhcEJpdChFdmVudCBldmVudCwgQml0RmllbGQgbWFzaykKICAgICB7CiAgICAgICAg
IEJpdEZpZWxkIG1hc2tlZEJpdHMgPSBldmVudCAmIG1hc2s7CkBAIC0yMTQsNyArMjMxLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2xlYXJUcmFwQml0KEV2ZW50IGV2ZW50KSB7IG1fdHJhcEJpdHMu
ZXhjaGFuZ2VBbmQofmV2ZW50KTsgfQogICAgIHZvaWQgc2V0VHJhcEJpdChFdmVudCBldmVudCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzKSA9PSAwKTsKKyAgICAg
ICAgQVNTRVJUKChldmVudCAmIH5BbGxFdmVudHNJbmNsdWRpbmdEZWZlcikgPT0gMCk7CiAgICAg
ICAgIG1fdHJhcEJpdHMuZXhjaGFuZ2VPcihldmVudCk7CiAgICAgfQogCkBAIC0yNjYsNCArMjgz
LDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpZ25hbFNlbmRlcjsKIH07CiAKK2Ns
YXNzIERlZmVyVHJhcHMgeworcHVibGljOgorICAgIERlZmVyVHJhcHMoVk0mKTsKKyAgICB+RGVm
ZXJUcmFwcygpOworcHJpdmF0ZToKKyAgICBWTVRyYXBzJiBtX3RyYXBzOworICAgIGJvb2wgbV9p
c0FjdGl2ZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw0ICs1MCwxOCBAQCBpbmxpbmUgdm9pZCBWTVRyYXBzOjp1bmRvRGVmZXJU
ZXJtaW5hdGlvCiAgICAgICAgIHVuZG9EZWZlclRlcm1pbmF0aW9uU2xvdyhkZWZlckFjdGlvbik7
CiB9CiAKK0FMV0FZU19JTkxJTkUgRGVmZXJUcmFwczo6RGVmZXJUcmFwcyhWTSYgdm0pCisgICAg
OiBtX3RyYXBzKHZtLnRyYXBzKCkpCisgICAgLCBtX2lzQWN0aXZlKCFtX3RyYXBzLmhhc1RyYXBC
aXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxpbmcpKQoreworICAgIGlmIChtX2lzQWN0aXZlKQor
ICAgICAgICBtX3RyYXBzLnNldFRyYXBCaXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxpbmcpOwor
fQorCitBTFdBWVNfSU5MSU5FIERlZmVyVHJhcHM6On5EZWZlclRyYXBzKCkKK3sKKyAgICBpZiAo
bV9pc0FjdGl2ZSkKKyAgICAgICAgbV90cmFwcy5jbGVhclRyYXBCaXQoVk1UcmFwczo6RGVmZXJU
cmFwSGFuZGxpbmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453472</attachid>
            <date>2022-02-28 21:17:50 -0800</date>
            <delta_ts>2022-02-28 21:46:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25233</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDIyLTAyLTI4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6Om5lZWRIYW5kbGluZyBjb25zdCk6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6Omhhc1RyYXBCaXQpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpzZXRUcmFwQml0KToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRlZmVy
VHJhcHM6OkRlZmVyVHJhcHMpOgorICAgICAgICAoSlNDOjpEZWZlclRyYXBzOjp+RGVmZXJUcmFw
cyk6CisKIDIwMjItMDItMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBBZGQgb3B0aW9ucyB0byBzaG93IGVhY2gg
YXJlYSdzIENTUyBgb3JkZXJgIGFuZC9vciBET00gaW5kZXggaW4gdGhlIHBhcmVudCBmbGV4IGNv
bnRhaW5lcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29t
cGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faXNKZXR0aXNvbmVk
KGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMp
CiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpAQCAtMzMwLDYgKzMz
MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBt
X2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAg
LTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9pc0pldHRpc29uZWQgPSB0cnVlOwor
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAvLyBQbGFjYXRlIEdDQyBmb3IgdXNl
IGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBsaWtlIHRoaXMpLgogICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24s
ICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwg
PSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIzNTYsNiArMjM2MCw4IEBAIHByaXZh
dGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0pldHRpc29uZWQpOworCiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICJOb3RpY2lu
ZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIs
ICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYgKzc3NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7
CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAgICBib29sIG1fdmlzaXRDaGlsZHJl
blNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGFueSBjb2Rl
IHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0s
IGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0cikKQEAgLTE4Nyw2ICsxOTIsOSBA
QCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsCiAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGlmIHdlJ3Jl
IGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKICNpZiBFTkFCTEUo
SklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2ICszNzEzLDggQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxw
dHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24g
dGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8gaXQuCisKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVsc2UgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjYsMjIgKzkyNiwyNSBAQCBmYWlsZWRK
U09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAKLSAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sq
IHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb248UHJv
Z3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2Rl
QmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRS
ZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpz
Q2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChj
b2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1l
dGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAg
ICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IHByb2dyYW0tPmdlbmVy
YXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgRGVmZXJUcmFw
cyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3Jl
IGFib3V0IHRvIHJ1biBpdC4KKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAg
ICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFByb2dyYW1FeGVjdXRhYmxlPih2bSwg
bnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFt
Q29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
ICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3Ig
J3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC05ODgsMjMgKzk5MSwyNiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGlzSlNDYWxsKSB7Ci0gICAgICAgIC8vIENvbXBpbGUg
dGhlIGNhbGxlZToKLSAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwsIG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBpZiAoaXNKU0NhbGwpCi0gICAgICAgICAgICBqaXRDb2RlID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwotICAgICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwg
dGhpc1ZhbHVlLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgRGVmZXJUcmFwcyBk
ZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFi
b3V0IHRvIHJ1biBpdC4KKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRy
OworICAgICAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNh
bGxlZToKKyAgICAgICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdDb2RlQmxvY2spOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Cisg
ICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ2FsbCkKKyAgICAgICAgICAgICAgICBq
aXRDb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEo
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTEwNjQsMjMg
KzEwNzAsMjcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBuZXdDb2Rl
QmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ29uc3RydWN0KSB7Ci0gICAgICAgIC8vIENv
bXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwganNDYXN0
PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0LCBuZXdD
b2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwotCi0gICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2spOwotICAgICAgICBuZXdDb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAg
ICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBw
ZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaWYg
KGlzSlNDb25zdHJ1Y3QpCi0gICAgICAgICAgICBqaXRDb2RlID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKLSAgICAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIERlZmVy
VHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3
ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0
LCBuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7CisgICAg
ICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhl
Y3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICAgICAgICAg
IGppdENvZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChu
ZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIG5ld1RhcmdldCwgYXJnc0Nv
dW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dDsKQEAgLTEyNzIsMjIgKzEyODIsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIGVsc2UKICAgICAgICAgY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICAvLyBSZWxvYWQgQ29kZUJsb2NrLiBJdCBp
cyBwb3NzaWJsZSB0aGF0IHdlIHJlcGxhY2VkIENvZGVCbG9jayB3aGlsZSBzZXR0aW5nIHVwIHRo
ZSBlbnZpcm9ubWVudC4KLSAgICB7Ci0gICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsK
LSAgICAgICAgZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbjxFdmFsRXhlY3V0YWJsZT4odm0sIG51
bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxvY2sqPih0
ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOwotICAgICAgICBwcm90
b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIHRoaXNWYWx1
ZSwgMSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisgICAgICAgIC8vIFJl
bG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwbGFjZWQgQ29kZUJsb2Nr
IHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAgICAgICBldmFsLT5wcmVwYXJlRm9y
RXhlY3V0aW9uPEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxs
LCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAg
ICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Cisg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAg
eworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFw
cGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAg
ICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCB0aGlzVmFsdWUs
IDEpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEz
MjksMTcgKzEzNDIsOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3Jh
CiAKICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihBYnN0cmFjdE1vZHVsZVJlY29yZDo6QXJndW1lbnQ6Ok51bWJlck9mQXJndW1lbnRz
KTsKICAgICBKU0NhbGxlZSogY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwotICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0
ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IG51bWJlck9mQXJndW1lbnRzICsgMSk7Ci0gICAgfQotCiAg
ICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICBKU1ZhbHVlIGFyZ3NbbnVtYmVyT2ZBcmd1bWVudHNdID0gewogICAgICAg
ICByZWNvcmQsCkBAIC0xMzUwLDE2ICsxMzU0LDMxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVNb2R1bGVQcm9ncmEKICAgICB9OwogCiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGUoKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2Fu
J3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBz
Y29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1bWVudHMgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIC8vIFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMg
YHVuZGVmaW5lZGAuCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1oYXN0aGlzYmlu
ZGluZwotICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKLSAg
ICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVl
LCBqc1VuZGVmaW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOwotICAgIH0KIAot
ICAgIHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5z
ZXQodm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6
U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZSgpOworCisgICAgICAgICAgICAvLyBUaGUgfHRoaXN8IG9mIHRoZSBtb2R1
bGUgaXMgYWx3YXlzIGB1bmRlZmluZWRgLgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9ubWVudC1y
ZWNvcmRzLWhhc3RoaXNiaW5kaW5nCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29y
ZHMtZ2V0dGhpc2JpbmRpbmcKKyAgICAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGNhbGxlZSwganNVbmRlZmluZWQoKSwgbnVtYmVyT2ZBcmd1bWVu
dHMgKyAxLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY29yZC0+aW50ZXJuYWxGaWVs
ZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5zZXQodm0sIHJlY29yZCwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAg
ICB9CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NiwyMSArODcsMjQgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdQogICAgICAgICAgICAgcmV0dXJuIHRocm93U2NvcGUuZXhj
ZXB0aW9uKCk7CiAgICAgfQogCi0gICAgLy8gUmVsb2FkIENvZGVCbG9jayBzaW5jZSBHQyBjYW4g
cmVwbGFjZSBDb2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJsZS4KLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKLSAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNj
b3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1
cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUu
Ci0gICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb2RlQmxvY2sp
OworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNv
biB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorICAgICAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgY2xvc3VyZS5mdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgY2xvc3VyZS5mdW5jdGlvbiwgY2xvc3VyZS5zY29wZSwgQ29kZUZvckNhbGwsIGNvZGVCbG9j
ayk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVy
bih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAg
ICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8g
R0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAg
ICAgICAgICBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgorICAgICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKLSAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xvc3Vy
ZS5wcm90b0NhbGxGcmFtZSk7CiAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xv
c3VyZS5wcm90b0NhbGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CiAKQEAgLTE5MDQsOCArMTkwNSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGwKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsK
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwog
CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhp
cyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTE5MTksNyArMTkyMSw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGwKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5w
cmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUs
IGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJ
T04oZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgaWYgKGdlbmVyaWND
b2RlQmxvY2spIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OmlzRXhlY3V0YWJsZVNjcmlwdChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAg
ICAgICBnZW5lcmljQ29kZUJsb2NrLT5tX2lzSmV0dGlzb25lZCA9IGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiSW5zdGFsbGluZyAi
LCAqZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyAr
NDAyLDcgQEAgYXV0byBWTVRyYXBzOjp0YWtlVG9wUHJpb3JpdHlUcmFwKFZNVHJhcAogCiAgICAg
Ly8gTm90ZTogdGhlIEV2ZW50Qml0U2hpZnQgaXMgYWxyZWFkeSBzb3J0ZWQgaW4gaGlnaGVzdCB0
byBsb3dlc3QgcHJpb3JpdHkKICAgICAvLyBpLmUuIGEgYml0IHNoaWZ0IG9mIDAgaXMgaGlnaGVz
dCBwcmlvcml0eSwgZXRjLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZkV2ZW50czsgKytp
KSB7CiAgICAgICAgIEV2ZW50IGV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZlbnQ+KDEgPDwgaSk7CiAg
ICAgICAgIGlmIChoYXNUcmFwQml0KGV2ZW50LCBtYXNrKSkgewogICAgICAgICAgICAgY2xlYXJU
cmFwQml0KGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE1ICsxNDksMjEgQEAgcHVibGljOgogICAg
IHYoTmVlZFRlcm1pbmF0aW9uKSBcCiAgICAgdihOZWVkV2F0Y2hkb2dDaGVjaykgXAogICAgIHYo
TmVlZERlYnVnZ2VyQnJlYWspIFwKLSAgICB2KE5lZWRFeGNlcHRpb25IYW5kbGluZykKKyAgICB2
KE5lZWRFeGNlcHRpb25IYW5kbGluZykgXAorICAgIHYoRGVmZXJUcmFwSGFuZGxpbmcpIC8vIE11
c3QgY29tZSBsYXN0IGluIHRoZSBlbnVtLiBUaGlzIGRlZmVycyBhbGwgZXZlbnRzIGV4Y2VwdCBO
ZWVkRXhjZXB0aW9uSGFuZGxpbmcuCiAKICNkZWZpbmUgREVDTEFSRV9WTVRSQVBTX0VWRU5UX0JJ
VF9TSElGVChldmVudF9fKSAgZXZlbnRfXyMjQml0U2hpZnQsCiAgICAgZW51bSBFdmVudEJpdFNo
aWZ0IHsKICAgICAgICAgRk9SX0VBQ0hfVk1UUkFQU19FVkVOVFMoREVDTEFSRV9WTVRSQVBTX0VW
RU5UX0JJVF9TSElGVCkKLSAgICAgICAgTnVtYmVyT2ZFdmVudHMsIC8vIFRoaXMgZW50cnkgbXVz
dCBiZSBsYXN0IGluIHRoaXMgbGlzdC4KICAgICB9OwogI3VuZGVmIERFQ0xBUkVfVk1UUkFQU19F
VkVOVF9CSVRfU0hJRlQKIAorCisjZGVmaW5lIENPVU5UX0VWRU5UKGV2ZW50KSArIDEKKyAgICBz
dGF0aWMgY29uc3RleHByIEJpdEZpZWxkIE51bWJlck9mRXZlbnRzID0gRk9SX0VBQ0hfVk1UUkFQ
U19FVkVOVFMoQ09VTlRfRVZFTlQpIC0gMTsgLy8gRG9uJ3QgY291bnQgRGVmZXJUcmFwSGFuZGxp
bmcuCisgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOdW1iZXJPZkV2ZW50c0luY2x1ZGlu
Z0RlZmVyID0gRk9SX0VBQ0hfVk1UUkFQU19FVkVOVFMoQ09VTlRfRVZFTlQpOworI3VuZGVmIENP
VU5UX0VWRU5UCisKICAgICB1c2luZyBFdmVudCA9IEJpdEZpZWxkOwogCiAjZGVmaW5lIERFQ0xB
UkVfVk1UUkFQU19FVkVOVChldmVudF9fKSBcCkBAIC0xNzAsOCArMTc2LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBFdmVudCBOb0V2ZW50ID0gMDsKIAotICAgIHN0YXRpY19h
c3NlcnQoTnVtYmVyT2ZFdmVudHMgPD0gYml0c0luQml0RmllbGQpOworICAgIHN0YXRpY19hc3Nl
cnQoTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlciA8PSBiaXRzSW5CaXRGaWVsZCk7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBBbGxFdmVudHMgPSAoMXVsbCA8PCBOdW1iZXJPZkV2
ZW50cykgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQWxsRXZlbnRzSW5jbHVk
aW5nRGVmZXIgPSAoMXVsbCA8PCBOdW1iZXJPZkV2ZW50c0luY2x1ZGluZ0RlZmVyKSAtIDE7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBBc3luY0V2ZW50cyA9IEFsbEV2ZW50cyAmIH5O
ZWVkRXhjZXB0aW9uSGFuZGxpbmc7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOb25E
ZWJ1Z2dlckV2ZW50cyA9IEFsbEV2ZW50cyAmIH5OZWVkRGVidWdnZXJCcmVhazsKICAgICBzdGF0
aWMgY29uc3RleHByIEJpdEZpZWxkIE5vbkRlYnVnZ2VyQXN5bmNFdmVudHMgPSBBc3luY0V2ZW50
cyAmIH5OZWVkRGVidWdnZXJCcmVhazsKQEAgLTE4OCw3ICsxOTUsMTMgQEAgcHVibGljOgogCiAg
ICAgdm9pZCB3aWxsRGVzdHJveVZNKCk7CiAKLSAgICBib29sIG5lZWRIYW5kbGluZyhCaXRGaWVs
ZCBtYXNrKSBjb25zdCB7IHJldHVybiBtX3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiBtYXNrOyB9
CisgICAgYm9vbCBuZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykgY29uc3QKKyAgICB7CisgICAg
ICAgIGF1dG8gbWFza2VkVmFsdWUgPSBtX3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiAobWFzayB8
IERlZmVyVHJhcEhhbmRsaW5nKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1hc2tlZFZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiAobWFza2VkVmFsdWUgJiBOZWVkRXhjZXB0aW9uSGFuZGxpbmcp
IHx8ICEobWFza2VkVmFsdWUgJiBEZWZlclRyYXBIYW5kbGluZyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAgICAgdm9pZCogdHJhcEJpdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fdHJh
cEJpdHM7IH0KIAogICAgIGVudW0gY2xhc3MgRGVmZXJBY3Rpb24gewpAQCAtMjA2LDYgKzIxOSwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKTsK
ICAgICB9CiAKKyAgICBib29sIGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgZXZlbnQ7CisgICAgfQogICAgIGJv
b2wgaGFzVHJhcEJpdChFdmVudCBldmVudCwgQml0RmllbGQgbWFzaykKICAgICB7CiAgICAgICAg
IEJpdEZpZWxkIG1hc2tlZEJpdHMgPSBldmVudCAmIG1hc2s7CkBAIC0yMTQsNyArMjMxLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2xlYXJUcmFwQml0KEV2ZW50IGV2ZW50KSB7IG1fdHJhcEJpdHMu
ZXhjaGFuZ2VBbmQofmV2ZW50KTsgfQogICAgIHZvaWQgc2V0VHJhcEJpdChFdmVudCBldmVudCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzKSA9PSAwKTsKKyAgICAg
ICAgQVNTRVJUKChldmVudCAmIH5BbGxFdmVudHNJbmNsdWRpbmdEZWZlcikgPT0gMCk7CiAgICAg
ICAgIG1fdHJhcEJpdHMuZXhjaGFuZ2VPcihldmVudCk7CiAgICAgfQogCkBAIC0yNjYsNCArMjgz
LDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpZ25hbFNlbmRlcjsKIH07CiAKK2Ns
YXNzIERlZmVyVHJhcHMgeworcHVibGljOgorICAgIERlZmVyVHJhcHMoVk0mKTsKKyAgICB+RGVm
ZXJUcmFwcygpOworcHJpdmF0ZToKKyAgICBWTVRyYXBzJiBtX3RyYXBzOworICAgIGJvb2wgbV9p
c0FjdGl2ZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw0ICs1MCwxOCBAQCBpbmxpbmUgdm9pZCBWTVRyYXBzOjp1bmRvRGVmZXJU
ZXJtaW5hdGlvCiAgICAgICAgIHVuZG9EZWZlclRlcm1pbmF0aW9uU2xvdyhkZWZlckFjdGlvbik7
CiB9CiAKK0FMV0FZU19JTkxJTkUgRGVmZXJUcmFwczo6RGVmZXJUcmFwcyhWTSYgdm0pCisgICAg
OiBtX3RyYXBzKHZtLnRyYXBzKCkpCisgICAgLCBtX2lzQWN0aXZlKCFtX3RyYXBzLmhhc1RyYXBC
aXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxpbmcpKQoreworICAgIGlmIChtX2lzQWN0aXZlKQor
ICAgICAgICBtX3RyYXBzLnNldFRyYXBCaXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxpbmcpOwor
fQorCitBTFdBWVNfSU5MSU5FIERlZmVyVHJhcHM6On5EZWZlclRyYXBzKCkKK3sKKyAgICBpZiAo
bV9pc0FjdGl2ZSkKKyAgICAgICAgbV90cmFwcy5jbGVhclRyYXBCaXQoVk1UcmFwczo6RGVmZXJU
cmFwSGFuZGxpbmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453474</attachid>
            <date>2022-02-28 21:46:07 -0800</date>
            <delta_ts>2022-02-28 21:48:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25459</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDIyLTAyLTI4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6Om5lZWRIYW5kbGluZyBjb25zdCk6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6Omhhc1RyYXBCaXQpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpzZXRUcmFwQml0KToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRlZmVy
VHJhcHM6OkRlZmVyVHJhcHMpOgorICAgICAgICAoSlNDOjpEZWZlclRyYXBzOjp+RGVmZXJUcmFw
cyk6CisKIDIwMjItMDItMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBBZGQgb3B0aW9ucyB0byBzaG93IGVhY2gg
YXJlYSdzIENTUyBgb3JkZXJgIGFuZC9vciBET00gaW5kZXggaW4gdGhlIHBhcmVudCBmbGV4IGNv
bnRhaW5lcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29t
cGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faXNKZXR0aXNvbmVk
KGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMp
CiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpAQCAtMzMwLDYgKzMz
MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBt
X2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAg
LTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9pc0pldHRpc29uZWQgPSB0cnVlOwor
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAvLyBQbGFjYXRlIEdDQyBmb3IgdXNl
IGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBsaWtlIHRoaXMpLgogICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24s
ICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwg
PSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIzNTYsNiArMjM2MCw4IEBAIHByaXZh
dGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0pldHRpc29uZWQpOworCiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICJOb3RpY2lu
ZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIs
ICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYgKzc3NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7
CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAgICBib29sIG1fdmlzaXRDaGlsZHJl
blNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGFueSBjb2Rl
IHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0s
IGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0cikKQEAgLTE4Nyw2ICsxOTIsOSBA
QCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsCiAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGlmIHdlJ3Jl
IGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKICNpZiBFTkFCTEUo
SklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2ICszNzEzLDggQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxw
dHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24g
dGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8gaXQuCisKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVsc2UgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjYsMjIgKzkyNiwyNSBAQCBmYWlsZWRK
U09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAKLSAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sq
IHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb248UHJv
Z3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2Rl
QmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRS
ZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpz
Q2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChj
b2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1l
dGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAg
ICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IHByb2dyYW0tPmdlbmVy
YXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgRGVmZXJUcmFw
cyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3Jl
IGFib3V0IHRvIHJ1biBpdC4KKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAg
ICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFByb2dyYW1FeGVjdXRhYmxlPih2bSwg
bnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFt
Q29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
ICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3Ig
J3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC05ODgsMjMgKzk5MSwyNiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGlzSlNDYWxsKSB7Ci0gICAgICAgIC8vIENvbXBpbGUg
dGhlIGNhbGxlZToKLSAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwsIG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBpZiAoaXNKU0NhbGwpCi0gICAgICAgICAgICBqaXRDb2RlID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwotICAgICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwg
dGhpc1ZhbHVlLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgRGVmZXJUcmFwcyBk
ZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFi
b3V0IHRvIHJ1biBpdC4KKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRy
OworICAgICAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNh
bGxlZToKKyAgICAgICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdDb2RlQmxvY2spOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Cisg
ICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ2FsbCkKKyAgICAgICAgICAgICAgICBq
aXRDb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEo
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTEwNjQsMjMg
KzEwNzAsMjcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBuZXdDb2Rl
QmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ29uc3RydWN0KSB7Ci0gICAgICAgIC8vIENv
bXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwganNDYXN0
PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0LCBuZXdD
b2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwotCi0gICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2spOwotICAgICAgICBuZXdDb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAg
ICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBw
ZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaWYg
KGlzSlNDb25zdHJ1Y3QpCi0gICAgICAgICAgICBqaXRDb2RlID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKLSAgICAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIERlZmVy
VHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3
ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0
LCBuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7CisgICAg
ICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhl
Y3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICAgICAgICAg
IGppdENvZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChu
ZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIG5ld1RhcmdldCwgYXJnc0Nv
dW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dDsKQEAgLTEyNzIsMjIgKzEyODIsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIGVsc2UKICAgICAgICAgY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICAvLyBSZWxvYWQgQ29kZUJsb2NrLiBJdCBp
cyBwb3NzaWJsZSB0aGF0IHdlIHJlcGxhY2VkIENvZGVCbG9jayB3aGlsZSBzZXR0aW5nIHVwIHRo
ZSBlbnZpcm9ubWVudC4KLSAgICB7Ci0gICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsK
LSAgICAgICAgZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbjxFdmFsRXhlY3V0YWJsZT4odm0sIG51
bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxvY2sqPih0
ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOwotICAgICAgICBwcm90
b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIHRoaXNWYWx1
ZSwgMSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisgICAgICAgIC8vIFJl
bG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwbGFjZWQgQ29kZUJsb2Nr
IHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAgICAgICBldmFsLT5wcmVwYXJlRm9y
RXhlY3V0aW9uPEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxs
LCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAg
ICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Cisg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAg
eworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFw
cGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAg
ICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCB0aGlzVmFsdWUs
IDEpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEz
MjksMTcgKzEzNDIsOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3Jh
CiAKICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihBYnN0cmFjdE1vZHVsZVJlY29yZDo6QXJndW1lbnQ6Ok51bWJlck9mQXJndW1lbnRz
KTsKICAgICBKU0NhbGxlZSogY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwotICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0
ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IG51bWJlck9mQXJndW1lbnRzICsgMSk7Ci0gICAgfQotCiAg
ICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICBKU1ZhbHVlIGFyZ3NbbnVtYmVyT2ZBcmd1bWVudHNdID0gewogICAgICAg
ICByZWNvcmQsCkBAIC0xMzUwLDE2ICsxMzU0LDMxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVNb2R1bGVQcm9ncmEKICAgICB9OwogCiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGUoKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2Fu
J3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBz
Y29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1bWVudHMgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIC8vIFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMg
YHVuZGVmaW5lZGAuCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1oYXN0aGlzYmlu
ZGluZwotICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKLSAg
ICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVl
LCBqc1VuZGVmaW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOwotICAgIH0KIAot
ICAgIHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5z
ZXQodm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6
U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZSgpOworCisgICAgICAgICAgICAvLyBUaGUgfHRoaXN8IG9mIHRoZSBtb2R1
bGUgaXMgYWx3YXlzIGB1bmRlZmluZWRgLgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9ubWVudC1y
ZWNvcmRzLWhhc3RoaXNiaW5kaW5nCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29y
ZHMtZ2V0dGhpc2JpbmRpbmcKKyAgICAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGNhbGxlZSwganNVbmRlZmluZWQoKSwgbnVtYmVyT2ZBcmd1bWVu
dHMgKyAxLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY29yZC0+aW50ZXJuYWxGaWVs
ZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5zZXQodm0sIHJlY29yZCwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAg
ICB9CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NiwyMSArODcsMjQgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdQogICAgICAgICAgICAgcmV0dXJuIHRocm93U2NvcGUuZXhj
ZXB0aW9uKCk7CiAgICAgfQogCi0gICAgLy8gUmVsb2FkIENvZGVCbG9jayBzaW5jZSBHQyBjYW4g
cmVwbGFjZSBDb2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJsZS4KLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKLSAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNj
b3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1
cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUu
Ci0gICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb2RlQmxvY2sp
OworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNv
biB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorICAgICAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgY2xvc3VyZS5mdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgY2xvc3VyZS5mdW5jdGlvbiwgY2xvc3VyZS5zY29wZSwgQ29kZUZvckNhbGwsIGNvZGVCbG9j
ayk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVy
bih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAg
ICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8g
R0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAg
ICAgICAgICBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgorICAgICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKLSAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xvc3Vy
ZS5wcm90b0NhbGxGcmFtZSk7CiAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xv
c3VyZS5wcm90b0NhbGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CiAKQEAgLTE5MDQsOCArMTkwNSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGwKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsK
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwog
CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhp
cyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTE5MTksNyArMTkyMSw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGwKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5w
cmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUs
IGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJ
T04oZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgaWYgKGdlbmVyaWND
b2RlQmxvY2spIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OmlzRXhlY3V0YWJsZVNjcmlwdChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAg
ICAgICBnZW5lcmljQ29kZUJsb2NrLT5tX2lzSmV0dGlzb25lZCA9IGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiSW5zdGFsbGluZyAi
LCAqZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNiAr
MzkwLDcgQEAgdm9pZCBWTVRyYXBzOjpoYW5kbGVUcmFwcyhWTVRyYXBzOjpCaXRGaQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nOgorICAg
ICAgICBjYXNlIERlZmVyVHJhcEhhbmRsaW5nOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNDAyLDcgKzQw
Myw3IEBAIGF1dG8gVk1UcmFwczo6dGFrZVRvcFByaW9yaXR5VHJhcChWTVRyYXAKIAogICAgIC8v
IE5vdGU6IHRoZSBFdmVudEJpdFNoaWZ0IGlzIGFscmVhZHkgc29ydGVkIGluIGhpZ2hlc3QgdG8g
bG93ZXN0IHByaW9yaXR5CiAgICAgLy8gaS5lLiBhIGJpdCBzaGlmdCBvZiAwIGlzIGhpZ2hlc3Qg
cHJpb3JpdHksIGV0Yy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE51bWJlck9mRXZlbnRzOyAr
K2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7ICsraSkg
ewogICAgICAgICBFdmVudCBldmVudCA9IHN0YXRpY19jYXN0PEV2ZW50PigxIDw8IGkpOwogICAg
ICAgICBpZiAoaGFzVHJhcEJpdChldmVudCwgbWFzaykpIHsKICAgICAgICAgICAgIGNsZWFyVHJh
cEJpdChldmVudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5o
CShyZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRy
YXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxNSArMTQ5LDIxIEBAIHB1YmxpYzoKICAgICB2
KE5lZWRUZXJtaW5hdGlvbikgXAogICAgIHYoTmVlZFdhdGNoZG9nQ2hlY2spIFwKICAgICB2KE5l
ZWREZWJ1Z2dlckJyZWFrKSBcCi0gICAgdihOZWVkRXhjZXB0aW9uSGFuZGxpbmcpCisgICAgdihO
ZWVkRXhjZXB0aW9uSGFuZGxpbmcpIFwKKyAgICB2KERlZmVyVHJhcEhhbmRsaW5nKSAvLyBNdXN0
IGNvbWUgbGFzdCBpbiB0aGUgZW51bS4gVGhpcyBkZWZlcnMgYWxsIGV2ZW50cyBleGNlcHQgTmVl
ZEV4Y2VwdGlvbkhhbmRsaW5nLgogCiAjZGVmaW5lIERFQ0xBUkVfVk1UUkFQU19FVkVOVF9CSVRf
U0hJRlQoZXZlbnRfXykgIGV2ZW50X18jI0JpdFNoaWZ0LAogICAgIGVudW0gRXZlbnRCaXRTaGlm
dCB7CiAgICAgICAgIEZPUl9FQUNIX1ZNVFJBUFNfRVZFTlRTKERFQ0xBUkVfVk1UUkFQU19FVkVO
VF9CSVRfU0hJRlQpCi0gICAgICAgIE51bWJlck9mRXZlbnRzLCAvLyBUaGlzIGVudHJ5IG11c3Qg
YmUgbGFzdCBpbiB0aGlzIGxpc3QuCiAgICAgfTsKICN1bmRlZiBERUNMQVJFX1ZNVFJBUFNfRVZF
TlRfQklUX1NISUZUCiAKKworI2RlZmluZSBDT1VOVF9FVkVOVChldmVudCkgKyAxCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOdW1iZXJPZkV2ZW50cyA9IEZPUl9FQUNIX1ZNVFJBUFNf
RVZFTlRTKENPVU5UX0VWRU5UKSAtIDE7IC8vIERvbid0IGNvdW50IERlZmVyVHJhcEhhbmRsaW5n
LgorICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdE
ZWZlciA9IEZPUl9FQUNIX1ZNVFJBUFNfRVZFTlRTKENPVU5UX0VWRU5UKTsKKyN1bmRlZiBDT1VO
VF9FVkVOVAorCiAgICAgdXNpbmcgRXZlbnQgPSBCaXRGaWVsZDsKIAogI2RlZmluZSBERUNMQVJF
X1ZNVFJBUFNfRVZFTlQoZXZlbnRfXykgXApAQCAtMTcwLDggKzE3Niw5IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgRXZlbnQgTm9FdmVudCA9IDA7CiAKLSAgICBzdGF0aWNfYXNz
ZXJ0KE51bWJlck9mRXZlbnRzIDw9IGJpdHNJbkJpdEZpZWxkKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KE51bWJlck9mRXZlbnRzSW5jbHVkaW5nRGVmZXIgPD0gYml0c0luQml0RmllbGQpOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQWxsRXZlbnRzID0gKDF1bGwgPDwgTnVtYmVyT2ZFdmVu
dHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIEFsbEV2ZW50c0luY2x1ZGlu
Z0RlZmVyID0gKDF1bGwgPDwgTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlcikgLSAxOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQXN5bmNFdmVudHMgPSBBbGxFdmVudHMgJiB+TmVl
ZEV4Y2VwdGlvbkhhbmRsaW5nOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTm9uRGVi
dWdnZXJFdmVudHMgPSBBbGxFdmVudHMgJiB+TmVlZERlYnVnZ2VyQnJlYWs7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBCaXRGaWVsZCBOb25EZWJ1Z2dlckFzeW5jRXZlbnRzID0gQXN5bmNFdmVudHMg
JiB+TmVlZERlYnVnZ2VyQnJlYWs7CkBAIC0xODgsNyArMTk1LDEzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgd2lsbERlc3Ryb3lWTSgpOwogCi0gICAgYm9vbCBuZWVkSGFuZGxpbmcoQml0RmllbGQg
bWFzaykgY29uc3QgeyByZXR1cm4gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgbWFzazsgfQor
ICAgIGJvb2wgbmVlZEhhbmRsaW5nKEJpdEZpZWxkIG1hc2spIGNvbnN0CisgICAgeworICAgICAg
ICBhdXRvIG1hc2tlZFZhbHVlID0gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgKG1hc2sgfCBE
ZWZlclRyYXBIYW5kbGluZyk7CisgICAgICAgIGlmIChVTkxJS0VMWShtYXNrZWRWYWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gKG1hc2tlZFZhbHVlICYgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nKSB8
fCAhKG1hc2tlZFZhbHVlICYgRGVmZXJUcmFwSGFuZGxpbmcpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogICAgIHZvaWQqIHRyYXBCaXRzQWRkcmVzcygpIHsgcmV0dXJuICZtX3RyYXBC
aXRzOyB9CiAKICAgICBlbnVtIGNsYXNzIERlZmVyQWN0aW9uIHsKQEAgLTIwNiw2ICsyMTksMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKCk7CiAg
ICAgfQogCisgICAgYm9vbCBoYXNUcmFwQml0KEV2ZW50IGV2ZW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdHJhcEJpdHMubG9hZFJlbGF4ZWQoKSAmIGV2ZW50OworICAgIH0KICAgICBib29s
IGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQsIEJpdEZpZWxkIG1hc2spCiAgICAgewogICAgICAgICBC
aXRGaWVsZCBtYXNrZWRCaXRzID0gZXZlbnQgJiBtYXNrOwpAQCAtMjE0LDcgKzIzMSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyVHJhcEJpdChFdmVudCBldmVudCkgeyBtX3RyYXBCaXRzLmV4
Y2hhbmdlQW5kKH5ldmVudCk7IH0KICAgICB2b2lkIHNldFRyYXBCaXQoRXZlbnQgZXZlbnQpCiAg
ICAgewotICAgICAgICBBU1NFUlQoKGV2ZW50ICYgfkFsbEV2ZW50cykgPT0gMCk7CisgICAgICAg
IEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzSW5jbHVkaW5nRGVmZXIpID09IDApOwogICAgICAg
ICBtX3RyYXBCaXRzLmV4Y2hhbmdlT3IoZXZlbnQpOwogICAgIH0KIApAQCAtMjY2LDQgKzI4Mywx
MyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTaWduYWxTZW5kZXI7CiB9OwogCitjbGFz
cyBEZWZlclRyYXBzIHsKK3B1YmxpYzoKKyAgICBEZWZlclRyYXBzKFZNJik7CisgICAgfkRlZmVy
VHJhcHMoKTsKK3ByaXZhdGU6CisgICAgVk1UcmFwcyYgbV90cmFwczsKKyAgICBib29sIG1faXNB
Y3RpdmU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGluZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNCArNTAsMTggQEAgaW5saW5lIHZvaWQgVk1UcmFwczo6dW5kb0RlZmVyVGVy
bWluYXRpbwogICAgICAgICB1bmRvRGVmZXJUZXJtaW5hdGlvblNsb3coZGVmZXJBY3Rpb24pOwog
fQogCitBTFdBWVNfSU5MSU5FIERlZmVyVHJhcHM6OkRlZmVyVHJhcHMoVk0mIHZtKQorICAgIDog
bV90cmFwcyh2bS50cmFwcygpKQorICAgICwgbV9pc0FjdGl2ZSghbV90cmFwcy5oYXNUcmFwQml0
KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKSkKK3sKKyAgICBpZiAobV9pc0FjdGl2ZSkKKyAg
ICAgICAgbV90cmFwcy5zZXRUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKTsKK30K
KworQUxXQVlTX0lOTElORSBEZWZlclRyYXBzOjp+RGVmZXJUcmFwcygpCit7CisgICAgaWYgKG1f
aXNBY3RpdmUpCisgICAgICAgIG1fdHJhcHMuY2xlYXJUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJh
cEhhbmRsaW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453475</attachid>
            <date>2022-02-28 21:48:08 -0800</date>
            <delta_ts>2022-03-01 10:20:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25771</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDIyLTAyLTI4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6Om5lZWRIYW5kbGluZyBjb25zdCk6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6Omhhc1RyYXBCaXQpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpzZXRUcmFwQml0KToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRlZmVy
VHJhcHM6OkRlZmVyVHJhcHMpOgorICAgICAgICAoSlNDOjpEZWZlclRyYXBzOjp+RGVmZXJUcmFw
cyk6CisKIDIwMjItMDItMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBBZGQgb3B0aW9ucyB0byBzaG93IGVhY2gg
YXJlYSdzIENTUyBgb3JkZXJgIGFuZC9vciBET00gaW5kZXggaW4gdGhlIHBhcmVudCBmbGV4IGNv
bnRhaW5lcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29t
cGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faXNKZXR0aXNvbmVk
KGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMp
CiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQpAQCAtMzMwLDYgKzMz
MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBt
X2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAg
LTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9pc0pldHRpc29uZWQgPSB0cnVlOwor
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAvLyBQbGFjYXRlIEdDQyBmb3IgdXNl
IGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBsaWtlIHRoaXMpLgogICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24s
ICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwg
PSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIzNTYsNiArMjM2MCw4IEBAIHByaXZh
dGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0pldHRpc29uZWQpOworCiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICJOb3RpY2lu
ZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIs
ICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYgKzc3NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7
CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAgICBib29sIG1fdmlzaXRDaGlsZHJl
blNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCShyZXZpc2lvbiAyOTA1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGFueSBjb2Rl
IHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0s
IGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0cikKQEAgLTE4Nyw2ICsxOTIsOSBA
QCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsCiAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKworICAg
IERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIGlmIHdlJ3Jl
IGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKICNpZiBFTkFCTEUo
SklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2ICszNzEzLDggQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxw
dHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24g
dGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8gaXQuCisKICAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVsc2UgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjYsMjIgKzkyNiwyNSBAQCBmYWlsZWRK
U09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAKLSAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sq
IHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb248UHJv
Z3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2Rl
QmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRS
ZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpz
Q2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChj
b2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1l
dGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAg
ICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IHByb2dyYW0tPmdlbmVy
YXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgRGVmZXJUcmFw
cyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3Jl
IGFib3V0IHRvIHJ1biBpdC4KKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAg
ICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFByb2dyYW1FeGVjdXRhYmxlPih2bSwg
bnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFt
Q29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
ICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3Ig
J3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC05ODgsMjMgKzk5MSwyNiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGlzSlNDYWxsKSB7Ci0gICAgICAgIC8vIENvbXBpbGUg
dGhlIGNhbGxlZToKLSAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwsIG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Ci0gICAgICAg
IG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBpZiAoaXNKU0NhbGwpCi0gICAgICAgICAgICBqaXRDb2RlID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwotICAgICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwg
dGhpc1ZhbHVlLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgRGVmZXJUcmFwcyBk
ZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFi
b3V0IHRvIHJ1biBpdC4KKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRy
OworICAgICAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNh
bGxlZToKKyAgICAgICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdDb2RlQmxvY2spOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7Cisg
ICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ2FsbCkKKyAgICAgICAgICAgICAgICBq
aXRDb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEo
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTEwNjQsMjMg
KzEwNzAsMjcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBuZXdDb2Rl
QmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ29uc3RydWN0KSB7Ci0gICAgICAgIC8vIENv
bXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwganNDYXN0
PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0LCBuZXdD
b2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwotCi0gICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2spOwotICAgICAgICBuZXdDb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAg
ICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBw
ZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaWYg
KGlzSlNDb25zdHJ1Y3QpCi0gICAgICAgICAgICBqaXRDb2RlID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKLSAgICAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIERlZmVy
VHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3
ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0
LCBuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jayk7CisgICAg
ICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhl
Y3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICAgICAgICAg
IGppdENvZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChu
ZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIG5ld1RhcmdldCwgYXJnc0Nv
dW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dDsKQEAgLTEyNzIsMjIgKzEyODIsMjUgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIGVsc2UKICAgICAgICAgY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICAvLyBSZWxvYWQgQ29kZUJsb2NrLiBJdCBp
cyBwb3NzaWJsZSB0aGF0IHdlIHJlcGxhY2VkIENvZGVCbG9jayB3aGlsZSBzZXR0aW5nIHVwIHRo
ZSBlbnZpcm9ubWVudC4KLSAgICB7Ci0gICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsK
LSAgICAgICAgZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbjxFdmFsRXhlY3V0YWJsZT4odm0sIG51
bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxvY2sqPih0
ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICB9Ci0K
ICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJl
IG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgot
ICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOwotICAgICAgICBwcm90
b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIHRoaXNWYWx1
ZSwgMSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisgICAgICAgIC8vIFJl
bG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwbGFjZWQgQ29kZUJsb2Nr
IHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAgICAgICBldmFsLT5wcmVwYXJlRm9y
RXhlY3V0aW9uPEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxs
LCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAg
ICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Cisg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAg
eworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFw
cGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAg
ICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCB0aGlzVmFsdWUs
IDEpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEz
MjksMTcgKzEzNDIsOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3Jh
CiAKICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihBYnN0cmFjdE1vZHVsZVJlY29yZDo6QXJndW1lbnQ6Ok51bWJlck9mQXJndW1lbnRz
KTsKICAgICBKU0NhbGxlZSogY2FsbGVlID0gSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwotICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0
ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IG51bWJlck9mQXJndW1lbnRzICsgMSk7Ci0gICAgfQotCiAg
ICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICBKU1ZhbHVlIGFyZ3NbbnVtYmVyT2ZBcmd1bWVudHNdID0gewogICAgICAg
ICByZWNvcmQsCkBAIC0xMzUwLDE2ICsxMzU0LDMxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVNb2R1bGVQcm9ncmEKICAgICB9OwogCiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGUoKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2Fu
J3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBz
Y29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1bWVudHMgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIC8vIFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMg
YHVuZGVmaW5lZGAuCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1oYXN0aGlzYmlu
ZGluZwotICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKLSAg
ICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVl
LCBqc1VuZGVmaW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOwotICAgIH0KIAot
ICAgIHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5z
ZXQodm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6
U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJs
b2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZSgpOworCisgICAgICAgICAgICAvLyBUaGUgfHRoaXN8IG9mIHRoZSBtb2R1
bGUgaXMgYWx3YXlzIGB1bmRlZmluZWRgLgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9ubWVudC1y
ZWNvcmRzLWhhc3RoaXNiaW5kaW5nCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29y
ZHMtZ2V0dGhpc2JpbmRpbmcKKyAgICAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGNhbGxlZSwganNVbmRlZmluZWQoKSwgbnVtYmVyT2ZBcmd1bWVu
dHMgKyAxLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY29yZC0+aW50ZXJuYWxGaWVs
ZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5zZXQodm0sIHJlY29yZCwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAg
ICB9CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NiwyMSArODcsMjQgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdQogICAgICAgICAgICAgcmV0dXJuIHRocm93U2NvcGUuZXhj
ZXB0aW9uKCk7CiAgICAgfQogCi0gICAgLy8gUmVsb2FkIENvZGVCbG9jayBzaW5jZSBHQyBjYW4g
cmVwbGFjZSBDb2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJsZS4KLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKLSAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNj
b3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1
cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUu
Ci0gICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb2RlQmxvY2sp
OworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNv
biB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorICAgICAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgY2xvc3VyZS5mdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgY2xvc3VyZS5mdW5jdGlvbiwgY2xvc3VyZS5zY29wZSwgQ29kZUZvckNhbGwsIGNvZGVCbG9j
ayk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVy
bih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAg
ICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8g
R0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAg
ICAgICAgICBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgorICAgICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKLSAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xvc3Vy
ZS5wcm90b0NhbGxGcmFtZSk7CiAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgY2xv
c3VyZS5wcm90b0NhbGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyOTA1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CiAKQEAgLTE5MDQsOCArMTkwNSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGwKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsK
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwog
CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhp
cyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTE5MTksNyArMTkyMSw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGwKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5w
cmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUs
IGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJ
T04oZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgaWYgKGdlbmVyaWND
b2RlQmxvY2spIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY0NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OmlzRXhlY3V0YWJsZVNjcmlwdChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAg
ICAgICBnZW5lcmljQ29kZUJsb2NrLT5tX2lzSmV0dGlzb25lZCA9IGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiSW5zdGFsbGluZyAi
LCAqZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI5MDUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiAr
MzQ5LDcgQEAgdm9pZCBWTVRyYXBzOjpoYW5kbGVUcmFwcyhWTVRyYXBzOjpCaXRGaQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBBU1NFUlQob25seUNvbnRh
aW5zQXN5bmNFdmVudHMobWFzaykpOwogICAgIEFTU0VSVChuZWVkSGFuZGxpbmcobWFzaykpOwor
ICAgIEFTU0VSVCghaGFzVHJhcEJpdChEZWZlclRyYXBIYW5kbGluZykpOwogCiAgICAgaWYgKGlz
RGVmZXJyaW5nVGVybWluYXRpb24oKSkKICAgICAgICAgbWFzayAmPSB+TmVlZFRlcm1pbmF0aW9u
OwpAQCAtMzkwLDYgKzM5MSw3IEBAIHZvaWQgVk1UcmFwczo6aGFuZGxlVHJhcHMoVk1UcmFwczo6
Qml0RmkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBjYXNlIE5lZWRFeGNlcHRpb25I
YW5kbGluZzoKKyAgICAgICAgY2FzZSBEZWZlclRyYXBIYW5kbGluZzoKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0K
QEAgLTQwMiw3ICs0MDQsNyBAQCBhdXRvIFZNVHJhcHM6OnRha2VUb3BQcmlvcml0eVRyYXAoVk1U
cmFwCiAKICAgICAvLyBOb3RlOiB0aGUgRXZlbnRCaXRTaGlmdCBpcyBhbHJlYWR5IHNvcnRlZCBp
biBoaWdoZXN0IHRvIGxvd2VzdCBwcmlvcml0eQogICAgIC8vIGkuZS4gYSBiaXQgc2hpZnQgb2Yg
MCBpcyBoaWdoZXN0IHByaW9yaXR5LCBldGMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1i
ZXJPZkV2ZW50czsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9m
RXZlbnRzOyArK2kpIHsKICAgICAgICAgRXZlbnQgZXZlbnQgPSBzdGF0aWNfY2FzdDxFdmVudD4o
MSA8PCBpKTsKICAgICAgICAgaWYgKGhhc1RyYXBCaXQoZXZlbnQsIG1hc2spKSB7CiAgICAgICAg
ICAgICBjbGVhclRyYXBCaXQoZXZlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTUgKzE0OSwyMSBAQCBw
dWJsaWM6CiAgICAgdihOZWVkVGVybWluYXRpb24pIFwKICAgICB2KE5lZWRXYXRjaGRvZ0NoZWNr
KSBcCiAgICAgdihOZWVkRGVidWdnZXJCcmVhaykgXAotICAgIHYoTmVlZEV4Y2VwdGlvbkhhbmRs
aW5nKQorICAgIHYoTmVlZEV4Y2VwdGlvbkhhbmRsaW5nKSBcCisgICAgdihEZWZlclRyYXBIYW5k
bGluZykgLy8gTXVzdCBjb21lIGxhc3QgaW4gdGhlIGVudW0uIFRoaXMgZGVmZXJzIGFsbCBldmVu
dHMgZXhjZXB0IE5lZWRFeGNlcHRpb25IYW5kbGluZy4KIAogI2RlZmluZSBERUNMQVJFX1ZNVFJB
UFNfRVZFTlRfQklUX1NISUZUKGV2ZW50X18pICBldmVudF9fIyNCaXRTaGlmdCwKICAgICBlbnVt
IEV2ZW50Qml0U2hpZnQgewogICAgICAgICBGT1JfRUFDSF9WTVRSQVBTX0VWRU5UUyhERUNMQVJF
X1ZNVFJBUFNfRVZFTlRfQklUX1NISUZUKQotICAgICAgICBOdW1iZXJPZkV2ZW50cywgLy8gVGhp
cyBlbnRyeSBtdXN0IGJlIGxhc3QgaW4gdGhpcyBsaXN0LgogICAgIH07CiAjdW5kZWYgREVDTEFS
RV9WTVRSQVBTX0VWRU5UX0JJVF9TSElGVAogCisKKyNkZWZpbmUgQ09VTlRfRVZFTlQoZXZlbnQp
ICsgMQorICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTnVtYmVyT2ZFdmVudHMgPSBGT1Jf
RUFDSF9WTVRSQVBTX0VWRU5UUyhDT1VOVF9FVkVOVCkgLSAxOyAvLyBEb24ndCBjb3VudCBEZWZl
clRyYXBIYW5kbGluZy4KKyAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIE51bWJlck9mRXZl
bnRzSW5jbHVkaW5nRGVmZXIgPSBGT1JfRUFDSF9WTVRSQVBTX0VWRU5UUyhDT1VOVF9FVkVOVCk7
CisjdW5kZWYgQ09VTlRfRVZFTlQKKwogICAgIHVzaW5nIEV2ZW50ID0gQml0RmllbGQ7CiAKICNk
ZWZpbmUgREVDTEFSRV9WTVRSQVBTX0VWRU5UKGV2ZW50X18pIFwKQEAgLTE3MCw4ICsxNzYsOSBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIEV2ZW50IE5vRXZlbnQgPSAwOwogCi0g
ICAgc3RhdGljX2Fzc2VydChOdW1iZXJPZkV2ZW50cyA8PSBiaXRzSW5CaXRGaWVsZCk7CisgICAg
c3RhdGljX2Fzc2VydChOdW1iZXJPZkV2ZW50c0luY2x1ZGluZ0RlZmVyIDw9IGJpdHNJbkJpdEZp
ZWxkKTsKICAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIEFsbEV2ZW50cyA9ICgxdWxsIDw8
IE51bWJlck9mRXZlbnRzKSAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBBbGxF
dmVudHNJbmNsdWRpbmdEZWZlciA9ICgxdWxsIDw8IE51bWJlck9mRXZlbnRzSW5jbHVkaW5nRGVm
ZXIpIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIEFzeW5jRXZlbnRzID0gQWxs
RXZlbnRzICYgfk5lZWRFeGNlcHRpb25IYW5kbGluZzsKICAgICBzdGF0aWMgY29uc3RleHByIEJp
dEZpZWxkIE5vbkRlYnVnZ2VyRXZlbnRzID0gQWxsRXZlbnRzICYgfk5lZWREZWJ1Z2dlckJyZWFr
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTm9uRGVidWdnZXJBc3luY0V2ZW50cyA9
IEFzeW5jRXZlbnRzICYgfk5lZWREZWJ1Z2dlckJyZWFrOwpAQCAtMTg4LDcgKzE5NSwxMyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHdpbGxEZXN0cm95Vk0oKTsKIAotICAgIGJvb2wgbmVlZEhhbmRs
aW5nKEJpdEZpZWxkIG1hc2spIGNvbnN0IHsgcmV0dXJuIG1fdHJhcEJpdHMubG9hZFJlbGF4ZWQo
KSAmIG1hc2s7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmVlZEhhbmRsaW5nKEJpdEZpZWxk
IG1hc2spIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIG1hc2tlZFZhbHVlID0gbV90cmFwQml0
cy5sb2FkUmVsYXhlZCgpICYgKG1hc2sgfCBEZWZlclRyYXBIYW5kbGluZyk7CisgICAgICAgIGlm
IChVTkxJS0VMWShtYXNrZWRWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gKG1hc2tlZFZhbHVl
ICYgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nKSB8fCAhKG1hc2tlZFZhbHVlICYgRGVmZXJUcmFwSGFu
ZGxpbmcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHZvaWQqIHRyYXBCaXRz
QWRkcmVzcygpIHsgcmV0dXJuICZtX3RyYXBCaXRzOyB9CiAKICAgICBlbnVtIGNsYXNzIERlZmVy
QWN0aW9uIHsKQEAgLTIwNiw2ICsyMTksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaW52YWxp
ZGF0ZUNvZGVCbG9ja3NPblN0YWNrKCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNUcmFwQml0KEV2
ZW50IGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHJhcEJpdHMubG9hZFJlbGF4ZWQo
KSAmIGV2ZW50OworICAgIH0KICAgICBib29sIGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQsIEJpdEZp
ZWxkIG1hc2spCiAgICAgewogICAgICAgICBCaXRGaWVsZCBtYXNrZWRCaXRzID0gZXZlbnQgJiBt
YXNrOwpAQCAtMjE0LDcgKzIzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyVHJhcEJpdChF
dmVudCBldmVudCkgeyBtX3RyYXBCaXRzLmV4Y2hhbmdlQW5kKH5ldmVudCk7IH0KICAgICB2b2lk
IHNldFRyYXBCaXQoRXZlbnQgZXZlbnQpCiAgICAgewotICAgICAgICBBU1NFUlQoKGV2ZW50ICYg
fkFsbEV2ZW50cykgPT0gMCk7CisgICAgICAgIEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzSW5j
bHVkaW5nRGVmZXIpID09IDApOwogICAgICAgICBtX3RyYXBCaXRzLmV4Y2hhbmdlT3IoZXZlbnQp
OwogICAgIH0KIApAQCAtMjY2LDQgKzI4MywxMyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBTaWduYWxTZW5kZXI7CiB9OwogCitjbGFzcyBEZWZlclRyYXBzIHsKK3B1YmxpYzoKKyAgICBE
ZWZlclRyYXBzKFZNJik7CisgICAgfkRlZmVyVHJhcHMoKTsKK3ByaXZhdGU6CisgICAgVk1UcmFw
cyYgbV90cmFwczsKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGlu
ZXMuaAkocmV2aXNpb24gMjkwNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1UcmFwc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNCArNTAsMTggQEAgaW5saW5l
IHZvaWQgVk1UcmFwczo6dW5kb0RlZmVyVGVybWluYXRpbwogICAgICAgICB1bmRvRGVmZXJUZXJt
aW5hdGlvblNsb3coZGVmZXJBY3Rpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIERlZmVyVHJhcHM6
OkRlZmVyVHJhcHMoVk0mIHZtKQorICAgIDogbV90cmFwcyh2bS50cmFwcygpKQorICAgICwgbV9p
c0FjdGl2ZSghbV90cmFwcy5oYXNUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKSkK
K3sKKyAgICBpZiAobV9pc0FjdGl2ZSkKKyAgICAgICAgbV90cmFwcy5zZXRUcmFwQml0KFZNVHJh
cHM6OkRlZmVyVHJhcEhhbmRsaW5nKTsKK30KKworQUxXQVlTX0lOTElORSBEZWZlclRyYXBzOjp+
RGVmZXJUcmFwcygpCit7CisgICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIG1fdHJhcHMuY2xl
YXJUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453509</attachid>
            <date>2022-03-01 10:20:12 -0800</date>
            <delta_ts>2022-03-01 18:00:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25737</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDIyLTAzLTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
aGFuZGxlVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0YWtlVG9wUHJpb3JpdHlUcmFw
KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
bmVlZEhhbmRsaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFzVHJhcEJpdCk6
CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnNldFRyYXBCaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
Vk1UcmFwc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJUcmFwczo6RGVmZXJUcmFwcyk6
CisgICAgICAgIChKU0M6OkRlZmVyVHJhcHM6On5EZWZlclRyYXBzKToKKwogMjAyMi0wMy0wMSAg
R2V6YSBMb3JlICA8Z2xvcmVAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBQb3J0IEVYVFJB
X0NUSV9USFVOS1MgdG8gYWxsIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzksNiArMjc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAog
ICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExD
b21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkK
KyAgICAsIG1faXNKZXR0aXNvbmVkKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3Ro
ZXIubV9udW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQog
ICAgICwgbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRz
VG9Ta2lwKQpAQCAtMzMwLDYgKzMzMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwg
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdp
dGhGVEwoZmFsc2UpCisgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2Fs
bGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1f
bnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dl
clN0YXRlbWVudChmYWxzZSkKQEAgLTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpq
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9p
c0pldHRpc29uZWQgPSB0cnVlOworCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAv
LyBQbGFjYXRlIEdDQyBmb3IgdXNlIGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBs
aWtlIHRoaXMpLgogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24i
LCAoImR1ZSB0byAiLCByZWFzb24sICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0
aW1pemF0aW9uLCAiLCBkZXRhaWwgPSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIz
NTYsNiArMjM2MCw4IEBAIHByaXZhdGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWlu
Z0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9p
c0pldHRpc29uZWQpOworCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJG
cmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZUNhbGxMaW5rKCksICJOb3RpY2luZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxs
ZXJDb2RlQmxvY2spLCAiIHRvICIsICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYg
Kzc3NCw3IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsK
ICAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVl
bkNvbXBpbGVkV2l0aEZUTCA6IDE7CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAg
ICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5o
CShyZXZpc2lvbiAyOTA2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVw
YXRjaElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVk
ZSAiUmVwYXRjaC5oIgogCisjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBj
YWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFM
V0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gbnVsbHB0cjsKKworICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNh
bid0IGpldHRpc29uIGFueSBjb2RlIHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0g
anNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0
cikKQEAgLTE4Nyw2ICsxOTIsOSBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2
aXJ0dWFsCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29w
ZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24t
PmV4ZWN1dGFibGUoKTsKKworICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNh
bid0IGpldHRpc29uIGlmIHdlJ3JlIGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAg
ICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwNjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxp
bmVzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2
ICszNzEzLDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsg
Ly8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8g
aXQuCisKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwog
ICAgIGVsc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyOTA2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDks
MjIgKzk0OSwyNSBAQCBmYWlsZWRKU09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSkt
PmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlv
bmFyeU9iamVjdCh2bSk7CiAKLSAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAg
ewotICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnBy
ZXBhcmVGb3JFeGVjdXRpb248UHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwg
Q29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0g
ICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9j
ayk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAg
ICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBw
ZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0
Q29kZSA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJh
bWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAx
KTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlz
b24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKyAgICAgICAgUHJvZ3JhbUNv
ZGVCbG9jayogY29kZUJsb2NrOworICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRl
bXBDb2RlQmxvY2s7CisgICAgICAgICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFBy
b2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hl
Y2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVC
bG9jayA9IGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEp
OyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAg
ICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4g
R0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRD
b2RlID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxs
RnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2Jq
LCAxKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC0x
MDExLDIzICsxMDE0LDI2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xv
YmEKICAgICAgICAgICAgIHJldHVybiB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAot
ICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoaXNKU0NhbGwp
IHsKLSAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgICAgICBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiksIHNjb3BlLCBDb2RlRm9yQ2FsbCwg
bmV3Q29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBj
aGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKLQotICAgICAgICBBU1NFUlQo
bmV3Q29kZUJsb2NrKTsKLSAgICAgICAgbmV3Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCA9IGZhbHNlOwotICAgIH0KLQogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dH
QyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29k
ZUJsb2NrIGluIEV4ZWN1dGFibGUuCi0gICAgICAgIGlmIChpc0pTQ2FsbCkKLSAgICAgICAgICAg
IGppdENvZGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsKCk7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUsIGFyZ3NDb3VudCwgYXJncy5kYXRhKCkp
OworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNv
biB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorICAgICAgICBDb2RlQmxvY2sq
IG5ld0NvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmIChpc0pTQ2FsbCkgeworICAgICAg
ICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY2FsbERhdGEuanMuZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
dm0sIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwsIG5l
d0NvZGVCbG9jayk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOworCisgICAgICAgICAgICBB
U1NFUlQobmV3Q29kZUJsb2NrKTsKKyAgICAgICAgICAgIG5ld0NvZGVCbG9jay0+bV9zaG91bGRB
bHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAg
ICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMuIEdDIGNh
biByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgorICAgICAgICAgICAgaWYgKGlzSlND
YWxsKQorICAgICAgICAgICAgICAgIGppdENvZGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7CisgICAgICAgICAgICBwcm90b0NhbGxG
cmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgdGhpc1ZhbHVl
LCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFs
dWUgcmVzdWx0OwpAQCAtMTA4NywyMyArMTA5MywyNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGlzSlNDb25z
dHJ1Y3QpIHsKLSAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgICAgICBjb25zdHJ1
Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlv
bkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKSwgc2NvcGUs
IENvZGVGb3JDb25zdHJ1Y3QsIG5ld0NvZGVCbG9jayk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9j
ayk7Ci0gICAgICAgIG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKLSAgICB9Ci0KICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQcm90b0NhbGxG
cmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dH
QzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBF
eGVjdXRhYmxlLgotICAgICAgICBpZiAoaXNKU0NvbnN0cnVjdCkKLSAgICAgICAgICAgIGppdENv
ZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNvbnN0cnVjdCgpOwotICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3RvciwgbmV3VGFyZ2V0LCBhcmdzQ291bnQsIGFyZ3Mu
ZGF0YSgpKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3Qg
amV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAgICBD
b2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmIChpc0pTQ29uc3Ry
dWN0KSB7CisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CisgICAgICAgICAgICBj
b25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxG
dW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKSwg
c2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QsIG5ld0NvZGVCbG9jayk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgICAgICAgICBBU1NF
UlQobmV3Q29kZUJsb2NrKTsKKyAgICAgICAgICAgIG5ld0NvZGVCbG9jay0+bV9zaG91bGRBbHdh
eXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAg
IERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMuIEdDIGNhbiBy
ZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgorICAgICAgICAgICAgaWYgKGlzSlNDb25z
dHJ1Y3QpCisgICAgICAgICAgICAgICAgaml0Q29kZSA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7CisgICAgICAgICAg
ICBwcm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1
Y3RvciwgbmV3VGFyZ2V0LCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtMTI5NSwyMiArMTMwNSwyNSBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgZWxzZQogICAgICAgICBjYWxs
ZWUgPSBKU0NhbGxlZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIC8v
IFJlbG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwbGFjZWQgQ29kZUJs
b2NrIHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LgotICAgIHsKLSAgICAgICAgQ29k
ZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBldmFsLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29k
ZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2Vk
UmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBq
c0Nhc3Q8RXZhbENvZGVCbG9jayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRl
ciBmb3IgJ3RoaXMnLgotICAgIH0KLQogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dH
QyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29k
ZUJsb2NrIGluIEV4ZWN1dGFibGUuCi0gICAgICAgIGppdENvZGUgPSBldmFsLT5nZW5lcmF0ZWRK
SVRDb2RlKCk7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGNhbGxlZSwgdGhpc1ZhbHVlLCAxKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZlclRy
YXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRv
IHJ1biBpdC4KKyAgICAgICAgLy8gUmVsb2FkIENvZGVCbG9jay4gSXQgaXMgcG9zc2libGUgdGhh
dCB3ZSByZXBsYWNlZCBDb2RlQmxvY2sgd2hpbGUgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQu
CisgICAgICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAg
ICAgICAgIGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb248RXZhbEV4ZWN1dGFibGU+KHZtLCBudWxs
cHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxv
Y2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYgY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycu
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGppdENvZGUgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2Rl
KCk7CisgICAgICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWUsIHRoaXNWYWx1ZSwgMSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBF
eGVjdXRlIHRoZSBjb2RlOgpAQCAtMTM1MiwxNyArMTM2NSw4IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmEKIAogICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFic3RyYWN0TW9kdWxlUmVjb3JkOjpBcmd1
bWVudDo6TnVtYmVyT2ZBcmd1bWVudHMpOwogICAgIEpTQ2FsbGVlKiBjYWxsZWUgPSBKU0NhbGxl
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNjb3BlKTsKLSAgICBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxv
Y2s7Ci0gICAgICAgIGV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxv
Y2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2Fz
dDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1
bWVudHMgKyAxKTsKLSAgICB9Ci0KICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKKwogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIEpTVmFsdWUgYXJnc1tudW1iZXJP
ZkFyZ3VtZW50c10gPSB7CiAgICAgICAgIHJlY29yZCwKQEAgLTEzNzMsMTYgKzEzNzcsMzEgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYQogICAgIH07CiAKICAgICB7
Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMu
IEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgotICAgICAgICBqaXRDb2Rl
ID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICBEZWZlclRyYXBzIGRl
ZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJv
dXQgdG8gcnVuIGl0LgorCisgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9j
azsKKyAgICAgICAgeworICAgICAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOworICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZT4odm0sIG51bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOworCisgICAgICAgICAgICBjb2RlQmxvY2sgPSBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KHRlbXBDb2RlQmxvY2spOworICAgICAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSBudW1i
ZXJPZkFyZ3VtZW50cyArIDEpOworICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIHx0aGlzfCBv
ZiB0aGUgbW9kdWxlIGlzIGFsd2F5cyBgdW5kZWZpbmVkYC4KLSAgICAgICAgLy8gaHR0cDovL3d3
dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9u
bWVudC1yZWNvcmRzLWhhc3RoaXNiaW5kaW5nCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVj
b3Jkcy1nZXR0aGlzYmluZGluZwotICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIGpzVW5kZWZpbmVkKCksIG51bWJlck9mQXJndW1lbnRz
ICsgMSwgYXJncyk7Ci0gICAgfQogCi0gICAgcmVjb3JkLT5pbnRlcm5hbEZpZWxkKEpTTW9kdWxl
UmVjb3JkOjpGaWVsZDo6U3RhdGUpLnNldCh2bSwgcmVjb3JkLCBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQ+KEpTTW9kdWxlUmVjb3JkOjpTdGF0ZTo6RXhlY3V0aW5nKSkpOworICAgICAgICB7Cisg
ICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5z
LiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGpp
dENvZGUgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlKCk7CisKKyAgICAgICAgICAgIC8v
IFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMgYHVuZGVmaW5lZGAuCisgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNz
ZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtaGFzdGhpc2JpbmRpbmcKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1t
b2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1nZXR0aGlzYmluZGluZworICAgICAgICAgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCBqc1VuZGVm
aW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOworICAgICAgICB9CisKKyAgICAg
ICAgcmVjb3JkLT5pbnRlcm5hbEZpZWxkKEpTTW9kdWxlUmVjb3JkOjpGaWVsZDo6U3RhdGUpLnNl
dCh2bSwgcmVjb3JkLCBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KEpTTW9kdWxlUmVjb3JkOjpT
dGF0ZTo6RXhlY3V0aW5nKSkpOworICAgIH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyOTA2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJVbmxp
bmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL1VuYWxpZ25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTg2LDIxICs4Nywy
NCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGNsb3N1cmUuZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNsb3N1
cmUuZnVuY3Rpb24sIGNsb3N1cmUuc2NvcGUsIENvZGVGb3JDYWxsLCBjb2RlQmxvY2spOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBjb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgY2xvc3VyZS5wcm90b0NhbGxGcmFtZS0+
c2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2
bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4g
aXQuCisgICAgICAgIC8vIFJlbG9hZCBDb2RlQmxvY2sgc2luY2UgR0MgY2FuIHJlcGxhY2UgQ29k
ZUJsb2NrIG93bmVkIGJ5IEV4ZWN1dGFibGUuCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
OworICAgICAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNjb3Bl
LCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKKworICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNl
dENvZGVCbG9jayhjb2RlQmxvY2spOworICAgICAgICB9CisgICAgICAgIC8vIEV4ZWN1dGUgdGhl
IGNvZGU6CisgICAgICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIH0KLSAgICAvLyBFeGVj
dXRlIHRoZSBjb2RlOgotICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCktPmV4ZWN1dGUoJnZtLCBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lKTsKIAorICAgIEpTVmFsdWUg
cmVzdWx0ID0gY2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JD
YWxsKCktPmV4ZWN1dGUoJnZtLCBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lKTsKICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAiVk1UcmFw
c0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIApAQCAtMTkwNCw4ICsxOTA1LDkgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
Y2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKKyAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAv
LyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0Lgor
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdh
c20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MDMzOQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQpAQCAtMTkxOSw3ICsx
OTIxLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbAogICAgICAg
ICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRh
YmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwogICAgICAgICBM
TElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIGNvZGVC
bG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICpj
b2RlQmxvY2tTbG90OwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAgICAgICBBcml0
eUNoZWNrTW9kZSBhcml0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyOTA2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk2LDYgKzE5Niw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUo
Vk0mIHYKICAgICBpZiAoZ2VuZXJpY0NvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChnZW5lcmljQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSA9PSB0aGlzKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNFeGVjdXRhYmxlU2NyaXB0KGdlbmVyaWNDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOworCisgICAgICAgIGdlbmVyaWNDb2RlQmxvY2stPm1faXNKZXR0aXNv
bmVkID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICJJbnN0YWxsaW5nICIsICpnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24g
MjkwNjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksNyBAQCB2b2lkIFZNVHJhcHM6OmhhbmRsZVRyYXBz
KFZNVHJhcHM6OkJpdEZpCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEFTU0VSVChvbmx5Q29udGFpbnNBc3luY0V2ZW50cyhtYXNrKSk7CiAgICAgQVNTRVJU
KG5lZWRIYW5kbGluZyhtYXNrKSk7CisgICAgQVNTRVJUKCFoYXNUcmFwQml0KERlZmVyVHJhcEhh
bmRsaW5nKSk7CiAKICAgICBpZiAoaXNEZWZlcnJpbmdUZXJtaW5hdGlvbigpKQogICAgICAgICBt
YXNrICY9IH5OZWVkVGVybWluYXRpb247CkBAIC0zOTAsNiArMzkxLDcgQEAgdm9pZCBWTVRyYXBz
OjpoYW5kbGVUcmFwcyhWTVRyYXBzOjpCaXRGaQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGNhc2UgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nOgorICAgICAgICBjYXNlIERlZmVyVHJhcEhh
bmRsaW5nOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNDAyLDcgKzQwNCw3IEBAIGF1dG8gVk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcChWTVRyYXAKIAogICAgIC8vIE5vdGU6IHRoZSBFdmVudEJpdFNo
aWZ0IGlzIGFscmVhZHkgc29ydGVkIGluIGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5CiAgICAg
Ly8gaS5lLiBhIGJpdCBzaGlmdCBvZiAwIGlzIGhpZ2hlc3QgcHJpb3JpdHksIGV0Yy4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IE51bWJlck9mRXZlbnRzOyArK2kpIHsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7ICsraSkgewogICAgICAgICBFdmVudCBldmVu
dCA9IHN0YXRpY19jYXN0PEV2ZW50PigxIDw8IGkpOwogICAgICAgICBpZiAoaGFzVHJhcEJpdChl
dmVudCwgbWFzaykpIHsKICAgICAgICAgICAgIGNsZWFyVHJhcEJpdChldmVudCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCShyZXZpc2lvbiAyOTA2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0OSwxNSArMTQ5LDIxIEBAIHB1YmxpYzoKICAgICB2KE5lZWRUZXJtaW5hdGlvbikgXAog
ICAgIHYoTmVlZFdhdGNoZG9nQ2hlY2spIFwKICAgICB2KE5lZWREZWJ1Z2dlckJyZWFrKSBcCi0g
ICAgdihOZWVkRXhjZXB0aW9uSGFuZGxpbmcpCisgICAgdihOZWVkRXhjZXB0aW9uSGFuZGxpbmcp
IFwKKyAgICB2KERlZmVyVHJhcEhhbmRsaW5nKSAvLyBNdXN0IGNvbWUgbGFzdCBpbiB0aGUgZW51
bS4gVGhpcyBkZWZlcnMgYWxsIGV2ZW50cyBleGNlcHQgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nLgog
CiAjZGVmaW5lIERFQ0xBUkVfVk1UUkFQU19FVkVOVF9CSVRfU0hJRlQoZXZlbnRfXykgIGV2ZW50
X18jI0JpdFNoaWZ0LAogICAgIGVudW0gRXZlbnRCaXRTaGlmdCB7CiAgICAgICAgIEZPUl9FQUNI
X1ZNVFJBUFNfRVZFTlRTKERFQ0xBUkVfVk1UUkFQU19FVkVOVF9CSVRfU0hJRlQpCi0gICAgICAg
IE51bWJlck9mRXZlbnRzLCAvLyBUaGlzIGVudHJ5IG11c3QgYmUgbGFzdCBpbiB0aGlzIGxpc3Qu
CiAgICAgfTsKICN1bmRlZiBERUNMQVJFX1ZNVFJBUFNfRVZFTlRfQklUX1NISUZUCiAKKworI2Rl
ZmluZSBDT1VOVF9FVkVOVChldmVudCkgKyAxCisgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVs
ZCBOdW1iZXJPZkV2ZW50cyA9IEZPUl9FQUNIX1ZNVFJBUFNfRVZFTlRTKENPVU5UX0VWRU5UKSAt
IDE7IC8vIERvbid0IGNvdW50IERlZmVyVHJhcEhhbmRsaW5nLgorICAgIHN0YXRpYyBjb25zdGV4
cHIgQml0RmllbGQgTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlciA9IEZPUl9FQUNIX1ZNVFJB
UFNfRVZFTlRTKENPVU5UX0VWRU5UKTsKKyN1bmRlZiBDT1VOVF9FVkVOVAorCiAgICAgdXNpbmcg
RXZlbnQgPSBCaXRGaWVsZDsKIAogI2RlZmluZSBERUNMQVJFX1ZNVFJBUFNfRVZFTlQoZXZlbnRf
XykgXApAQCAtMTcwLDggKzE3Niw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
RXZlbnQgTm9FdmVudCA9IDA7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KE51bWJlck9mRXZlbnRzIDw9
IGJpdHNJbkJpdEZpZWxkKTsKKyAgICBzdGF0aWNfYXNzZXJ0KE51bWJlck9mRXZlbnRzSW5jbHVk
aW5nRGVmZXIgPD0gYml0c0luQml0RmllbGQpOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0Rmll
bGQgQWxsRXZlbnRzID0gKDF1bGwgPDwgTnVtYmVyT2ZFdmVudHMpIC0gMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEJpdEZpZWxkIEFsbEV2ZW50c0luY2x1ZGluZ0RlZmVyID0gKDF1bGwgPDwgTnVt
YmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlcikgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0
RmllbGQgQXN5bmNFdmVudHMgPSBBbGxFdmVudHMgJiB+TmVlZEV4Y2VwdGlvbkhhbmRsaW5nOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTm9uRGVidWdnZXJFdmVudHMgPSBBbGxFdmVu
dHMgJiB+TmVlZERlYnVnZ2VyQnJlYWs7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBO
b25EZWJ1Z2dlckFzeW5jRXZlbnRzID0gQXN5bmNFdmVudHMgJiB+TmVlZERlYnVnZ2VyQnJlYWs7
CkBAIC0xODgsNyArMTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTSgp
OwogCi0gICAgYm9vbCBuZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykgY29uc3QgeyByZXR1cm4g
bV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgbWFzazsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBuZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8g
bWFza2VkVmFsdWUgPSBtX3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiAobWFzayB8IERlZmVyVHJh
cEhhbmRsaW5nKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1hc2tlZFZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiAobWFza2VkVmFsdWUgJiBOZWVkRXhjZXB0aW9uSGFuZGxpbmcpIHx8ICEobWFz
a2VkVmFsdWUgJiBEZWZlclRyYXBIYW5kbGluZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgdm9pZCogdHJhcEJpdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fdHJhcEJpdHM7IH0K
IAogICAgIGVudW0gY2xhc3MgRGVmZXJBY3Rpb24gewpAQCAtMjA2LDYgKzIxOSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKTsKICAgICB9CiAK
KyAgICBib29sIGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQpCisgICAgeworICAgICAgICByZXR1cm4g
bV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgZXZlbnQ7CisgICAgfQogICAgIGJvb2wgaGFzVHJh
cEJpdChFdmVudCBldmVudCwgQml0RmllbGQgbWFzaykKICAgICB7CiAgICAgICAgIEJpdEZpZWxk
IG1hc2tlZEJpdHMgPSBldmVudCAmIG1hc2s7CkBAIC0yMTQsNyArMjMxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJUcmFwQml0KEV2ZW50IGV2ZW50KSB7IG1fdHJhcEJpdHMuZXhjaGFuZ2VB
bmQofmV2ZW50KTsgfQogICAgIHZvaWQgc2V0VHJhcEJpdChFdmVudCBldmVudCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzKSA9PSAwKTsKKyAgICAgICAgQVNTRVJU
KChldmVudCAmIH5BbGxFdmVudHNJbmNsdWRpbmdEZWZlcikgPT0gMCk7CiAgICAgICAgIG1fdHJh
cEJpdHMuZXhjaGFuZ2VPcihldmVudCk7CiAgICAgfQogCkBAIC0yNjYsNCArMjgzLDEzIEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpZ25hbFNlbmRlcjsKIH07CiAKK2NsYXNzIERlZmVy
VHJhcHMgeworcHVibGljOgorICAgIERlZmVyVHJhcHMoVk0mKTsKKyAgICB+RGVmZXJUcmFwcygp
OworcHJpdmF0ZToKKyAgICBWTVRyYXBzJiBtX3RyYXBzOworICAgIGJvb2wgbV9pc0FjdGl2ZTsK
K307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCShyZXZpc2lvbiAyOTA2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw0ICs1MCwxOCBAQCBpbmxpbmUgdm9pZCBWTVRyYXBzOjp1bmRvRGVmZXJUZXJtaW5hdGlv
CiAgICAgICAgIHVuZG9EZWZlclRlcm1pbmF0aW9uU2xvdyhkZWZlckFjdGlvbik7CiB9CiAKK0FM
V0FZU19JTkxJTkUgRGVmZXJUcmFwczo6RGVmZXJUcmFwcyhWTSYgdm0pCisgICAgOiBtX3RyYXBz
KHZtLnRyYXBzKCkpCisgICAgLCBtX2lzQWN0aXZlKCFtX3RyYXBzLmhhc1RyYXBCaXQoVk1UcmFw
czo6RGVmZXJUcmFwSGFuZGxpbmcpKQoreworICAgIGlmIChtX2lzQWN0aXZlKQorICAgICAgICBt
X3RyYXBzLnNldFRyYXBCaXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxpbmcpOworfQorCitBTFdB
WVNfSU5MSU5FIERlZmVyVHJhcHM6On5EZWZlclRyYXBzKCkKK3sKKyAgICBpZiAobV9pc0FjdGl2
ZSkKKyAgICAgICAgbV90cmFwcy5jbGVhclRyYXBCaXQoVk1UcmFwczo6RGVmZXJUcmFwSGFuZGxp
bmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="480903"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453557</attachid>
            <date>2022-03-01 18:00:30 -0800</date>
            <delta_ts>2022-03-03 10:33:15 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25565</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDIyLTAzLTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpub3RpY2VJ
bmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3Ry
dWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhl
Y3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAg
ICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFuZGxl
VHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0YWtlVG9wUHJpb3JpdHlUcmFwKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6bmVlZEhh
bmRsaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFzVHJhcEJpdCk6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6OnNldFRyYXBCaXQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFw
c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJUcmFwczo6RGVmZXJUcmFwcyk6CisgICAg
ICAgIChKU0M6OkRlZmVyVHJhcHM6On5EZWZlclRyYXBzKToKKwogMjAyMi0wMy0wMSAgR2V6YSBM
b3JlICA8Z2xvcmVAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBQb3J0IEVYVFJBX0NUSV9U
SFVOS1MgdG8gYWxsIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiAr
Mjc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwg
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxh
dGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAs
IG1faXNKZXR0aXNvbmVkKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9u
dW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwg
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lw
KQpAQCAtMzMwLDYgKzMzMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwo
ZmFsc2UpCisgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9j
YWxzKHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFy
cyh1bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRl
bWVudChmYWxzZSkKQEAgLTIxOTAsNiArMjE5Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNv
bihQcm9maWxlcjo6SmV0dGkKIAogICAgIFZNJiB2bSA9ICptX3ZtOwogCisgICAgbV9pc0pldHRp
c29uZWQgPSB0cnVlOworCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzOyAvLyBQbGFj
YXRlIEdDQyBmb3IgdXNlIGluIENPREVCTE9DS19MT0dfRVZFTlQgIChkb2VzIG5vdCBsaWtlIHRo
aXMpLgogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiamV0dGlzb24iLCAoImR1
ZSB0byAiLCByZWFzb24sICIsIGNvdW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0
aW9uLCAiLCBkZXRhaWwgPSAiLCBwb2ludGVyRHVtcChkZXRhaWwpKSk7CiAKQEAgLTIzNTYsNiAr
MjM2MCw4IEBAIHByaXZhdGU6CiAKIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwo
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0pldHRp
c29uZWQpOworCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxM
aW5rKCksICJOb3RpY2luZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2Rl
QmxvY2spLCAiIHRvICIsICp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDYgKzc3NCw3
IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKICAgICBi
b29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBp
bGVkV2l0aEZUTCA6IDE7CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZCA6IDE7CiAKICAgICBib29s
IG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCShyZXZp
c2lvbiAyOTA2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiUmVw
YXRjaC5oIgogCisjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7
CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUs
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQpAQCAtMTI0LDYgKzEyNiw5IEBAIEFMV0FZU19J
TkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKKworICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIGFueSBjb2RlIHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCisKICAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0ganNUb1dh
c21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CiAgICAgICAgIGlmICghY29kZVB0cikKQEAg
LTE4Nyw2ICsxOTIsOSBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFs
CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFz
RnVuY3Rpb25DZWxsKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hl
Y2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1
dGFibGUoKTsKKworICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIGlmIHdlJ3JlIGdvaW5nIHRvIGNhbGwgdGhpcyBDb2RlQmxvY2suCisKICAgICBpZiAo
VU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwNjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NiArNzgsNyBAQAogI2luY2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgi
CiAKICNpZiBFTkFCTEUoSklUKQogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzcxMiw2ICszNzEz
LDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG51bGxwdHI7CisgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2Ug
Y2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8gaXQuCisK
ICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIGVs
c2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyOTA2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDksMjIgKzk0
OSwyNiBAQCBmYWlsZWRKU09OUDoKICAgICBpZiAoc2NvcGUtPnN0cnVjdHVyZSh2bSktPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNjb3BlLT5mbGF0dGVuRGljdGlvbmFyeU9i
amVjdCh2bSk7CiAKLSAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAg
ICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIHByb2dyYW0tPnByZXBhcmVG
b3JFeGVjdXRpb248UHJvZ3JhbUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZv
ckNhbGwsIHRlbXBDb2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAg
IGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0g
ICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0g
MSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENv
ZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewot
ICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBH
QyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9
IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5p
dChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsKKyAg
ICAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhp
cyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIHJ1biBpdC4KKworICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKiBjb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogdGVtcENv
ZGVCbG9jazsKKyAgICAgICAgICAgIHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb248UHJvZ3Jh
bUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxv
Y2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2Vk
UmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2Nr
ID0ganNDYXN0PFByb2dyYW1Db2RlQmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8v
IDEgcGFyYW1ldGVyIGZvciAndGhpcycuCisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAg
ICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBj
YW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGppdENvZGUg
PSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCk7CisgICAgICAgICAgICBwcm90b0NhbGxGcmFt
ZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxDYWxsZWUsIHRoaXNPYmosIDEp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEwMTEs
MjMgKzEwMTUsMjcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYQog
ICAgICAgICAgICAgcmV0dXJuIHRocm93U2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogCi0gICAg
Q29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ2FsbCkgewot
ICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZt
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdD
b2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNr
ZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIEFTU0VSVChuZXdD
b2RlQmxvY2spOwotICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJv
dG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaWYgKGlzSlNDYWxsKQotICAgICAgICAgICAgaml0
Q29kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZv
ckNhbGwoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2Jh
bE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7Cisg
ICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRo
aXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29kZUJsb2NrKiBu
ZXdDb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAg
ICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKKyAgICAgICAgICAgIGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZt
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxsLCBuZXdD
b2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBj
aGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgQVNT
RVJUKG5ld0NvZGVCbG9jayk7CisgICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4g
cmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ2Fs
bCkKKyAgICAgICAgICAgICAgICBqaXRDb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJh
bWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwg
YXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVl
IHJlc3VsdDsKQEAgLTEwODcsMjMgKzEwOTUsMjcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpl
eGVjdXRlQ29uc3RydWN0KAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRyOwotICAgIGlmIChpc0pTQ29uc3Ry
dWN0KSB7Ci0gICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgY29uc3RydWN0
RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25F
eGVjdXRhYmxlPih2bSwganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNjb3BlLCBD
b2RlRm9yQ29uc3RydWN0LCBuZXdDb2RlQmxvY2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2sp
OwotICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
Ci0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJvdG9DYWxsRnJh
bWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhl
Y3V0YWJsZS4KLSAgICAgICAgaWYgKGlzSlNDb25zdHJ1Y3QpCi0gICAgICAgICAgICBqaXRDb2Rl
ID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDb25zdHJ1Y3QoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRh
dGEoKSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpl
dHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgQ29k
ZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAoaXNKU0NvbnN0cnVj
dCkgeworICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICAgICAgY29u
c3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVu
Y3Rpb25FeGVjdXRhYmxlPih2bSwganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIHNj
b3BlLCBDb2RlRm9yQ29uc3RydWN0LCBuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgQVNTRVJU
KG5ld0NvZGVCbG9jayk7CisgICAgICAgICAgICBuZXdDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVw
bGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGlmIChpc0pTQ29uc3Ry
dWN0KQorICAgICAgICAgICAgICAgIGppdENvZGUgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICAgICAg
cHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY29uc3RydWN0
b3IsIG5ld1RhcmdldCwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTEyOTUsMjIgKzEzMDcsMjYgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIGVsc2UKICAgICAgICAgY2FsbGVl
ID0gSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICAvLyBS
ZWxvYWQgQ29kZUJsb2NrLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHJlcGxhY2VkIENvZGVCbG9j
ayB3aGlsZSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4KLSAgICB7Ci0gICAgICAgIENvZGVC
bG9jayogdGVtcENvZGVCbG9jazsKLSAgICAgICAgZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbjxF
dmFsRXhlY3V0YWJsZT4odm0sIG51bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVC
bG9jayk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJl
dHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0ganND
YXN0PEV2YWxDb2RlQmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVC
bG9jayAmJiBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIg
Zm9yICd0aGlzJy4KLSAgICB9Ci0KICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBQ
cm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICB7Ci0gICAgICAgIERpc2FsbG93R0Mg
ZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVC
bG9jayBpbiBFeGVjdXRhYmxlLgotICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklU
Q29kZSgpOwotICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWUsIHRoaXNWYWx1ZSwgMSk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFw
cyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBy
dW4gaXQuCisKKyAgICAgICAgLy8gUmVsb2FkIENvZGVCbG9jay4gSXQgaXMgcG9zc2libGUgdGhh
dCB3ZSByZXBsYWNlZCBDb2RlQmxvY2sgd2hpbGUgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQu
CisgICAgICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAg
ICAgICAgIGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb248RXZhbEV4ZWN1dGFibGU+KHZtLCBudWxs
cHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEV2YWxDb2RlQmxv
Y2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgJiYgY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycu
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4g
RXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGppdENvZGUgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2Rl
KCk7CisgICAgICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWUsIHRoaXNWYWx1ZSwgMSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBF
eGVjdXRlIHRoZSBjb2RlOgpAQCAtMTM1MiwxNyArMTM2OCw4IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmEKIAogICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFic3RyYWN0TW9kdWxlUmVjb3JkOjpBcmd1
bWVudDo6TnVtYmVyT2ZBcmd1bWVudHMpOwogICAgIEpTQ2FsbGVlKiBjYWxsZWUgPSBKU0NhbGxl
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNjb3BlKTsKLSAgICBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgewotICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxv
Y2s7Ci0gICAgICAgIGV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxv
Y2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2Fz
dDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVyT2ZBcmd1
bWVudHMgKyAxKTsKLSAgICB9Ci0KICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKKwogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIEpTVmFsdWUgYXJnc1tudW1iZXJP
ZkFyZ3VtZW50c10gPSB7CiAgICAgICAgIHJlY29yZCwKQEAgLTEzNzMsMTYgKzEzODAsMzEgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYQogICAgIH07CiAKICAgICB7
Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMu
IEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBpbiBFeGVjdXRhYmxlLgotICAgICAgICBqaXRDb2Rl
ID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICBEZWZlclRyYXBzIGRl
ZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJv
dXQgdG8gcnVuIGl0LgorCisgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9j
azsKKyAgICAgICAgeworICAgICAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOworICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZT4odm0sIG51bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCwgdGVtcENvZGVCbG9jayk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOworCisgICAgICAgICAgICBjb2RlQmxvY2sgPSBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KHRlbXBDb2RlQmxvY2spOworICAgICAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSBudW1i
ZXJPZkFyZ3VtZW50cyArIDEpOworICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIHx0aGlzfCBv
ZiB0aGUgbW9kdWxlIGlzIGFsd2F5cyBgdW5kZWZpbmVkYC4KLSAgICAgICAgLy8gaHR0cDovL3d3
dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1lbnZpcm9u
bWVudC1yZWNvcmRzLWhhc3RoaXNiaW5kaW5nCi0gICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1lbnQtcmVj
b3Jkcy1nZXR0aGlzYmluZGluZwotICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBjYWxsZWUsIGpzVW5kZWZpbmVkKCksIG51bWJlck9mQXJndW1lbnRz
ICsgMSwgYXJncyk7Ci0gICAgfQogCi0gICAgcmVjb3JkLT5pbnRlcm5hbEZpZWxkKEpTTW9kdWxl
UmVjb3JkOjpGaWVsZDo6U3RhdGUpLnNldCh2bSwgcmVjb3JkLCBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQ+KEpTTW9kdWxlUmVjb3JkOjpTdGF0ZTo6RXhlY3V0aW5nKSkpOworICAgICAgICB7Cisg
ICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5z
LiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGpp
dENvZGUgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlKCk7CisKKyAgICAgICAgICAgIC8v
IFRoZSB8dGhpc3wgb2YgdGhlIG1vZHVsZSBpcyBhbHdheXMgYHVuZGVmaW5lZGAuCisgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNz
ZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtaGFzdGhpc2JpbmRpbmcKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1t
b2R1bGUtZW52aXJvbm1lbnQtcmVjb3Jkcy1nZXR0aGlzYmluZGluZworICAgICAgICAgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgY2FsbGVlLCBqc1VuZGVm
aW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyArIDEsIGFyZ3MpOworICAgICAgICB9CisKKyAgICAg
ICAgcmVjb3JkLT5pbnRlcm5hbEZpZWxkKEpTTW9kdWxlUmVjb3JkOjpGaWVsZDo6U3RhdGUpLnNl
dCh2bSwgcmVjb3JkLCBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KEpTTW9kdWxlUmVjb3JkOjpT
dGF0ZTo6RXhlY3V0aW5nKSkpOworICAgIH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyOTA2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJVbmxp
bmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL1VuYWxpZ25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTg2LDIxICs4Nywy
NSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dTY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKLSAgICAvLyBSZWxvYWQg
Q29kZUJsb2NrIHNpbmNlIEdDIGNhbiByZXBsYWNlIENvZGVCbG9jayBvd25lZCBieSBFeGVjdXRh
YmxlLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGNsb3N1cmUuZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNsb3N1
cmUuZnVuY3Rpb24sIGNsb3N1cmUuc2NvcGUsIENvZGVGb3JDYWxsLCBjb2RlQmxvY2spOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSk7Ci0KLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBjb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgewotICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgY2xvc3VyZS5wcm90b0NhbGxGcmFtZS0+
c2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CisgICAgICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2
bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4g
aXQuCisKKyAgICAgICAgLy8gUmVsb2FkIENvZGVCbG9jayBzaW5jZSBHQyBjYW4gcmVwbGFjZSBD
b2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJsZS4KKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2s7CisgICAgICAgIGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0
aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNsb3N1cmUuZnVuY3Rpb24sIGNsb3N1cmUuc2Nv
cGUsIENvZGVGb3JDYWxsLCBjb2RlQmxvY2spOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOworCisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIERpc2FsbG93R0Mg
ZGlzYWxsb3dHQzsgLy8gRW5zdXJlIG5vIEdDIGhhcHBlbnMuIEdDIGNhbiByZXBsYWNlIENvZGVC
bG9jayBpbiBFeGVjdXRhYmxlLgorICAgICAgICAgICAgY2xvc3VyZS5wcm90b0NhbGxGcmFtZS0+
c2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CisgICAgICAgIH0KICAgICB9CisKICAgICAvLyBFeGVj
dXRlIHRoZSBjb2RlOgogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCktPmV4ZWN1dGUoJnZtLCBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lKTsKLQogICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjkwNjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlICJWTVRyYXBz
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCkBAIC0xOTA0LDggKzE5MDUsOSBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsCiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxs
ZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBj
YWxsZWUtPmV4ZWN1dGFibGUoKTsKIAorICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8v
IFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgd2Fz
bSBJQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
MzM5CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCkBAIC0xOTE5LDcgKzE5
MjEsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsCiAgICAgICAg
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CiAgICAgICAgIExM
SU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgY29kZUJs
b2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gKmNv
ZGVCbG9ja1Nsb3Q7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCiAgICAgICAgIEFyaXR5
Q2hlY2tNb2RlIGFyaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ny
aXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsNiArMTk2LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShW
TSYgdgogICAgIGlmIChnZW5lcmljQ29kZUJsb2NrKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGdlbmVyaWNDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpID09IHRoaXMpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0V4ZWN1dGFibGVTY3JpcHQoZ2VuZXJpY0NvZGVCbG9j
ay0+aml0VHlwZSgpKSk7CisKKyAgICAgICAgZ2VuZXJpY0NvZGVCbG9jay0+bV9pc0pldHRpc29u
ZWQgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIkluc3RhbGxpbmcgIiwgKmdlbmVyaWNDb2RlQmxvY2spOwogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAy
OTA2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSw3IEBAIHZvaWQgVk1UcmFwczo6aGFuZGxlVHJhcHMo
Vk1UcmFwczo6Qml0RmkKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgQVNTRVJUKG9ubHlDb250YWluc0FzeW5jRXZlbnRzKG1hc2spKTsKICAgICBBU1NFUlQo
bmVlZEhhbmRsaW5nKG1hc2spKTsKKyAgICBBU1NFUlQoIWhhc1RyYXBCaXQoRGVmZXJUcmFwSGFu
ZGxpbmcpKTsKIAogICAgIGlmIChpc0RlZmVycmluZ1Rlcm1pbmF0aW9uKCkpCiAgICAgICAgIG1h
c2sgJj0gfk5lZWRUZXJtaW5hdGlvbjsKQEAgLTM5MCw2ICszOTEsNyBAQCB2b2lkIFZNVHJhcHM6
OmhhbmRsZVRyYXBzKFZNVHJhcHM6OkJpdEZpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgY2FzZSBOZWVkRXhjZXB0aW9uSGFuZGxpbmc6CisgICAgICAgIGNhc2UgRGVmZXJUcmFwSGFu
ZGxpbmc6CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC00MDIsNyArNDA0LDcgQEAgYXV0byBWTVRyYXBzOjp0
YWtlVG9wUHJpb3JpdHlUcmFwKFZNVHJhcAogCiAgICAgLy8gTm90ZTogdGhlIEV2ZW50Qml0U2hp
ZnQgaXMgYWxyZWFkeSBzb3J0ZWQgaW4gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHkKICAgICAv
LyBpLmUuIGEgYml0IHNoaWZ0IG9mIDAgaXMgaGlnaGVzdCBwcmlvcml0eSwgZXRjLgotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7ICsraSkgeworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBOdW1iZXJPZkV2ZW50czsgKytpKSB7CiAgICAgICAgIEV2ZW50IGV2ZW50
ID0gc3RhdGljX2Nhc3Q8RXZlbnQ+KDEgPDwgaSk7CiAgICAgICAgIGlmIChoYXNUcmFwQml0KGV2
ZW50LCBtYXNrKSkgewogICAgICAgICAgICAgY2xlYXJUcmFwQml0KGV2ZW50KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgJKHJldmlzaW9uIDI5MDY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ5LDE1ICsxNDksMjEgQEAgcHVibGljOgogICAgIHYoTmVlZFRlcm1pbmF0aW9uKSBcCiAg
ICAgdihOZWVkV2F0Y2hkb2dDaGVjaykgXAogICAgIHYoTmVlZERlYnVnZ2VyQnJlYWspIFwKLSAg
ICB2KE5lZWRFeGNlcHRpb25IYW5kbGluZykKKyAgICB2KE5lZWRFeGNlcHRpb25IYW5kbGluZykg
XAorICAgIHYoRGVmZXJUcmFwSGFuZGxpbmcpIC8vIE11c3QgY29tZSBsYXN0IGluIHRoZSBlbnVt
LiBUaGlzIGRlZmVycyBhbGwgZXZlbnRzIGV4Y2VwdCBOZWVkRXhjZXB0aW9uSGFuZGxpbmcuCiAK
ICNkZWZpbmUgREVDTEFSRV9WTVRSQVBTX0VWRU5UX0JJVF9TSElGVChldmVudF9fKSAgZXZlbnRf
XyMjQml0U2hpZnQsCiAgICAgZW51bSBFdmVudEJpdFNoaWZ0IHsKICAgICAgICAgRk9SX0VBQ0hf
Vk1UUkFQU19FVkVOVFMoREVDTEFSRV9WTVRSQVBTX0VWRU5UX0JJVF9TSElGVCkKLSAgICAgICAg
TnVtYmVyT2ZFdmVudHMsIC8vIFRoaXMgZW50cnkgbXVzdCBiZSBsYXN0IGluIHRoaXMgbGlzdC4K
ICAgICB9OwogI3VuZGVmIERFQ0xBUkVfVk1UUkFQU19FVkVOVF9CSVRfU0hJRlQKIAorCisjZGVm
aW5lIENPVU5UX0VWRU5UKGV2ZW50KSArIDEKKyAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxk
IE51bWJlck9mRXZlbnRzID0gRk9SX0VBQ0hfVk1UUkFQU19FVkVOVFMoQ09VTlRfRVZFTlQpIC0g
MTsgLy8gRG9uJ3QgY291bnQgRGVmZXJUcmFwSGFuZGxpbmcuCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBCaXRGaWVsZCBOdW1iZXJPZkV2ZW50c0luY2x1ZGluZ0RlZmVyID0gRk9SX0VBQ0hfVk1UUkFQ
U19FVkVOVFMoQ09VTlRfRVZFTlQpOworI3VuZGVmIENPVU5UX0VWRU5UCisKICAgICB1c2luZyBF
dmVudCA9IEJpdEZpZWxkOwogCiAjZGVmaW5lIERFQ0xBUkVfVk1UUkFQU19FVkVOVChldmVudF9f
KSBcCkBAIC0xNzAsOCArMTc2LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBF
dmVudCBOb0V2ZW50ID0gMDsKIAotICAgIHN0YXRpY19hc3NlcnQoTnVtYmVyT2ZFdmVudHMgPD0g
Yml0c0luQml0RmllbGQpOworICAgIHN0YXRpY19hc3NlcnQoTnVtYmVyT2ZFdmVudHNJbmNsdWRp
bmdEZWZlciA8PSBiaXRzSW5CaXRGaWVsZCk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVs
ZCBBbGxFdmVudHMgPSAoMXVsbCA8PCBOdW1iZXJPZkV2ZW50cykgLSAxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgQml0RmllbGQgQWxsRXZlbnRzSW5jbHVkaW5nRGVmZXIgPSAoMXVsbCA8PCBOdW1i
ZXJPZkV2ZW50c0luY2x1ZGluZ0RlZmVyKSAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBCaXRG
aWVsZCBBc3luY0V2ZW50cyA9IEFsbEV2ZW50cyAmIH5OZWVkRXhjZXB0aW9uSGFuZGxpbmc7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOb25EZWJ1Z2dlckV2ZW50cyA9IEFsbEV2ZW50
cyAmIH5OZWVkRGVidWdnZXJCcmVhazsKICAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIE5v
bkRlYnVnZ2VyQXN5bmNFdmVudHMgPSBBc3luY0V2ZW50cyAmIH5OZWVkRGVidWdnZXJCcmVhazsK
QEAgLTE4OCw3ICsxOTUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKCk7
CiAKLSAgICBib29sIG5lZWRIYW5kbGluZyhCaXRGaWVsZCBtYXNrKSBjb25zdCB7IHJldHVybiBt
X3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiBtYXNrOyB9CisgICAgQUxXQVlTX0lOTElORSBib29s
IG5lZWRIYW5kbGluZyhCaXRGaWVsZCBtYXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBt
YXNrZWRWYWx1ZSA9IG1fdHJhcEJpdHMubG9hZFJlbGF4ZWQoKSAmIChtYXNrIHwgRGVmZXJUcmFw
SGFuZGxpbmcpOworICAgICAgICBpZiAoVU5MSUtFTFkobWFza2VkVmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIChtYXNrZWRWYWx1ZSAmIE5lZWRFeGNlcHRpb25IYW5kbGluZykgfHwgIShtYXNr
ZWRWYWx1ZSAmIERlZmVyVHJhcEhhbmRsaW5nKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KICAgICB2b2lkKiB0cmFwQml0c0FkZHJlc3MoKSB7IHJldHVybiAmbV90cmFwQml0czsgfQog
CiAgICAgZW51bSBjbGFzcyBEZWZlckFjdGlvbiB7CkBAIC0yMDYsNiArMjE5LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjaygpOwogICAgIH0KIAor
ICAgIGJvb2wgaGFzVHJhcEJpdChFdmVudCBldmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3RyYXBCaXRzLmxvYWRSZWxheGVkKCkgJiBldmVudDsKKyAgICB9CiAgICAgYm9vbCBoYXNUcmFw
Qml0KEV2ZW50IGV2ZW50LCBCaXRGaWVsZCBtYXNrKQogICAgIHsKICAgICAgICAgQml0RmllbGQg
bWFza2VkQml0cyA9IGV2ZW50ICYgbWFzazsKQEAgLTIxNCw3ICsyMzEsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjbGVhclRyYXBCaXQoRXZlbnQgZXZlbnQpIHsgbV90cmFwQml0cy5leGNoYW5nZUFu
ZCh+ZXZlbnQpOyB9CiAgICAgdm9pZCBzZXRUcmFwQml0KEV2ZW50IGV2ZW50KQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKChldmVudCAmIH5BbGxFdmVudHMpID09IDApOworICAgICAgICBBU1NFUlQo
KGV2ZW50ICYgfkFsbEV2ZW50c0luY2x1ZGluZ0RlZmVyKSA9PSAwKTsKICAgICAgICAgbV90cmFw
Qml0cy5leGNoYW5nZU9yKGV2ZW50KTsKICAgICB9CiAKQEAgLTI2Niw0ICsyODMsMTMgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2lnbmFsU2VuZGVyOwogfTsKIAorY2xhc3MgRGVmZXJU
cmFwcyB7CitwdWJsaWM6CisgICAgRGVmZXJUcmFwcyhWTSYpOworICAgIH5EZWZlclRyYXBzKCk7
Citwcml2YXRlOgorICAgIFZNVHJhcHMmIG1fdHJhcHM7CisgICAgYm9vbCBtX2lzQWN0aXZlOwor
fTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmgJKHJldmlzaW9uIDI5MDY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDQgKzUwLDE4IEBAIGlubGluZSB2b2lkIFZNVHJhcHM6OnVuZG9EZWZlclRlcm1pbmF0aW8K
ICAgICAgICAgdW5kb0RlZmVyVGVybWluYXRpb25TbG93KGRlZmVyQWN0aW9uKTsKIH0KIAorQUxX
QVlTX0lOTElORSBEZWZlclRyYXBzOjpEZWZlclRyYXBzKFZNJiB2bSkKKyAgICA6IG1fdHJhcHMo
dm0udHJhcHMoKSkKKyAgICAsIG1faXNBY3RpdmUoIW1fdHJhcHMuaGFzVHJhcEJpdChWTVRyYXBz
OjpEZWZlclRyYXBIYW5kbGluZykpCit7CisgICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIG1f
dHJhcHMuc2V0VHJhcEJpdChWTVRyYXBzOjpEZWZlclRyYXBIYW5kbGluZyk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgRGVmZXJUcmFwczo6fkRlZmVyVHJhcHMoKQoreworICAgIGlmIChtX2lzQWN0aXZl
KQorICAgICAgICBtX3RyYXBzLmNsZWFyVHJhcEJpdChWTVRyYXBzOjpEZWZlclRyYXBIYW5kbGlu
Zyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453759</attachid>
            <date>2022-03-03 10:33:15 -0800</date>
            <delta_ts>2022-03-03 11:52:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>26683</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDIyLTAzLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIERlZmVyVHJhcHMgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzMwNgorICAgICAgICA8cmRhcjovLzgzNDk0OTQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmg6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUv
Vk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmhhbmRsZVRyYXBzKToKKyAgICAg
ICAgKEpTQzo6Vk1UcmFwczo6dGFrZVRvcFByaW9yaXR5VHJhcCk6CisgICAgICAgICogcnVudGlt
ZS9WTVRyYXBzLmg6CisgICAgICAgIChKU0M6OlZNVHJhcHM6Om5lZWRIYW5kbGluZyBjb25zdCk6
CisgICAgICAgIChKU0M6OlZNVHJhcHM6Om1heWJlTmVlZEhhbmRsaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Vk1UcmFwczo6aGFzVHJhcEJpdCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnNl
dFRyYXBCaXQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwc0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6RGVmZXJUcmFwczo6RGVmZXJUcmFwcyk6CisgICAgICAgIChKU0M6OkRlZmVyVHJhcHM6
On5EZWZlclRyYXBzKToKKwogMjAyMi0wMy0wMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFw
ZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5vbi11bmlmaWVkIGJ1aWxkIGZpeGVzLCBlYXJs
eSBNYXJjaCAyMDIyIGVkaXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyOTA3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3
OSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBt
X2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVyLm1fbnVt
Q2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkK
QEAgLTMzMCw2ICszMzEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFp
bEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZh
bHNlKQorICAgICwgbV9pc0pldHRpc29uZWQoZmFsc2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2Fs
cyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnMo
dW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1l
bnQoZmFsc2UpCkBAIC0yMTkxLDYgKzIxOTMsOCBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24o
UHJvZmlsZXI6OkpldHRpCiAKICAgICBWTSYgdm0gPSAqbV92bTsKIAorICAgIG1faXNKZXR0aXNv
bmVkID0gdHJ1ZTsKKwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpczsgLy8gUGxhY2F0
ZSBHQ0MgZm9yIHVzZSBpbiBDT0RFQkxPQ0tfTE9HX0VWRU5UICAoZG9lcyBub3QgbGlrZSB0aGlz
KS4KICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImpldHRpc29uIiwgKCJkdWUg
dG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlv
biwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWlsKSkpOwogCkBAIC0yMzU3LDYgKzIz
NjEsOCBAQCBwcml2YXRlOgogCiB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENh
bGxGcmFtZSogY2FsbGVyRnJhbWUpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNKZXR0aXNv
bmVkKTsKKwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGlu
aygpLCAiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgcG9pbnRlckR1bXAoY2FsbGVyQ29kZUJs
b2NrKSwgIiB0byAiLCAqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyOTA3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NCw2ICs3NzQsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbiA6IDE7CiAgICAgYm9v
bCBtX2RpZEZhaWxGVExDb21waWxhdGlvbiA6IDE7CiAgICAgYm9vbCBtX2hhc0JlZW5Db21waWxl
ZFdpdGhGVEwgOiAxOworICAgIGJvb2wgbV9pc0pldHRpc29uZWQgOiAxOwogCiAgICAgYm9vbCBt
X3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAkocmV2aXNp
b24gMjkwNzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIlJlcGF0
Y2guaCIKIAorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKQEAgLTEyNCw2ICsxMjYsOSBAQCBBTFdBWVNfSU5M
SU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51
bGxwdHI7CisKKyAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0
aXNvbiBhbnkgY29kZSB1bnRpbCBhZnRlciB3ZSBsaW5rIHRoZSBjYWxsLgorCiAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNt
SUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwogICAgICAgICBpZiAoIWNvZGVQdHIpCkBAIC0x
ODcsNiArMTkyLDkgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbAog
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNr
ZWQoKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRh
YmxlKCk7CisKKyAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0
aXNvbiBpZiB3ZSdyZSBnb2luZyB0byBjYWxsIHRoaXMgQ29kZUJsb2NrLgorCiAgICAgaWYgKFVO
TElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5MDc4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYg
Kzc4LDcgQEAKICNpbmNsdWRlICJTeW1ib2wuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgog
CiAjaWYgRU5BQkxFKEpJVCkKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTM3MTIsNiArMzcxMyw4
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rRGkKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBudWxscHRyOworICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNh
bid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0byBsaW5rIHRvIGl0LgorCiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBl
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKICAgICBlbHNl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMjkwNzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ5LDIyICs5NDks
MjYgQEAgZmFpbGVkSlNPTlA6CiAgICAgaWYgKHNjb3BlLT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICBzY29wZS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmpl
Y3Qodm0pOwogCi0gICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwotICAgIHsKLSAgICAg
ICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2NrOwotICAgICAgICBwcm9ncmFtLT5wcmVwYXJlRm9y
RXhlY3V0aW9uPFByb2dyYW1FeGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JD
YWxsLCB0ZW1wQ29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKLQotICAgICAgICBj
b2RlQmxvY2sgPSBqc0Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KHRlbXBDb2RlQmxvY2spOwotICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEp
OyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgotICAgIH0KLQogICAgIFJlZlB0cjxKSVRDb2Rl
PiBqaXRDb2RlOwogICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIHsKLSAg
ICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0Mg
Y2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCi0gICAgICAgIGppdENvZGUgPSBw
cm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCk7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQo
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGdsb2JhbENhbGxlZSwgdGhpc09iaiwgMSk7CisgICAg
ICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMg
Y29kZSBpZiB3ZSdyZSBhYm91dCB0byBydW4gaXQuCisKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9j
ayogY29kZUJsb2NrOworICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2Rl
QmxvY2s7CisgICAgICAgICAgICBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uPFByb2dyYW1F
eGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJl
dHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9
IGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBB
U1NFUlQoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAx
IHBhcmFtZXRlciBmb3IgJ3RoaXMnLgorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2Fu
IHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0g
cHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUu
aW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbGVlLCB0aGlzT2JqLCAxKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CkBAIC0xMDExLDIz
ICsxMDE1LDI3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmEKICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIENv
ZGVCbG9jayogbmV3Q29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoaXNKU0NhbGwpIHsKLSAg
ICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgICAgICBjYWxsRGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiksIHNjb3BlLCBDb2RlRm9yQ2FsbCwgbmV3Q29k
ZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2Vk
UmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKLQotICAgICAgICBBU1NFUlQobmV3Q29k
ZUJsb2NrKTsKLSAgICAgICAgbmV3Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOwotICAgIH0KLQogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIFByb3Rv
Q2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2Nr
IGluIEV4ZWN1dGFibGUuCi0gICAgICAgIGlmIChpc0pTQ2FsbCkKLSAgICAgICAgICAgIGppdENv
ZGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JD
YWxsKCk7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUsIGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOworICAg
ICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlz
IGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorCisgICAgICAgIENvZGVCbG9jayogbmV3
Q29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGlzSlNDYWxsKSB7CisgICAgICAgICAg
ICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CisgICAgICAgICAgICBjYWxsRGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
anNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiksIHNjb3BlLCBDb2RlRm9yQ2FsbCwgbmV3Q29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hl
Y2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CisKKyAgICAgICAgICAgIEFTU0VS
VChuZXdDb2RlQmxvY2spOworICAgICAgICAgICAgbmV3Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
RGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJl
cGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBpZiAoaXNKU0NhbGwp
CisgICAgICAgICAgICAgICAgaml0Q29kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsKKyAgICAgICAgICAgIHByb3RvQ2FsbEZyYW1l
LmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUsIGFy
Z3NDb3VudCwgYXJncy5kYXRhKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNWYWx1ZSBy
ZXN1bHQ7CkBAIC0xMDg3LDIzICsxMDk1LDI3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdCgKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoaXNKU0NvbnN0cnVj
dCkgewotICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgICAgIGNvbnN0cnVjdERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhl
Y3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBzY29wZSwgQ29k
ZUZvckNvbnN0cnVjdCwgbmV3Q29kZUJsb2NrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgICAgICBBU1NFUlQobmV3Q29kZUJsb2NrKTsK
LSAgICAgICAgbmV3Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgIH0KLQogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIFByb3RvQ2FsbEZyYW1l
IHByb3RvQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAv
LyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1
dGFibGUuCi0gICAgICAgIGlmIChpc0pTQ29uc3RydWN0KQotICAgICAgICAgICAgaml0Q29kZSA9
IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9y
Q29uc3RydWN0KCk7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yLCBuZXdUYXJnZXQsIGFyZ3NDb3VudCwgYXJncy5kYXRh
KCkpOworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0
aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorCisgICAgICAgIENvZGVC
bG9jayogbmV3Q29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGlzSlNDb25zdHJ1Y3Qp
IHsKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKKyAgICAgICAgICAgIGNvbnN0
cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0
aW9uRXhlY3V0YWJsZT4odm0sIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBzY29w
ZSwgQ29kZUZvckNvbnN0cnVjdCwgbmV3Q29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIEFTU0VSVChu
ZXdDb2RlQmxvY2spOworICAgICAgICAgICAgbmV3Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxh
Y2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBpZiAoaXNKU0NvbnN0cnVj
dCkKKyAgICAgICAgICAgICAgICBqaXRDb2RlID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKKyAgICAgICAgICAgIHBy
b3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9y
LCBuZXdUYXJnZXQsIGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CkBAIC0xMjk1LDIyICsxMzA3LDI2IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBlbHNlCiAgICAgICAgIGNhbGxlZSA9
IEpTQ2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgLy8gUmVs
b2FkIENvZGVCbG9jay4gSXQgaXMgcG9zc2libGUgdGhhdCB3ZSByZXBsYWNlZCBDb2RlQmxvY2sg
d2hpbGUgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQuCi0gICAgewotICAgICAgICBDb2RlQmxv
Y2sqIHRlbXBDb2RlQmxvY2s7Ci0gICAgICAgIGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb248RXZh
bEV4ZWN1dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxv
Y2spOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2Fz
dDxFdmFsQ29kZUJsb2NrKj4odGVtcENvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxv
Y2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZv
ciAndGhpcycuCi0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgUHJv
dG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgewotICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9IGV2YWwtPmdlbmVyYXRlZEpJVENv
ZGUoKTsKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVj
dCwgY2FsbGVlLCB0aGlzVmFsdWUsIDEpOworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHMo
dm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVu
IGl0LgorCisgICAgICAgIC8vIFJlbG9hZCBDb2RlQmxvY2suIEl0IGlzIHBvc3NpYmxlIHRoYXQg
d2UgcmVwbGFjZWQgQ29kZUJsb2NrIHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50Lgor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHRlbXBDb2RlQmxvY2s7CisgICAgICAg
ICAgICBldmFsLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEV2YWxFeGVjdXRhYmxlPih2bSwgbnVsbHB0
ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxFdmFsQ29kZUJsb2Nr
Kj4odGVtcENvZGVCbG9jayk7CisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrICYmIGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgor
ICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dD
OyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4
ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRDb2RlID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgp
OworICAgICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVj
dCwgY2FsbGVlLCB0aGlzVmFsdWUsIDEpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRXhl
Y3V0ZSB0aGUgY29kZToKQEAgLTEzNTIsMTcgKzEzNjgsOCBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlTW9kdWxlUHJvZ3JhCiAKICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBYnN0cmFjdE1vZHVsZVJlY29yZDo6QXJndW1l
bnQ6Ok51bWJlck9mQXJndW1lbnRzKTsKICAgICBKU0NhbGxlZSogY2FsbGVlID0gSlNDYWxsZWU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayogY29kZUJsb2NrOwotICAgIHsKLSAgICAgICAgQ29kZUJsb2NrKiB0ZW1wQ29kZUJsb2Nr
OwotICAgICAgICBleGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlPih2bSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsLCB0ZW1wQ29kZUJsb2Nr
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJu
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KHRlbXBDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQo
Y29kZUJsb2NrICYmIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IG51bWJlck9mQXJndW1l
bnRzICsgMSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisKICAgICBQ
cm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBKU1ZhbHVlIGFyZ3NbbnVtYmVyT2ZB
cmd1bWVudHNdID0gewogICAgICAgICByZWNvcmQsCkBAIC0xMzczLDE2ICsxMzgwLDMxIEBAIEpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmEKICAgICB9OwogCiAgICAgewot
ICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBH
QyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgaW4gRXhlY3V0YWJsZS4KLSAgICAgICAgaml0Q29kZSA9
IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGUoKTsKKyAgICAgICAgRGVmZXJUcmFwcyBkZWZl
clRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0
IHRvIHJ1biBpdC4KKworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7
CisgICAgICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogdGVtcENvZGVCbG9jazsKKyAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248TW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU+KHZtLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwsIHRlbXBDb2RlQmxvY2spOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJu
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrID0ganND
YXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih0ZW1wQ29kZUJsb2NrKTsKKyAgICAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gbnVtYmVy
T2ZBcmd1bWVudHMgKyAxKTsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIFRoZSB8dGhpc3wgb2Yg
dGhlIG1vZHVsZSBpcyBhbHdheXMgYHVuZGVmaW5lZGAuCi0gICAgICAgIC8vIGh0dHA6Ly93d3cu
ZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtZW52aXJvbm1l
bnQtcmVjb3Jkcy1oYXN0aGlzYmluZGluZwotICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29y
ZHMtZ2V0dGhpc2JpbmRpbmcKLSAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgY2FsbGVlLCBqc1VuZGVmaW5lZCgpLCBudW1iZXJPZkFyZ3VtZW50cyAr
IDEsIGFyZ3MpOwotICAgIH0KIAotICAgIHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJl
Y29yZDo6RmllbGQ6OlN0YXRlKS5zZXQodm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50PihKU01vZHVsZVJlY29yZDo6U3RhdGU6OkV4ZWN1dGluZykpKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4g
R0MgY2FuIHJlcGxhY2UgQ29kZUJsb2NrIGluIEV4ZWN1dGFibGUuCisgICAgICAgICAgICBqaXRD
b2RlID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZSgpOworCisgICAgICAgICAgICAvLyBU
aGUgfHRoaXN8IG9mIHRoZSBtb2R1bGUgaXMgYWx3YXlzIGB1bmRlZmluZWRgLgorICAgICAgICAg
ICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2Vj
LW1vZHVsZS1lbnZpcm9ubWVudC1yZWNvcmRzLWhhc3RoaXNiaW5kaW5nCisgICAgICAgICAgICAv
LyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9k
dWxlLWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKKyAgICAgICAgICAgIHByb3Rv
Q2FsbEZyYW1lLmluaXQoY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGNhbGxlZSwganNVbmRlZmlu
ZWQoKSwgbnVtYmVyT2ZBcmd1bWVudHMgKyAxLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlY29yZC0+aW50ZXJuYWxGaWVsZChKU01vZHVsZVJlY29yZDo6RmllbGQ6OlN0YXRlKS5zZXQo
dm0sIHJlY29yZCwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PihKU01vZHVsZVJlY29yZDo6U3Rh
dGU6OkV4ZWN1dGluZykpKTsKKyAgICB9CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjkwNzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRh
LmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5r
ZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0
Zi9VbmFsaWduZWRBY2Nlc3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NiwyMSArODcsMjUg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdQogICAgICAgICAgICAg
cmV0dXJuIHRocm93U2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogCi0gICAgLy8gUmVsb2FkIENv
ZGVCbG9jayBzaW5jZSBHQyBjYW4gcmVwbGFjZSBDb2RlQmxvY2sgb3duZWQgYnkgRXhlY3V0YWJs
ZS4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJl
LmZ1bmN0aW9uLCBjbG9zdXJlLnNjb3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpOwotCi0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgY29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgRGlzYWxsb3dH
QyBkaXNhbGxvd0dDOyAvLyBFbnN1cmUgbm8gR0MgaGFwcGVucy4gR0MgY2FuIHJlcGxhY2UgQ29k
ZUJsb2NrIGluIEV4ZWN1dGFibGUuCi0gICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNl
dENvZGVCbG9jayhjb2RlQmxvY2spOworICAgICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0p
OyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0
LgorCisgICAgICAgIC8vIFJlbG9hZCBDb2RlQmxvY2sgc2luY2UgR0MgY2FuIHJlcGxhY2UgQ29k
ZUJsb2NrIG93bmVkIGJ5IEV4ZWN1dGFibGUuCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
OworICAgICAgICBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjbG9zdXJlLmZ1bmN0aW9uLCBjbG9zdXJlLnNjb3Bl
LCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBjaGVja2VkUmV0dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKKworICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7IC8vIEVuc3VyZSBubyBHQyBoYXBwZW5zLiBHQyBjYW4gcmVwbGFjZSBDb2RlQmxv
Y2sgaW4gRXhlY3V0YWJsZS4KKyAgICAgICAgICAgIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUtPnNl
dENvZGVCbG9jayhjb2RlQmxvY2spOworICAgICAgICB9CiAgICAgfQorCiAgICAgLy8gRXhlY3V0
ZSB0aGUgY29kZToKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LT5leGVjdXRlKCZ2bSwgY2xvc3VyZS5wcm90b0NhbGxGcmFtZSk7Ci0KICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybihyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI5MDc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3Vw
ZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KIApAQCAtMTkwNCw4ICsxOTA1LDkgQEAgaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVl
LT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2Fs
bGVlLT5leGVjdXRhYmxlKCk7CiAKKyAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBX
ZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgorCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20g
SUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMz
OQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQpAQCAtMTkxOSw3ICsxOTIx
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbAogICAgICAgICBm
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwogICAgICAgICBMTElO
VF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIGNvZGVCbG9j
ayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICpjb2Rl
QmxvY2tTbG90OwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAgICAgICBBcml0eUNo
ZWNrTW9kZSBhcml0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvblNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uU2NvcGUuaAkocmV2aXNpb24gMjkwNzgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzEx
MCw3IEBAIHByb3RlY3RlZDoKICNkZWZpbmUgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZV9fLCB2
YWx1ZV9fKSBkbyB7IFwKICAgICAgICAgSlNDOjpWTSYgdm0gPSAoc2NvcGVfXykudm0oKTsgXAog
ICAgICAgICBBU1NFUlQoISEoc2NvcGVfXykuZXhjZXB0aW9uKCkgPT0gdm0udHJhcHMoKS5uZWVk
SGFuZGxpbmcoSlNDOjpWTVRyYXBzOjpOZWVkRXhjZXB0aW9uSGFuZGxpbmcpKTsgXAotICAgICAg
ICBpZiAoVU5MSUtFTFkodm0udHJhcHMoKS5uZWVkSGFuZGxpbmcoSlNDOjpWTVRyYXBzOjpOb25E
ZWJ1Z2dlckV2ZW50cykpKSB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHZtLnRyYXBzKCkubWF5
YmVOZWVkSGFuZGxpbmcoSlNDOjpWTVRyYXBzOjpOb25EZWJ1Z2dlckV2ZW50cykpKSB7IFwKICAg
ICAgICAgICAgIGlmICh2bS5oYXNFeGNlcHRpb25zQWZ0ZXJIYW5kbGluZ1RyYXBzKCkpIFwKICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVfXzsgXAogICAgICAgICB9IFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAyOTA3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRF
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw4IEBAIHZvaWQgU2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICBpZiAoZ2VuZXJpY0NvZGVCbG9j
aykgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmljQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSA9PSB0aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNFeGVj
dXRhYmxlU2NyaXB0KGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgICAgIGdl
bmVyaWNDb2RlQmxvY2stPm1faXNKZXR0aXNvbmVkID0gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJJbnN0YWxsaW5nICIsICpnZW5l
cmljQ29kZUJsb2NrKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjkwNzgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksNyBA
QCB2b2lkIFZNVHJhcHM6OmhhbmRsZVRyYXBzKFZNVHJhcHM6OkJpdEZpCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEFTU0VSVChvbmx5Q29udGFpbnNBc3lu
Y0V2ZW50cyhtYXNrKSk7CiAgICAgQVNTRVJUKG5lZWRIYW5kbGluZyhtYXNrKSk7CisgICAgQVNT
RVJUKCFoYXNUcmFwQml0KERlZmVyVHJhcEhhbmRsaW5nKSk7CiAKICAgICBpZiAoaXNEZWZlcnJp
bmdUZXJtaW5hdGlvbigpKQogICAgICAgICBtYXNrICY9IH5OZWVkVGVybWluYXRpb247CkBAIC0z
OTAsNiArMzkxLDcgQEAgdm9pZCBWTVRyYXBzOjpoYW5kbGVUcmFwcyhWTVRyYXBzOjpCaXRGaQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgTmVlZEV4Y2VwdGlvbkhhbmRsaW5n
OgorICAgICAgICBjYXNlIERlZmVyVHJhcEhhbmRsaW5nOgogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNDAy
LDcgKzQwNCw3IEBAIGF1dG8gVk1UcmFwczo6dGFrZVRvcFByaW9yaXR5VHJhcChWTVRyYXAKIAog
ICAgIC8vIE5vdGU6IHRoZSBFdmVudEJpdFNoaWZ0IGlzIGFscmVhZHkgc29ydGVkIGluIGhpZ2hl
c3QgdG8gbG93ZXN0IHByaW9yaXR5CiAgICAgLy8gaS5lLiBhIGJpdCBzaGlmdCBvZiAwIGlzIGhp
Z2hlc3QgcHJpb3JpdHksIGV0Yy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE51bWJlck9mRXZl
bnRzOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudHM7
ICsraSkgewogICAgICAgICBFdmVudCBldmVudCA9IHN0YXRpY19jYXN0PEV2ZW50PigxIDw8IGkp
OwogICAgICAgICBpZiAoaGFzVHJhcEJpdChldmVudCwgbWFzaykpIHsKICAgICAgICAgICAgIGNs
ZWFyVHJhcEJpdChldmVudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5oCShyZXZpc2lvbiAyOTA3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxNSArMTQ5LDIxIEBAIHB1YmxpYzoK
ICAgICB2KE5lZWRUZXJtaW5hdGlvbikgXAogICAgIHYoTmVlZFdhdGNoZG9nQ2hlY2spIFwKICAg
ICB2KE5lZWREZWJ1Z2dlckJyZWFrKSBcCi0gICAgdihOZWVkRXhjZXB0aW9uSGFuZGxpbmcpCisg
ICAgdihOZWVkRXhjZXB0aW9uSGFuZGxpbmcpIFwKKyAgICB2KERlZmVyVHJhcEhhbmRsaW5nKSAv
LyBNdXN0IGNvbWUgbGFzdCBpbiB0aGUgZW51bS4gVGhpcyBkZWZlcnMgYWxsIGV2ZW50cyBleGNl
cHQgTmVlZEV4Y2VwdGlvbkhhbmRsaW5nLgogCiAjZGVmaW5lIERFQ0xBUkVfVk1UUkFQU19FVkVO
VF9CSVRfU0hJRlQoZXZlbnRfXykgIGV2ZW50X18jI0JpdFNoaWZ0LAogICAgIGVudW0gRXZlbnRC
aXRTaGlmdCB7CiAgICAgICAgIEZPUl9FQUNIX1ZNVFJBUFNfRVZFTlRTKERFQ0xBUkVfVk1UUkFQ
U19FVkVOVF9CSVRfU0hJRlQpCi0gICAgICAgIE51bWJlck9mRXZlbnRzLCAvLyBUaGlzIGVudHJ5
IG11c3QgYmUgbGFzdCBpbiB0aGlzIGxpc3QuCiAgICAgfTsKICN1bmRlZiBERUNMQVJFX1ZNVFJB
UFNfRVZFTlRfQklUX1NISUZUCiAKKworI2RlZmluZSBDT1VOVF9FVkVOVChldmVudCkgKyAxCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOdW1iZXJPZkV2ZW50cyA9IEZPUl9FQUNIX1ZN
VFJBUFNfRVZFTlRTKENPVU5UX0VWRU5UKSAtIDE7IC8vIERvbid0IGNvdW50IERlZmVyVHJhcEhh
bmRsaW5nLgorICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgTnVtYmVyT2ZFdmVudHNJbmNs
dWRpbmdEZWZlciA9IEZPUl9FQUNIX1ZNVFJBUFNfRVZFTlRTKENPVU5UX0VWRU5UKTsKKyN1bmRl
ZiBDT1VOVF9FVkVOVAorCiAgICAgdXNpbmcgRXZlbnQgPSBCaXRGaWVsZDsKIAogI2RlZmluZSBE
RUNMQVJFX1ZNVFJBUFNfRVZFTlQoZXZlbnRfXykgXApAQCAtMTcwLDggKzE3Niw5IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgRXZlbnQgTm9FdmVudCA9IDA7CiAKLSAgICBzdGF0
aWNfYXNzZXJ0KE51bWJlck9mRXZlbnRzIDw9IGJpdHNJbkJpdEZpZWxkKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KE51bWJlck9mRXZlbnRzSW5jbHVkaW5nRGVmZXIgPD0gYml0c0luQml0RmllbGQpOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQWxsRXZlbnRzID0gKDF1bGwgPDwgTnVtYmVy
T2ZFdmVudHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEJpdEZpZWxkIEFsbEV2ZW50c0lu
Y2x1ZGluZ0RlZmVyID0gKDF1bGwgPDwgTnVtYmVyT2ZFdmVudHNJbmNsdWRpbmdEZWZlcikgLSAx
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQgQXN5bmNFdmVudHMgPSBBbGxFdmVudHMg
JiB+TmVlZEV4Y2VwdGlvbkhhbmRsaW5nOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQml0RmllbGQg
Tm9uRGVidWdnZXJFdmVudHMgPSBBbGxFdmVudHMgJiB+TmVlZERlYnVnZ2VyQnJlYWs7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBCaXRGaWVsZCBOb25EZWJ1Z2dlckFzeW5jRXZlbnRzID0gQXN5bmNF
dmVudHMgJiB+TmVlZERlYnVnZ2VyQnJlYWs7CkBAIC0xODgsNyArMTk1LDE1IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTSgpOwogCi0gICAgYm9vbCBuZWVkSGFuZGxpbmcoQml0
RmllbGQgbWFzaykgY29uc3QgeyByZXR1cm4gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgbWFz
azsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykg
Y29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gbWFza2VkVmFsdWUgPSBtX3RyYXBCaXRzLmxvYWRS
ZWxheGVkKCkgJiAobWFzayB8IERlZmVyVHJhcEhhbmRsaW5nKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKG1hc2tlZFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiAobWFza2VkVmFsdWUgJiBOZWVk
RXhjZXB0aW9uSGFuZGxpbmcpIHx8ICEobWFza2VkVmFsdWUgJiBEZWZlclRyYXBIYW5kbGluZyk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gRGVzaWduZWQgdG8gYmUgYSBm
YXN0IGNoZWNrIHRvIHJ1bGUgb3V0IGlmIHdlIG1pZ2h0IG5lZWQgaGFuZGxpbmcsIGFuZCB3ZSBu
ZWVkIHRvIGVuc3VyZSBuZWVkSGFuZGxpbmcgb24gdGhlIHNsb3cgcGF0aC4KKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgbWF5YmVOZWVkSGFuZGxpbmcoQml0RmllbGQgbWFzaykgY29uc3QgeyByZXR1
cm4gbV90cmFwQml0cy5sb2FkUmVsYXhlZCgpICYgbWFzazsgfQogICAgIHZvaWQqIHRyYXBCaXRz
QWRkcmVzcygpIHsgcmV0dXJuICZtX3RyYXBCaXRzOyB9CiAKICAgICBlbnVtIGNsYXNzIERlZmVy
QWN0aW9uIHsKQEAgLTIwNiw2ICsyMjEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaW52YWxp
ZGF0ZUNvZGVCbG9ja3NPblN0YWNrKCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNUcmFwQml0KEV2
ZW50IGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHJhcEJpdHMubG9hZFJlbGF4ZWQo
KSAmIGV2ZW50OworICAgIH0KICAgICBib29sIGhhc1RyYXBCaXQoRXZlbnQgZXZlbnQsIEJpdEZp
ZWxkIG1hc2spCiAgICAgewogICAgICAgICBCaXRGaWVsZCBtYXNrZWRCaXRzID0gZXZlbnQgJiBt
YXNrOwpAQCAtMjE0LDcgKzIzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyVHJhcEJpdChF
dmVudCBldmVudCkgeyBtX3RyYXBCaXRzLmV4Y2hhbmdlQW5kKH5ldmVudCk7IH0KICAgICB2b2lk
IHNldFRyYXBCaXQoRXZlbnQgZXZlbnQpCiAgICAgewotICAgICAgICBBU1NFUlQoKGV2ZW50ICYg
fkFsbEV2ZW50cykgPT0gMCk7CisgICAgICAgIEFTU0VSVCgoZXZlbnQgJiB+QWxsRXZlbnRzSW5j
bHVkaW5nRGVmZXIpID09IDApOwogICAgICAgICBtX3RyYXBCaXRzLmV4Y2hhbmdlT3IoZXZlbnQp
OwogICAgIH0KIApAQCAtMjY2LDQgKzI4NSwxMyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBTaWduYWxTZW5kZXI7CiB9OwogCitjbGFzcyBEZWZlclRyYXBzIHsKK3B1YmxpYzoKKyAgICBE
ZWZlclRyYXBzKFZNJik7CisgICAgfkRlZmVyVHJhcHMoKTsKK3ByaXZhdGU6CisgICAgVk1UcmFw
cyYgbV90cmFwczsKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHNJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwc0lubGlu
ZXMuaAkocmV2aXNpb24gMjkwNzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1UcmFwc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNCArNTAsMTggQEAgaW5saW5l
IHZvaWQgVk1UcmFwczo6dW5kb0RlZmVyVGVybWluYXRpbwogICAgICAgICB1bmRvRGVmZXJUZXJt
aW5hdGlvblNsb3coZGVmZXJBY3Rpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIERlZmVyVHJhcHM6
OkRlZmVyVHJhcHMoVk0mIHZtKQorICAgIDogbV90cmFwcyh2bS50cmFwcygpKQorICAgICwgbV9p
c0FjdGl2ZSghbV90cmFwcy5oYXNUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKSkK
K3sKKyAgICBpZiAobV9pc0FjdGl2ZSkKKyAgICAgICAgbV90cmFwcy5zZXRUcmFwQml0KFZNVHJh
cHM6OkRlZmVyVHJhcEhhbmRsaW5nKTsKK30KKworQUxXQVlTX0lOTElORSBEZWZlclRyYXBzOjp+
RGVmZXJUcmFwcygpCit7CisgICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIG1fdHJhcHMuY2xl
YXJUcmFwQml0KFZNVHJhcHM6OkRlZmVyVHJhcEhhbmRsaW5nKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>