<?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>52327</bug_id>
          
          <creation_ts>2011-01-12 15:07:42 -0800</creation_ts>
          <short_desc>[GTK] Move text field painting out of gtk2drawing.c</short_desc>
          <delta_ts>2011-01-19 17:06:02 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>52258</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333336</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-12 15:07:42 -0800</bug_when>
    <thetext>This bug tracks moving text area painting out of gtk2drawing.c.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333504</commentid>
    <comment_count>1</comment_count>
      <attachid>78773</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-12 18:53:46 -0800</bug_when>
    <thetext>Created attachment 78773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333720</commentid>
    <comment_count>2</comment_count>
      <attachid>78773</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-13 08:50:50 -0800</bug_when>
    <thetext>Comment on attachment 78773
Patch

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

&gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:363
&gt; +    backgroundRect.inflateX(-style-&gt;xthickness);
&gt; +    backgroundRect.inflateY(-style-&gt;ythickness);

GTK+ doesn&apos;t take into account thickness (only when drawing spin buttons) when drawing both bg and frame, so I think we can use the same rectangle. See gtk+ code:

http://git.gnome.org/browse/gtk+/tree/gtk/gtkentry.c?h=gtk-2-24#n3282
http://git.gnome.org/browse/gtk+/tree/gtk/gtkentry.c?h=gtk-2-24#n3440

&gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:369
&gt; +    gboolean interiorFocus = 0;

We don&apos;t need to initialize this, gtk_widget_style_get() always returns a value for booleans</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333779</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-13 10:35:10 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 78773 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78773&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:363
&gt; &gt; +    backgroundRect.inflateX(-style-&gt;xthickness);
&gt; &gt; +    backgroundRect.inflateY(-style-&gt;ythickness);
&gt; 
&gt; GTK+ doesn&apos;t take into account thickness (only when drawing spin buttons) when drawing both bg and frame, so I think we can use the same rectangle. See gtk+ code:

After talking with Carlos, we agreed that this is the right approach to take (though messy). I&apos;ll upload a patch which explains the reasoning a bit more clearly via comments.

&gt; http://git.gnome.org/browse/gtk+/tree/gtk/gtkentry.c?h=gtk-2-24#n3282
&gt; http://git.gnome.org/browse/gtk+/tree/gtk/gtkentry.c?h=gtk-2-24#n3440
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:369
&gt; &gt; +    gboolean interiorFocus = 0;

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333784</commentid>
    <comment_count>4</comment_count>
      <attachid>78826</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-13 10:37:33 -0800</bug_when>
    <thetext>Created attachment 78826
Patch with clearer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335767</commentid>
    <comment_count>5</comment_count>
      <attachid>78826</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-01-18 04:57:00 -0800</bug_when>
    <thetext>Comment on attachment 78826
Patch with clearer comments

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

Other than improving the comment, I think this patch is good to go!

&gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:372
&gt; +    widgetContext.gtkPaintShadow(textFieldRect, widget, GTK_STATE_NORMAL, GTK_SHADOW_IN, &quot;entry&quot;);

I&apos;m not sure I understand what this comment says to be honest. So GTK+ relies on having the unfocused entry previously rendered, and then renders a smaller but complete text entry on top of it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336587</commentid>
    <comment_count>6</comment_count>
      <attachid>79438</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-19 09:53:11 -0800</bug_when>
    <thetext>Created attachment 79438
Patch rebased to latest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336953</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-19 17:03:48 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 78826 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78826&amp;action=review
&gt; 
&gt; Other than improving the comment, I think this patch is good to go!
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk2.cpp:372
&gt; &gt; +    widgetContext.gtkPaintShadow(textFieldRect, widget, GTK_STATE_NORMAL, GTK_SHADOW_IN, &quot;entry&quot;);
&gt; 
&gt; I&apos;m not sure I understand what this comment says to be honest. So GTK+ relies on having the unfocused entry previously rendered, and then renders a smaller but complete text entry on top of it?

Thanks for the review! I clarified the comment and moved it closer to the actual special case for focus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336954</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-19 17:06:02 -0800</bug_when>
    <thetext>Committed r76182: &lt;http://trac.webkit.org/changeset/76182&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78773</attachid>
            <date>2011-01-12 18:53:46 -0800</date>
            <delta_ts>2011-01-13 10:37:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52327-20110112185341.patch</filename>
            <type>text/plain</type>
            <size>16800</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGFiN2MyM2FmYzU5MjY2NzZmOTI3MmVmZjkyOGI4Y2MxNGJiNzg5Li5h
