<?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>62601</bug_id>
          
          <creation_ts>2011-06-13 14:56:02 -0700</creation_ts>
          <short_desc>anyPageIsProcessingUserGesture is not longer needed because user gesture state is static</short_desc>
          <delta_ts>2011-06-15 06:08:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jnd</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>419900</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 14:56:02 -0700</bug_when>
    <thetext>anyPageIsProcessingUserGesture is not longer needed because user gesture state is static
Requested by abarth on #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419902</commentid>
    <comment_count>1</comment_count>
      <attachid>97012</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 14:58:02 -0700</bug_when>
    <thetext>Created attachment 97012
work-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419966</commentid>
    <comment_count>2</comment_count>
      <attachid>97018</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:29:03 -0700</bug_when>
    <thetext>Created attachment 97018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419973</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:30:36 -0700</bug_when>
    <thetext>+ some folks who might like to review this beautiful patch.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419981</commentid>
    <comment_count>4</comment_count>
      <attachid>97018</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-13 15:35:12 -0700</bug_when>
    <thetext>Comment on attachment 97018
Patch

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

&gt; Source/WebCore/bindings/ScriptControllerBase.cpp:59
&gt; +    // FIXME: Why does the URL of the script depend on forceUserGesture?
&gt; +    // This looks suspiciously like an old user-gesture back-channel.
&gt;      return executeScript(ScriptSourceCode(script, forceUserGesture ? KURL() : m_frame-&gt;document()-&gt;url()));

Fix me indeed! WTF?

&gt; Source/WebCore/bindings/js/JSDocumentCustom.cpp:81
&gt; +    bool lockHistory = !ScriptController::processingUserGesture();

I am no fan of this “lock history” name. You are not the first to use it, nor will you be the last. But I am not interested in the history of locks!

&gt; Source/WebCore/page/DOMWindow.cpp:1823
&gt;          targetFrame-&gt;navigationScheduler()-&gt;scheduleLocationChange(activeFrame-&gt;document()-&gt;securityOrigin(),
&gt; -            firstFrame-&gt;document()-&gt;completeURL(urlString).string(),
&gt; -            firstFrame-&gt;loader()-&gt;outgoingReferrer(),
&gt; -            !activeFrame-&gt;script()-&gt;anyPageIsProcessingUserGesture(), false);
&gt; -
&gt; +                                                                   firstFrame-&gt;document()-&gt;completeURL(urlString).string(),
&gt; +                                                                   firstFrame-&gt;loader()-&gt;outgoingReferrer(),
&gt; +                                                                   lockHistory,
&gt; +                                                                   false);
&gt;          return targetFrame-&gt;domWindow();

Our coding style guidelines tell us to line things up the way this was before, not the way it is after. I’m guessing your editor wanted to help you do it this way. I would be happier with a style that does not require re-indenting when we rename something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419983</commentid>
    <comment_count>5</comment_count>
      <attachid>97018</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-13 15:37:21 -0700</bug_when>
    <thetext>Comment on attachment 97018
Patch

LGTM.  It&apos;s a bit silly that we have to transmute the processingUserGesture() bool into the lockHistory bool, but I don&apos;t have a better suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419988</commentid>
    <comment_count>6</comment_count>
      <attachid>97018</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-13 15:37:43 -0700</bug_when>
    <thetext>Comment on attachment 97018
Patch

Clearing my cq+ after seeing Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419990</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:38:59 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/bindings/js/JSDocumentCustom.cpp:81
&gt; &gt; +    bool lockHistory = !ScriptController::processingUserGesture();
&gt; 
&gt; I am no fan of this “lock history” name. You are not the first to use it, nor will you be the last. But I am not interested in the history of locks!

Yeah, I don&apos;t really understand what lockHistory means either.  I&apos;m just copying the name of the formal parameter so it&apos;s clear what this argument means.

&gt; &gt; Source/WebCore/page/DOMWindow.cpp:1823
&gt; &gt;          targetFrame-&gt;navigationScheduler()-&gt;scheduleLocationChange(activeFrame-&gt;document()-&gt;securityOrigin(),
&gt; &gt; -            firstFrame-&gt;document()-&gt;completeURL(urlString).string(),
&gt; &gt; -            firstFrame-&gt;loader()-&gt;outgoingReferrer(),
&gt; &gt; -            !activeFrame-&gt;script()-&gt;anyPageIsProcessingUserGesture(), false);
&gt; &gt; -
&gt; &gt; +                                                                   firstFrame-&gt;document()-&gt;completeURL(urlString).string(),
&gt; &gt; +                                                                   firstFrame-&gt;loader()-&gt;outgoingReferrer(),
&gt; &gt; +                                                                   lockHistory,
&gt; &gt; +                                                                   false);
&gt; &gt;          return targetFrame-&gt;domWindow();
&gt; 
&gt; Our coding style guidelines tell us to line things up the way this was before, not the way it is after. I’m guessing your editor wanted to help you do it this way. I would be happier with a style that does not require re-indenting when we rename something.

Will fix.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419991</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:39:40 -0700</bug_when>
    <thetext>&gt; LGTM.  It&apos;s a bit silly that we have to transmute the processingUserGesture() bool into the lockHistory bool, but I don&apos;t have a better suggestion.

We don&apos;t need to.  I just always forget what these arguments are and figured I should write it into the code instead of looking it up for the Nth time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419995</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-06-13 15:40:51 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=97018&amp;action=review

&gt; Source/WebCore/page/DOMWindow.cpp:1817
&gt; +        bool lockHistory = !ScriptController::processingUserGesture();

It almost looks like this happens at every call site. Perhaps it would be nice to move it inside of scheduleLocationChange if possible (at some point).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419997</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:43:39 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97018&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DOMWindow.cpp:1817
&gt; &gt; +        bool lockHistory = !ScriptController::processingUserGesture();
&gt; 
&gt; It almost looks like this happens at every call site. Perhaps it would be nice to move it inside of scheduleLocationChange if possible (at some point).

Good idea.  I&apos;ll study that next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420000</commentid>
    <comment_count>11</comment_count>
      <attachid>97022</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 15:44:56 -0700</bug_when>
    <thetext>Created attachment 97022
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420037</commentid>
    <comment_count>12</comment_count>
      <attachid>97022</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 16:28:36 -0700</bug_when>
    <thetext>Comment on attachment 97022
Patch for landing

Clearing flags on attachment: 97022

Committed r88731: &lt;http://trac.webkit.org/changeset/88731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420038</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 16:28:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420314</commentid>
    <comment_count>14</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2011-06-14 04:21:45 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/bindings/ScriptControllerBase.cpp:59
