<?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>89293</bug_id>
          
          <creation_ts>2012-06-16 17:24:28 -0700</creation_ts>
          <short_desc>[TextureMapper] Reduce boilerplate code in the TextureMapperShaderManager</short_desc>
          <delta_ts>2012-06-17 23:36:29 -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>Platform</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>
          
          <blocked>89317</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>650897</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-16 17:24:28 -0700</bug_when>
    <thetext>The amount of boilerplate code in TextureMapperShaderManager could be reduced quite a bit to make the code more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651139</commentid>
    <comment_count>1</comment_count>
      <attachid>148043</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-17 20:43:25 -0700</bug_when>
    <thetext>Created attachment 148043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651142</commentid>
    <comment_count>2</comment_count>
      <attachid>148044</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-17 21:06:00 -0700</bug_when>
    <thetext>Created attachment 148044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651155</commentid>
    <comment_count>3</comment_count>
      <attachid>148044</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-17 21:36:51 -0700</bug_when>
    <thetext>Comment on attachment 148044
Patch

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

Awesome!
Though let&apos;s use &gt;= 0 or an enum { InvalidLocation = -1 } instead of using -1 as a magic number.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:397
&gt; +    if (program-&gt;opacityLocation() != -1)

How about &gt;= 0

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:434
&gt; +    if (program-&gt;opacityLocation() != -1)

&gt;= 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651171</commentid>
    <comment_count>4</comment_count>
      <attachid>148052</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-17 22:09:40 -0700</bug_when>
    <thetext>Created attachment 148052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651172</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-17 22:10:35 -0700</bug_when>
    <thetext>Makes sense! I&apos;ve replaced the test for != -1 with a call to the new static method,  TextureMapperShaderProgram::isValidUniformLocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651197</commentid>
    <comment_count>6</comment_count>
      <attachid>148052</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-17 23:36:24 -0700</bug_when>
    <thetext>Comment on attachment 148052
Patch

Clearing flags on attachment: 148052

Committed r120572: &lt;http://trac.webkit.org/changeset/120572&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651198</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-17 23:36:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148043</attachid>
            <date>2012-06-17 20:43:25 -0700</date>
            <delta_ts>2012-06-17 21:05:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89293-20120617204324.patch</filename>
            <type>text/plain</type>
            <size>26015</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDRlNDE3OGY5OTk2ZWI4