ZTJjOTgwMGUzZjYzYWQ1NzE2MDk4MmRlNGRmNmU3YjQ5NWNkY2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMTEtMDEtMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgdGV4dCBmaWVsZCBwYWludGluZyBvdXQgb2YgZ3RrMmRyYXdpbmcuYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzMjcKKworICAg
ICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IFVzZSB0aGUgc2V0V2lkZ2V0SGFzRm9j
dXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZp
ZWxkKTogRG8gdGhpcyBtYW51YWxseSBub3cgaW5zdGVhZAorICAgICAgICBvZiBjYWxsaW5nIGlu
dG8gdGhlIE1vemlsbGEgY29kZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHA6IEFkZGVkIGEgY291cGxlIG1vcmUgd3JhcHBlcnMKKyAgICAgICAgZm9y
IEdUSysgdGhlbWUgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Z3RrUGFpbnRGbGF0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50U2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZCBuZXcgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYzogUmVtb3ZlIHVudXNlZCBjb2RlLgor
ICAgICAgICAobW96X2d0a19nZXRfd2lkZ2V0X2JvcmRlcik6CisgICAgICAgIChtb3pfZ3RrX3dp
ZGdldF9wYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaDoKKwogMjAx
MS0wMS0xMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IGI4YjQzMzYzOTIxOTI3YTAyNWMwNTdh
NGVjNzQyYzZlNmI0YjdkYjMuLmFkNmEyYTk5ZTZmZGM2ZmZhOTBkYTBjNTZkMmUzZjM0YjVlMjVk
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIu
Y3BwCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKIAorLy8g
V2UgbmVlZCB0aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VU
X0ZMQUdTLiBJdCdzIGRlcHJlY2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWly
ZSBpdCB0byBlbnN1cmUgcHJvcGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3Vu
ZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKwogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCkBAIC0yMzksNiArMjQzLDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCBzZXRXaWRnZXRIYXNGb2N1cyhHdGtXaWRnZXQq
IHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCit7CisgICAgZ19vYmplY3Rfc2V0KHdpZGdldCwg
Imhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0aGVtZSBlbmdpbmVzIHN0aWxsIGxvb2sK
KyAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVybWluaW5nIGlmIGEgd2lkZ2V0IGhhcyBm
b2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KKyAgICBpZiAoaGFzRm9jdXMpCisgICAgICAgIEdU
S19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CisgICAgZWxzZQorICAg
ICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjUzLDEyICsyNjksNyBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQs
IGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogCiAgICAg
aWYgKGlzRm9jdXNlZChvYmplY3QpKSB7Ci0gICAgICAgIGlmIChpc0VuYWJsZWQob2JqZWN0KSkg
ewotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLSAgICAgICAgICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBUUlVFLCBOVUxMKTsKLSAgICAgICAg
fQorICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRSVUUpOwogCiAgICAgICAgIGdi
b29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dpZHRoID0gMCwgZm9jdXNQYWRkaW5nID0g
MDsKICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LApAQCAtMjg0LDEwICsyOTUs
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkK
ICAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCBz
dGF0ZSwgImJ1dHRvbiIpOwogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQotICAg
IEdUS19XSURHRVRfVU5TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLSNlbmRpZgot
ICAgIGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBGQUxTRSwgTlVMTCk7CisgICAg
c2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBGQUxTRSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0zMzQsOSArMzQyLDM4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywKICAgICByZXR1cm4g
cGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19EUk9QRE9XTiwgb2JqZWN0LCBpbmZvLmNvbnRleHQs
IHJlY3QpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICByZXR1cm4gcGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19FTlRSWSwgb2JqZWN0LCBpbmZv
LmNvbnRleHQsIHJlY3QpOworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKwor
ICAgIGJvb2wgZW5hYmxlZCA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5
Q29udHJvbChyZW5kZXJPYmplY3QpOworICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUg
PSBlbmFibGVkID8gR1RLX1NUQVRFX05PUk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAg
ICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCBlbmFibGVkKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlz
Rm9jdXNlZChyZW5kZXJPYmplY3QpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3QgdGV4dEZpZWxkUmVj
dChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisKKyAgICAvLyBXZSBzaHJpbmsgdGhlIGJhY2tn
cm91bmQgcmVjdCBoZXJlLCBiZWNhdXNlIHRoYXQncyB3aGF0IE1vemlsbGEgZG9lcyBhbmQgaXQK
KyAgICAvLyBhbGxvd3Mgcm91bmRlZCBjb3JuZXJzIHRvIHdvcmsgcHJvcGVybHkgb24gcG9wdWxh
ciB0aGVtZXMuCisgICAgSW50UmVjdCBiYWNrZ3JvdW5kUmVjdCh0ZXh0RmllbGRSZWN0KTsKKyAg
ICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOworICAgIGJh
Y2tncm91bmRSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVzcyk7CisgICAgYmFja2dyb3Vu
ZFJlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0
a1BhaW50RmxhdEJveChiYWNrZ3JvdW5kUmVjdCwgd2lkZ2V0LCBiYWNrZ3JvdW5kU3RhdGUsIEdU
S19TSEFET1dfTk9ORSwgImVudHJ5X2JnIik7CisKKyAgICAvLyBJbiBzb21lIHRoZW1lcyB0aGlz
IGlzIGFjdHVhbGx5IHJlc3BvbnNpYmxlIGZvciBkcmF3aW5nIHRoZSBmcmFtZS4KKyAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50U2hhZG93KHRleHRGaWVsZFJlY3QsIHdpZGdldCwgR1RLX1NUQVRF
X05PUk1BTCwgR1RLX1NIQURPV19JTiwgImVudHJ5Iik7CisKKyAgICBnYm9vbGVhbiBpbnRlcmlv
ckZvY3VzID0gMDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJpbnRlcmlvci1m
b2N1cyIsICZpbnRlcmlvckZvY3VzLCBOVUxMKTsKKyAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9i
amVjdCkgJiYgIWludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QodGV4
dEZpZWxkUmVjdCk7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRGb2N1cyhmb2N1c1Jl
Y3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgImVudHJ5Iik7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggYzhlZWY3YjM5NWVhNmQzMzFiODIyNDQ3YjMwYjU5YTFj
Njk3NTAyMS4uYTc5ZjlkMGZiYTRlYjJhYTIyYTI0ZDJhNTliMzRjODliYjZlYTU4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0LmNwcApAQCAtMTU5LDYgKzE1OSwxMyBAQCB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LAogICAg
ICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIHBhaW50UmVjdC54LCBwYWludFJlY3QueSwg
cGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0KTsKIH0KIAordm9pZCBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0OjpndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93
VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0
ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0LnkgKyByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3BhaW50X2ZsYXRfYm94KGd0
a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5
cGUsICZtX3BhaW50UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWws
IHBhaW50UmVjdC54LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVp
Z2h0KTsKK30KKwogdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZvY3VzKGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQogewogICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3Qg
PSB7IG1fcGFpbnRSZWN0LnggKyByZWN0LngoKSwgbV9wYWludFJlY3QueSArIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKQEAgLTE4MCw3ICsxODcsNiBAQCB2b2lkIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZQogICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIHBhaW50UmVjdC54
LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0KTsKIH0KIAot
CiB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0aW9uKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtT
aGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCiB7CiAgICAgR2RrUmVj
dGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVj
dC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OwpAQCAtMTg4LDYg
KzE5NCwxNCBAQCB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0aW9uKGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZwogICAgICAgICAgICAgICAgICAgICAg
ZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRS
ZWN0LmhlaWdodCk7CiB9CiAKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRT
aGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFp
bCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVj
dC54KCksIG1fcGFpbnRSZWN0LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpIH07CisgICAgZ3RrX3BhaW50X3NoYWRvdyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmbV9wYWludFJlY3QsIHdpZGdldCwK
KyAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBw
YWludFJlY3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQpOworfQorCisKIH0KIAogI2VuZGlmIC8v
IEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA5MGMzMjY5YTM2YTNmYTc0YjdkMGZlMGU1
MjY3MGFiMGZhYjQyZTliLi42OWUxZWI3YWYwZTZhMTg3OGRiNTM1YTExNzFmODA3ZDlkNGQzMDA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTM5LDEwICszOSwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhaW50
TW96aWxsYVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUsIEd0a1dpZGdldFN0YXRlKiwgaW50IGZs
YWdzLCBHdGtUZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05PTkUpOwogICAgIHZvaWQgZ3Rr
UGFpbnRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hh
ZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50RmxhdEJveChjb25zdCBJ
bnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBn
Y2hhciopOwogICAgIHZvaWQgZ3RrUGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBjb25zdCBnY2hhciopOwogICAgIHZvaWQgZ3RrUGFpbnRTbGlkZXIo
Y29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwg
Y29uc3QgZ2NoYXIqLCBHdGtPcmllbnRhdGlvbik7CiAgICAgdm9pZCBndGtQYWludENoZWNrKGNv
bnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNv
bnN0IGdjaGFyKik7CiAgICAgdm9pZCBndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiwgR3Rr
V2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAg
IHZvaWQgZ3RrUGFpbnRTaGFkb3coY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKIAogcHJpdmF0ZToKICAgICBHcmFw
aGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvZ3RrMmRyYXdpbmcuYwppbmRleCA4ZGM2MDFhN2Q1ZGViMTczMjdlZWMzOTBmNzJmZTllYzky
NDU3MWU3Li4wYzExYWViNjJiZjBjYzAxMGZhMGEyYzQ5YTg5OTBhYWRiZTQxY2VkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwpAQCAtMTY0LDE2ICsxNjQsNiBA
QCBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpCiAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsK
IH0KIAotc3RhdGljIGdpbnQKLWVuc3VyZV9lbnRyeV93aWRnZXQoKQotewotICAgIGlmICghZ1Bh
cnRzLT5lbnRyeVdpZGdldCkgewotICAgICAgICBnUGFydHMtPmVudHJ5V2lkZ2V0ID0gZ3RrX2Vu
dHJ5X25ldygpOwotICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+ZW50cnlX
aWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCiAvKiBXZSBu
ZWVkIHRvIGhhdmUgcG9pbnRlcnMgdG8gdGhlIGlubmVyIHdpZGdldHMgKGJ1dHRvbiwgc2VwYXJh
dG9yLCBhcnJvdykKICAqIG9mIHRoZSBDb21ib0JveCB0byBnZXQgdGhlIGNvcnJlY3QgcmVuZGVy
aW5nIGZyb20gdGhlbWUgZW5naW5lcyB3aGljaAogICogc3BlY2lhbCBjYXNlcyB0aGVpciBsb29r
LiBTaW5jZSB0aGUgaW5uZXIgbGF5b3V0IGNhbiBjaGFuZ2UsIHdlIGFzayBHVEsKQEAgLTc3OCwx
MDcgKzc2OCw2IEBAIG1vel9ndGtfc2Nyb2xsYmFyX3RodW1iX3BhaW50KEd0a1RoZW1lV2lkZ2V0
VHlwZSB3aWRnZXQsCiB9CiAKIHN0YXRpYyBnaW50Ci1tb3pfZ3RrX2VudHJ5X3BhaW50KEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAg
ICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAg
ICAgICAgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBHdGtTdGF0ZVR5cGUgYmdfc3RhdGUgPSBzdGF0ZS0+ZGlzYWJsZWQgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfSU5TRU5TSVRJVkUgOiBHVEtf
U1RBVEVfTk9STUFMOwotICAgIGdpbnQgeCwgeSwgd2lkdGggPSByZWN0LT53aWR0aCwgaGVpZ2h0
ID0gcmVjdC0+aGVpZ2h0OwotICAgIEd0a1N0eWxlKiBzdHlsZTsKLSAgICBnYm9vbGVhbiBpbnRl
cmlvcl9mb2N1czsKLSAgICBnYm9vbGVhbiB0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5ID0gRkFM
U0U7Ci0gICAgZ2ludCBmb2N1c193aWR0aDsKLQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxl
KHdpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yX2ZvY3VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzX3dpZHRoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICJob25vcnMtdHJhbnNwYXJlbnQtYmctaGludCIsICZ0aGVt
ZV9ob25vcnNfdHJhbnNwYXJlbmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
Ci0gICAgLyogZ3RrZW50cnkuYyB1c2VzIHR3byB3aW5kb3dzLCBvbmUgZm9yIHRoZSBlbnRpcmUg
d2lkZ2V0IGFuZCBvbmUgZm9yIHRoZQotICAgICAqIHRleHQgYXJlYSBpbnNpZGUgaXQuIFRoZSBi
YWNrZ3JvdW5kIG9mIGJvdGggd2luZG93cyBpcyBzZXQgdG8gdGhlICJiYXNlIgotICAgICAqIGNv
bG9yIG9mIHRoZSBuZXcgc3RhdGUgaW4gZ3RrX2VudHJ5X3N0YXRlX2NoYW5nZWQsIGJ1dCBvbmx5
IHRoZSBpbm5lcgotICAgICAqIHRleHRhcmVhIHdpbmRvdyB1c2VzIGd0a19wYWludF9mbGF0X2Jv
eCB3aGVuIGV4cG9zZWQgKi8KLQotICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngs
IHJlY3QtPnkpOwotCi0gICAgLyogVGhpcyBnZXRzIHVzIGEgbG92ZWx5IGdyZXlpc2ggZGlzYWJs
ZWRpc2ggbG9vayAqLwotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsICFzdGF0
ZS0+ZGlzYWJsZWQpOwotCi0gICAgLyogR1RLIGZpbGxzIHRoZSBvdXRlciB3aWRnZXQgd2luZG93
IHdpdGggdGhlIGJhc2UgY29sb3IgYmVmb3JlIGRyYXdpbmcgdGhlIHdpZGdldC4KLSAgICAgKiBT
b21lIG9sZGVyIHRoZW1lcyByZWx5IG9uIHRoaXMgYmVoYXZpb3IsIGJ1dCBtYW55IHRoZW1lcyBu
b3dhZGF5cyB1c2Ugcm91bmRlZAotICAgICAqIGNvcm5lcnMgb24gdGhlaXIgd2lkZ2V0cy4gV2hp
bGUgbW9zdCBHVEsgYXBwcyBhcmUgYmxpc3NmdWxseSB1bmF3YXJlIG9mIHRoaXMKLSAgICAgKiBw
cm9ibGVtIGR1ZSB0byB0aGVpciB1c2Ugb2YgdGhlIGRlZmF1bHQgd2luZG93IGJhY2tncm91bmQs
IHdlIHJlbmRlciB3aWRnZXRzIG9uCi0gICAgICogbWFueSBraW5kcyBvZiBiYWNrZ3JvdW5kcyBv
biB0aGUgd2ViLgotICAgICAqIElmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGNvcGUgd2l0aCB0cmFu
c3BhcmVuY3ksIHRoZW4gd2UgY2FuIHNraXAgcHJlLWZpbGxpbmcKLSAgICAgKiBhbmQgbm90aWZ5
IHRoZSB0aGVtZSBpdCB3aWxsIHBhaW50IGRpcmVjdGx5IG9uIHRoZSBjYW52YXMuICovCi0gICAg
aWYgKHRoZW1lX2hvbm9yc190cmFuc3BhcmVuY3kpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5U
RVIoVFJVRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdka19kcmF3X3JlY3RhbmdsZShkcmF3
YWJsZSwgc3R5bGUtPmJhc2VfZ2NbYmdfc3RhdGVdLCBUUlVFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpcHJlY3QtPngsIGNsaXByZWN0LT55LCBjbGlwcmVjdC0+d2lkdGgsIGNsaXBy
ZWN0LT5oZWlnaHQpOwotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQp
LCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSkpOwotICAgIH0K
LQotICAgIC8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGlubmVyIHdpbmRvdywgc2VlIF9ndGtf
ZW50cnlfZ2V0X2JvcmRlcnMgKi8KLSAgICB4ID0gWFRISUNLTkVTUyhzdHlsZSk7Ci0gICAgeSA9
IFlUSElDS05FU1Moc3R5bGUpOwotCi0gICAgaWYgKCFpbnRlcmlvcl9mb2N1cykgewotICAgICAg
ICB4ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICB5ICs9IGZvY3VzX3dpZHRoOwotICAgIH0KLQot
ICAgIC8qIFNpbXVsYXRlIGFuIGV4cG9zZSBvZiB0aGUgaW5uZXIgd2luZG93ICovCi0gICAgZ3Rr
X3BhaW50X2ZsYXRfYm94KHN0eWxlLCBkcmF3YWJsZSwgYmdfc3RhdGUsIEdUS19TSEFET1dfTk9O
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIHdpZGdldCwgImVudHJ5X2JnIiwg
IHJlY3QtPnggKyB4LAotICAgICAgICAgICAgICAgICAgICAgICByZWN0LT55ICsgeSwgcmVjdC0+
d2lkdGggLSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7Ci0KLSAgICAvKiBOb3cgcGFpbnQgdGhl
IHNoYWRvdyBhbmQgZm9jdXMgYm9yZGVyLgotICAgICAqIFdlIGRvIGxpa2UgaW4gZ3RrX2VudHJ5
X2RyYXdfZnJhbWUsIHdlIGZpcnN0IGRyYXcgdGhlIHNoYWRvdywgYSB0YWQKLSAgICAgKiBzbWFs
bGVyIHdoZW4gZm9jdXNlZCBpZiB0aGUgZm9jdXMgaXMgbm90IGludGVyaW9yLCB0aGVuIHRoZSBm
b2N1cy4gKi8KLSAgICB4ID0gcmVjdC0+eDsKLSAgICB5ID0gcmVjdC0+eTsKLQotICAgIGlmIChz
dGF0ZS0+Zm9jdXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7Ci0gICAgICAgIC8qIFRoaXMgd2ls
bCBnZXQgdXMgdGhlIGxpdCBib3JkZXJzIHRoYXQgZm9jdXNlZCB0ZXh0Ym94ZXMgZW5qb3kgb24K
LSAgICAgICAgICogc29tZSB0aGVtZXMuICovCi0gICAgICAgIEdUS19XSURHRVRfU0VUX0ZMQUdT
KHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0KLSAgICAgICAgaWYgKCFpbnRlcmlvcl9mb2N1cykg
ewotICAgICAgICAgICAgLyogSW5kZW50IHRoZSBib3JkZXIgYSBsaXR0bGUgYml0IGlmIHdlIGhh
dmUgZXh0ZXJpb3IgZm9jdXMgCi0gICAgICAgICAgICAgICAodGhpcyBpcyB3aGF0IEdUSyBkb2Vz
IHRvIGRyYXcgbmF0aXZlIGVudHJpZXMpICovCi0gICAgICAgICAgICB4ICs9IGZvY3VzX3dpZHRo
OwotICAgICAgICAgICAgeSArPSBmb2N1c193aWR0aDsKLSAgICAgICAgICAgIHdpZHRoIC09IDIg
KiBmb2N1c193aWR0aDsKLSAgICAgICAgICAgIGhlaWdodCAtPSAyICogZm9jdXNfd2lkdGg7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBndGtfcGFpbnRfc2hhZG93KHN0eWxlLCBkcmF3YWJsZSwg
R1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwKLSAgICAgICAgICAgICAgICAgICAgIGNs
aXByZWN0LCB3aWRnZXQsICJlbnRyeSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYg
KHN0YXRlLT5mb2N1c2VkICYmICFzdGF0ZS0+ZGlzYWJsZWQpIHsKLSAgICAgICAgaWYgKCFpbnRl
cmlvcl9mb2N1cykgewotICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBkcmF3YWJs
ZSwgIEdUS19TVEFURV9OT1JNQUwsIGNsaXByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZGdldCwgImVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT54
LCByZWN0LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qIE5vdyB1bnNldCB0aGUgZm9jdXMgZmxhZy4gV2UgZG9uJ3Qgd2FudCBvdGhlciBlbnRy
aWVzIHRvIGxvb2sKLSAgICAgICAgICogbGlrZSB0aGV5J3JlIGZvY3VzZWQgdG9vISAqLwotICAg
ICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKIG1vel9n
dGtfY29tYm9fYm94X3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiBy
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3Rr
V2lkZ2V0U3RhdGUqIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaXNo
dG1sLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTEwMzQsMTAgKzkyMyw2IEBAIG1v
el9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCog
bGVmdCwgZ2ludCogdG9wLAogICAgICAgICAgICAgKmJvdHRvbSArPSBzdHlsZS0+eXRoaWNrbmVz
czsKICAgICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7CiAgICAgICAgIH0KLSAgICBj
YXNlIE1PWl9HVEtfRU5UUlk6Ci0gICAgICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKLSAgICAg
ICAgdyA9IGdQYXJ0cy0+ZW50cnlXaWRnZXQ7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTU9a
X0dUS19EUk9QRE9XTjoKICAgICAgICAgewogICAgICAgICAgICAgLyogV2UgbmVlZCB0byBhY2Nv
dW50IGZvciB0aGUgYXJyb3cgb24gdGhlIGRyb3Bkb3duLCBzbyB0ZXh0CkBAIC0xMTY4LDExICsx
MDUzLDYgQEAgbW96X2d0a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwg
R2RrRHJhd2FibGUqIGRyYXdhYmxlLAogICAgIGNhc2UgTU9aX0dUS19TQ1JPTExFRF9XSU5ET1c6
CiAgICAgICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19wYWludChkcmF3YWJsZSwg
cmVjdCwgY2xpcHJlY3QsIHN0YXRlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RL
X0VOVFJZOgotICAgICAgICBlbnN1cmVfZW50cnlfd2lkZ2V0KCk7Ci0gICAgICAgIHJldHVybiBt
b3pfZ3RrX2VudHJ5X3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVjdCwgc3RhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+ZW50cnlXaWRnZXQsIGRpcmVj
dGlvbik7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoKICAgICAg
ICAgcmV0dXJuIG1vel9ndGtfY29tYm9fYm94X3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVj
dCwgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2Jvb2xl
YW4pIGZsYWdzLCBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL2d0a2RyYXdpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGtkcmF3
aW5nLmgKaW5kZXggYTI2MWRlNTg3YWM2OTI5MzlkOTg3OGRiMGU1NGUxM2IwYThkNTEzZi4uMjM4
YTI5M2E2YjkyMDIyNzllOWIwNzM4OGRlYjQwNGJhM2U5Y2IxZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5oCkBAIC00OCw2ICs0OCw4IEBACiAjaWZuZGVmIF9HVEtf
RFJBV0lOR19IXwogI2RlZmluZSBfR1RLX0RSQVdJTkdfSF8KIAorI3VuZGVmIEdUS19ESVNBQkxF
X0RFUFJFQ0FURUQKKwogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVz
CkBAIC04OSw3ICs5MSw2IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtUaGVtZVBhcnRzIHsKICAgICBH
dGtXaWRnZXQqIGJ1dHRvbkFycm93V2lkZ2V0OwogICAgIEd0a1dpZGdldCogaG9yaXpTY3JvbGxi
YXJXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiB2ZXJ0U2Nyb2xsYmFyV2lkZ2V0OwotICAgIEd0a1dp
ZGdldCogZW50cnlXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiBjb21ib0JveFdpZGdldDsKICAgICBH
dGtXaWRnZXQqIGNvbWJvQm94QnV0dG9uV2lkZ2V0OwogICAgIEd0a1dpZGdldCogY29tYm9Cb3hB
cnJvd1dpZGdldDsKQEAgLTEzMyw3ICsxMzQsNiBAQCB0eXBlZGVmIGVudW0gewogICBNT1pfR1RL
X1NDUk9MTEJBUl9USFVNQl9WRVJUSUNBTCwKICAgLyogUGFpbnRzIHRoZSBiYWNrZ3JvdW5kIG9m
IGEgc2Nyb2xsZWQgd2luZG93ICovCiAgIE1PWl9HVEtfU0NST0xMRURfV0lORE9XLAotICBNT1pf
R1RLX0VOVFJZLAogICAvKiBQYWludHMgYSBHdGtPcHRpb25NZW51LiAqLwogICBNT1pfR1RLX0RS
T1BET1dOLAogICAvKiBQYWludHMgYSBHdGtQcm9ncmVzc0Jhci4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78826</attachid>
            <date>2011-01-13 10:37:33 -0800</date>
            <delta_ts>2011-01-19 17:03:57 -0800</delta_ts>
            <desc>Patch with clearer comments</desc>
            <filename>bug-52327-20110113103733.patch</filename>
            <type>text/plain</type>
            <size>17271</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGFiN2MyM2FmYzU5MjY2NzZmOTI3MmVmZjkyOGI4Y2MxNGJiNzg5Li5h