&gt; &gt; +    // FIXME: Why does the URL of the script depend on forceUserGesture?
&gt; &gt; +    // This looks suspiciously like an old user-gesture back-channel.
&gt; &gt;      return executeScript(ScriptSourceCode(script, forceUserGesture ? KURL() : m_frame-&gt;document()-&gt;url()));
&gt; 
&gt; Fix me indeed! WTF?

I can explain this FIXME:)

In ScriptController::processingUserGesture(), we treat current call running in a user gesture if the URL of running script is empty. See  ScriptController::isJavaScriptAnchorNavigation() in jsc binding.

It is a trick for some scripts which must be run as user gesture like inline javascript in href of &lt;A&gt;. See ScriptController::evaluateInWorld in jsc binding.

WebKit also uses this trick to support the manual typed javascript running as a user geature.  Think about typing javascript:window.open(url) in address bar, then WebKit will pass true to forceUserGesture when calling ScriptController::executeScript(script, forceUserGesture), that is why the URL of the script depends on forceUserGesture.

If we want to eliminate this URL-gesture dependence, we can add a bool member named forceGesture in ScriptController and check it in ScriptController::processingUserGesture. Does it make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420495</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-14 09:36:52 -0700</bug_when>
    <thetext>&gt; If we want to eliminate this URL-gesture dependence, we can add a bool member named forceGesture in ScriptController and check it in ScriptController::processingUserGesture. Does it make sense?

Why don&apos;t we just set the user gesture indicator to DefinitelyProcessingUserGesture?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421211</commentid>
    <comment_count>16</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2011-06-15 06:08:43 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; If we want to eliminate this URL-gesture dependence, we can add a bool member named forceGesture in ScriptController and check it in ScriptController::processingUserGesture. Does it make sense?
&gt; 
&gt; Why don&apos;t we just set the user gesture indicator to DefinitelyProcessingUserGesture?

you are right, should be this way</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97012</attachid>
            <date>2011-06-13 14:58:02 -0700</date>
            <delta_ts>2011-06-13 15:28:59 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-62601-20110613145800.patch</filename>
            <type>text/plain</type>
            <size>15419</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFz
ZS5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0
Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMKIAogU2NyaXB0VmFsdWUgU2NyaXB0
Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3Jj
ZVVzZXJHZXN0dXJlKQogeworICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGUgVVJMIG9mIHRoZSBz
Y3JpcHQgZGVwZW5kIG9uIGZvcmNlVXNlckdlc3R1cmU/CisgICAgLy8gVGhpcyBsb29rcyBzdXNw
aWNpb3VzbHkgbGlrZSBhbiBvbGQgdXNlci1nZXN0dXJlIGJhY2stY2hhbm5lbC4KICAgICByZXR1
cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVy
ZSA/IEtVUkwoKSA6IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaAko
cmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRp
bmdTZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNiw3ICsxMTcs
NyBAQCBib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2hlY2tOb2RlCiB0ZW1wbGF0ZSA8
Y2xhc3MgQmluZGluZz4KIGJvb2wgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1BvcFVw
KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUtPnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKQorICAgIGlmIChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+
Zmlyc3RGcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCShyZXZpc2lvbiA4ODY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMywxMiArMzAzLDYgQEAgRnJh
bWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gZmlyc3RET01X
aW5kb3coZXhlYyktPmZyYW1lKCk7CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRo
aXMgZnVuY3Rpb24uIENhbGxlcnMgY2FuIHVzZSBTY3JpcHRDb250cm9sbGVyIGRpcmVjdGx5Lgot
Ym9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQotewotICAgIHJldHVybiBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0KLQogSlNWYWx1ZSBvYmplY3RUb1N0cmlu
Z0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmgJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw4ICsyNTEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgSlNDOjpKU1ZhbHVlIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKIAogICAgIEZyYW1lKiB0b0R5bmFtaWNGcmFtZShKU0M6OkV4ZWNTdGF0ZSopOwot
ICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci0gICAgCisKICAgICBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMp
CiAgICAgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gcy5pbXBsKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsOSBAQCB2b2lkIEpTRG9jdW1l
bnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gYXNK
U0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7
CiAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3Ry
aW5nKCk7CiAKKyAgICBib29sIGxvY2tIaXN0b3J5ID0gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2No
ZWR1bGVMb2NhdGlvbkNoYW5nZShsZXhpY2FsRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCksCi0gICAgICAgIHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCksICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpLCBmYWxzZSk7CisgICAgICAgIHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCksIGxvY2tIaXN0b3J5LCBmYWxzZSk7CiB9CiAKIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERvY3VtZW50
KiBkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4ODY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsMzcgKzI4
MCw2IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6aXNKYXZhU2NyaXB0QW5jaG8KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2NyaXB0Q29udHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgY29uc3QKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgp
OwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgSGFz
aFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOwotICAgIEhhc2hTZXQ8
UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gZnJhbWUtPnNjcmlwdCgpOwotCi0gICAgICAg
ICAgICBpZiAoc2NyaXB0LT5tX2FsbG93UG9wdXBzRnJvbVBsdWdpbikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgY29uc3QgU2hlbGxNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXJFbmQgPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoU2hl
bGxNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IGl0ZXJFbmQ7ICsraXRlcikgewotICAgICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwq
IHNoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgICAgIEV2ZW50KiBldmVu
dCA9IHNoZWxsLT53aW5kb3coKS0+Y3VycmVudEV2ZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGV2ZW50ICYmIGV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0phdmFTY3Jp
cHRBbmNob3JOYXZpZ2F0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgU2NyaXB0Q29udHJv
bGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiA4ODY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBiKSB7IG1fcHJvY2Vzc2luZ1Rp
bWVyQ2FsbGJhY2sgPSBiOyB9CiAgICAgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7Ci0gICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKIAog
ICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1lKik7CiAgICAg
Ym9vbCBjYW5FeGVjdXRlU2NyaXB0cyhSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTksNyArMjA5
OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2Vy
R2VzdHVyZUNoZWNrIn0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmlu
ZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICJwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbUluZGV4Kys7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDg4NjgxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTI3MzcsOSArMjczNyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmlu
ZygpCiAKICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOZWVkc1VzZXJHZXN0dXJlQ2hlY2sifSkgewogICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0g
IiwgIiBpZiAkaW5kZXg7Ci0gICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gcGFzcyBET01XcmFw
cGVyV29ybGQgYXMgYSBwYXJhbWV0ZXIuCi0gICAgICAgICMgU2VlIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvY2hhbmdlc2V0LzU0MTgyCi0gICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAicHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkiOworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIlNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKICAgICAgICAgJGluZGV4Kys7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTksNiBA
QCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgcmV0dXJuIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAotYm9vbCBT
Y3JpcHRDb250cm9sbGVyOjphbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PwotICAgIHJldHVybiBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0KLQogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCiB7CiAgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiA4ODY4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDEwICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgVGV4dFBvc2l0aW9uMCBldmVudEhh
bmRsZXJQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxs
YmFjayhib29sIHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2sgPSBwcm9jZXNzaW5nVGltZXJDYWxsYmFjazsgfQotICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgd2UgZG9uJ3QgdXNlIHRoZSBwYXJhbWV0ZXIgd29ybGQgYXQgYWxsLgotICAgIC8vIFNlZSBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NDE4MgogICAgIHN0YXRpYyBib29sIHBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX3Bh
dXNlZCA9IHBhdXNlZDsgfQogICAgIGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3Bh
dXNlZDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDExICs5NCw2IEBAIHZvaWQgdHJhbnNmZXJI
aWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGUKICAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5j
eShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsKIH0KIAotYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKQotewotICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKLX0KLQogRnJhbWUqIGNhbGxpbmdPckVudGVyZWRGcmFtZSgpCiB7
CiAgICAgcmV0dXJuIFY4QmluZGluZ1N0YXRlOjpPbmx5KCktPmFjdGl2ZUZyYW1lKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgJKHJldmlzaW9uIDg4Njgx
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTEgKzQ1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBVc2Ug
YW4gYXJyYXkgdG8gaG9sZCBkZXBlbmRlbnRzLiBJdCB3b3JrcyBsaWtlIGEgcmVmLWNvdW50ZWQg
c2NoZW1lLiBBIHZhbHVlIGNhbiBiZSBhZGRlZCBtb3JlIHRoYW4gb25jZSB0byB0aGUgRE9NIG9i
amVjdC4KICAgICB2b2lkIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3kodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Piwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4sIGludCBjYWNoZUluZGV4KTsKICAgICB2b2lkIHJl
bW92ZUhpZGRlbkRlcGVuZGVuY3kodjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4sIGludCBjYWNoZUluZGV4KTsKLSAgICAKKwogICAgIC8vIENvbWJvIGNyZWF0ZS9y
ZW1vdmUsIGZvciBnZW5lcmF0ZWQgZXZlbnQtaGFuZGxlci1zZXR0ZXIgYmluZGluZ3M6CiAgICAg
dm9pZCB0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3kodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgRXZl
bnRMaXN0ZW5lciogb2xkVmFsdWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG5ld1ZhbHVlLCBpbnQg
Y2FjaGVJbmRleCk7Ci0gICAgCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKwog
ICAgIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKEZyYW1lKik7CiAgICAgS1VSTCBjb21wbGV0
ZVVSTChjb25zdCBTdHJpbmcmIHJlbGF0aXZlVVJMKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0
YXRlLmNwcAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9z
cGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEx
ICs4NCw2IEBAIHZvaWQgU3RhdGU8VjhCaW5kaW5nPjo6aW1tZWRpYXRlbHlSZXBvcnQKICAgICBW
OFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQpOwogfQogCi1ib29sIFN0YXRlPFY4
QmluZGluZz46OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCi17Ci0gICAgcmV0dXJuIFNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotfQotCiBib29sIFN0YXRlPFY4Qmlu
ZGluZz46OmFsbG93c0FjY2Vzc0Zyb21GcmFtZShGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJu
IFNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdChmcmFtZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGlu
Z1N0YXRlLmgJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
c3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCAr
NTUsNiBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lKCk7CiAgICAgRnJhbWUqIGZp
cnN0RnJhbWUoKTsKIAotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci0KICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgc2hhcmVkIGluIEJpbmRpbmdTZWN1cml0eQogICAgIGJv
b2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsMTAgKzI5
NSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKQogCiB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c3VibWl0RnJvbUphdmFTY3JpcHQoKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN1
Ym1pdCgwLCBmYWxzZSwgZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSwgU3VibWl0dGVkQnlKYXZhU2NyaXB0KTsKKyAgICBzdWJtaXQoMCwgZmFsc2UsIFNj
cmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBTdWJtaXR0ZWRCeUphdmFT
Y3JpcHQpOwogfQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVudCwg
Ym9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiwgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIEZv
cm1TdWJtaXNzaW9uVHJpZ2dlciBmb3JtU3VibWlzc2lvblRyaWdnZXIpCkBAIC0zMzUsNyArMzMy
LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAgIGlmIChu
ZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCiAgICAg
ICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUp
OwogCi0gICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKEZvcm1TdWJtaXNzaW9uOjpjcmVh
dGUodGhpcywgbV9hdHRyaWJ1dGVzLCBldmVudCwgIXByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgZm9y
bVN1Ym1pc3Npb25UcmlnZ2VyKSk7CisgICAgYm9vbCBsb2NrSGlzdG9yeSA9ICFwcm9jZXNzaW5n
VXNlckdlc3R1cmU7CisgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKEZvcm1TdWJtaXNz
aW9uOjpjcmVhdGUodGhpcywgbV9hdHRyaWJ1dGVzLCBldmVudCwgbG9ja0hpc3RvcnksIGZvcm1T
dWJtaXNzaW9uVHJpZ2dlcikpOwogCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZp
cnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHZvaWQgRE9NV2lu
ZG93OjpzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcKICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rv
cnkgaXRlbSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHVzZXIgZ2VzdHVyZS4KICAgICBtX2ZyYW1l
LT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoYWN0aXZlRnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksCiAgICAgICAgIGNvbXBsZXRlZFVSTCwg
YWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksCi0gICAgICAgIGxvY2tp
bmcgIT0gTG9ja0hpc3RvcnlCYXNlZE9uR2VzdHVyZVN0YXRlIHx8ICFhY3RpdmVGcmFtZS0+c2Ny
aXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLAorICAgICAgICBsb2NraW5n
ICE9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSB8fCAhU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksCiAgICAgICAgIGxvY2tpbmcgIT0gTG9ja0hpc3RvcnlC
YXNlZE9uR2VzdHVyZVN0YXRlKTsKIH0KIApAQCAtMTc2NSw4ICsxNzY1LDggQEAgRnJhbWUqIERP
TVdpbmRvdzo6Y3JlYXRlV2luZG93KGNvbnN0IFN0cgogICAgIGlmIChjcmVhdGVkKQogICAgICAg
ICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKGFjdGl2ZVdpbmRvdy0+c2VjdXJp
dHlPcmlnaW4oKSwgY29tcGxldGVkVVJMLCByZWZlcnJlciwgZmFsc2UsIGZhbHNlKTsKICAgICBl
bHNlIGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBuZXdGcmFtZS0+bmF2aWdh
dGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZVdpbmRvdy0+c2Vj
dXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJMLnN0cmluZygpLCByZWZlcnJlciwKLSAgICAgICAg
ICAgICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpLCBmYWxzZSk7CisgICAgICAgIGJvb2wgbG9ja0hpc3RvcnkgPSAhU2NyaXB0Q29udHJvbGxl
cjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgICAgIG5ld0ZyYW1lLT5uYXZpZ2F0aW9u
U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoYWN0aXZlV2luZG93LT5zZWN1cml0
eU9yaWdpbigpLCBjb21wbGV0ZWRVUkwuc3RyaW5nKCksIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwg
ZmFsc2UpOwogICAgIH0KIAogICAgIHJldHVybiBuZXdGcmFtZTsKQEAgLTE4MTQsMTEgKzE4MTQs
MTIgQEAgUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3BlbihjbwogCiAgICAgICAg
IC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUgZmlyc3Qgd2luZG93IHJh
dGhlciB0aGFuIHRoZSBhY3RpdmUgd2luZG93IHRvCiAgICAgICAgIC8vIGRldGVybWluZSB0aGUg
b3V0Z29pbmcgcmVmZXJyZXIuIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCisgICAg
ICAgIGJvb2wgbG9ja0hpc3RvcnkgPSAhU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCk7CiAgICAgICAgIHRhcmdldEZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNj
aGVkdWxlTG9jYXRpb25DaGFuZ2UoYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCksCi0gICAgICAgICAgICBmaXJzdEZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmxTdHJpbmcpLnN0cmluZygpLAotICAgICAgICAgICAgZmlyc3RGcmFtZS0+bG9hZGVyKCktPm91
dGdvaW5nUmVmZXJyZXIoKSwKLSAgICAgICAgICAgICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFu
eVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dEZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmluZygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0RnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9ja0hpc3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICByZXR1cm4gdGFyZ2V0
RnJhbWUtPmRvbVdpbmRvdygpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97018</attachid>
            <date>2011-06-13 15:29:03 -0700</date>
            <delta_ts>2011-06-13 15:44:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62601-20110613152902.patch</filename>
            <type>text/plain</type>
            <size>17988</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NzExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDYtMTMgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgaXMgbm90IGxv