MzMwZWNlNWExYzc2NTRiYTcxOWQ3NzcxYi4uMDc5MGIzMGNjOWRlN2IzYmU0Mjc2Nzk1ZmEwOWU2
OTRiZmM2YzA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4dHVyZU1h
cHBlcl0gUmVkdWNlIGJvaWxlcnBsYXRlIGNvZGUgaW4gdGhlIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSBj
b2RlLCBieToKKyAgICAgICAgMS4gTWFraW5nIGZyYWdtZW50IGFuZCBzaGFkZXIgc291cmNlIGFy
Z3VtZW50cyB0byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgMi4gUmVtb3Zp
bmcgdmlydHVhbCBtZXRob2RzICh3aGljaCBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBjb25zdHJ1
Y3RvcnMpIHdpdGgKKyAgICAgICAgICAgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb25zLiBUaGlz
IGV4Y2hhbmdlcyBhIHNtYWxsIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uCisgICAgICAgICAg
IGZvciBhIGxvdCBsZXNzIGJvaWxlcnBsYXRlLgorICAgICAgICAzLiBTdGFuZGFyZGl6aW5nIG9u
IHRoZSBmb29Mb2NhdGlvbiBuYW1lIGluc3RlYWQgb2YgZm9vVmFyaWFibGUuCisgICAgICAgIDQu
IFJlbW92aW5nIHRoZSA6OnByZXBhcmUoKSBzZXJpZXMgb2YgbWV0aG9kcyBmb3Igbm9uLWZpbHRl
ciBzaGFkZXJzLiBJdCdzIGJldHRlcnMgdG8KKyAgICAgICAgICAgaGF2ZSBhbGwgdGhlIHVuaWZv
cm0gYW5kIGF0dHJpYnV0ZSBiaW5kaW5nIGluIHRoZSBzYW1lIHBsYWNlLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3IgYW5kIHNob3VsZG4ndCBjaGFuZ2Ug
YW55IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgSGFuZGxlIGJpbmRpbmcgdGhlIG1hc2sgdGV4
dHVyZSBhbmQgb3BhY2l0eSBhdCBib3RoIG9mIHRoZSBwcmV2aW91cyA6OnByZXBhcmUgY2FsbHNp
dGVzLiBBbHNvCisgICAgICAgIHJlbmFtZSAic2hhZGVySW5mbyIgdG8gInByb2dyYW0iLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHA6IFBlcmZvcm0gdGhlIHJlZmFjdG9yaW5nIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDog
RGl0dG8uCisKIDIwMTItMDYtMTMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpbXBs
ZW1lbnRhdGlvbiBmb3IgV2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2YjJhY2Ew
ZTJjZDgzMDgyNjAxZGZkMGE0MzYxMzlmMTJjZmFkZTc5Li5iYTg5MDIyZTFkYjA3M2U4NmE5NWQw
OWIxMzc2MGQ3YTUyMTYyNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgogCiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zMjcsNyArMzI4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb24KICAgICAg
ICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgp
LAogICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRy
aXgubTQ0KCkKICAgICB9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJv
Z3JhbS0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9G
QUxTRSwgbTQpKTsKIAogICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7CiAgICAgICAgIEdMX0NNRChn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKQEAgLTM0NCwxOCAr
MzQ1LDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1
cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9y
UHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOwor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRD
b2xvclByb2dyYW0oKTsKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsK
IAogICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAgIEdMX0NNRChn
bFVuaWZvcm00ZihzaGFkZXJJbmZvLT5jb2xvclZhcmlhYmxlKCksCisgICAgR0xfQ01EKGdsVW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgYWxw
aGEpKTsKICAgICBHTF9DTUQoZ2xMaW5lV2lkdGgod2lkdGgpKTsKIAotICAgIGRyYXdSZWN0KHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgc2hhZGVySW5mby5nZXQoKSwgR0xfTElORV9MT09Q
LCBjb2xvci5oYXNBbHBoYSgpKTsKKyAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2spCkBAIC0zNzMsMTcgKzM3NCwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogI2lmIGRl
ZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm87CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgc2hh
ZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0
eUFuZE1hc2spOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQotICAgICAgICBzaGFkZXJJ
bmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOworICAgICAgICBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwor
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwogCi0gICAgR0xfQ01EKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsKKyAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKICAgICBHTF9D
TUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpKTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCks
IDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKIAogICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHsKICAgICAgICAgdGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMzkxLDQwICszOTIsNTggQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb24KICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgMCwgKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpID8gMSA6IDAsIDAsIDF9OwogCi0gICAgR0xfQ01EKGdsVW5pZm9y
bU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxT
RSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPnNvdXJj
ZU1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOworCisgICAgaWYgKHByb2dy
YW0tPm9wYWNpdHlMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKIAotICAgIHNoYWRlckluZm8t
PnByZXBhcmUob3BhY2l0eSwgbWFza1RleHR1cmUpOworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBt
YXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkg
eworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIEdMX0NN
RChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKKyAgICAgICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOworICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7CisgICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICB9CiAKICAgICBi
b29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5
IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGlu
Zyk7CisgICAgZHJhd1JlY3QodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdl
dCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogI2VuZGlmIC8vIGRlZmlu
ZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0
ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHNoYWRlckluZm87CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0
eUFuZE1hc2spOwogICAgIGVsc2UKLSAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
c2hhZGVySW5mby0+aWQoKSkpOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9n
cmFtLT5pZCgpKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFk
ZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CiAgICAgR0xfQ01EKGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMCkpOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNl
VGV4dHVyZVZhcmlhYmxlKCksIDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+
c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKIAogICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNb
XSA9IHsKICAgICAgICAgMSwgMCwgMCwgMCwKICAgICAgICAgMCwgKGZsYWdzICYgU2hvdWxkRmxp
cFRleHR1cmUpID8gLTEgOiAxLCAwLCAwLAogICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAw
LCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAxIDogMCwgMCwgMX07Ci0gICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJsZSgpLCAx
LCBHTF9GQUxTRSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dy
YW0tPnNvdXJjZU1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOwogCi0gICAg
c2hhZGVySW5mby0+cHJlcGFyZShvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CisgICAgaWYgKHByb2dy
YW0tPm9wYWNpdHlMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKworICAgIGlmIChtYXNrVGV4
dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIHByb2dyYW0tPm1hc2tUZXh0dXJlTG9j
YXRpb24oKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKKyAgICAgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOworICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAx
KSk7CisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICB9
CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8
fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UmVjdCh0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVl
ZHNCbGVuZGluZyk7CisgICAgZHJhd1JlY3QodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBw
cm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogCiBib29s
IEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6
ZSwgRmxhZ3MpCkBAIC03NDEsMTIgKzc2MCwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
CiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2ltcGxlKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxl
KTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOwotICAgIEdM
X0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigp
KSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgR0xfQ01E
KGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKICAg
ICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0g
ICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIo
KSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAgIEdMX0NNRChnbFZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBH
TF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAg
ICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTc4MCwxNyArNzk5LDE3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMHhmZiAmIH4o
c3RlbmNpbEluZGV4IC0gMSkpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBlbnRpcmUgYnVm
ZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
c2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7CisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBH
TF9GQUxTRSwgbTRhbGwpKTsKICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVS
TywgR0xfWkVSTykpOwogICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAw
LCA0KSk7CiAKICAgICAvLyBOb3cgYXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBx
dWFkLgogICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9S
RVBMQUNFKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5tYXRy
aXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0
cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOwogICAg
IEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CiAKICAgICAvLyBD
bGVhciB0aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNo
YWRlckluZm8tPnZlcnRleEF0dHJpYigpKSk7CisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CiAgICAgR0xfQ01EKGdsU3RlbmNp
bE1hc2soMCkpOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVu
Y2lsIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApp
bmRleCAxMmE0NWUzZWU1ZjAyNWFjNzQ3ZTcyZjU3NGJkNjc5MGNhMjNhN2Y5Li5jMzMxMjFiNjMy
YzQ5NTQxNmQ2YWZjNDg3OWZlZWM3NGQ2OWMyZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTc4LDYgKzE3OSwy
MSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCitU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSkKKyAgICA6IG1faWQoMCkKKyAgICAsIG1fdmVydGV4QXR0cmliKDApCisgICAgLCBtX3Zl
cnRleFNoYWRlcigwKQorICAgICwgbV9mcmFnbWVudFNoYWRlcigwKQorICAgICwgbV9tYXRyaXhM
b2NhdGlvbigtMSkKKyAgICAsIG1fc291cmNlTWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3Nv
dXJjZVRleHR1cmVMb2NhdGlvbigtMSkKKyAgICAsIG1fb3BhY2l0eUxvY2F0aW9uKC0xKQorICAg
ICwgbV9tYXNrVGV4dHVyZUxvY2F0aW9uKC0xKQorICAgICwgbV92ZXJ0ZXhTaGFkZXJTb3VyY2Uo
dmVydGV4U2hhZGVyU291cmNlKQorICAgICwgbV9mcmFnbWVudFNoYWRlclNvdXJjZShmcmFnbWVu
dFNoYWRlclNvdXJjZSkKK3sKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
aW5pdGlhbGl6ZVByb2dyYW0oKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKQEAgLTIxOCwxMjggKzIzNCw1NCBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkK
ICAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OmNyZWF0ZSgpCi17Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKCkpOwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3Ry
dWN0b3IuCi0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBwcm9ncmFtLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6aW5p
dGlhbGl6ZSgpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKIHsK
ICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJj
ZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fc291cmNlVGV4dHVyZVZhcmlhYmxlLCAiU291cmNlVGV4dHVyZSIpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX29wYWNpdHlWYXJpYWJsZSwgIk9wYWNpdHkiKTsKLX0KLQotY29uc3QgY2hh
ciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnZlcnRleFNoYWRlclNvdXJjZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZTsKLX0KLQotY29u
c3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmZyYWdtZW50U2hhZGVy
U291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGU7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnByZXBhcmUoZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0gICAgZ2xV
bmlmb3JtMWYobV9vcGFjaXR5VmFyaWFibGUsIG9wYWNpdHkpOwotfQotCi1QYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKQotewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVh
bCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCi0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwot
ICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9z
b3VyY2VNYXRyaXhMb2NhdGlvbiwgIkluU291cmNlTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJJbk1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjppbml0aWFsaXplKCkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKIHsK
ICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJp
eFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9jb2xvclZh
cmlhYmxlLCAiQ29sb3IiKTsKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVy
biB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X21hdHJpeExvY2F0aW9uLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9j
b2xvckxvY2F0aW9uLCAiQ29sb3IiKTsKIH0KIAotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcjsKLX0KLQotUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCkKLXsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGU7Ci19Ci0K
LVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKLXsKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkp
OwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3Iu
Ci0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpp
bml0aWFsaXplKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VS
ZWN0U2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgiKTsKLSAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVWYXJpYWJsZSwgIk1hc2tUZXh0
dXJlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0
eSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZU1hdHJpeExvY2F0aW9uLCAiSW5T
b3VyY2VNYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
IkluTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0
aW9uLCAiU291cmNlVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlM
b2NhdGlvbiwgIk9wYWNpdHkiKTsKIH0KIAotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2spCiB7Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrOwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyYWdt
ZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2s7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6cHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKLXsKLSAgICBnbFVuaWZvcm0xZihtX29wYWNpdHlW
YXJpYWJsZSwgb3BhY2l0eSk7Ci0gICAgaWYgKCFtYXNrVGV4dHVyZSB8fCAhbWFza1RleHR1cmUt
PmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwotICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICBnbFVuaWZv
cm0xaShtX21hc2tUZXh0dXJlVmFyaWFibGUsIDEpOwotICAgIGdsQWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpjcmVhdGUoKQotewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7CisgICAgaW5pdGlhbGl6ZVByb2dyYW0o
KTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgIkluTWF0cml4Iik7
CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4TG9jYXRpb24sICJJblNvdXJj
ZU1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlv
biwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVy
ZUxvY2F0aW9uLCAiTWFza1RleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFj
aXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKLWNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNv
bnN0CitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKQorICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdt
ZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQogewotICAgIHJldHVybiBmcmFnbWVu
dFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzazsKKyAgICBpbml0aWFsaXplUHJvZ3JhbSgp
OworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAiSW5NYXRyaXgiKTsK
KyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhMb2NhdGlvbiwgIkluU291cmNl
TWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9u
LCAiU291cmNlVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJl
TG9jYXRpb24sICJNYXNrVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNp
dHlMb2NhdGlvbiwgIk9wYWNpdHkiKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmgKaW5kZXggM2YwYjQ4OThiOWQwOTU0NGM5MzBhYWEyMGQ1YmRkOWQyNDljNGM0
Mi4uOTY4YzQxZTQwNWI1NjgzNmQ0NDczYWI4ZjgwMmIwNTVjZDNiZmFlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KIAogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAs
NiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbnMuaCIKQEAgLTQ1LDI5ICs0NywzNiBAQCBwdWJsaWM6CiAgICAgR0x1aW50IGlkKCkgeyBy
ZXR1cm4gbV9pZDsgfQogICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRl
eEF0dHJpYjsgfQogCisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAg
ICBHTGludCBtYXRyaXhWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4VmFyaWFibGU7
IH0KLSAgICBHTGludCBzb3VyY2VNYXRyaXhWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlTWF0cml4VmFyaWFibGU7IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsgfQotICAgIEdMaW50IG9wYWNp
dHlWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eVZhcmlhYmxlOyB9CisgICAgR0xp
bnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Cisg
ICAgR0xpbnQgc291cmNlTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1h
dHJpeExvY2F0aW9uOyB9CisgICAgR0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHTGludCBtYXNrVGV4dHVy
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9CisgICAg
R0xpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247
IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50JiB2YXIs
IGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7CisgICAgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTb3VyY2UuZGF0YSgpOyB9
CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X2ZyYWdtZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQogCiAgICAgR0x1aW50IG1faWQ7CiAgICAg
R0x1aW50IG1fdmVydGV4QXR0cmliOwogICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKICAgICBH
THVpbnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTGludCBtX21hdHJpeFZhcmlhYmxlOwotICAg
IEdMaW50IG1fc291cmNlTWF0cml4VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJl
VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9vcGFjaXR5VmFyaWFibGU7CisgICAgR0xpbnQgbV9tYXRy
aXhMb2NhdGlvbjsKKyAgICBHTGludCBtX3NvdXJjZU1hdHJpeExvY2F0aW9uOworICAgIEdMaW50
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdMaW50IG1fb3BhY2l0eUxvY2F0aW9uOwor
ICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKworcHJpdmF0ZToKKyAgICBDU3RyaW5n
IG1fdmVydGV4U2hhZGVyU291cmNlOworICAgIENTdHJpbmcgbV9mcmFnbWVudFNoYWRlclNvdXJj
ZTsKIH07CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC0xMDYsNzAgKzExNSw2MCBAQCBw
cml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpOwotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemUoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZSgpIHsgfQotCi0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwog
fTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGlj
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
KTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZSgpIHsgfQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwog
fTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSopOwotICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUoKSBjb25zdCB7IHJldHVy
biBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsK
KyAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCBtX2NsYXNzSUQ7Ci0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpIHsgfQotICAgIEdMaW50IG1fbWFza1RleHR1
cmVWYXJpYWJsZTsKLQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzazsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCk7CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrKCkpOworICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2soKSB7IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I+IGNyZWF0ZSgpOwotICAgIEdMaW50IGNvbG9yVmFyaWFibGUoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yVmFyaWFibGU7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAg
ICB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIEdM
aW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KIAog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25z
dDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSB7IH0KLSAgICBH
TGludCBtX2NvbG9yVmFyaWFibGU7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKCk7CisgICAgR0xpbnQgbV9jb2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148044</attachid>
            <date>2012-06-17 21:06:00 -0700</date>
            <delta_ts>2012-06-17 22:09:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89293-20120617210600.patch</filename>
            <type>text/plain</type>
            <size>26015</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDRlNDE3OGY5OTk2ZWI4