ZTJjOTgwMGUzZjYzYWQ1NzE2MDk4MmRlNGRmNmU3YjQ5NWNkY2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMTEtMDEtMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgdGV4dCBmaWVsZCBwYWludGluZyBvdXQgb2YgZ3RrMmRyYXdpbmcuYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzMjcKKworICAg
ICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IFVzZSB0aGUgc2V0V2lkZ2V0SGFzRm9j
dXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZp
ZWxkKTogRG8gdGhpcyBtYW51YWxseSBub3cgaW5zdGVhZAorICAgICAgICBvZiBjYWxsaW5nIGlu
dG8gdGhlIE1vemlsbGEgY29kZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHA6IEFkZGVkIGEgY291cGxlIG1vcmUgd3JhcHBlcnMKKyAgICAgICAgZm9y
IEdUSysgdGhlbWUgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Z3RrUGFpbnRGbGF0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50U2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZCBuZXcgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYzogUmVtb3ZlIHVudXNlZCBjb2RlLgor
ICAgICAgICAobW96X2d0a19nZXRfd2lkZ2V0X2JvcmRlcik6CisgICAgICAgIChtb3pfZ3RrX3dp
ZGdldF9wYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaDoKKwogMjAx
MS0wMS0xMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IDcwMmRiZjc4MjA1YjU4MjM0MDcyMTQw
ZWY0NTllMzcwMGIwNGVlODMuLmI4ODk3NzA5NDRhOWMwMTJjMDhhZTk3ZDkzMjcyNTA0ZmY4Mzcx
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIu
Y3BwCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKIAorLy8g
V2UgbmVlZCB0aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VU
X0ZMQUdTLiBJdCdzIGRlcHJlY2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWly
ZSBpdCB0byBlbnN1cmUgcHJvcGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3Vu
ZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKwogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCkBAIC0yNDIsNiArMjQ2LDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCBzZXRXaWRnZXRIYXNGb2N1cyhHdGtXaWRnZXQq
IHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCit7CisgICAgZ19vYmplY3Rfc2V0KHdpZGdldCwg
Imhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0aGVtZSBlbmdpbmVzIHN0aWxsIGxvb2sK
KyAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVybWluaW5nIGlmIGEgd2lkZ2V0IGhhcyBm
b2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KKyAgICBpZiAoaGFzRm9jdXMpCisgICAgICAgIEdU
S19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CisgICAgZWxzZQorICAg
ICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjU2LDEyICsyNzIsNyBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQs
IGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogCiAgICAg
aWYgKGlzRm9jdXNlZChvYmplY3QpKSB7Ci0gICAgICAgIGlmIChpc0VuYWJsZWQob2JqZWN0KSkg
ewotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLSAgICAgICAgICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBUUlVFLCBOVUxMKTsKLSAgICAgICAg
fQorICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRSVUUpOwogCiAgICAgICAgIGdi
b29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dpZHRoID0gMCwgZm9jdXNQYWRkaW5nID0g
MDsKICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LApAQCAtMjg3LDEwICsyOTgs
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkK
ICAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCBz
dGF0ZSwgImJ1dHRvbiIpOwogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQotICAg
IEdUS19XSURHRVRfVU5TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLSNlbmRpZgot
ICAgIGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBGQUxTRSwgTlVMTCk7CisgICAg
c2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBGQUxTRSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0zMzcsOSArMzQ1LDQ1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywKICAgICByZXR1cm4g
cGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19EUk9QRE9XTiwgb2JqZWN0LCBpbmZvLmNvbnRleHQs
IHJlY3QpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICByZXR1cm4gcGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19FTlRSWSwgb2JqZWN0LCBpbmZv
LmNvbnRleHQsIHJlY3QpOworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKwor
ICAgIGJvb2wgZW5hYmxlZCA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5
Q29udHJvbChyZW5kZXJPYmplY3QpOworICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUg
PSBlbmFibGVkID8gR1RLX1NUQVRFX05PUk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAg
ICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCBlbmFibGVkKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlz
Rm9jdXNlZChyZW5kZXJPYmplY3QpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3QgdGV4dEZpZWxkUmVj
dChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisKKyAgICAvLyBUaGUgZW50cnkgYmFja2dyb3Vu
ZCBpcyBvbmx5IHBhaW50ZWQgb3ZlciB0aGUgaW50ZXJpb3IgcGFydCBvZiB0aGUgR1RLKyBlbnRy
eSwgbm90CisgICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBoYXBwZW5zIGluIHRoZSBNb3pp
bGxhIHRoZW1lIGRyYXdpbmcgY29kZSBhcyB3ZWxsLgorICAgIEludFJlY3QgaW50ZXJpb3JSZWN0
KHRleHRGaWVsZFJlY3QpOworICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCk7CisgICAgaW50ZXJpb3JSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVz
cyk7CisgICAgaW50ZXJpb3JSZWN0LmluZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyk7CisgICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEZsYXRCb3goaW50ZXJpb3JSZWN0LCB3aWRnZXQsIGJhY2tn
cm91bmRTdGF0ZSwgR1RLX1NIQURPV19OT05FLCAiZW50cnlfYmciKTsKKworICAgIC8vIFRoaXMg
aXMgcmVzcG9uc2libGUgZm9yIGRyYXdpbmcgdGhlIGFjdHVhbCBmcmFtZS4gV2hlbiBHVEsrIHBh
aW50cyBhIHRleHQgZW50cnkgZm9jdXMsIGl0CisgICAgLy8gc2hyaW5rcyB0aGUgc2l6ZSBvZiB0
aGUgcmVjdCBieSB0aGUgZm9jdXMgYXJlYSBhbmQgcGFpbnRzIG92ZXIgdGhlIHByZXZpb3VzbHkg
dW5mb2N1c2VkIHRleHQgZW50cnkuCisgICAgLy8gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQgYnkg
ZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgYW5kIGZvY3VzZWQgZW50cnkuCisgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9O
T1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgZ2Jvb2xlYW4gaW50ZXJpb3JG
b2N1czsKKyAgICBnaW50IGZvY3VzV2lkdGg7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlv
ckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsICBOVUxMKTsKKyAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgIWlu
dGVyaW9yRm9jdXMpIHsKKyAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QodGV4dEZpZWxkUmVjdCk7
CisgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKKyAgICAgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyhmb2N1c1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1B
TCwgR1RLX1NIQURPV19JTiwgImVudHJ5Iik7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgImVudHJ5Iik7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggYzhlZWY3YjM5NWVhNmQzMzFi
ODIyNDQ3YjMwYjU5YTFjNjk3NTAyMS4uYTc5ZjlkMGZiYTRlYjJhYTIyYTI0ZDJhNTliMzRjODli
YjZlYTU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTU5LDYgKzE1OSwxMyBAQCB2b2lkIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdl
dCogd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIHBhaW50UmVjdC54
LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0KTsKIH0KIAor
dm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVj
dCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1No
YWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0
YW5nbGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0
LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3Bh
aW50X2ZsYXRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0
ZVR5cGUsIHNoYWRvd1R5cGUsICZtX3BhaW50UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
d2lkZ2V0LCBkZXRhaWwsIHBhaW50UmVjdC54LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRo
LCBwYWludFJlY3QuaGVpZ2h0KTsKK30KKwogdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojpn
dGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtT
dGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQogewogICAgIEdka1JlY3Rh
bmdsZSBwYWludFJlY3QgPSB7IG1fcGFpbnRSZWN0LnggKyByZWN0LngoKSwgbV9wYWludFJlY3Qu
eSArIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKQEAgLTE4MCw3ICsx
ODcsNiBAQCB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Q2hlY2soY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZQogICAgICAgICAgICAgICAgICAgICBkZXRh
aWwsIHBhaW50UmVjdC54LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3Qu
aGVpZ2h0KTsKIH0KIAotCiB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0
aW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUg
c3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwp
CiB7CiAgICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3Qu
eCgpLCBtX3BhaW50UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSB9OwpAQCAtMTg4LDYgKzE5NCwxNCBAQCB2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0
a1BhaW50T3B0aW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZwogICAgICAg
ICAgICAgICAgICAgICAgZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVj
dC53aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7CiB9CiAKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6Z3RrUGFpbnRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29u
c3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0ID0geyBtX3Bh
aW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3BhaW50X3NoYWRvdyhndGtfd2lkZ2V0X2dl
dF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmbV9wYWlu
dFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0Lngs
IHBhaW50UmVjdC55LCBwYWludFJlY3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQpOworfQorCisK
IH0KIAogI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA5MGMzMjY5YTM2
YTNmYTc0YjdkMGZlMGU1MjY3MGFiMGZhYjQyZTliLi42OWUxZWI3YWYwZTZhMTg3OGRiNTM1YTEx
NzFmODA3ZDlkNGQzMDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTM5LDEwICszOSwxMiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIHBhaW50TW96aWxsYVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUsIEd0a1dpZGdl
dFN0YXRlKiwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05PTkUp
OwogICAgIHZvaWQgZ3RrUGFpbnRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0
YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50
RmxhdEJveChjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFk
b3dUeXBlLCBjb25zdCBnY2hhciopOwogICAgIHZvaWQgZ3RrUGFpbnRGb2N1cyhjb25zdCBJbnRS
ZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBjb25zdCBnY2hhciopOwogICAgIHZvaWQg
Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwg
R3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqLCBHdGtPcmllbnRhdGlvbik7CiAgICAgdm9pZCBn
dGtQYWludENoZWNrKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0
a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7CiAgICAgdm9pZCBndGtQYWludE9wdGlvbihjb25z
dCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25z
dCBnY2hhciopOworICAgIHZvaWQgZ3RrUGFpbnRTaGFkb3coY29uc3QgSW50UmVjdCYsIEd0a1dp
ZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKIAogcHJp
dmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwppbmRleCA4ZGM2MDFhN2Q1ZGViMTczMjdl
ZWMzOTBmNzJmZTllYzkyNDU3MWU3Li4wYzExYWViNjJiZjBjYzAxMGZhMGEyYzQ5YTg5OTBhYWRi
ZTQxY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdp
bmcuYworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwpAQCAt
MTY0LDE2ICsxNjQsNiBAQCBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpCiAgICAgcmV0dXJuIE1P
Wl9HVEtfU1VDQ0VTUzsKIH0KIAotc3RhdGljIGdpbnQKLWVuc3VyZV9lbnRyeV93aWRnZXQoKQot
ewotICAgIGlmICghZ1BhcnRzLT5lbnRyeVdpZGdldCkgewotICAgICAgICBnUGFydHMtPmVudHJ5
V2lkZ2V0ID0gZ3RrX2VudHJ5X25ldygpOwotICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBl
KGdQYXJ0cy0+ZW50cnlXaWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNT
OwotfQotCiAvKiBXZSBuZWVkIHRvIGhhdmUgcG9pbnRlcnMgdG8gdGhlIGlubmVyIHdpZGdldHMg
KGJ1dHRvbiwgc2VwYXJhdG9yLCBhcnJvdykKICAqIG9mIHRoZSBDb21ib0JveCB0byBnZXQgdGhl
IGNvcnJlY3QgcmVuZGVyaW5nIGZyb20gdGhlbWUgZW5naW5lcyB3aGljaAogICogc3BlY2lhbCBj
YXNlcyB0aGVpciBsb29rLiBTaW5jZSB0aGUgaW5uZXIgbGF5b3V0IGNhbiBjaGFuZ2UsIHdlIGFz
ayBHVEsKQEAgLTc3OCwxMDcgKzc2OCw2IEBAIG1vel9ndGtfc2Nyb2xsYmFyX3RodW1iX3BhaW50
KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsCiB9CiAKIHN0YXRpYyBnaW50Ci1tb3pfZ3RrX2Vu
dHJ5X3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAg
ICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSog
c3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHdGtTdGF0ZVR5cGUgYmdfc3RhdGUgPSBzdGF0ZS0+
ZGlzYWJsZWQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfSU5T
RU5TSVRJVkUgOiBHVEtfU1RBVEVfTk9STUFMOwotICAgIGdpbnQgeCwgeSwgd2lkdGggPSByZWN0
LT53aWR0aCwgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotICAgIEd0a1N0eWxlKiBzdHlsZTsKLSAg
ICBnYm9vbGVhbiBpbnRlcmlvcl9mb2N1czsKLSAgICBnYm9vbGVhbiB0aGVtZV9ob25vcnNfdHJh
bnNwYXJlbmN5ID0gRkFMU0U7Ci0gICAgZ2ludCBmb2N1c193aWR0aDsKLQotICAgIGd0a193aWRn
ZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193
aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRn
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9y
X2ZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob25vcnMtdHJhbnNwYXJlbnQt
YmctaGludCIsICZ0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotCi0gICAgLyogZ3RrZW50cnkuYyB1c2VzIHR3byB3aW5kb3dzLCBvbmUg
Zm9yIHRoZSBlbnRpcmUgd2lkZ2V0IGFuZCBvbmUgZm9yIHRoZQotICAgICAqIHRleHQgYXJlYSBp
bnNpZGUgaXQuIFRoZSBiYWNrZ3JvdW5kIG9mIGJvdGggd2luZG93cyBpcyBzZXQgdG8gdGhlICJi
YXNlIgotICAgICAqIGNvbG9yIG9mIHRoZSBuZXcgc3RhdGUgaW4gZ3RrX2VudHJ5X3N0YXRlX2No
YW5nZWQsIGJ1dCBvbmx5IHRoZSBpbm5lcgotICAgICAqIHRleHRhcmVhIHdpbmRvdyB1c2VzIGd0
a19wYWludF9mbGF0X2JveCB3aGVuIGV4cG9zZWQgKi8KLQotICAgIFRTT2Zmc2V0U3R5bGVHQ3Mo
c3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOwotCi0gICAgLyogVGhpcyBnZXRzIHVzIGEgbG92ZWx5
IGdyZXlpc2ggZGlzYWJsZWRpc2ggbG9vayAqLwotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2
ZSh3aWRnZXQsICFzdGF0ZS0+ZGlzYWJsZWQpOwotCi0gICAgLyogR1RLIGZpbGxzIHRoZSBvdXRl
ciB3aWRnZXQgd2luZG93IHdpdGggdGhlIGJhc2UgY29sb3IgYmVmb3JlIGRyYXdpbmcgdGhlIHdp
ZGdldC4KLSAgICAgKiBTb21lIG9sZGVyIHRoZW1lcyByZWx5IG9uIHRoaXMgYmVoYXZpb3IsIGJ1
dCBtYW55IHRoZW1lcyBub3dhZGF5cyB1c2Ugcm91bmRlZAotICAgICAqIGNvcm5lcnMgb24gdGhl
aXIgd2lkZ2V0cy4gV2hpbGUgbW9zdCBHVEsgYXBwcyBhcmUgYmxpc3NmdWxseSB1bmF3YXJlIG9m
IHRoaXMKLSAgICAgKiBwcm9ibGVtIGR1ZSB0byB0aGVpciB1c2Ugb2YgdGhlIGRlZmF1bHQgd2lu
ZG93IGJhY2tncm91bmQsIHdlIHJlbmRlciB3aWRnZXRzIG9uCi0gICAgICogbWFueSBraW5kcyBv
ZiBiYWNrZ3JvdW5kcyBvbiB0aGUgd2ViLgotICAgICAqIElmIHRoZSB0aGVtZSBpcyBhYmxlIHRv
IGNvcGUgd2l0aCB0cmFuc3BhcmVuY3ksIHRoZW4gd2UgY2FuIHNraXAgcHJlLWZpbGxpbmcKLSAg
ICAgKiBhbmQgbm90aWZ5IHRoZSB0aGVtZSBpdCB3aWxsIHBhaW50IGRpcmVjdGx5IG9uIHRoZSBj
YW52YXMuICovCi0gICAgaWYgKHRoZW1lX2hvbm9yc190cmFuc3BhcmVuY3kpIHsKLSAgICAgICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQi
LCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdka19kcmF3
X3JlY3RhbmdsZShkcmF3YWJsZSwgc3R5bGUtPmJhc2VfZ2NbYmdfc3RhdGVdLCBUUlVFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QtPngsIGNsaXByZWN0LT55LCBjbGlwcmVj
dC0+d2lkdGgsIGNsaXByZWN0LT5oZWlnaHQpOwotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShH
X09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihG
QUxTRSkpOwotICAgIH0KLQotICAgIC8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGlubmVyIHdp
bmRvdywgc2VlIF9ndGtfZW50cnlfZ2V0X2JvcmRlcnMgKi8KLSAgICB4ID0gWFRISUNLTkVTUyhz
dHlsZSk7Ci0gICAgeSA9IFlUSElDS05FU1Moc3R5bGUpOwotCi0gICAgaWYgKCFpbnRlcmlvcl9m
b2N1cykgewotICAgICAgICB4ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICB5ICs9IGZvY3VzX3dp
ZHRoOwotICAgIH0KLQotICAgIC8qIFNpbXVsYXRlIGFuIGV4cG9zZSBvZiB0aGUgaW5uZXIgd2lu
ZG93ICovCi0gICAgZ3RrX3BhaW50X2ZsYXRfYm94KHN0eWxlLCBkcmF3YWJsZSwgYmdfc3RhdGUs
IEdUS19TSEFET1dfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIHdpZGdl
dCwgImVudHJ5X2JnIiwgIHJlY3QtPnggKyB4LAotICAgICAgICAgICAgICAgICAgICAgICByZWN0
LT55ICsgeSwgcmVjdC0+d2lkdGggLSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7Ci0KLSAgICAv
KiBOb3cgcGFpbnQgdGhlIHNoYWRvdyBhbmQgZm9jdXMgYm9yZGVyLgotICAgICAqIFdlIGRvIGxp
a2UgaW4gZ3RrX2VudHJ5X2RyYXdfZnJhbWUsIHdlIGZpcnN0IGRyYXcgdGhlIHNoYWRvdywgYSB0
YWQKLSAgICAgKiBzbWFsbGVyIHdoZW4gZm9jdXNlZCBpZiB0aGUgZm9jdXMgaXMgbm90IGludGVy
aW9yLCB0aGVuIHRoZSBmb2N1cy4gKi8KLSAgICB4ID0gcmVjdC0+eDsKLSAgICB5ID0gcmVjdC0+
eTsKLQotICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7Ci0gICAg
ICAgIC8qIFRoaXMgd2lsbCBnZXQgdXMgdGhlIGxpdCBib3JkZXJzIHRoYXQgZm9jdXNlZCB0ZXh0
Ym94ZXMgZW5qb3kgb24KLSAgICAgICAgICogc29tZSB0aGVtZXMuICovCi0gICAgICAgIEdUS19X
SURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0KLSAgICAgICAgaWYgKCFp
bnRlcmlvcl9mb2N1cykgewotICAgICAgICAgICAgLyogSW5kZW50IHRoZSBib3JkZXIgYSBsaXR0
bGUgYml0IGlmIHdlIGhhdmUgZXh0ZXJpb3IgZm9jdXMgCi0gICAgICAgICAgICAgICAodGhpcyBp
cyB3aGF0IEdUSyBkb2VzIHRvIGRyYXcgbmF0aXZlIGVudHJpZXMpICovCi0gICAgICAgICAgICB4
ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICAgICAgeSArPSBmb2N1c193aWR0aDsKLSAgICAgICAg
ICAgIHdpZHRoIC09IDIgKiBmb2N1c193aWR0aDsKLSAgICAgICAgICAgIGhlaWdodCAtPSAyICog
Zm9jdXNfd2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBndGtfcGFpbnRfc2hhZG93KHN0
eWxlLCBkcmF3YWJsZSwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwKLSAgICAgICAg
ICAgICAgICAgICAgIGNsaXByZWN0LCB3aWRnZXQsICJlbnRyeSIsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwotCi0gICAgaWYgKHN0YXRlLT5mb2N1c2VkICYmICFzdGF0ZS0+ZGlzYWJsZWQpIHsKLSAg
ICAgICAgaWYgKCFpbnRlcmlvcl9mb2N1cykgewotICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3Vz
KHN0eWxlLCBkcmF3YWJsZSwgIEdUS19TVEFURV9OT1JNQUwsIGNsaXByZWN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZGdldCwgImVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWN0LT54LCByZWN0LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qIE5vdyB1bnNldCB0aGUgZm9jdXMgZmxhZy4gV2UgZG9uJ3Qg
d2FudCBvdGhlciBlbnRyaWVzIHRvIGxvb2sKLSAgICAgICAgICogbGlrZSB0aGV5J3JlIGZvY3Vz
ZWQgdG9vISAqLwotICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hB
U19GT0NVUyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3Rh
dGljIGdpbnQKIG1vel9ndGtfY29tYm9fYm94X3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwg
R2RrUmVjdGFuZ2xlKiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xl
KiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgZ2Jvb2xlYW4gaXNodG1sLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTEwMzQs
MTAgKzkyMyw2IEBAIG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBl
IHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAogICAgICAgICAgICAgKmJvdHRvbSArPSBz
dHlsZS0+eXRoaWNrbmVzczsKICAgICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7CiAg
ICAgICAgIH0KLSAgICBjYXNlIE1PWl9HVEtfRU5UUlk6Ci0gICAgICAgIGVuc3VyZV9lbnRyeV93
aWRnZXQoKTsKLSAgICAgICAgdyA9IGdQYXJ0cy0+ZW50cnlXaWRnZXQ7Ci0gICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoKICAgICAgICAgewogICAgICAgICAgICAgLyog
V2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgYXJyb3cgb24gdGhlIGRyb3Bkb3duLCBzbyB0ZXh0
CkBAIC0xMTY4LDExICsxMDUzLDYgQEAgbW96X2d0a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRn
ZXRUeXBlIHdpZGdldCwgR2RrRHJhd2FibGUqIGRyYXdhYmxlLAogICAgIGNhc2UgTU9aX0dUS19T
Q1JPTExFRF9XSU5ET1c6CiAgICAgICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19w
YWludChkcmF3YWJsZSwgcmVjdCwgY2xpcHJlY3QsIHN0YXRlKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNT1pfR1RLX0VOVFJZOgotICAgICAgICBlbnN1cmVfZW50cnlfd2lkZ2V0KCk7Ci0g
ICAgICAgIHJldHVybiBtb3pfZ3RrX2VudHJ5X3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVj
dCwgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+ZW50
cnlXaWRnZXQsIGRpcmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTU9aX0dUS19E
Uk9QRE9XTjoKICAgICAgICAgcmV0dXJuIG1vel9ndGtfY29tYm9fYm94X3BhaW50KGRyYXdhYmxl
LCByZWN0LCBjbGlwcmVjdCwgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZ2Jvb2xlYW4pIGZsYWdzLCBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9ndGtkcmF3aW5nLmgKaW5kZXggYTI2MWRlNTg3YWM2OTI5MzlkOTg3OGRiMGU1NGUx
M2IwYThkNTEzZi4uMjM4YTI5M2E2YjkyMDIyNzllOWIwNzM4OGRlYjQwNGJhM2U5Y2IxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5oCkBAIC00OCw2ICs0OCw4IEBA
CiAjaWZuZGVmIF9HVEtfRFJBV0lOR19IXwogI2RlZmluZSBfR1RLX0RSQVdJTkdfSF8KIAorI3Vu
ZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKwogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogI2lm
ZGVmIF9fY3BsdXNwbHVzCkBAIC04OSw3ICs5MSw2IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtUaGVt
ZVBhcnRzIHsKICAgICBHdGtXaWRnZXQqIGJ1dHRvbkFycm93V2lkZ2V0OwogICAgIEd0a1dpZGdl
dCogaG9yaXpTY3JvbGxiYXJXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiB2ZXJ0U2Nyb2xsYmFyV2lk
Z2V0OwotICAgIEd0a1dpZGdldCogZW50cnlXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiBjb21ib0Jv
eFdpZGdldDsKICAgICBHdGtXaWRnZXQqIGNvbWJvQm94QnV0dG9uV2lkZ2V0OwogICAgIEd0a1dp
ZGdldCogY29tYm9Cb3hBcnJvd1dpZGdldDsKQEAgLTEzMyw3ICsxMzQsNiBAQCB0eXBlZGVmIGVu
dW0gewogICBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9WRVJUSUNBTCwKICAgLyogUGFpbnRzIHRo
ZSBiYWNrZ3JvdW5kIG9mIGEgc2Nyb2xsZWQgd2luZG93ICovCiAgIE1PWl9HVEtfU0NST0xMRURf
V0lORE9XLAotICBNT1pfR1RLX0VOVFJZLAogICAvKiBQYWludHMgYSBHdGtPcHRpb25NZW51LiAq
LwogICBNT1pfR1RLX0RST1BET1dOLAogICAvKiBQYWludHMgYSBHdGtQcm9ncmVzc0Jhci4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79438</attachid>
            <date>2011-01-19 09:53:11 -0800</date>
            <delta_ts>2011-01-19 09:53:11 -0800</delta_ts>
            <desc>Patch rebased to latest</desc>
            <filename>bug-52327-20110119095311.patch</filename>
            <type>text/plain</type>
            <size>16794</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZGE1ZGMzODcyNjM1MWQ0OTMwZjRiZjlmNjc2YTVhMmU4YzNkNmM2Li5k