bmdlciBuZWVkZWQgYmVjYXVzZSB1c2VyIGdlc3R1cmUgc3RhdGUgaXMgc3RhdGljCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYwMQorCisgICAgICAg
IFByZXZpb3VzbHksIG91ciB1c2VyLWdlc3R1cmUgc3RhdGUgd2FzIHBlci1mcmFtZS4gIENvZGUg
bmVlZGVkIHRvIGNoZWNrCisgICAgICAgIHRoZSAiZ2xvYmFsIiB1c2VyIGdlc3R1cmUgc3RhdGUg
Y2FsbGVkIGFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCisgICAgICAgIHRvIGl0ZXJh
dGUgdGhyb3VnaCBhbGwgdGhlIGZyYW1lcyBhbmQgbG9vayBmb3Igb25lIHRoYXQgd2FzIHByb2Nl
c3NpbmcKKyAgICAgICAgYSB1c2VyIGdlc3R1cmUuICBTaW5jZSB3ZSBjaGFuZ2VkIHRoZSB1c2Vy
IGdlc3R1cmUgc3RhdGUgdG8gYmUgc3RhdGljLAorICAgICAgICBpdGVyYXRpbmcgb3ZlciBldmVy
eSBmcmFtZSBpbiBleGlzdGVuY2UgaXNuJ3QgbmVlZGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBjbGVhbnMgdXAgYSBjb3VwbGUgb3RoZXIgdXNlci1nZXN0dXJlIGNhbGxzaXRlcyBJIHNh
dworICAgICAgICB3aGlsZSBJIHdhcyBpbiB0aGlzIGNvZGUuICBDb2RlIHNob3VsZCBqdXN0IGNh
bGwKKyAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlIGRpcmVj
dGx5IGluc3RlYWQgb2YKKyAgICAgICAgdHJhbXBvbGluaW5nIHRocm91Z2ggb3RoZXIgZnVuY3Rp
b25zLgorCisgICAgICAgICogYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ojo6YWxsb3dQb3BVcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6
OnNldExvY2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0UHJvY2Vzc2luZ1RpbWVy
Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3Nw
ZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9z
cGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0RnJv
bUphdmFTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQp
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdp
bmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpjcmVhdGVX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuKToKKwogMjAxMS0wNi0x
MyAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Nj
cmlwdENvbnRyb2xsZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCw4IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlw
dHMKIAogU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBT
dHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlKQogeworICAgIC8vIEZJWE1FOiBX
aHkgZG9lcyB0aGUgVVJMIG9mIHRoZSBzY3JpcHQgZGVwZW5kIG9uIGZvcmNlVXNlckdlc3R1cmU/
CisgICAgLy8gVGhpcyBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBhbiBvbGQgdXNlci1nZXN0dXJl
IGJhY2stY2hhbm5lbC4KICAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IEtVUkwoKSA6IG1fZnJhbWUtPmRvY3VtZW50KCkt
PnVybCgpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmlu
ZGluZ1NlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYy9CaW5kaW5nU2VjdXJpdHkuaAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTExNiw3ICsxMTcsNyBAQCBib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5n
Pjo6Y2hlY2tOb2RlCiB0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KIGJvb2wgQmluZGluZ1NlY3Vy
aXR5PEJpbmRpbmc+OjphbGxvd1BvcFVwKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSkKIHsKLSAgICBp
ZiAoc3RhdGUtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmIChTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Zmlyc3RGcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA4ODY4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwMywxMiArMzAzLDYgQEAgRnJhbWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhl
YykKICAgICByZXR1cm4gZmlyc3RET01XaW5kb3coZXhlYyktPmZyYW1lKCk7CiB9CiAKLS8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24uIENhbGxlcnMgY2FuIHVzZSBTY3Jp
cHRDb250cm9sbGVyIGRpcmVjdGx5LgotYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQotewot
ICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0K
LQogSlNWYWx1ZSBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3Bl
cnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw4
ICsyNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgSlNDOjpKU1ZhbHVlIG9iamVjdFRv
U3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgIEZyYW1lKiB0b0R5bmFtaWNG
cmFtZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7
Ci0gICAgCisKICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJp
bmdJbXBsID0gcy5pbXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
OCArNzgsOSBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAg
RnJhbWUqIGFjdGl2ZUZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAKKyAgICBib29sIGxvY2tIaXN0b3J5ID0g
IVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgIGZyYW1lLT5u
YXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobGV4aWNhbEZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAotICAgICAgICBzdHIsIGFjdGl2ZUZyYW1l
LT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5h
bnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgICAgICBzdHIsIGFj
dGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBsb2NrSGlzdG9yeSwgZmFs
c2UpOwogfQogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBEb2N1bWVudCogZG9jdW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODg2ODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgwLDM3ICsyODAsNiBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6Omlz
SmF2YVNjcmlwdEFuY2hvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNjcmlwdENvbnRy
b2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3Vw
KCkucGFnZXMoKTsKLSAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFn
ZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
YWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IGZy
YW1lLT5zY3JpcHQoKTsKLQotICAgICAgICAgICAgaWYgKHNjcmlwdC0+bV9hbGxvd1BvcHVwc0Zy
b21QbHVnaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGNv
bnN0IFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyRW5kID0gbV93aW5kb3dTaGVsbHMuZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93
aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBpdGVyRW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBFdmVudCogZXZlbnQgPSBzaGVsbC0+d2luZG93KCktPmN1cnJlbnRFdmVu
dCgpOwotICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC0+ZnJvbVVzZXJHZXN0dXJl
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoaXNKYXZhU2NyaXB0QW5jaG9yTmF2aWdhdGlvbigpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2lu
KEZyYW1lICpmcmFtZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmN1cnJlbnRTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODg2ODEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3
ICsxMTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNr
KGJvb2wgYikgeyBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gYjsgfQogICAgIHN0YXRpYyBi
b29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcm9tQ3Vy
cmVudE9yaWdpbihGcmFtZSopOwogICAgIGJvb2wgY2FuRXhlY3V0ZVNjcmlwdHMoUmVhc29uRm9y
Q2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA4ODY4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDk5LDggKzIwOTksOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogCiAgICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVjayJ9KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAicHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkiOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICJTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0J
KHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsMTAgKzI3MzcsOSBAQCBzdWIg
R2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogCiAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVyZUNoZWNrIn0pIHsKICAg
ICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJGluZGV4OwotICAgICAgICAjIEZJWE1F
OiBXZSBuZWVkIHRvIHBhc3MgRE9NV3JhcHBlcldvcmxkIGFzIGEgcGFyYW1ldGVyLgotICAgICAg
ICAjIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NDE4MgotICAgICAgICAk
ZnVuY3Rpb25TdHJpbmcgLj0gInByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKKyAgICAgICAgJGZ1
bmN0aW9uU3RyaW5nIC49ICJTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSI7CiAgICAgICAgICRpbmRleCsrOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRDb250
cm9sbGVyLmgifSA9IDE7CiAgICAgfQogCiAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNl
cHRpb25zfSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMiArMTk5
LDYgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlcwogICAgIHJldHVy
biBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAKLWJv
b2wgU2NyaXB0Q29udHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogaXMgdGhpcyByaWdodD8KLSAgICByZXR1cm4gU2NyaXB0Q29u
dHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci19Ci0KIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQogewogICAgIG1fcHJveHktPmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODg2ODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCwxMCArMTU4LDcgQEAgcHVibGljOgogICAgIFRleHRQb3NpdGlvbjAgZXZl
bnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVy
Q2FsbGJhY2soYm9vbCBwcm9jZXNzaW5nVGltZXJDYWxsYmFjaykgeyBtX3Byb2Nlc3NpbmdUaW1l
ckNhbGxiYWNrID0gcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7IH0KLSAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5IHdlIGRvbid0IHVzZSB0aGUgcGFyYW1ldGVyIHdvcmxkIGF0IGFsbC4KLSAgICAvLyBT
ZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTQxODIKICAgICBzdGF0aWMgYm9v
bCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICBib29sIGFueVBhZ2VJc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQpIHsg
bV9wYXVzZWQgPSBwYXVzZWQ7IH0KICAgICBib29sIGlzUGF1c2VkKCkgY29uc3QgeyByZXR1cm4g
bV9wYXVzZWQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMSArOTQsNiBAQCB2b2lkIHRyYW5z
ZmVySGlkZGVuRGVwZW5kZW5jeSh2ODo6SGFuZGxlCiAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVu
ZGVuY3kob2JqZWN0LCBuZXdWYWx1ZSwgY2FjaGVJbmRleCk7CiB9CiAKLWJvb2wgcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkKLXsKLSAgICByZXR1cm4gVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKS0+cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci19Ci0KIEZyYW1lKiBjYWxsaW5nT3JFbnRlcmVkRnJhbWUo
KQogewogICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5hY3RpdmVGcmFtZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCShyZXZpc2lvbiA4
ODY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDExICs0NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
VXNlIGFuIGFycmF5IHRvIGhvbGQgZGVwZW5kZW50cy4gSXQgd29ya3MgbGlrZSBhIHJlZi1jb3Vu
dGVkIHNjaGVtZS4gQSB2YWx1ZSBjYW4gYmUgYWRkZWQgbW9yZSB0aGFuIG9uY2UgdG8gdGhlIERP
TSBvYmplY3QuCiAgICAgdm9pZCBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7CiAgICAgdm9p
ZCByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7Ci0gICAgCisKICAgICAvLyBDb21ibyBjcmVh
dGUvcmVtb3ZlLCBmb3IgZ2VuZXJhdGVkIGV2ZW50LWhhbmRsZXItc2V0dGVyIGJpbmRpbmdzOgog
ICAgIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4s
IEV2ZW50TGlzdGVuZXIqIG9sZFZhbHVlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBuZXdWYWx1ZSwg
aW50IGNhY2hlSW5kZXgpOwotICAgIAotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7
CisKICAgICBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSopOwogICAgIEtVUkwgY29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRp
bmdTdGF0ZS5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NCwxMSArODQsNiBAQCB2b2lkIFN0YXRlPFY4QmluZGluZz46OmltbWVkaWF0ZWx5UmVwb3J0CiAg
ICAgVjhQcm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0KTsKIH0KIAotYm9vbCBTdGF0
ZTxWOEJpbmRpbmc+Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQotewotICAgIHJldHVybiBTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0KLQogYm9vbCBTdGF0ZTxW
OEJpbmRpbmc+OjphbGxvd3NBY2Nlc3NGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIHJl
dHVybiBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJp
bmRpbmdTdGF0ZS5oCShyZXZpc2lvbiA4ODY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDggKzU1LDYgQEAgcHVibGljOgogICAgIEZyYW1lKiBhY3RpdmVGcmFtZSgpOwogICAgIEZyYW1l
KiBmaXJzdEZyYW1lKCk7CiAKLSAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBpbiBCaW5kaW5nU2VjdXJpdHkKICAg
ICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShGcmFtZSopOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODY4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDEw
ICsyOTUsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkKIAogdm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdEZyb21KYXZhU2NyaXB0KCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBzdWJtaXQoMCwgZmFsc2UsIGZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCksIFN1Ym1pdHRlZEJ5SmF2YVNjcmlwdCk7CisgICAgc3VibWl0KDAsIGZhbHNl
LCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgU3VibWl0dGVkQnlK
YXZhU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZl
bnQsIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
LCBGb3JtU3VibWlzc2lvblRyaWdnZXIgZm9ybVN1Ym1pc3Npb25UcmlnZ2VyKQpAQCAtMzM1LDcg
KzMzMiw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICBp
ZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQog
ICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0
cnVlKTsKIAotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybShGb3JtU3VibWlzc2lvbjo6
Y3JlYXRlKHRoaXMsIG1fYXR0cmlidXRlcywgZXZlbnQsICFwcm9jZXNzaW5nVXNlckdlc3R1cmUs
IGZvcm1TdWJtaXNzaW9uVHJpZ2dlcikpOworICAgIGJvb2wgbG9ja0hpc3RvcnkgPSAhcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlOworICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybShGb3JtU3Vi
bWlzc2lvbjo6Y3JlYXRlKHRoaXMsIG1fYXR0cmlidXRlcywgZXZlbnQsIGxvY2tIaXN0b3J5LCBm
b3JtU3VibWlzc2lvblRyaWdnZXIpKTsKIAogICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAm
JiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1
Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDg4NjgxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc3LDcgKzE2NzcsNyBAQCB2b2lkIERP
TVdpbmRvdzo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nCiAgICAgLy8gV2Ugd2FudCBhIG5ldyBo
aXN0b3J5IGl0ZW0gaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSB1c2VyIGdlc3R1cmUuCiAgICAgbV9m
cmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2
ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAogICAgICAgICBjb21wbGV0ZWRV
UkwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLAotICAgICAgICBs
b2NraW5nICE9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSB8fCAhYWN0aXZlRnJhbWUt
PnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwKKyAgICAgICAgbG9j
a2luZyAhPSBMb2NrSGlzdG9yeUJhc2VkT25HZXN0dXJlU3RhdGUgfHwgIVNjcmlwdENvbnRyb2xs
ZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLAogICAgICAgICBsb2NraW5nICE9IExvY2tIaXN0
b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSk7CiB9CiAKQEAgLTE3NjUsOCArMTc2NSw4IEBAIEZyYW1l
KiBET01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhjb25zdCBTdHIKICAgICBpZiAoY3JlYXRlZCkKICAg
ICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlvbihhY3RpdmVXaW5kb3ctPnNl
Y3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgZWxzZSBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbmV3RnJhbWUtPm5h
dmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShhY3RpdmVXaW5kb3ct
PnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTC5zdHJpbmcoKSwgcmVmZXJyZXIsCi0gICAg
ICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSwgZmFsc2UpOworICAgICAgICBib29sIGxvY2tIaXN0b3J5ID0gIVNjcmlwdENvbnRy
b2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICBuZXdGcmFtZS0+bmF2aWdh
dGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZVdpbmRvdy0+c2Vj
dXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJMLnN0cmluZygpLCByZWZlcnJlciwgbG9ja0hpc3Rv
cnksIGZhbHNlKTsKICAgICB9CiAKICAgICByZXR1cm4gbmV3RnJhbWU7CkBAIC0xODE0LDExICsx
ODE0LDEyIEBAIFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4oY28KIAogICAg
ICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMgdGhlIGZpcnN0IHdpbmRv
dyByYXRoZXIgdGhhbiB0aGUgYWN0aXZlIHdpbmRvdyB0bwogICAgICAgICAvLyBkZXRlcm1pbmUg
dGhlIG91dGdvaW5nIHJlZmVycmVyLiBXZSByZXBsaWNhdGUgdGhhdCBiZWhhdmlvciBoZXJlLgor
ICAgICAgICBib29sIGxvY2tIaXN0b3J5ID0gIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpOwogICAgICAgICB0YXJnZXRGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigp
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLAotICAgICAgICAgICAgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsU3RyaW5nKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIGZpcnN0RnJhbWUtPmxvYWRlcigp
LT5vdXRnb2luZ1JlZmVycmVyKCksCi0gICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgp
LT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOwotCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKS5zdHJpbmcoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2tIaXN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHRh
cmdldEZyYW1lLT5kb21XaW5kb3coKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97022</attachid>
            <date>2011-06-13 15:44:56 -0700</date>
            <delta_ts>2011-06-13 16:28:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-62601-20110613154455.patch</filename>
            <type>text/plain</type>
            <size>17771</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDYtMTMgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgaXMgbm90IGxvbmdl