MzMwZWNlNWExYzc2NTRiYTcxOWQ3NzcxYi4uMDc5MGIzMGNjOWRlN2IzYmU0Mjc2Nzk1ZmEwOWU2
OTRiZmM2YzA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4dHVyZU1h
cHBlcl0gUmVkdWNlIGJvaWxlcnBsYXRlIGNvZGUgaW4gdGhlIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSBj
b2RlLCBieToKKyAgICAgICAgMS4gTWFraW5nIGZyYWdtZW50IGFuZCBzaGFkZXIgc291cmNlIGFy
Z3VtZW50cyB0byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgMi4gUmVtb3Zp
bmcgdmlydHVhbCBtZXRob2RzICh3aGljaCBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBjb25zdHJ1
Y3RvcnMpIHdpdGgKKyAgICAgICAgICAgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb25zLiBUaGlz
IGV4Y2hhbmdlcyBhIHNtYWxsIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uCisgICAgICAgICAg
IGZvciBhIGxvdCBsZXNzIGJvaWxlcnBsYXRlLgorICAgICAgICAzLiBTdGFuZGFyZGl6aW5nIG9u
IHRoZSBmb29Mb2NhdGlvbiBuYW1lIGluc3RlYWQgb2YgZm9vVmFyaWFibGUuCisgICAgICAgIDQu
IFJlbW92aW5nIHRoZSA6OnByZXBhcmUoKSBzZXJpZXMgb2YgbWV0aG9kcyBmb3Igbm9uLWZpbHRl
ciBzaGFkZXJzLiBJdCdzIGJldHRlcnMgdG8KKyAgICAgICAgICAgaGF2ZSBhbGwgdGhlIHVuaWZv
cm0gYW5kIGF0dHJpYnV0ZSBiaW5kaW5nIGluIHRoZSBzYW1lIHBsYWNlLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3IgYW5kIHNob3VsZG4ndCBjaGFuZ2Ug
YW55IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgSGFuZGxlIGJpbmRpbmcgdGhlIG1hc2sgdGV4
dHVyZSBhbmQgb3BhY2l0eSBhdCBib3RoIG9mIHRoZSBwcmV2aW91cyA6OnByZXBhcmUgY2FsbHNp
dGVzLiBBbHNvCisgICAgICAgIHJlbmFtZSAic2hhZGVySW5mbyIgdG8gInByb2dyYW0iLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHA6IFBlcmZvcm0gdGhlIHJlZmFjdG9yaW5nIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDog
RGl0dG8uCisKIDIwMTItMDYtMTMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpbXBs
ZW1lbnRhdGlvbiBmb3IgV2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2YjJhY2Ew
ZTJjZDgzMDgyNjAxZGZkMGE0MzYxMzlmMTJjZmFkZTc5Li5iYTg5MDIyZTFkYjA3M2U4NmE5NWQw
OWIxMzc2MGQ3YTUyMTYyNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgogCiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zMjcsNyArMzI4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb24KICAgICAg
ICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgp
LAogICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRy
aXgubTQ0KCkKICAgICB9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJv
Z3JhbS0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9G
QUxTRSwgbTQpKTsKIAogICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7CiAgICAgICAgIEdMX0NNRChn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKQEAgLTM0NCwxOCAr
MzQ1LDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1
cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9y
UHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOwor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRD
b2xvclByb2dyYW0oKTsKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsK
IAogICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAgIEdMX0NNRChn
bFVuaWZvcm00ZihzaGFkZXJJbmZvLT5jb2xvclZhcmlhYmxlKCksCisgICAgR0xfQ01EKGdsVW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgYWxw
aGEpKTsKICAgICBHTF9DTUQoZ2xMaW5lV2lkdGgod2lkdGgpKTsKIAotICAgIGRyYXdSZWN0KHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgc2hhZGVySW5mby5nZXQoKSwgR0xfTElORV9MT09Q
LCBjb2xvci5oYXNBbHBoYSgpKTsKKyAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2spCkBAIC0zNzMsMTcgKzM3NCwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogI2lmIGRl
ZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm87CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgc2hh
ZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0
eUFuZE1hc2spOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQotICAgICAgICBzaGFkZXJJ
bmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOworICAgICAgICBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwor
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwogCi0gICAgR0xfQ01EKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsKKyAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKICAgICBHTF9D
TUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpKTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCks
IDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKIAogICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHsKICAgICAgICAgdGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMzkxLDQwICszOTIsNTggQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb24KICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgMCwgKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpID8gMSA6IDAsIDAsIDF9OwogCi0gICAgR0xfQ01EKGdsVW5pZm9y
bU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxT
RSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPnNvdXJj
ZU1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOworCisgICAgaWYgKHByb2dy
YW0tPm9wYWNpdHlMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKIAotICAgIHNoYWRlckluZm8t
PnByZXBhcmUob3BhY2l0eSwgbWFza1RleHR1cmUpOworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBt
YXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkg
eworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIEdMX0NN
RChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKKyAgICAgICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOworICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7CisgICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICB9CiAKICAgICBi
b29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5
IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGlu
Zyk7CisgICAgZHJhd1JlY3QodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdl
dCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogI2VuZGlmIC8vIGRlZmlu
ZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0
ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHNoYWRlckluZm87CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0
eUFuZE1hc2spOwogICAgIGVsc2UKLSAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
c2hhZGVySW5mby0+aWQoKSkpOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9n
cmFtLT5pZCgpKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFk
ZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CiAgICAgR0xfQ01EKGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMCkpOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNl
VGV4dHVyZVZhcmlhYmxlKCksIDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+
c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKIAogICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNb
XSA9IHsKICAgICAgICAgMSwgMCwgMCwgMCwKICAgICAgICAgMCwgKGZsYWdzICYgU2hvdWxkRmxp
cFRleHR1cmUpID8gLTEgOiAxLCAwLCAwLAogICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAw
LCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAxIDogMCwgMCwgMX07Ci0gICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJsZSgpLCAx
LCBHTF9GQUxTRSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dy
YW0tPnNvdXJjZU1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOwogCi0gICAg
c2hhZGVySW5mby0+cHJlcGFyZShvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CisgICAgaWYgKHByb2dy
YW0tPm9wYWNpdHlMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKworICAgIGlmIChtYXNrVGV4
dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIHByb2dyYW0tPm1hc2tUZXh0dXJlTG9j
YXRpb24oKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKKyAgICAgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOworICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAx
KSk7CisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICB9
CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8
fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UmVjdCh0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVl
ZHNCbGVuZGluZyk7CisgICAgZHJhd1JlY3QodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBw
cm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogCiBib29s
IEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6
ZSwgRmxhZ3MpCkBAIC03NDEsMTIgKzc2MCwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
CiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2ltcGxlKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxl
KTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOwotICAgIEdM
X0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigp
KSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgR0xfQ01E
KGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKICAg
ICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0g
ICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIo
KSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAgIEdMX0NNRChnbFZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBH
TF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAg
ICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTc4MCwxNyArNzk5LDE3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMHhmZiAmIH4o
c3RlbmNpbEluZGV4IC0gMSkpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBlbnRpcmUgYnVm
ZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
c2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7CisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBH
TF9GQUxTRSwgbTRhbGwpKTsKICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVS
TywgR0xfWkVSTykpOwogICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAw
LCA0KSk7CiAKICAgICAvLyBOb3cgYXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBx
dWFkLgogICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9S
RVBMQUNFKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5tYXRy
aXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0
cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOwogICAg
IEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CiAKICAgICAvLyBD
bGVhciB0aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNo
YWRlckluZm8tPnZlcnRleEF0dHJpYigpKSk7CisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CiAgICAgR0xfQ01EKGdsU3RlbmNp
bE1hc2soMCkpOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVu
Y2lsIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApp
bmRleCAxMmE0NWUzZWU1ZjAyNWFjNzQ3ZTcyZjU3NGJkNjc5MGNhMjNhN2Y5Li5jMzMxMjFiNjMy
YzQ5NTQxNmQ2YWZjNDg3OWZlZWM3NGQ2OWMyZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTc4LDYgKzE3OSwy
MSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCitU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSkKKyAgICA6IG1faWQoMCkKKyAgICAsIG1fdmVydGV4QXR0cmliKDApCisgICAgLCBtX3Zl
cnRleFNoYWRlcigwKQorICAgICwgbV9mcmFnbWVudFNoYWRlcigwKQorICAgICwgbV9tYXRyaXhM
b2NhdGlvbigtMSkKKyAgICAsIG1fc291cmNlTWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3Nv
dXJjZVRleHR1cmVMb2NhdGlvbigtMSkKKyAgICAsIG1fb3BhY2l0eUxvY2F0aW9uKC0xKQorICAg
ICwgbV9tYXNrVGV4dHVyZUxvY2F0aW9uKC0xKQorICAgICwgbV92ZXJ0ZXhTaGFkZXJTb3VyY2Uo
dmVydGV4U2hhZGVyU291cmNlKQorICAgICwgbV9mcmFnbWVudFNoYWRlclNvdXJjZShmcmFnbWVu
dFNoYWRlclNvdXJjZSkKK3sKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
aW5pdGlhbGl6ZVByb2dyYW0oKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKQEAgLTIxOCwxMjggKzIzNCw1NCBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkK
ICAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OmNyZWF0ZSgpCi17Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKCkpOwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3Ry
dWN0b3IuCi0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBwcm9ncmFtLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6aW5p
dGlhbGl6ZSgpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKIHsK
ICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJj
ZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fc291cmNlVGV4dHVyZVZhcmlhYmxlLCAiU291cmNlVGV4dHVyZSIpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX29wYWNpdHlWYXJpYWJsZSwgIk9wYWNpdHkiKTsKLX0KLQotY29uc3QgY2hh
ciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnZlcnRleFNoYWRlclNvdXJjZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZTsKLX0KLQotY29u
c3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmZyYWdtZW50U2hhZGVy
U291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGU7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnByZXBhcmUoZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0gICAgZ2xV
bmlmb3JtMWYobV9vcGFjaXR5VmFyaWFibGUsIG9wYWNpdHkpOwotfQotCi1QYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKQotewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVh
bCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCi0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwot
ICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9z
b3VyY2VNYXRyaXhMb2NhdGlvbiwgIkluU291cmNlTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJJbk1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjppbml0aWFsaXplKCkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKIHsK
ICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJp
eFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9jb2xvclZh
cmlhYmxlLCAiQ29sb3IiKTsKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVy
biB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X21hdHJpeExvY2F0aW9uLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9j
b2xvckxvY2F0aW9uLCAiQ29sb3IiKTsKIH0KIAotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcjsKLX0KLQotUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCkKLXsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGU7Ci19Ci0K
LVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKLXsKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkp
OwotICAgIC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3Iu
Ci0gICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpp
bml0aWFsaXplKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VS
ZWN0U2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgiKTsKLSAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVWYXJpYWJsZSwgIk1hc2tUZXh0
dXJlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0
eSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZU1hdHJpeExvY2F0aW9uLCAiSW5T
b3VyY2VNYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
IkluTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0
aW9uLCAiU291cmNlVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlM
b2NhdGlvbiwgIk9wYWNpdHkiKTsKIH0KIAotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2spCiB7Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrOwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyYWdt
ZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2s7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6cHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKLXsKLSAgICBnbFVuaWZvcm0xZihtX29wYWNpdHlW
YXJpYWJsZSwgb3BhY2l0eSk7Ci0gICAgaWYgKCFtYXNrVGV4dHVyZSB8fCAhbWFza1RleHR1cmUt
PmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwotICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICBnbFVuaWZv
cm0xaShtX21hc2tUZXh0dXJlVmFyaWFibGUsIDEpOwotICAgIGdsQWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpjcmVhdGUoKQotewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7CisgICAgaW5pdGlhbGl6ZVByb2dyYW0o
KTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgIkluTWF0cml4Iik7
CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4TG9jYXRpb24sICJJblNvdXJj
ZU1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlv
biwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVy
ZUxvY2F0aW9uLCAiTWFza1RleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFj
aXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKLWNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNv
bnN0CitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKQorICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdt
ZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQogewotICAgIHJldHVybiBmcmFnbWVu
dFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzazsKKyAgICBpbml0aWFsaXplUHJvZ3JhbSgp
OworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAiSW5NYXRyaXgiKTsK
KyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhMb2NhdGlvbiwgIkluU291cmNl
TWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9u
LCAiU291cmNlVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJl
TG9jYXRpb24sICJNYXNrVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNp
dHlMb2NhdGlvbiwgIk9wYWNpdHkiKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmgKaW5kZXggM2YwYjQ4OThiOWQwOTU0NGM5MzBhYWEyMGQ1YmRkOWQyNDljNGM0
Mi4uOTY4YzQxZTQwNWI1NjgzNmQ0NDczYWI4ZjgwMmIwNTVjZDNiZmFlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KIAogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAs
NiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbnMuaCIKQEAgLTQ1LDI5ICs0NywzNiBAQCBwdWJsaWM6CiAgICAgR0x1aW50IGlkKCkgeyBy
ZXR1cm4gbV9pZDsgfQogICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRl
eEF0dHJpYjsgfQogCisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAg
ICBHTGludCBtYXRyaXhWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4VmFyaWFibGU7
IH0KLSAgICBHTGludCBzb3VyY2VNYXRyaXhWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlTWF0cml4VmFyaWFibGU7IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsgfQotICAgIEdMaW50IG9wYWNp
dHlWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eVZhcmlhYmxlOyB9CisgICAgR0xp
bnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Cisg
ICAgR0xpbnQgc291cmNlTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1h
dHJpeExvY2F0aW9uOyB9CisgICAgR0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHTGludCBtYXNrVGV4dHVy
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9CisgICAg
R0xpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247
IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50JiB2YXIs
IGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7CisgICAgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTb3VyY2UuZGF0YSgpOyB9
CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X2ZyYWdtZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQogCiAgICAgR0x1aW50IG1faWQ7CiAgICAg
R0x1aW50IG1fdmVydGV4QXR0cmliOwogICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKICAgICBH
THVpbnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTGludCBtX21hdHJpeFZhcmlhYmxlOwotICAg
IEdMaW50IG1fc291cmNlTWF0cml4VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJl
VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9vcGFjaXR5VmFyaWFibGU7CisgICAgR0xpbnQgbV9tYXRy
aXhMb2NhdGlvbjsKKyAgICBHTGludCBtX3NvdXJjZU1hdHJpeExvY2F0aW9uOworICAgIEdMaW50
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdMaW50IG1fb3BhY2l0eUxvY2F0aW9uOwor
ICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKworcHJpdmF0ZToKKyAgICBDU3RyaW5n
IG1fdmVydGV4U2hhZGVyU291cmNlOworICAgIENTdHJpbmcgbV9mcmFnbWVudFNoYWRlclNvdXJj
ZTsKIH07CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC0xMDYsNzAgKzExNSw2MCBAQCBw
cml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpOwotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemUoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZSgpIHsgfQotCi0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwog
fTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGlj
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
KTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZSgpIHsgfQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwog
fTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSopOwotICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUoKSBjb25zdCB7IHJldHVy
biBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsK
KyAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCBtX2NsYXNzSUQ7Ci0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpIHsgfQotICAgIEdMaW50IG1fbWFza1RleHR1
cmVWYXJpYWJsZTsKLQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzazsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCk7CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrKCkpOworICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2soKSB7IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I+IGNyZWF0ZSgpOwotICAgIEdMaW50IGNvbG9yVmFyaWFibGUoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yVmFyaWFibGU7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAg
ICB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIEdM
aW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KIAog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25z
dDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSB7IH0KLSAgICBH
TGludCBtX2NvbG9yVmFyaWFibGU7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKCk7CisgICAgR0xpbnQgbV9jb2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148052</attachid>
            <date>2012-06-17 22:09:40 -0700</date>
            <delta_ts>2012-06-17 23:36:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89293-20120617220939.patch</filename>
            <type>text/plain</type>
            <size>26295</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDRlNDE3OGY5OTk2ZWI4