ZTNkYTdjOGNjNjA4N2Y3MGRmODE5N2FhZTNmMTYwNTRkNjY3Y2M0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMTEtMDEtMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgdGV4dCBmaWVsZCBwYWludGluZyBvdXQgb2YgZ3RrMmRyYXdpbmcuYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzMjcKKworICAg
ICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IFVzZSB0aGUgc2V0V2lkZ2V0SGFzRm9j
dXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZp
ZWxkKTogRG8gdGhpcyBtYW51YWxseSBub3cgaW5zdGVhZAorICAgICAgICBvZiBjYWxsaW5nIGlu
dG8gdGhlIE1vemlsbGEgY29kZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHA6IEFkZGVkIGEgY291cGxlIG1vcmUgd3JhcHBlcnMKKyAgICAgICAgZm9y
IEdUSysgdGhlbWUgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Z3RrUGFpbnRGbGF0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50U2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZCBuZXcgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYzogUmVtb3ZlIHVudXNlZCBjb2RlLgor
ICAgICAgICAobW96X2d0a19nZXRfd2lkZ2V0X2JvcmRlcik6CisgICAgICAgIChtb3pfZ3RrX3dp
ZGdldF9wYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaDoKKwogMjAx
MS0wMS0xMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmluZGV4IGM1OGI1ZGE3NWJkYjUwMTZlNmRlMjEz
NmMyN2M0ODRjNThmNzA5MGYuLjRiNDNhMDQwZDc1NmNiN2Y4NjBjZGFkYzBlODNhN2ZmOTY0NjQy
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIu
Y3BwCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKIAorLy8g
V2UgbmVlZCB0aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VU
X0ZMQUdTLiBJdCdzIGRlcHJlY2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWly
ZSBpdCB0byBlbnN1cmUgcHJvcGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3Vu
ZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKwogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCkBAIC0yNDMsNiArMjQ3LDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCBzZXRXaWRnZXRIYXNGb2N1cyhHdGtXaWRnZXQq
IHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCit7CisgICAgZ19vYmplY3Rfc2V0KHdpZGdldCwg
Imhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0aGVtZSBlbmdpbmVzIHN0aWxsIGxvb2sK
KyAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVybWluaW5nIGlmIGEgd2lkZ2V0IGhhcyBm
b2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KKyAgICBpZiAoaGFzRm9jdXMpCisgICAgICAgIEdU
S19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CisgICAgZWxzZQorICAg
ICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjU3LDEyICsyNzMsNyBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQs
IGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogCiAgICAg
aWYgKGlzRm9jdXNlZChvYmplY3QpKSB7Ci0gICAgICAgIGlmIChpc0VuYWJsZWQob2JqZWN0KSkg
ewotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLSAgICAgICAgICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBUUlVFLCBOVUxMKTsKLSAgICAgICAg
fQorICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRSVUUpOwogCiAgICAgICAgIGdi
b29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dpZHRoID0gMCwgZm9jdXNQYWRkaW5nID0g
MDsKICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LApAQCAtMjg4LDEwICsyOTks
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjbwogICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkK
ICAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCBz
dGF0ZSwgImJ1dHRvbiIpOwogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQotICAg
IEdUS19XSURHRVRfVU5TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLSNlbmRpZgot
ICAgIGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBGQUxTRSwgTlVMTCk7CisgICAg
c2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBGQUxTRSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0zMzgsOSArMzQ2LDQ1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywKICAgICByZXR1cm4g
cGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19EUk9QRE9XTiwgb2JqZWN0LCBpbmZvLmNvbnRleHQs
IHJlY3QpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICByZXR1cm4gcGFpbnRSZW5kZXJPYmplY3QoTU9aX0dUS19FTlRSWSwgb2JqZWN0LCBpbmZv
LmNvbnRleHQsIHJlY3QpOworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKwor
ICAgIGJvb2wgZW5hYmxlZCA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5
Q29udHJvbChyZW5kZXJPYmplY3QpOworICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUg
PSBlbmFibGVkID8gR1RLX1NUQVRFX05PUk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAg
ICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCBlbmFibGVkKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlz
Rm9jdXNlZChyZW5kZXJPYmplY3QpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3QgdGV4dEZpZWxkUmVj
dChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisKKyAgICAvLyBUaGUgZW50cnkgYmFja2dyb3Vu
ZCBpcyBvbmx5IHBhaW50ZWQgb3ZlciB0aGUgaW50ZXJpb3IgcGFydCBvZiB0aGUgR1RLKyBlbnRy
eSwgbm90CisgICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBoYXBwZW5zIGluIHRoZSBNb3pp
bGxhIHRoZW1lIGRyYXdpbmcgY29kZSBhcyB3ZWxsLgorICAgIEludFJlY3QgaW50ZXJpb3JSZWN0
KHRleHRGaWVsZFJlY3QpOworICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCk7CisgICAgaW50ZXJpb3JSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVz
cyk7CisgICAgaW50ZXJpb3JSZWN0LmluZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyk7CisgICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEZsYXRCb3goaW50ZXJpb3JSZWN0LCB3aWRnZXQsIGJhY2tn
cm91bmRTdGF0ZSwgR1RLX1NIQURPV19OT05FLCAiZW50cnlfYmciKTsKKworICAgIC8vIFRoaXMg
aXMgcmVzcG9uc2libGUgZm9yIGRyYXdpbmcgdGhlIGFjdHVhbCBmcmFtZS4gV2hlbiBHVEsrIHBh
aW50cyBhIHRleHQgZW50cnkgZm9jdXMsIGl0CisgICAgLy8gc2hyaW5rcyB0aGUgc2l6ZSBvZiB0
aGUgcmVjdCBieSB0aGUgZm9jdXMgYXJlYSBhbmQgcGFpbnRzIG92ZXIgdGhlIHByZXZpb3VzbHkg
dW5mb2N1c2VkIHRleHQgZW50cnkuCisgICAgLy8gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQgYnkg
ZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgYW5kIGZvY3VzZWQgZW50cnkuCisgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9O
T1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgZ2Jvb2xlYW4gaW50ZXJpb3JG
b2N1czsKKyAgICBnaW50IGZvY3VzV2lkdGg7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlv
ckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsICBOVUxMKTsKKyAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgIWlu
dGVyaW9yRm9jdXMpIHsKKyAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QodGV4dEZpZWxkUmVjdCk7
CisgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKKyAgICAgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyhmb2N1c1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1B
TCwgR1RLX1NIQURPV19JTiwgImVudHJ5Iik7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgImVudHJ5Iik7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWYxNDM3YWY1MWU1Zjk4NTdm
MzA1MjU1MGNjNzhhNTdlMTc3MjJiYS4uMjlmNWFkYWUyM2RiOTQ3ZDczNmU2NjJmZjE5ZTc4ZjRm
M2MyZWU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTU5LDYgKzE1OSwxMyBAQCB2b2lkIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdl
dCogd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIHBhaW50UmVjdC54
LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0KTsKIH0KIAor
dm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVj
dCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1No
YWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0
YW5nbGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0
LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3Bh
aW50X2ZsYXRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0
ZVR5cGUsIHNoYWRvd1R5cGUsICZwYWludFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIHdp
ZGdldCwgZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwg
cGFpbnRSZWN0LmhlaWdodCk7Cit9CisKIHZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3Rr
UGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3Rh
dGVUeXBlIHN0YXRlVHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKIHsKICAgICBHZGtSZWN0YW5n
bGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0Lnkg
KyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CkBAIC0xODcsNiArMTk0
LDE0IEBAIHZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRPcHRpb24oY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnCiAgICAgICAgICAgICAgICAgICAgICBkZXRh
aWwsIHBhaW50UmVjdC54LCBwYWludFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3Qu
aGVpZ2h0KTsKIH0KIAordm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFNoYWRv
dyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0
YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQor
eworICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSB7IG1fcGFpbnRSZWN0LnggKyByZWN0Lngo
KSwgbV9wYWludFJlY3QueSArIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkg
fTsKKyAgICBndGtfcGFpbnRfc2hhZG93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1f
dGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZwYWludFJlY3QsIHdpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBwYWludFJl
Y3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQpOworfQorCisKIH0KIAogI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdl
dFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA5MGMzMjY5YTM2YTNmYTc0YjdkMGZlMGU1MjY3MGFi
MGZhYjQyZTliLi42OWUxZWI3YWYwZTZhMTg3OGRiNTM1YTExNzFmODA3ZDlkNGQzMDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0LmgKQEAgLTM5LDEwICszOSwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhaW50TW96aWxs
YVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUsIEd0a1dpZGdldFN0YXRlKiwgaW50IGZsYWdzLCBH
dGtUZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05PTkUpOwogICAgIHZvaWQgZ3RrUGFpbnRC
b3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlw
ZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0
JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciop
OwogICAgIHZvaWQgZ3RrUGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3Rr
U3RhdGVUeXBlLCBjb25zdCBnY2hhciopOwogICAgIHZvaWQgZ3RrUGFpbnRTbGlkZXIoY29uc3Qg
SW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3Qg
Z2NoYXIqLCBHdGtPcmllbnRhdGlvbik7CiAgICAgdm9pZCBndGtQYWludENoZWNrKGNvbnN0IElu
dFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKik7CiAgICAgdm9pZCBndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAgIHZvaWQg
Z3RrUGFpbnRTaGFkb3coY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwg
R3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0Nv
bnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3Rr
MmRyYXdpbmcuYwppbmRleCA4ZGM2MDFhN2Q1ZGViMTczMjdlZWMzOTBmNzJmZTllYzkyNDU3MWU3
Li4wYzExYWViNjJiZjBjYzAxMGZhMGEyYzQ5YTg5OTBhYWRiZTQxY2VkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwpAQCAtMTY0LDE2ICsxNjQsNiBAQCBlbnN1
cmVfc2Nyb2xsYmFyX3dpZGdldCgpCiAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKIH0KIAot
c3RhdGljIGdpbnQKLWVuc3VyZV9lbnRyeV93aWRnZXQoKQotewotICAgIGlmICghZ1BhcnRzLT5l
bnRyeVdpZGdldCkgewotICAgICAgICBnUGFydHMtPmVudHJ5V2lkZ2V0ID0gZ3RrX2VudHJ5X25l
dygpOwotICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+ZW50cnlXaWRnZXQp
OwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCiAvKiBXZSBuZWVkIHRv
IGhhdmUgcG9pbnRlcnMgdG8gdGhlIGlubmVyIHdpZGdldHMgKGJ1dHRvbiwgc2VwYXJhdG9yLCBh
cnJvdykKICAqIG9mIHRoZSBDb21ib0JveCB0byBnZXQgdGhlIGNvcnJlY3QgcmVuZGVyaW5nIGZy
b20gdGhlbWUgZW5naW5lcyB3aGljaAogICogc3BlY2lhbCBjYXNlcyB0aGVpciBsb29rLiBTaW5j
ZSB0aGUgaW5uZXIgbGF5b3V0IGNhbiBjaGFuZ2UsIHdlIGFzayBHVEsKQEAgLTc3OCwxMDcgKzc2
OCw2IEBAIG1vel9ndGtfc2Nyb2xsYmFyX3RodW1iX3BhaW50KEd0a1RoZW1lV2lkZ2V0VHlwZSB3
aWRnZXQsCiB9CiAKIHN0YXRpYyBnaW50Ci1tb3pfZ3RrX2VudHJ5X3BhaW50KEdka0RyYXdhYmxl
KiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICBHZGtS
ZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAgICAgICAg
ICAgICAgIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK
LSAgICBHdGtTdGF0ZVR5cGUgYmdfc3RhdGUgPSBzdGF0ZS0+ZGlzYWJsZWQgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfSU5TRU5TSVRJVkUgOiBHVEtfU1RBVEVf
Tk9STUFMOwotICAgIGdpbnQgeCwgeSwgd2lkdGggPSByZWN0LT53aWR0aCwgaGVpZ2h0ID0gcmVj
dC0+aGVpZ2h0OwotICAgIEd0a1N0eWxlKiBzdHlsZTsKLSAgICBnYm9vbGVhbiBpbnRlcmlvcl9m
b2N1czsKLSAgICBnYm9vbGVhbiB0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5ID0gRkFMU0U7Ci0g
ICAgZ2ludCBmb2N1c193aWR0aDsKLQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRn
ZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yX2ZvY3VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzX3dpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICJob25vcnMtdHJhbnNwYXJlbnQtYmctaGludCIsICZ0aGVtZV9ob25v
cnNfdHJhbnNwYXJlbmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
LyogZ3RrZW50cnkuYyB1c2VzIHR3byB3aW5kb3dzLCBvbmUgZm9yIHRoZSBlbnRpcmUgd2lkZ2V0
IGFuZCBvbmUgZm9yIHRoZQotICAgICAqIHRleHQgYXJlYSBpbnNpZGUgaXQuIFRoZSBiYWNrZ3Jv
dW5kIG9mIGJvdGggd2luZG93cyBpcyBzZXQgdG8gdGhlICJiYXNlIgotICAgICAqIGNvbG9yIG9m
IHRoZSBuZXcgc3RhdGUgaW4gZ3RrX2VudHJ5X3N0YXRlX2NoYW5nZWQsIGJ1dCBvbmx5IHRoZSBp
bm5lcgotICAgICAqIHRleHRhcmVhIHdpbmRvdyB1c2VzIGd0a19wYWludF9mbGF0X2JveCB3aGVu
IGV4cG9zZWQgKi8KLQotICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3Qt
PnkpOwotCi0gICAgLyogVGhpcyBnZXRzIHVzIGEgbG92ZWx5IGdyZXlpc2ggZGlzYWJsZWRpc2gg
bG9vayAqLwotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsICFzdGF0ZS0+ZGlz
YWJsZWQpOwotCi0gICAgLyogR1RLIGZpbGxzIHRoZSBvdXRlciB3aWRnZXQgd2luZG93IHdpdGgg
dGhlIGJhc2UgY29sb3IgYmVmb3JlIGRyYXdpbmcgdGhlIHdpZGdldC4KLSAgICAgKiBTb21lIG9s
ZGVyIHRoZW1lcyByZWx5IG9uIHRoaXMgYmVoYXZpb3IsIGJ1dCBtYW55IHRoZW1lcyBub3dhZGF5
cyB1c2Ugcm91bmRlZAotICAgICAqIGNvcm5lcnMgb24gdGhlaXIgd2lkZ2V0cy4gV2hpbGUgbW9z
dCBHVEsgYXBwcyBhcmUgYmxpc3NmdWxseSB1bmF3YXJlIG9mIHRoaXMKLSAgICAgKiBwcm9ibGVt
IGR1ZSB0byB0aGVpciB1c2Ugb2YgdGhlIGRlZmF1bHQgd2luZG93IGJhY2tncm91bmQsIHdlIHJl
bmRlciB3aWRnZXRzIG9uCi0gICAgICogbWFueSBraW5kcyBvZiBiYWNrZ3JvdW5kcyBvbiB0aGUg
d2ViLgotICAgICAqIElmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGNvcGUgd2l0aCB0cmFuc3BhcmVu
Y3ksIHRoZW4gd2UgY2FuIHNraXAgcHJlLWZpbGxpbmcKLSAgICAgKiBhbmQgbm90aWZ5IHRoZSB0
aGVtZSBpdCB3aWxsIHBhaW50IGRpcmVjdGx5IG9uIHRoZSBjYW52YXMuICovCi0gICAgaWYgKHRo
ZW1lX2hvbm9yc190cmFuc3BhcmVuY3kpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdka19kcmF3X3JlY3RhbmdsZShkcmF3YWJsZSwg
c3R5bGUtPmJhc2VfZ2NbYmdfc3RhdGVdLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xpcHJlY3QtPngsIGNsaXByZWN0LT55LCBjbGlwcmVjdC0+d2lkdGgsIGNsaXByZWN0LT5o
ZWlnaHQpOwotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJh
bnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSkpOwotICAgIH0KLQotICAg
IC8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGlubmVyIHdpbmRvdywgc2VlIF9ndGtfZW50cnlf
Z2V0X2JvcmRlcnMgKi8KLSAgICB4ID0gWFRISUNLTkVTUyhzdHlsZSk7Ci0gICAgeSA9IFlUSElD
S05FU1Moc3R5bGUpOwotCi0gICAgaWYgKCFpbnRlcmlvcl9mb2N1cykgewotICAgICAgICB4ICs9
IGZvY3VzX3dpZHRoOwotICAgICAgICB5ICs9IGZvY3VzX3dpZHRoOwotICAgIH0KLQotICAgIC8q
IFNpbXVsYXRlIGFuIGV4cG9zZSBvZiB0aGUgaW5uZXIgd2luZG93ICovCi0gICAgZ3RrX3BhaW50
X2ZsYXRfYm94KHN0eWxlLCBkcmF3YWJsZSwgYmdfc3RhdGUsIEdUS19TSEFET1dfTk9ORSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIHdpZGdldCwgImVudHJ5X2JnIiwgIHJlY3Qt
PnggKyB4LAotICAgICAgICAgICAgICAgICAgICAgICByZWN0LT55ICsgeSwgcmVjdC0+d2lkdGgg
LSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7Ci0KLSAgICAvKiBOb3cgcGFpbnQgdGhlIHNoYWRv
dyBhbmQgZm9jdXMgYm9yZGVyLgotICAgICAqIFdlIGRvIGxpa2UgaW4gZ3RrX2VudHJ5X2RyYXdf
ZnJhbWUsIHdlIGZpcnN0IGRyYXcgdGhlIHNoYWRvdywgYSB0YWQKLSAgICAgKiBzbWFsbGVyIHdo
ZW4gZm9jdXNlZCBpZiB0aGUgZm9jdXMgaXMgbm90IGludGVyaW9yLCB0aGVuIHRoZSBmb2N1cy4g
Ki8KLSAgICB4ID0gcmVjdC0+eDsKLSAgICB5ID0gcmVjdC0+eTsKLQotICAgIGlmIChzdGF0ZS0+
Zm9jdXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7Ci0gICAgICAgIC8qIFRoaXMgd2lsbCBnZXQg
dXMgdGhlIGxpdCBib3JkZXJzIHRoYXQgZm9jdXNlZCB0ZXh0Ym94ZXMgZW5qb3kgb24KLSAgICAg
ICAgICogc29tZSB0aGVtZXMuICovCi0gICAgICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdl
dCwgR1RLX0hBU19GT0NVUyk7Ci0KLSAgICAgICAgaWYgKCFpbnRlcmlvcl9mb2N1cykgewotICAg
ICAgICAgICAgLyogSW5kZW50IHRoZSBib3JkZXIgYSBsaXR0bGUgYml0IGlmIHdlIGhhdmUgZXh0
ZXJpb3IgZm9jdXMgCi0gICAgICAgICAgICAgICAodGhpcyBpcyB3aGF0IEdUSyBkb2VzIHRvIGRy
YXcgbmF0aXZlIGVudHJpZXMpICovCi0gICAgICAgICAgICB4ICs9IGZvY3VzX3dpZHRoOwotICAg
ICAgICAgICAgeSArPSBmb2N1c193aWR0aDsKLSAgICAgICAgICAgIHdpZHRoIC09IDIgKiBmb2N1
c193aWR0aDsKLSAgICAgICAgICAgIGhlaWdodCAtPSAyICogZm9jdXNfd2lkdGg7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBndGtfcGFpbnRfc2hhZG93KHN0eWxlLCBkcmF3YWJsZSwgR1RLX1NU
QVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwKLSAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0
LCB3aWRnZXQsICJlbnRyeSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKHN0YXRl
LT5mb2N1c2VkICYmICFzdGF0ZS0+ZGlzYWJsZWQpIHsKLSAgICAgICAgaWYgKCFpbnRlcmlvcl9m
b2N1cykgewotICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBkcmF3YWJsZSwgIEdU
S19TVEFURV9OT1JNQUwsIGNsaXByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZGdldCwgImVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT54LCByZWN0
LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8q
IE5vdyB1bnNldCB0aGUgZm9jdXMgZmxhZy4gV2UgZG9uJ3Qgd2FudCBvdGhlciBlbnRyaWVzIHRv
IGxvb2sKLSAgICAgICAgICogbGlrZSB0aGV5J3JlIGZvY3VzZWQgdG9vISAqLwotICAgICAgICBH
VEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKIG1vel9ndGtfY29t
Ym9fYm94X3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0
U3RhdGUqIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaXNodG1sLCBH
dGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTEwMzQsMTAgKzkyMyw2IEBAIG1vel9ndGtf
Z2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwg
Z2ludCogdG9wLAogICAgICAgICAgICAgKmJvdHRvbSArPSBzdHlsZS0+eXRoaWNrbmVzczsKICAg
ICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7CiAgICAgICAgIH0KLSAgICBjYXNlIE1P
Wl9HVEtfRU5UUlk6Ci0gICAgICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKLSAgICAgICAgdyA9
IGdQYXJ0cy0+ZW50cnlXaWRnZXQ7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTU9aX0dUS19E
Uk9QRE9XTjoKICAgICAgICAgewogICAgICAgICAgICAgLyogV2UgbmVlZCB0byBhY2NvdW50IGZv
ciB0aGUgYXJyb3cgb24gdGhlIGRyb3Bkb3duLCBzbyB0ZXh0CkBAIC0xMTY4LDExICsxMDUzLDYg
QEAgbW96X2d0a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgR2RrRHJh
d2FibGUqIGRyYXdhYmxlLAogICAgIGNhc2UgTU9aX0dUS19TQ1JPTExFRF9XSU5ET1c6CiAgICAg
ICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19wYWludChkcmF3YWJsZSwgcmVjdCwg
Y2xpcHJlY3QsIHN0YXRlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX0VOVFJZ
OgotICAgICAgICBlbnN1cmVfZW50cnlfd2lkZ2V0KCk7Ci0gICAgICAgIHJldHVybiBtb3pfZ3Rr
X2VudHJ5X3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVjdCwgc3RhdGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+ZW50cnlXaWRnZXQsIGRpcmVjdGlvbik7
Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoKICAgICAgICAgcmV0
dXJuIG1vel9ndGtfY29tYm9fYm94X3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVjdCwgc3Rh
dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2Jvb2xlYW4pIGZs
YWdzLCBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L2d0a2RyYXdpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgK
aW5kZXggYTI2MWRlNTg3YWM2OTI5MzlkOTg3OGRiMGU1NGUxM2IwYThkNTEzZi4uMjM4YTI5M2E2
YjkyMDIyNzllOWIwNzM4OGRlYjQwNGJhM2U5Y2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvZ3RrZHJhd2luZy5oCkBAIC00OCw2ICs0OCw4IEBACiAjaWZuZGVmIF9HVEtfRFJBV0lO
R19IXwogI2RlZmluZSBfR1RLX0RSQVdJTkdfSF8KIAorI3VuZGVmIEdUS19ESVNBQkxFX0RFUFJF
Q0FURUQKKwogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC04
OSw3ICs5MSw2IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtUaGVtZVBhcnRzIHsKICAgICBHdGtXaWRn
ZXQqIGJ1dHRvbkFycm93V2lkZ2V0OwogICAgIEd0a1dpZGdldCogaG9yaXpTY3JvbGxiYXJXaWRn
ZXQ7CiAgICAgR3RrV2lkZ2V0KiB2ZXJ0U2Nyb2xsYmFyV2lkZ2V0OwotICAgIEd0a1dpZGdldCog
ZW50cnlXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiBjb21ib0JveFdpZGdldDsKICAgICBHdGtXaWRn
ZXQqIGNvbWJvQm94QnV0dG9uV2lkZ2V0OwogICAgIEd0a1dpZGdldCogY29tYm9Cb3hBcnJvd1dp
ZGdldDsKQEAgLTEzMyw3ICsxMzQsNiBAQCB0eXBlZGVmIGVudW0gewogICBNT1pfR1RLX1NDUk9M
TEJBUl9USFVNQl9WRVJUSUNBTCwKICAgLyogUGFpbnRzIHRoZSBiYWNrZ3JvdW5kIG9mIGEgc2Ny
b2xsZWQgd2luZG93ICovCiAgIE1PWl9HVEtfU0NST0xMRURfV0lORE9XLAotICBNT1pfR1RLX0VO
VFJZLAogICAvKiBQYWludHMgYSBHdGtPcHRpb25NZW51LiAqLwogICBNT1pfR1RLX0RST1BET1dO
LAogICAvKiBQYWludHMgYSBHdGtQcm9ncmVzc0Jhci4gKi8K
</data>

          </attachment>
      

    </bug>

</bugzilla>