ciBuZWVkZWQgYmVjYXVzZSB1c2VyIGdlc3R1cmUgc3RhdGUgaXMgc3RhdGljCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYwMQorCisgICAgICAgIFBy
ZXZpb3VzbHksIG91ciB1c2VyLWdlc3R1cmUgc3RhdGUgd2FzIHBlci1mcmFtZS4gIENvZGUgbmVl
ZGVkIHRvIGNoZWNrCisgICAgICAgIHRoZSAiZ2xvYmFsIiB1c2VyIGdlc3R1cmUgc3RhdGUgY2Fs
bGVkIGFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCisgICAgICAgIHRvIGl0ZXJhdGUg
dGhyb3VnaCBhbGwgdGhlIGZyYW1lcyBhbmQgbG9vayBmb3Igb25lIHRoYXQgd2FzIHByb2Nlc3Np
bmcKKyAgICAgICAgYSB1c2VyIGdlc3R1cmUuICBTaW5jZSB3ZSBjaGFuZ2VkIHRoZSB1c2VyIGdl
c3R1cmUgc3RhdGUgdG8gYmUgc3RhdGljLAorICAgICAgICBpdGVyYXRpbmcgb3ZlciBldmVyeSBm
cmFtZSBpbiBleGlzdGVuY2UgaXNuJ3QgbmVlZGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBjbGVhbnMgdXAgYSBjb3VwbGUgb3RoZXIgdXNlci1nZXN0dXJlIGNhbGxzaXRlcyBJIHNhdwor
ICAgICAgICB3aGlsZSBJIHdhcyBpbiB0aGlzIGNvZGUuICBDb2RlIHNob3VsZCBqdXN0IGNhbGwK
KyAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlIGRpcmVjdGx5
IGluc3RlYWQgb2YKKyAgICAgICAgdHJhbXBvbGluaW5nIHRocm91Z2ggb3RoZXIgZnVuY3Rpb25z
LgorCisgICAgICAgICogYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICog
YmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6
YWxsb3dQb3BVcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNl
dExvY2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0UHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3NwZWNp
YWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9zcGVj
aWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0RnJvbUph
dmFTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpjcmVhdGVXaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuKToKKwogMjAxMS0wNi0xMyAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI4ODcwNC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDg4NzIxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw4IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNj
cmlwdHMKIAogU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZVNjcmlwdChjb25z
dCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlKQogeworICAgIC8vIEZJWE1F
OiBXaHkgZG9lcyB0aGUgVVJMIG9mIHRoZSBzY3JpcHQgZGVwZW5kIG9uIGZvcmNlVXNlckdlc3R1
cmU/CisgICAgLy8gVGhpcyBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBhbiBvbGQgdXNlci1nZXN0
dXJlIGJhY2stY2hhbm5lbC4KICAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VD
b2RlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IEtVUkwoKSA6IG1fZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
QmluZGluZ1NlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaAkocmV2aXNpb24gODg3MjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTExNiw3ICsxMTcsNyBAQCBib29sIEJpbmRpbmdTZWN1cml0eTxCaW5k
aW5nPjo6Y2hlY2tOb2RlCiB0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KIGJvb2wgQmluZGluZ1Nl
Y3VyaXR5PEJpbmRpbmc+OjphbGxvd1BvcFVwKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSkKIHsKLSAg
ICBpZiAoc3RhdGUtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmIChTY3JpcHRDb250
cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Zmlyc3RGcmFtZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA4ODcyMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMywxMiArMzAzLDYgQEAgRnJhbWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICByZXR1cm4gZmlyc3RET01XaW5kb3coZXhlYyktPmZyYW1lKCk7CiB9CiAKLS8v
IEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24uIENhbGxlcnMgY2FuIHVzZSBT
Y3JpcHRDb250cm9sbGVyIGRpcmVjdGx5LgotYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQot
ewotICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
LX0KLQogSlNWYWx1ZSBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHBy
b3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
MSw4ICsyNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgSlNDOjpKU1ZhbHVlIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgIEZyYW1lKiB0b0R5bmFt
aWNGcmFtZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7Ci0gICAgCisKICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmdJbXBsID0gcy5pbXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODg3MjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzgsOCArNzgsOSBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAg
ICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAKKyAgICBib29sIGxvY2tIaXN0b3J5
ID0gIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgIGZyYW1l
LT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobGV4aWNhbEZy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAotICAgICAgICBzdHIsIGFjdGl2ZUZy
YW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgp
LT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgICAgICBzdHIs
IGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBsb2NrSGlzdG9yeSwg
ZmFsc2UpOwogfQogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBEb2N1bWVudCogZG9jdW1lbnQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODg3
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgwLDM3ICsyODAsNiBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6
OmlzSmF2YVNjcmlwdEFuY2hvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNjcmlwdENv
bnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAg
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdy
b3VwKCkucGFnZXMoKTsKLSAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cGFnZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9
IGZyYW1lLT5zY3JpcHQoKTsKLQotICAgICAgICAgICAgaWYgKHNjcmlwdC0+bV9hbGxvd1BvcHVw
c0Zyb21QbHVnaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAg
IGNvbnN0IFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyRW5kID0gbV93aW5kb3dTaGVsbHMu
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBpdGVyRW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsK
LSAgICAgICAgICAgICAgICBFdmVudCogZXZlbnQgPSBzaGVsbC0+d2luZG93KCktPmN1cnJlbnRF
dmVudCgpOwotICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC0+ZnJvbVVzZXJHZXN0
dXJlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoaXNKYXZhU2NyaXB0QW5jaG9yTmF2aWdhdGlvbigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21DdXJyZW50T3Jp
Z2luKEZyYW1lICpmcmFtZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODg3MjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
MCw3ICsxMTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxi
YWNrKGJvb2wgYikgeyBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gYjsgfQogICAgIHN0YXRp
YyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcm9t
Q3VycmVudE9yaWdpbihGcmFtZSopOwogICAgIGJvb2wgY2FuRXhlY3V0ZVNjcmlwdHMoUmVhc29u
Rm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA4ODcyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDk5LDggKzIwOTksOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogCiAgICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVjayJ9KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAicHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkiOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICJT
Y3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJ
bmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0JKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsMTAgKzI3MzcsOSBAQCBz
dWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogCiAgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVyZUNoZWNrIn0pIHsK
ICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJGluZGV4OwotICAgICAgICAjIEZJ
WE1FOiBXZSBuZWVkIHRvIHBhc3MgRE9NV3JhcHBlcldvcmxkIGFzIGEgcGFyYW1ldGVyLgotICAg
ICAgICAjIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NDE4MgotICAgICAg
ICAkZnVuY3Rpb25TdHJpbmcgLj0gInByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKKyAgICAgICAg
JGZ1bmN0aW9uU3RyaW5nIC49ICJTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSI7CiAgICAgICAgICRpbmRleCsrOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRD
b250cm9sbGVyLmgifSA9IDE7CiAgICAgfQogCiAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNF
eGNlcHRpb25zfSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMiAr
MTk5LDYgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlcwogICAgIHJl
dHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAK
LWJvb2wgU2NyaXB0Q29udHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogaXMgdGhpcyByaWdodD8KLSAgICByZXR1cm4gU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci19Ci0KIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQogewogICAgIG1fcHJveHktPmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODg3MjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1OCwxMCArMTU4LDcgQEAgcHVibGljOgogICAgIFRleHRQb3NpdGlvbjAg
ZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1Rp
bWVyQ2FsbGJhY2soYm9vbCBwcm9jZXNzaW5nVGltZXJDYWxsYmFjaykgeyBtX3Byb2Nlc3NpbmdU
aW1lckNhbGxiYWNrID0gcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7IH0KLSAgICAvLyBGSVhNRTog
Q3VycmVudGx5IHdlIGRvbid0IHVzZSB0aGUgcGFyYW1ldGVyIHdvcmxkIGF0IGFsbC4KLSAgICAv
LyBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTQxODIKICAgICBzdGF0aWMg
Ym9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICBib29sIGFueVBhZ2VJc1Byb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQp
IHsgbV9wYXVzZWQgPSBwYXVzZWQ7IH0KICAgICBib29sIGlzUGF1c2VkKCkgY29uc3QgeyByZXR1
cm4gbV9wYXVzZWQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMSArOTQsNiBAQCB2b2lkIHRy
YW5zZmVySGlkZGVuRGVwZW5kZW5jeSh2ODo6SGFuZGxlCiAgICAgICAgIGNyZWF0ZUhpZGRlbkRl
cGVuZGVuY3kob2JqZWN0LCBuZXdWYWx1ZSwgY2FjaGVJbmRleCk7CiB9CiAKLWJvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkKLXsKLSAgICByZXR1cm4gVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKS0+
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci19Ci0KIEZyYW1lKiBjYWxsaW5nT3JFbnRlcmVkRnJh
bWUoKQogewogICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5hY3RpdmVGcmFtZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCShyZXZpc2lv
biA4ODcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDExICs0NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ly8gVXNlIGFuIGFycmF5IHRvIGhvbGQgZGVwZW5kZW50cy4gSXQgd29ya3MgbGlrZSBhIHJlZi1j
b3VudGVkIHNjaGVtZS4gQSB2YWx1ZSBjYW4gYmUgYWRkZWQgbW9yZSB0aGFuIG9uY2UgdG8gdGhl
IERPTSBvYmplY3QuCiAgICAgdm9pZCBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7CiAgICAg
dm9pZCByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpM
b2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7Ci0gICAgCisKICAgICAvLyBDb21ibyBj
cmVhdGUvcmVtb3ZlLCBmb3IgZ2VuZXJhdGVkIGV2ZW50LWhhbmRsZXItc2V0dGVyIGJpbmRpbmdz
OgogICAgIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4sIEV2ZW50TGlzdGVuZXIqIG9sZFZhbHVlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBuZXdWYWx1
ZSwgaW50IGNhY2hlSW5kZXgpOwotICAgIAotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CisKICAgICBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSopOwogICAgIEtVUkwg
Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJp
bmRpbmdTdGF0ZS5jcHAJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NCwxMSArODQsNiBAQCB2b2lkIFN0YXRlPFY4QmluZGluZz46OmltbWVkaWF0ZWx5UmVwb3J0
CiAgICAgVjhQcm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0KTsKIH0KIAotYm9vbCBT
dGF0ZTxWOEJpbmRpbmc+Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQotewotICAgIHJldHVybiBT
Y3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0KLQogYm9vbCBTdGF0
ZTxWOEJpbmRpbmc+OjphbGxvd3NBY2Nlc3NGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAg
IHJldHVybiBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9W
OEJpbmRpbmdTdGF0ZS5oCShyZXZpc2lvbiA4ODcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDggKzU1LDYgQEAgcHVibGljOgogICAgIEZyYW1lKiBhY3RpdmVGcmFtZSgpOwogICAgIEZy
YW1lKiBmaXJzdEZyYW1lKCk7CiAKLSAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwot
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBpbiBCaW5kaW5nU2VjdXJpdHkK
ICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShGcmFtZSopOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODcyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1
LDEwICsyOTUsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkKIAogdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnN1Ym1pdEZyb21KYXZhU2NyaXB0KCkKIHsKLSAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LSAgICBzdWJtaXQoMCwgZmFsc2UsIGZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCksIFN1Ym1pdHRlZEJ5SmF2YVNjcmlwdCk7CisgICAgc3VibWl0KDAsIGZh
bHNlLCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgU3VibWl0dGVk
QnlKYXZhU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCog
ZXZlbnQsIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0
dXJlLCBGb3JtU3VibWlzc2lvblRyaWdnZXIgZm9ybVN1Ym1pc3Npb25UcmlnZ2VyKQpAQCAtMzM1
LDcgKzMzMiw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAg
ICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1p
dCh0cnVlKTsKIAotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybShGb3JtU3VibWlzc2lv
bjo6Y3JlYXRlKHRoaXMsIG1fYXR0cmlidXRlcywgZXZlbnQsICFwcm9jZXNzaW5nVXNlckdlc3R1
cmUsIGZvcm1TdWJtaXNzaW9uVHJpZ2dlcikpOworICAgIGJvb2wgbG9ja0hpc3RvcnkgPSAhcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlOworICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybShGb3Jt
U3VibWlzc2lvbjo6Y3JlYXRlKHRoaXMsIG1fYXR0cmlidXRlcywgZXZlbnQsIGxvY2tIaXN0b3J5
LCBmb3JtU3VibWlzc2lvblRyaWdnZXIpKTsKIAogICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlv
biAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDg4NzIxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc3LDcgKzE2NzcsNyBAQCB2b2lk
IERPTVdpbmRvdzo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nCiAgICAgLy8gV2Ugd2FudCBhIG5l
dyBoaXN0b3J5IGl0ZW0gaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSB1c2VyIGdlc3R1cmUuCiAgICAg
bV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFj
dGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAogICAgICAgICBjb21wbGV0
ZWRVUkwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLAotICAgICAg
ICBsb2NraW5nICE9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSB8fCAhYWN0aXZlRnJh
bWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwKKyAgICAgICAg
bG9ja2luZyAhPSBMb2NrSGlzdG9yeUJhc2VkT25HZXN0dXJlU3RhdGUgfHwgIVNjcmlwdENvbnRy
b2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLAogICAgICAgICBsb2NraW5nICE9IExvY2tI
aXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSk7CiB9CiAKQEAgLTE3NjUsOCArMTc2NSw4IEBAIEZy
YW1lKiBET01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhjb25zdCBTdHIKICAgICBpZiAoY3JlYXRlZCkK
ICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlvbihhY3RpdmVXaW5kb3ct
PnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSk7
CiAgICAgZWxzZSBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbmV3RnJhbWUt
Pm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShhY3RpdmVXaW5k
b3ctPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTC5zdHJpbmcoKSwgcmVmZXJyZXIsCi0g
ICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKSwgZmFsc2UpOworICAgICAgICBib29sIGxvY2tIaXN0b3J5ID0gIVNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICBuZXdGcmFtZS0+bmF2
aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZVdpbmRvdy0+
c2VjdXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJMLnN0cmluZygpLCByZWZlcnJlciwgbG9ja0hp
c3RvcnksIGZhbHNlKTsKICAgICB9CiAKICAgICByZXR1cm4gbmV3RnJhbWU7CkBAIC0xODE0LDEx
ICsxODE0LDEzIEBAIFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4oY28KIAog
ICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMgdGhlIGZpcnN0IHdp
bmRvdyByYXRoZXIgdGhhbiB0aGUgYWN0aXZlIHdpbmRvdyB0bwogICAgICAgICAvLyBkZXRlcm1p
bmUgdGhlIG91dGdvaW5nIHJlZmVycmVyLiBXZSByZXBsaWNhdGUgdGhhdCBiZWhhdmlvciBoZXJl
LgotICAgICAgICB0YXJnZXRGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxv
Y2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAor
ICAgICAgICBib29sIGxvY2tIaXN0b3J5ID0gIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpOworICAgICAgICB0YXJnZXRGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigp
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKAorICAgICAgICAgICAgYWN0aXZlRnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksCiAgICAgICAgICAgICBmaXJzdEZyYW1lLT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmluZygpLAogICAgICAgICAgICAgZmlyc3RG
cmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwKLSAgICAgICAgICAgICFhY3RpdmVG
cmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7
Ci0KKyAgICAgICAgICAgIGxvY2tIaXN0b3J5LAorICAgICAgICAgICAgZmFsc2UpOwogICAgICAg
ICByZXR1cm4gdGFyZ2V0RnJhbWUtPmRvbVdpbmRvdygpOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>