MzMwZWNlNWExYzc2NTRiYTcxOWQ3NzcxYi4uMDc5MGIzMGNjOWRlN2IzYmU0Mjc2Nzk1ZmEwOWU2
OTRiZmM2YzA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4dHVyZU1h
cHBlcl0gUmVkdWNlIGJvaWxlcnBsYXRlIGNvZGUgaW4gdGhlIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSBj
b2RlLCBieToKKyAgICAgICAgMS4gTWFraW5nIGZyYWdtZW50IGFuZCBzaGFkZXIgc291cmNlIGFy
Z3VtZW50cyB0byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgMi4gUmVtb3Zp
bmcgdmlydHVhbCBtZXRob2RzICh3aGljaCBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBjb25zdHJ1
Y3RvcnMpIHdpdGgKKyAgICAgICAgICAgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb25zLiBUaGlz
IGV4Y2hhbmdlcyBhIHNtYWxsIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uCisgICAgICAgICAg
IGZvciBhIGxvdCBsZXNzIGJvaWxlcnBsYXRlLgorICAgICAgICAzLiBTdGFuZGFyZGl6aW5nIG9u
IHRoZSBmb29Mb2NhdGlvbiBuYW1lIGluc3RlYWQgb2YgZm9vVmFyaWFibGUuCisgICAgICAgIDQu
IFJlbW92aW5nIHRoZSA6OnByZXBhcmUoKSBzZXJpZXMgb2YgbWV0aG9kcyBmb3Igbm9uLWZpbHRl
ciBzaGFkZXJzLiBJdCdzIGJldHRlcnMgdG8KKyAgICAgICAgICAgaGF2ZSBhbGwgdGhlIHVuaWZv
cm0gYW5kIGF0dHJpYnV0ZSBiaW5kaW5nIGluIHRoZSBzYW1lIHBsYWNlLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3IgYW5kIHNob3VsZG4ndCBjaGFuZ2Ug
YW55IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgSGFuZGxlIGJpbmRpbmcgdGhlIG1hc2sgdGV4
dHVyZSBhbmQgb3BhY2l0eSBhdCBib3RoIG9mIHRoZSBwcmV2aW91cyA6OnByZXBhcmUgY2FsbHNp
dGVzLiBBbHNvCisgICAgICAgIHJlbmFtZSAic2hhZGVySW5mbyIgdG8gInByb2dyYW0iLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHA6IFBlcmZvcm0gdGhlIHJlZmFjdG9yaW5nIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDog
RGl0dG8uCisKIDIwMTItMDYtMTMgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpbXBs
ZW1lbnRhdGlvbiBmb3IgV2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2YjJhY2Ew
ZTJjZDgzMDgyNjAxZGZkMGE0MzYxMzlmMTJjZmFkZTc5Li5lNjY5YWUyZmIzNzJjZTRkMDVkZDky
OTFmNjllYzEzY2M2ZjExNDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgogCiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zMjcsNyArMzI4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb24KICAgICAg
ICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgp
LAogICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRy
aXgubTQ0KCkKICAgICB9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJv
Z3JhbS0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9G
QUxTRSwgbTQpKTsKIAogICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7CiAgICAgICAgIEdMX0NNRChn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKQEAgLTM0NCwxOCAr
MzQ1LDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1
cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9y
UHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOwor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRD
b2xvclByb2dyYW0oKTsKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsK
IAogICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAgIEdMX0NNRChn
bFVuaWZvcm00ZihzaGFkZXJJbmZvLT5jb2xvclZhcmlhYmxlKCksCisgICAgR0xfQ01EKGdsVW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgYWxw
aGEpKTsKICAgICBHTF9DTUQoZ2xMaW5lV2lkdGgod2lkdGgpKTsKIAotICAgIGRyYXdSZWN0KHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgc2hhZGVySW5mby5nZXQoKSwgR0xfTElORV9MT09Q
LCBjb2xvci5oYXNBbHBoYSgpKTsKKyAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2spCkBAIC0zNzMsMTcgKzM3NCwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogI2lmIGRl
ZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm87CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgc2hh
ZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0
eUFuZE1hc2spOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQotICAgICAgICBzaGFkZXJJ
bmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOworICAgICAgICBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwor
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwogCi0gICAgR0xfQ01EKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsKKyAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKICAgICBHTF9D
TUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpKTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCks
IDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKIAogICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHsKICAgICAgICAgdGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMzkxLDQwICszOTIsNTggQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb24KICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgMCwgKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpID8gMSA6IDAsIDAsIDF9OwogCi0gICAgR0xfQ01EKGdsVW5pZm9y
bU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxT
RSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPnNvdXJj
ZU1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOworCisgICAgaWYgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9w
YWNpdHlMb2NhdGlvbigpKSkKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9w
YWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7CiAKLSAgICBzaGFkZXJJbmZvLT5wcmVwYXJlKG9w
YWNpdHksIG1hc2tUZXh0dXJlKTsKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUt
PmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CisgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMSkpOworICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKKyAgICAgICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgIH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGlu
ZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tU
ZXh0dXJlOwotICAgIGRyYXdSZWN0KHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgc2hhZGVy
SW5mby5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3UmVj
dCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xF
X0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9CiAjZW5kaWYgLy8gZGVmaW5lZChHTF9BUkJfdGV4dHVy
ZV9yZWN0YW5nbGUpIAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gc2hhZGVySW5m
bzsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAg
aWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBzaGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgcHJvZ3JhbSA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAgICAg
ZWxzZQotICAgICAgICBzaGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5pZCgp
KSk7CisgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6U2ltcGxlKTsKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKIAot
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0
dHJpYigpKSk7CisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpKTsKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUw
KSk7CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSkpOwot
ICAgIEdMX0NNRChnbFVuaWZvcm0xaShzaGFkZXJJbmZvLT5zb3VyY2VUZXh0dXJlVmFyaWFibGUo
KSwgMCkpOworICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9j
YXRpb24oKSwgMCkpOwogCiAgICAgY29uc3QgR0xmbG9hdCBtNHNyY1tdID0gewogICAgICAgICAx
LCAwLCAwLCAwLAogICAgICAgICAwLCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAtMSA6
IDEsIDAsIDAsCiAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgIDAsIChmbGFncyAmIFNob3Vs
ZEZsaXBUZXh0dXJlKSA/IDEgOiAwLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHNoYWRlckluZm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNy
YykpOworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+c291cmNlTWF0cml4
TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00c3JjKSk7CiAKLSAgICBzaGFkZXJJbmZvLT5wcmVw
YXJlKG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKKyAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkp
KQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCks
IG9wYWNpdHkpKTsKKworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxp
ZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKKyAgICAgICAgY29uc3QgQml0bWFw
VGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVy
ZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUxKSk7CisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1h
c2tUZXh0dXJlR0wtPmlkKCkpKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0t
Pm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZs
YWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7
Ci0gICAgZHJhd1JlY3QodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBzaGFkZXJJbmZvLmdl
dCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdSZWN0KHRhcmdl
dFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBu
ZWVkc0JsZW5kaW5nKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChj
b25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQpAQCAtNzQxLDEyICs3NjAsMTIgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGRhdGEoKS5pbml0aWFsaXplU3RlbmNpbCgp
OwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBzaGFkZXJJbmZvID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CisgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNo
YWRlckluZm8tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShz
aGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJv
Z3JhbS0+aWQoKSkpOworICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAs
IDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIo
c2hhZGVySW5mby0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5p
dFJlY3QpKTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CiAKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgp
CkBAIC03ODAsMTcgKzc5OSwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIEdMX0NN
RChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CiAKICAgICAvLyBG
aXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBH
TF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPm1hdHJpeFZhcmlhYmxlKCksIDEs
IEdMX0ZBTFNFLCBtNGFsbCkpOworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7CiAgICAgR0xfQ01EKGds
U3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pFUk8sIEdMX1pFUk8pKTsKICAgICBHTF9DTUQoZ2xEcmF3
QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBj
dXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xf
UkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm1N
YXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7
CisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigp
LCAxLCBHTF9GQUxTRSwgbTQpKTsKICAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCkpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NNRChnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAg
IEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwogICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIEluY3JlYXNlIHN0
ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMTJhNDVlM2VlNWYwMjVhYzc0N2U3MmY1NzRi
ZDY3OTBjYTIzYTdmOS4uYzMzMTIxYjYzMmM0OTU0MTZkNmFmYzQ4NzlmZWVjNzRkNjljMmQ0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCiAKICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTE3OCw2ICsxNzksMjEgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKICAg
ICByZXR1cm4gcHJvZ3JhbTsKIH0KIAorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCisgICAgOiBtX2lkKDApCisgICAgLCBtX3Zl
cnRleEF0dHJpYigwKQorICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKKyAgICAsIG1fZnJhZ21lbnRT
aGFkZXIoMCkKKyAgICAsIG1fbWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3NvdXJjZU1hdHJp
eExvY2F0aW9uKC0xKQorICAgICwgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb24oLTEpCisgICAgLCBt
X29wYWNpdHlMb2NhdGlvbigtMSkKKyAgICAsIG1fbWFza1RleHR1cmVMb2NhdGlvbigtMSkKKyAg
ICAsIG1fdmVydGV4U2hhZGVyU291cmNlKHZlcnRleFNoYWRlclNvdXJjZSkKKyAgICAsIG1fZnJh
Z21lbnRTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXJTb3VyY2UpCit7Cit9CisKIHZvaWQgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7
CkBAIC0yMTgsMTI4ICsyMzQsNTQgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiAgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7
CiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKQotewotICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU6OmluaXRpYWxpemUoKQorVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKKyAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhWYXJpYWJsZSwgIkluU291cmNlTWF0cml4
Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVWYXJpYWJsZSwgIlNvdXJj
ZVRleHR1cmUiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5VmFyaWFibGUsICJP
cGFjaXR5Iik7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VTaW1wbGU7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZy
YWdtZW50U2hhZGVyU291cmNlU2ltcGxlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlKQotewotICAgIGdsVW5pZm9ybTFmKG1fb3BhY2l0eVZhcmlhYmxlLCBvcGFj
aXR5KTsKLX0KLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3I+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKCkKLXsKLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKLSAg
ICAvLyBBdm9pZCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAg
IHByb2dyYW0tPmluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Cisg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4TG9jYXRpb24sICJJblNvdXJjZU1h
dHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAiSW5NYXRy
aXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJT
b3VyY2VUZXh0dXJlIik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9u
LCAiT3BhY2l0eSIpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcjo6aW5pdGlhbGl6ZSgpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpCisgICAgOiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JWYXJpYWJsZSwgIkNvbG9yIik7Ci19Ci0KLWNvbnN0IGNo
YXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6dmVydGV4U2hhZGVyU291
cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvcjsK
KyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgIkluTWF0cml4Iik7Cisg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgIkNvbG9yIik7CiB9CiAKLWNv
bnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6ZnJhZ21lbnRT
aGFkZXJTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNv
bGlkQ29sb3I7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpCi17
Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gcHJvZ3Jh
bSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7
Ci0gICAgLy8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4K
LSAgICBwcm9ncmFtLT5pbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgp
OwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OmZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhZ21lbnRTaGFk
ZXJTb3VyY2VSZWN0U2ltcGxlOwotfQotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s6OmNyZWF0ZSgpCi17Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKLSAgICAvLyBBdm9pZCBjYWxsaW5nIHZpcnR1YWwg
ZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgotICAgIHByb2dyYW0tPmluaXRpYWxpemUoKTsKLSAg
ICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6aW5pdGlhbGl6ZSgpCitUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
CisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJv
Z3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRy
aXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhWYXJpYWJsZSwgIklu
U291cmNlTWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZVZh
cmlhYmxlLCAiU291cmNlVGV4dHVyZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tU
ZXh0dXJlVmFyaWFibGUsICJNYXNrVGV4dHVyZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X29wYWNpdHlWYXJpYWJsZSwgIk9wYWNpdHkiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9z
b3VyY2VNYXRyaXhMb2NhdGlvbiwgIkluU291cmNlTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJJbk1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKLWNvbnN0
IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnZlcnRleFNo
YWRlclNvdXJjZSgpIGNvbnN0CitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkKKyAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
LCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQogewotICAgIHJldHVybiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzazsKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrOwot
fQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnByZXBh
cmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0g
ICAgZ2xVbmlmb3JtMWYobV9vcGFjaXR5VmFyaWFibGUsIG9wYWNpdHkpOwotICAgIGlmICghbWFz
a1RleHR1cmUgfHwgIW1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICBnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTEpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1
cmVHTC0+aWQoKSk7Ci0gICAgZ2xVbmlmb3JtMWkobV9tYXNrVGV4dHVyZVZhcmlhYmxlLCAxKTsK
LSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotfQotCi1QYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKLXsKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IHByb2dyYW0gPSBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKSk7
Ci0gICAgLy8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4K
LSAgICBwcm9ncmFtLT5pbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgp
OworICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0
cml4TG9jYXRpb24sICJJbk1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJj
ZU1hdHJpeExvY2F0aW9uLCAiSW5Tb3VyY2VNYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJTb3VyY2VUZXh0dXJlIik7CisgICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVMb2NhdGlvbiwgIk1hc2tUZXh0dXJlIik7CisgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAiT3BhY2l0eSIpOwogfQogCi1j
b25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6
ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdAorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrKCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFz
aykKIHsKLSAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2s7
CisgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRy
aXhMb2NhdGlvbiwgIkluTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNl
TWF0cml4TG9jYXRpb24sICJJblNvdXJjZU1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZUxvY2F0aW9uLCAiTWFza1RleHR1cmUiKTsKKyAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJPcGFjaXR5Iik7CiB9CiAKIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IDNmMGI0ODk4YjlkMDk1
NDRjOTMwYWFhMjBkNWJkZDlkMjQ5YzRjNDIuLmRhN2IxZWJiNzU0YTRiNjFkOTM0ZWUzNjYzMTVj
N2E4ZTljZTNiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCiAKICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCkBAIC00NSwyOSArNDcsMzggQEAgcHVi
bGljOgogICAgIEdMdWludCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KICAgICBHTHVpbnQgdmVydGV4
QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAorICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSBjb25zdCB7
IHJldHVybiBtX21hdHJpeFZhcmlhYmxlOyB9Ci0gICAgR0xpbnQgc291cmNlTWF0cml4VmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOyB9Ci0gICAgR0xpbnQg
c291cmNlVGV4dHVyZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFy
aWFibGU7IH0KLSAgICBHTGludCBvcGFjaXR5VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX29w
YWNpdHlWYXJpYWJsZTsgfQorICAgIEdMaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQorICAgIEdMaW50IHNvdXJjZU1hdHJpeExvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXRyaXhMb2NhdGlvbjsgfQorICAgIEdMaW50IHNvdXJj
ZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9u
OyB9CisgICAgR0xpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a1RleHR1cmVMb2NhdGlvbjsgfQorICAgIEdMaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5p
Zm9ybUxvY2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHTGludCYgdmFyLCBjb25z
dCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemUoKSB7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQorICAg
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFn
bWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KIAogICAgIEdMdWludCBtX2lkOwogICAgIEdMdWlu
dCBtX3ZlcnRleEF0dHJpYjsKICAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7CiAgICAgR0x1aW50
IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9tYXRyaXhWYXJpYWJsZTsKLSAgICBHTGlu
dCBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZVZhcmlh
YmxlOwotICAgIEdMaW50IG1fb3BhY2l0eVZhcmlhYmxlOworICAgIEdMaW50IG1fbWF0cml4TG9j
YXRpb247CisgICAgR0xpbnQgbV9zb3VyY2VNYXRyaXhMb2NhdGlvbjsKKyAgICBHTGludCBtX3Nv
dXJjZVRleHR1cmVMb2NhdGlvbjsKKyAgICBHTGludCBtX29wYWNpdHlMb2NhdGlvbjsKKyAgICBH
TGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CisKK3ByaXZhdGU6CisgICAgQ1N0cmluZyBtX3Zl
cnRleFNoYWRlclNvdXJjZTsKKyAgICBDU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2U7CiB9
OwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMTA2LDcwICsxMTcsNjAgQEAgcHJpdmF0
ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlKCkpOworICAgIH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplKCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGUoKSB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAK
LWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7Cisg
ICAgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
KSB7IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqKTsKLSAgICBHTGludCBtYXNrVGV4dHVyZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrVGV4dHVyZVZhcmlhYmxlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAg
fQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBpbnQgbV9jbGFzc0lEOwotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSB7IH0KLSAgICBHTGludCBtX21hc2tUZXh0dXJlVmFy
aWFibGU7Ci0KLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzaygpOwogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
ayB7CitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+
IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygp
KTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKCkgeyB9CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
PiBjcmVhdGUoKTsKLSAgICBHTGludCBjb2xvclZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclZhcmlhYmxlOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSk7CisgICAgfQog
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBHTGludCBj
b2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9CiAKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0g
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkgeyB9Ci0gICAgR0xpbnQg
bV9jb2xvclZhcmlhYmxlOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cigpOworICAgIEdMaW50IG1fY29sb3JMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>