<?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>71270</bug_id>
          
          <creation_ts>2011-11-01 00:39:46 -0700</creation_ts>
          <short_desc>[chromium] Experiment in &lt;canvas&gt;.toBlob</short_desc>
          <delta_ts>2017-03-08 17:56:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>148878</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="noel gordon">noel.gordon</reporter>
          <assigned_to name="noel gordon">noel.gordon</assigned_to>
          <cc>bugmail</cc>
    
    <cc>chris.cinelli</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>kennyluck</cc>
    
    <cc>schenney</cc>
    
    <cc>syoichi</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>493788</commentid>
    <comment_count>0</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-11-01 00:39:46 -0700</bug_when>
    <thetext>Experiments with &lt;canvas&gt;.toBlob</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493791</commentid>
    <comment_count>1</comment_count>
      <attachid>113139</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-11-01 00:42:51 -0700</bug_when>
    <thetext>Created attachment 113139
Experiment uno: multiple threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493796</commentid>
    <comment_count>2</comment_count>
      <attachid>113142</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-11-01 01:20:50 -0700</bug_when>
    <thetext>Created attachment 113142
Experiment due: sequential workqueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523865</commentid>
    <comment_count>3</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-19 05:56:45 -0800</bug_when>
    <thetext>I prefer the sequential workqueue approach, it simpler to reason about and provides good sequential performance with no thread contention unlike the &quot;experiment uno&quot;.

Parts of &quot;experiment due&quot; dealt with the mimeType detection changes in HTMLCanvasElement.cpp and changes to the toDataURL() area of ImageBufferSkia.cpp.  These made the patch harder to read.  I cut them out and submitted them separately to focus the patch on the toBlob() idea.  FIXME notes suggest the changes needed to the toBlob() spec prose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523871</commentid>
    <comment_count>4</comment_count>
      <attachid>119856</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-19 06:02:53 -0800</bug_when>
    <thetext>Created attachment 119856
Patch: sequential workqueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562620</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-22 17:33:23 -0800</bug_when>
    <thetext>How is this related to bug 51652?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682163</commentid>
    <comment_count>6</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-07-30 10:40:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=119856) [details]
&gt; Patch: sequential workqueue.

Is this patch for review? Are you still working on this bug? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044136</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Cinelli">chris.cinelli</who>
    <bug_when>2014-10-25 12:29:20 -0700</bug_when>
    <thetext>This is still open from 2011! 
Are the people assigned to this ticket still the right ones to implement it or maybe it need to be reassigned?

When I try to save 41Mpixel images, Chrome crashes. Currently we have to allocate more memory to run through the intermediate ASCII buffer returned by toDataURL and use the Uint8Array to convert in binary.

This is the only thing that prevent us to make our WebGL picture editor works with images bigger than 20Mpixels. Regarding the rest, it is actually better and faster  than Lightroom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158416</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-01-25 11:37:24 -0800</bug_when>
    <thetext>Chrome has implemented this:
&lt;https://twitter.com/chromiumdev/status/691687552000995328&gt;

I&apos;m not sure if there is standards support yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158417</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-01-25 11:38:56 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 148878 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285144</commentid>
    <comment_count>10</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2017-03-08 17:56:35 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Chrome has implemented this:
&gt; &lt;https://twitter.com/chromiumdev/status/691687552000995328&gt;
&gt; 
&gt; I&apos;m not sure if there is standards support yet.

Mentioned on the duped-to bug, standards prose is there.  I used the patch on this bug to inform and help write the spec prose (with Ian Hickson).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113139</attachid>
            <date>2011-11-01 00:42:51 -0700</date>
            <delta_ts>2011-12-19 06:02:32 -0800</delta_ts>
            <desc>Experiment uno: multiple threads.</desc>
            <filename>blob-callback-async.git.diff</filename>
            <type>text/plain</type>
            <size>26658</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZTQzYjdlLi4wMzFmZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTEtMTEtMDEgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gRXhwZXJpbWVudCBpbiA8Y2FudmFzPi50b0Jsb2IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjcwCisKKyAgICAgICAg
Q29weSBpbWFnZSBvZmYgY2FudmFzIGludG8gYSBuZXcgdGhyZWFkLiBUaGUgdGhyZWFkIGNvbnZl
cnRzIHRoZSBpbWFnZSB0bworICAgICAgICBhIGJsb2IsIGFuZCBjYWxscyBiYWNrIGludG8gdGhl
IG1haW4gdGhyZWFkIEpTIHdpdGggdGhlIGJsb2IgcmVzdWx0LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvQmxvYkNhbGxiYWNr
KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50Ojp0b0VuY29kaW5nTWltZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudDo6dG9CbG9iKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICog
aHRtbC9JbWFnZVRvQmxvYkFzeW5jLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0Js
b2JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRvQmxvYkFzeW5jOjppbWFnZVRv
QmxvYik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRvQmxvYkFzeW5jOjpJbWFnZVRvQmxvYkFz
eW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQXN5bmM6OnRvQmxvYik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVRvQmxvYkFzeW5jOjppbWFnZVRvQmxvYlRhc2spOgorICAgICAg
ICAqIGh0bWwvSW1hZ2VUb0Jsb2JBc3luYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlVG9CbG9iQXN5bmM6OmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9i
QXN5bmM6OmJsb2IpOgorICAgICAgICAqIGh0bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQ2FsbGJhY2s6On5JbWFnZVRvQmxvYkNh
bGxiYWNrKToKKyAgICAgICAgKiBodG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhVG9EYXRhVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFCbG9iKToKKwogMjAxMS0xMC0zMSAgQW5keSBFc3Rl
cyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQgcG9pbnRlciBub3QgbnVs
bC1jaGVja2VkIGluIEZyYW1lVmlldzo6aXNPbkFjdGl2ZVBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDA2YTY3NWIuLmYxZWI5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTEzMjksNiArMTMyOSw3
IEBACiAgICAgICAgICAgICAnaHRtbC9IVE1MVW5rbm93bkVsZW1lbnQuaWRsJywKICAgICAgICAg
ICAgICdodG1sL0hUTUxWaWRlb0VsZW1lbnQuaWRsJywKICAgICAgICAgICAgICdodG1sL0ltYWdl
RGF0YS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5pZGwnLAog
ICAgICAgICAgICAgJ2h0bWwvTWVkaWFFcnJvci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvVGV4
dE1ldHJpY3MuaWRsJywKICAgICAgICAgICAgICdodG1sL1RleHRUcmFjay5pZGwnLApAQCAtNTU2
Nyw2ICs1NTY4LDkgQEAKICAgICAgICAgICAgICdodG1sL0ltYWdlRG9jdW1lbnQuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvSW1h
Z2VJbnB1dFR5cGUuaCcsCisgICAgICAgICAgICAnaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmNwcCcs
CisgICAgICAgICAgICAnaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmgnLAorICAgICAgICAgICAgJ2h0
bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5oJywKICAgICAgICAgICAgICdodG1sL0lucHV0VHlwZS5j
cHAnLAogICAgICAgICAgICAgJ2h0bWwvSXNJbmRleElucHV0VHlwZS5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvSXNJbmRleElucHV0VHlwZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAppbmRleCA1MjQ2NWI2Li5hNTc5MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
CkBAIC0zOCw3ICszOCw5IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhCbG9iLmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIK
KyNpbmNsdWRlICJWOEltYWdlVG9CbG9iQ2FsbGJhY2suaCIKICNpbmNsdWRlICJWOE5vZGUuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtOTksOSArMTAxLDEx
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZShob2xkZXIpOwotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogCi0gICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7
CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCAmJiBhcmdz
WzBdLT5Jc1N0cmluZygpKQorICAgICAgIG1pbWVUeXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pOworCiAgICAgZG91YmxlIHF1YWxpdHk7CiAgICAgZG91YmxlKiBxdWFsaXR5UHRyID0gMDsK
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNOdW1iZXIoKSkgewpAQCAt
MTA5LDkgKzExMyw0OSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVu
dDo6dG9EYXRhVVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogICAgICAgICBxdWFsaXR5
UHRyID0gJnF1YWxpdHk7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9IGNhbnZhcy0+dG9E
YXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHlQ
dHIsIGVjKTsKICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworCiAgICAgcmV0dXJu
IHY4U3RyaW5nT3JVbmRlZmluZWQocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShCTE9CKQorCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9iQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CisKKyAgICAvLyBGSVhNRTog
c3RhbmRhcmQgdGV4dCBzYXlzIHRvIGxvb2sgZm9yIGEgIm51bGwiIGFzIHRoZSBmaXJzdCBhcmd1
bWVudCAoY2FsbGJhY2spCisgICAgLy8gYW5kIGFib3J0IHRoZXNlIHRvQmxvYigpIHN0ZXBzIGlm
IGZvdW5kLiBXZWxsLCB3aGF0IGlmIGl0IGlzICJ1bmRlZmluZWQiLCBvciBhCisgICAgLy8gU3Ry
aW5nLCBldGM/IEluc3RlYWQsIHdlIGFib3J0IHRoZSB0b0Jsb2IoKSBzdGVwcywgd2l0aCBhIFRZ
UEUtRVJST1IgZXhjZXB0aW9uLAorICAgIC8vIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3Qg
YSBmdW5jdGlvbi4KKworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSB8fCAhYXJnc1swXS0+SXNG
dW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQi
LCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgUmVmUHRyPEltYWdlVG9CbG9iQ2FsbGJhY2s+
IGNhbGxiYWNrID0KKyAgICAgICAgVjhJbWFnZVRvQmxvYkNhbGxiYWNrOjpjcmVhdGUoYXJnc1sw
XSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIFN0cmluZyBtaW1lVHlwZTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNTdHJpbmcoKSkKKyAgICAg
ICBtaW1lVHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKKworICAgIGRvdWJsZSBxdWFs
aXR5OworICAgIGRvdWJsZSogcXVhbGl0eVB0ciA9IDA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAyICYmIGFyZ3NbMl0tPklzTnVtYmVyKCkpIHsKKyAgICAgICAgcXVhbGl0eSA9IGFyZ3NbMl0t
Pk51bWJlclZhbHVlKCk7CisgICAgICAgIHF1YWxpdHlQdHIgPSAmcXVhbGl0eTsKKyAgICB9CisK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBjYW52YXMtPnRvQmxvYihtaW1lVHlwZSwg
Y2FsbGJhY2sucmVsZWFzZSgpLCBxdWFsaXR5UHRyLCBlYyk7CisgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKGVjKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCmluZGV4IDg3Y2U5ZTkuLmRiZjFmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJJbWFnZVRvQmxvYkFzeW5jLmgiCisjaW5jbHVkZSAiSW1hZ2VUb0Jsb2JD
YWxsYmFjay5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgpAQCAtMzI4LDYgKzMzMCwxNyBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJmYWNlU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsKIH0KIAorU3RyaW5nIEhUTUxDYW52YXNFbGVt
ZW50Ojp0b0VuY29kaW5nTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBT
dHJpbmcgbG93ZXJjYXNlTWltZVR5cGUgPSBtaW1lVHlwZS5sb3dlcigpOworCisgICAgLy8gRklY
TUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhyZWFkc2FmZSAo
dG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJlYWQpLgorICAg
IGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobG93ZXJjYXNlTWltZVR5cGUpKQorICAgICAgICBsb3dl
cmNhc2VNaW1lVHlwZSA9ICJpbWFnZS9wbmciOworCisgICAgcmV0dXJuIGxvd2VyY2FzZU1pbWVU
eXBlOworfQorCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmICghbV9vcmlnaW5DbGVhbikgewpAQCAtMzM4LDI1ICszNTEsNDggQEAgU3RyaW5n
IEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXQKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhYnVmZmVyKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoImRhdGE6LCIpOwogCi0gICAgU3RyaW5nIGxvd2VyY2Fz
ZU1pbWVUeXBlID0gbWltZVR5cGUubG93ZXIoKTsKLQotICAgIC8vIEZJWE1FOiBNYWtlIGlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nIHRocmVhZHNhZmUgKHRvIGFsbG93IHRoaXMg
bWV0aG9kIHRvIGJlIHVzZWQgb24gYSB3b3JrZXIgdGhyZWFkKS4KLSAgICBpZiAobWltZVR5cGUu
aXNOdWxsKCkgfHwgIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKGxvd2VyY2FzZU1pbWVUeXBlKSkKLSAgICAgICAgbG93ZXJjYXNlTWltZVR5cGUg
PSAiaW1hZ2UvcG5nIjsKKyAgICBTdHJpbmcgZW5jb2RpbmdNaW1lVHlwZSA9IHRvRW5jb2RpbmdN
aW1lVHlwZShtaW1lVHlwZSk7CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBKQogICAgIC8vIFRy
eSB0byBnZXQgSW1hZ2VEYXRhIGZpcnN0LCBhcyB0aGF0IG1heSBhdm9pZCBsb3NzeSBjb252ZXJz
aW9ucy4KICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKTsK
IAogICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBJbWFnZURhdGFUb0RhdGFVUkwo
KmltYWdlRGF0YSwgbG93ZXJjYXNlTWltZVR5cGUsIHF1YWxpdHkpOworICAgICAgICByZXR1cm4g
SW1hZ2VEYXRhVG9EYXRhVVJMKCppbWFnZURhdGEsIGVuY29kaW5nTWltZVR5cGUsIHF1YWxpdHkp
OwogI2VuZGlmCiAKICAgICBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwotICAgICAg
Ci0gICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobG93ZXJjYXNlTWltZVR5cGUsIHF1YWxp
dHkpOworCisgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoZW5jb2RpbmdNaW1lVHlwZSwg
cXVhbGl0eSk7CiB9CiAKKyNpZiBFTkFCTEUoQkxPQikKKwordm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6dG9CbG9iKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBhc3NSZWZQdHI8SW1hZ2VUb0Jsb2JD
YWxsYmFjaz4gY2FsbGJhY2ssIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFtX29yaWdpbkNsZWFuKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW1hZ2VUb0Jsb2JBc3luYyogaW5z
dGFuY2UgPSBuZXcgSW1hZ2VUb0Jsb2JBc3luYyhjYWxsYmFjaywgdG9FbmNvZGluZ01pbWVUeXBl
KG1pbWVUeXBlKSwgcXVhbGl0eSk7CisKKyAgICAvLyBGSVhNRTogc3RhbmRhcmQgdGV4dCBtZW50
aW9ucyB0aGlzIGNhc2UgZm9yIHRvRGF0YVVSTCgpLCBidXQgbm90IGZvciB0b0Jsb2IoKS4gU2hv
dWxkCisgICAgLy8gd2UgY29udGludWUgdGhlIHRvQmxvYigpIHN0ZXBzIGFzIGhlcmUgb3IgZmFp
bC9hYm9ydCB0aGVzZSBzdGVwcz8gdG9EYXRhVVJMKCkgcmV0dXJucworICAgIC8vICJkYXRhOiwi
IG9uIGFueSBmYWlsdXJlLCB0aGVyZSBpcyBubyBlcXVpdmFsZW50IGluIHRoZSBzcGVjIHByb3Nl
IGZvciB0b0Jsb2IoKS4KKworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkg
eworICAgICAgICBpbnN0YW5jZS0+dG9CbG9iKDApOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKKworICAgIGluc3RhbmNlLT50
b0Jsb2IoYnVmZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSk7Cit9CisKKyNlbmRp
ZgorCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0
YSgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dC0+aXMzZCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGVhYzU5YWIuLjU0OWEyZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTQ5LDYgKzQ5LDcgQEAg
Y2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlRGF0YTsK
IGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VUb0Jsb2JDYWxsYmFjazsKIGNsYXNzIElu
dFNpemU7CiAKIGNsYXNzIENhbnZhc09ic2VydmVyIHsKQEAgLTkxLDggKzkyLDEyIEBAIHB1Ymxp
YzoKIAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQoY29uc3QgU3RyaW5n
JiwgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSAwKTsKIAorICAgIHN0YXRp
YyBTdHJpbmcgdG9FbmNvZGluZ01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAg
IFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBx
dWFsaXR5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVU
eXBlLCAwLCBlYyk7IH0KKyNpZiBFTkFCTEUoQkxPQikKKyAgICB2b2lkIHRvQmxvYihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPEltYWdlVG9CbG9iQ2FsbGJhY2s+LCBjb25zdCBk
b3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAgICAgLy8gVXNlZCBm
b3IgcmVuZGVyaW5nCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAppbmRleCA1MGQ0YWU0Li45MmFlMjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbApAQCAtMzYsNiAr
MzYsMTEgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBbQ3VzdG9tXSBET01TdHJpbmcgdG9EYXRh
VVJMKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nLE9wdGlvbmFsPUNhbGxX
aXRoRGVmYXVsdFZhbHVlXSBET01TdHJpbmcgdHlwZSkKICAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOwogCisjaWYgZGVmaW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxFX0JMT0IKKyAg
ICAgICAgW0N1c3RvbV0gdm9pZCB0b0Jsb2IoaW4gSW1hZ2VUb0Jsb2JDYWxsYmFjayBjYWxsYmFj
aywgaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcsT3B0aW9uYWw9Q2FsbFdp
dGhEZWZhdWx0VmFsdWVdIERPTVN0cmluZyB0eXBlKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisjZW5kaWYKKwogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdV
QUdFX0NQUAogI2lmICFkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0Vf
T0JKRUNUSVZFX0MKICAgICAgICAgLy8gVGhlIGN1c3RvbSBiaW5kaW5nIGlzIG5lZWRlZCB0byBo
YW5kbGUgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VUb0Jsb2JBc3luYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIw
YWY2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JB
c3luYy5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VUb0Jsb2JBc3luYy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9i
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlVG9CbG9iQ2FsbGJhY2suaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHRvQmxvYkNhbGxiYWNr
KHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8v
IEZJWE1FOiB0b0RhdGFVUkwoKSByZXR1cm5zICJkYXRhOiwiIG9uIGFueSBmYWlsdXJlLCB0aGVy
ZSBpcyBubyBlcXVpdmFsZW50IGluIHRoZQorICAgIC8vIHNwZWMgcHJvc2UgZm9yIHRvQmxvYigp
LiBUaGUgaW5zdGFuY2UtPmJsb2IoKSBtYXkgYmUgbnVsbCwgc28gcmV0dXJuIHRoYXQgaW4gdGhl
CisgICAgLy8gdXNlciBqcyBjYWxsYmFjay4gVGhlIHNwZWMgcHJvc2Ugc2hvdWxkIGRlZmluZSB0
aGUgZmFpbHVyZSBjYXNlIHJldHVybiB0eXBlLgorCisgICAgSW1hZ2VUb0Jsb2JBc3luYyogaW5z
dGFuY2UgPSByZWludGVycHJldF9jYXN0PEltYWdlVG9CbG9iQXN5bmMqPihjb250ZXh0KTsKKyAg
ICBpbnN0YW5jZS0+Y2FsbGJhY2soKS0+aGFuZGxlRXZlbnQoaW5zdGFuY2UtPmJsb2IoKSk7Cisg
ICAgZGVsZXRlIGluc3RhbmNlOworfQorCitJbWFnZVRvQmxvYkFzeW5jKiBJbWFnZVRvQmxvYkFz
eW5jOjppbWFnZVRvQmxvYigpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4g
dGhpczsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtX2ltYWdlLT5zaXplKCkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4g
dGhpczsKKworICAgIEZsb2F0UmVjdCBzb3VyY2UoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOworICAgIGJ1ZmZlci0+Y29udGV4dCgpLT5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgc291cmNlLCBzb3VyY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGZh
bHNlKTsKKworICAgIFJlZlB0cjxSYXdEYXRhPiBibG9iID0gUmF3RGF0YTo6Y3JlYXRlKCk7Cisg
ICAgaWYgKCFibG9iIHx8ICFidWZmZXItPnRvRGF0YUJsb2IobV9taW1lVHlwZSwgbV9xdWFsaXR5
UHRyLCBibG9iLT5tdXRhYmxlRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICBP
d25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgIGlmICgh
YmxvYkRhdGEpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgYmxvYkRhdGEtPmFwcGVuZERh
dGEoYmxvYiwgMCwgQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSk7CisgICAgYmxvYkRhdGEtPnNl
dENvbnRlbnRUeXBlKG1fbWltZVR5cGUpOworCisgICAgbV9ibG9iID0gQmxvYjo6Y3JlYXRlKGJs
b2JEYXRhLnJlbGVhc2UoKSwgYmxvYi0+bGVuZ3RoKCkpOworICAgIHJldHVybiB0aGlzOworfQor
CitJbWFnZVRvQmxvYkFzeW5jOjpJbWFnZVRvQmxvYkFzeW5jKFBhc3NSZWZQdHI8SW1hZ2VUb0Js
b2JDYWxsYmFjaz4gY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJs
ZSogcXVhbGl0eSkKKyAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX21pbWVUeXBl
KG1pbWVUeXBlLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9xdWFsaXR5UHRyKDApCisgICAgLCBt
X3RocmVhZElEKDApCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1fbWltZVR5cGUpKTsKKworICAgIGlmIChxdWFsaXR5
KSB7CisgICAgICAgIG1fcXVhbGl0eVB0ciA9ICZtX3F1YWxpdHk7CisgICAgICAgIG1fcXVhbGl0
eSA9ICpxdWFsaXR5OworICAgIH0KK30KKwordm9pZCBJbWFnZVRvQmxvYkFzeW5jOjp0b0Jsb2Io
UGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit7CisgICAgbV9pbWFnZSA9IGltYWdlOworCisgICAg
bV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJbWFnZVRvQmxvYkFzeW5jOjppbWFnZVRvQmxvYlRh
c2ssIHRoaXMsICJJbWFnZVRvQmxvYlRocmVhZCIpOworICAgIGlmIChtX3RocmVhZElEKQorICAg
ICAgICByZXR1cm47CisKKyAgICBJbWFnZVRvQmxvYkFzeW5jOjppbWFnZVRvQmxvYlRhc2sodGhp
cyk7Cit9CisKK3ZvaWQqIEltYWdlVG9CbG9iQXN5bmM6OmltYWdlVG9CbG9iVGFzayh2b2lkKiBj
b250ZXh0KQoreworICAgIEltYWdlVG9CbG9iQXN5bmMqIGluc3RhbmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxJbWFnZVRvQmxvYkFzeW5jKj4oY29udGV4dCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFk
KHRvQmxvYkNhbGxiYWNrLCBpbnN0YW5jZS0+aW1hZ2VUb0Jsb2IoKSk7CisKKyAgICBpZiAoaW5z
dGFuY2UtPm1fdGhyZWFkSUQpCisgICAgICAgIGRldGFjaFRocmVhZChpbnN0YW5jZS0+bV90aHJl
YWRJRCk7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JBc3luYy5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOThhZDRhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JBc3luYy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElt
YWdlVG9CbG9iQXN5bmNfaAorI2RlZmluZSBJbWFnZVRvQmxvYkFzeW5jX2gKKworI2lmIEVOQUJM
RShCTE9CKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2I7CitjbGFzcyBJ
bWFnZTsKK2NsYXNzIEltYWdlVG9CbG9iQ2FsbGJhY2s7CisKK2NsYXNzIEltYWdlVG9CbG9iQXN5
bmMgeworcHVibGljOgorICAgIEltYWdlVG9CbG9iQXN5bmMoUGFzc1JlZlB0cjxJbWFnZVRvQmxv
YkNhbGxiYWNrPiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5
KTsKKworICAgIHZvaWQgdG9CbG9iKFBhc3NSZWZQdHI8SW1hZ2U+KTsKKworICAgIEltYWdlVG9C
bG9iQ2FsbGJhY2sqIGNhbGxiYWNrKCkgeyByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsgfQorICAg
IEJsb2IqIGJsb2IoKSB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBTdHJpbmcgbV9taW1l
VHlwZTsKKyAgICBkb3VibGUqIG1fcXVhbGl0eVB0cjsKKyAgICBkb3VibGUgbV9xdWFsaXR5Owor
CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxCbG9iPiBtX2Jsb2I7Cisg
ICAgSW1hZ2VUb0Jsb2JBc3luYyogaW1hZ2VUb0Jsb2IoKTsKKworICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWRJRDsKKyAgICBzdGF0aWMgdm9pZCogaW1hZ2VUb0Jsb2JUYXNrKHZvaWQqKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYkNhbGxiYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45Y2FkZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZVRvQmxvYkNhbGxiYWNrLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VU
b0Jsb2JDYWxsYmFja19oCisjZGVmaW5lIEltYWdlVG9CbG9iQ2FsbGJhY2tfaAorCisjaWYgRU5B
QkxFKEJMT0IpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEJsb2I7CisKK2NsYXNzIEltYWdlVG9CbG9iQ2FsbGJhY2sgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZVRvQmxvYkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+SW1hZ2VUb0Jsb2JDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChCbG9iKikgPSAwOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZVRvQmxvYkNhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jZTQ2NzAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZVRvQmxvYkNhbGxiYWNrLmlkbApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2Ug
eworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUJMT0IsCisgICAgICAgIENh
bGxiYWNrCisgICAgXSBJbWFnZVRvQmxvYkNhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5k
bGVFdmVudChpbiBCbG9iIGJsb2IpOworICAgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA2NmI2Y2MzLi5kZTY1MTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTk3
LDEwICs5NywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAg
ICAgICAgIHZvaWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CisjaWYg
RU5BQkxFKEJMT0IpCisgICAgICAgIGJvb2wgdG9EYXRhQmxvYihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIFZlY3RvcjxjaGFyPiopIGNvbnN0OworI2VuZGlm
CisKICNpZiAhVVNFKENHKQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSk7CkBAIC0xNDQsNyArMTQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07
CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBKQotICAgIFN0cmluZyBJbWFnZURhdGFUb0RhdGFV
UkwoY29uc3QgSW1hZ2VEYXRhJiBpbnB1dCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
ZG91YmxlKiBxdWFsaXR5KTsKKyAgICBTdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IElt
YWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSk7
CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4
IDQ2MmJhNjkuLjZlMzcxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTM3MCwzOCArMzcwLDU4
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RhdGljIFN0cmluZyBJbWFnZVRvRGF0YVVSTChUJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKFQm
IGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIFZl
Y3RvcjxjaGFyPiogb3V0cHV0KQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+IGVuY29kZWRJbWFnZTsKICAgICBpZiAobWltZVR5cGUgPT0gImltYWdl
L2pwZWciKSB7Ci0gICAgICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSBKUEVHSW1hZ2VFbmNv
ZGVyOjpEZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBpZiAocXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQotICAgICAgICAgICAgY29tcHJlc3Np
b25RdWFsaXR5ID0gc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7Ci0gICAg
ICAgIGlmICghSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKHNvdXJjZSwgY29tcHJlc3Npb25RdWFs
aXR5LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAg
ICBpbnQgY29tcHJlc3Npb25RdWFsaXR5ID0gSlBFR0ltYWdlRW5jb2Rlcjo6RGVmYXVsdENvbXBy
ZXNzaW9uUXVhbGl0eTsKKyAgICAgICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKQorICAgICAgICAgICBjb21wcmVzc2lvblF1YWxpdHkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsgMC41KTsKKyAgICAgICBpZiAoIUpQRUdJbWFnZUVu
Y29kZXI6OmVuY29kZShpbWFnZSwgY29tcHJlc3Npb25RdWFsaXR5LCByZWludGVycHJldF9jYXN0
PFZlY3Rvcjx1bnNpZ25lZCBjaGFyPio+KG91dHB1dCkpKQorICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29kZShz
b3VyY2UsICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotICAg
ICAgICBBU1NFUlQobWltZVR5cGUgPT0gImltYWdlL3BuZyIpOworICAgICAgIGlmICghUE5HSW1h
Z2VFbmNvZGVyOjplbmNvZGUoaW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVuc2lnbmVk
IGNoYXI+Kj4ob3V0cHV0KSkpCisgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICBBU1NF
UlQobWltZVR5cGUgPT0gImltYWdlL3BuZyIpOwogICAgIH0KIAorICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0Cit7CisgICAgVmVjdG9yPGNoYXI+IGVuY29k
ZWRJbWFnZTsKKyAgICBTa0RldmljZSogZGV2aWNlID0gY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpOworICAgIGlmICghZW5jb2RlSW1hZ2UoZGV2aWNl
LT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCBtaW1lVHlwZSwgcXVhbGl0eSwgJmVuY29kZWRJbWFnZSkp
CisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKwogICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRh
OwotICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8Y2hhcj4qPigmZW5j
b2RlZEltYWdlKSwgYmFzZTY0RGF0YSk7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZSwg
YmFzZTY0RGF0YSk7CiAKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKK1N0cmluZyBJ
bWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKIHsKLSAgICBTa0RldmljZSogZGV2
aWNlID0gY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgp
OwotICAgIHJldHVybiBJbWFnZVRvRGF0YVVSTChkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSks
IG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZEltYWdlOworICAg
IGlmICghZW5jb2RlSW1hZ2UoaW1hZ2VEYXRhLCBtaW1lVHlwZSwgcXVhbGl0eSwgJmVuY29kZWRJ
bWFnZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOworICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UsIGJhc2U2NERhdGEpOworCisg
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwog
fQogCi1TdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCisjaWYgRU5BQkxF
KEJMT0IpCisKK2Jvb2wgSW1hZ2VCdWZmZXI6OnRvRGF0YUJsb2IoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRJbWFnZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VUb0RhdGFVUkwoc291cmNlLCBtaW1lVHlwZSwgcXVh
bGl0eSk7CisgICAgU2tEZXZpY2UqIGRldmljZSA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKTsKKyAgICByZXR1cm4gZW5jb2RlSW1hZ2UoZGV2aWNl
LT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCBtaW1lVHlwZSwgcXVhbGl0eSwgZW5jb2RlZEltYWdlKTsK
IH0KIAorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113142</attachid>
            <date>2011-11-01 01:20:50 -0700</date>
            <delta_ts>2011-12-19 06:02:38 -0800</delta_ts>
            <desc>Experiment due: sequential workqueue.</desc>
            <filename>blob-callback-async-filetask.git.diff</filename>
            <type>text/plain</type>
            <size>27923</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZTQzYjdlLi41MTMwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTEtMTEtMDEgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gRXhwZXJpbWVudCBpbiA8Y2FudmFzPi50b0Jsb2IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjcwCisKKyAgICAgICAg
Q29weSBpbWFnZSBvZmYgY2FudmFzIGFuZCBwb3N0IGl0IGFzIGEgdGFzayBvbiBhIHdvcmsgcXVl
dWUgdGhyZWFkLiBUaGUgcXVldWUKKyAgICAgICAgY29udmVydHMgdGhlIGltYWdlcyB0byBibG9i
cyBpbiBzZXF1ZW5jZSwgYW5kIGNhbGxzIGJhY2sgaW50byB0aGUgbWFpbiB0aHJlYWQKKyAgICAg
ICAgSlMgd2l0aCBlYWNoIGJsb2IgcmVzdWx0LiBVc2VzIHRoZSBwcmUtZXhpc3RpbmcgZmlsZVRo
cmVhZCBhcyB0aGUgd29yayBxdWV1ZSwKKyAgICAgICAgYW55IG5vbi1tYWluLXRocmVhZCB3b3Vs
ZCBzdWZmaWNlIGZvciB0aGlzIGV4cGVyaW1lbnQuIAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvQmxvYkNhbGxiYWNrKToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojp0b0VuY29kaW5nTWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0ltYWdl
VG9CbG9iQXN5bmMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JDYWxsYmFjazo6
QmxvYkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JDYWxsYmFjazo6Y2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYkNhbGxiYWNrOjpibG9iKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvQmxvYkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQXN5bmM6
OmltYWdlVG9CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQXN5bmM6OkltYWdl
VG9CbG9iQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Jsb2JBc3luYzo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQXN5bmM6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBodG1sL0ltYWdlVG9CbG9iQXN5bmMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVRvQmxvYkFzeW5jOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSW1hZ2VUb0Jsb2JD
YWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iQ2FsbGJhY2s6
On5JbWFnZVRvQmxvYkNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL0ltYWdlVG9CbG9iQ2FsbGJh
Y2suaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhVG9EYXRhVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFCbG9iKToKKwogMjAxMS0x
MC0zMSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQg
cG9pbnRlciBub3QgbnVsbC1jaGVja2VkIGluIEZyYW1lVmlldzo6aXNPbkFjdGl2ZVBhZ2UoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDA2YTY3NWIuLmYxZWI5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTEzMjksNiArMTMyOSw3IEBACiAgICAgICAgICAgICAnaHRtbC9IVE1MVW5rbm93bkVsZW1lbnQu
aWRsJywKICAgICAgICAgICAgICdodG1sL0hUTUxWaWRlb0VsZW1lbnQuaWRsJywKICAgICAgICAg
ICAgICdodG1sL0ltYWdlRGF0YS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvSW1hZ2VUb0Jsb2JD
YWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvTWVkaWFFcnJvci5pZGwnLAogICAgICAg
ICAgICAgJ2h0bWwvVGV4dE1ldHJpY3MuaWRsJywKICAgICAgICAgICAgICdodG1sL1RleHRUcmFj
ay5pZGwnLApAQCAtNTU2Nyw2ICs1NTY4LDkgQEAKICAgICAgICAgICAgICdodG1sL0ltYWdlRG9j
dW1lbnQuaCcsCiAgICAgICAgICAgICAnaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvSW1hZ2VJbnB1dFR5cGUuaCcsCisgICAgICAgICAgICAnaHRtbC9JbWFnZVRv
QmxvYkFzeW5jLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5oJywKICAgICAgICAgICAgICdo
dG1sL0lucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvSXNJbmRleElucHV0VHlwZS5j
cHAnLAogICAgICAgICAgICAgJ2h0bWwvSXNJbmRleElucHV0VHlwZS5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAppbmRleCA1MjQ2NWI2Li4wMTczMGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCkBAIC0zOCw3ICszOCw5IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCbG9iLmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJWOEltYWdlVG9CbG9iQ2FsbGJhY2suaCIKICNpbmNs
dWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaWYgRU5BQkxFKFdFQkdMKQpA
QCAtOTksOSArMTAxLDExIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVt
ZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiB7CiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZShob2xkZXIpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIGlmIChhcmdzLkxlbmd0
aCgpID4gMCAmJiBhcmdzWzBdLT5Jc1N0cmluZygpKQorICAgICAgIG1pbWVUeXBlID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOworCiAgICAgZG91YmxlIHF1YWxpdHk7CiAgICAgZG91YmxlKiBx
dWFsaXR5UHRyID0gMDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNO
dW1iZXIoKSkgewpAQCAtMTA5LDkgKzExMyw1MCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhI
VE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwog
ICAgICAgICBxdWFsaXR5UHRyID0gJnF1YWxpdHk7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3Vs
dCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwobWlt
ZVR5cGUsIHF1YWxpdHlQdHIsIGVjKTsKICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMp
OworCiAgICAgcmV0dXJuIHY4U3RyaW5nT3JVbmRlZmluZWQocmVzdWx0KTsKIH0KIAorI2lmIEVO
QUJMRShCTE9CKQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6
dG9CbG9iQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CisK
KyAgICAvLyBGSVhNRTogc3RhbmRhcmQgdGV4dCBzYXlzIHRvIGxvb2sgZm9yIGEgIm51bGwiIGFz
IHRoZSBmaXJzdCBhcmd1bWVudCAoY2FsbGJhY2spCisgICAgLy8gYW5kIGFib3J0IHRoZXNlIHRv
QmxvYigpIHN0ZXBzIGlmIGZvdW5kLiBXZWxsLCB3aGF0IGlmIGl0IGlzICJ1bmRlZmluZWQiLCBv
ciBhCisgICAgLy8gU3RyaW5nLCBldGM/IEluc3RlYWQsIHdlIGFib3J0IHRoZSB0b0Jsb2IoKSBz
dGVwcywgd2l0aCBhIFRZUEUtRVJST1IgZXhjZXB0aW9uLAorICAgIC8vIGlmIHRoZSBmaXJzdCBh
cmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4KKworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSB8
fCAhYXJnc1swXS0+SXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRnVu
Y3Rpb24gZXhwZWN0ZWQiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgUmVmUHRyPEltYWdl
VG9CbG9iQ2FsbGJhY2s+IGNhbGxiYWNrID0KKyAgICAgICAgVjhJbWFnZVRvQmxvYkNhbGxiYWNr
OjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIFN0
cmluZyBtaW1lVHlwZTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNT
dHJpbmcoKSkKKyAgICAgICBtaW1lVHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKKwor
ICAgIGRvdWJsZSBxdWFsaXR5OworICAgIGRvdWJsZSogcXVhbGl0eVB0ciA9IDA7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAyICYmIGFyZ3NbMl0tPklzTnVtYmVyKCkpIHsKKyAgICAgICAgcXVh
bGl0eSA9IGFyZ3NbMl0tPk51bWJlclZhbHVlKCk7CisgICAgICAgIHF1YWxpdHlQdHIgPSAmcXVh
bGl0eTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBGaWxlVGhyZWFk
KiBmaWxlVGhyZWFkID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5maWxlVGhyZWFkKCk7
CisgICAgY2FudmFzLT50b0Jsb2IobWltZVR5cGUsIGZpbGVUaHJlYWQsIGNhbGxiYWNrLnJlbGVh
c2UoKSwgcXVhbGl0eVB0ciwgZWMpOworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7
CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApp
bmRleCA4N2NlOWU5Li5iNWZmZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcApAQCAtMzcsMTEgKzM3LDE0IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
RmlsZVRocmVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbWFnZVRvQmxvYkFzeW5jLmgiCisj
aW5jbHVkZSAiSW1hZ2VUb0Jsb2JDYWxsYmFjay5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgpA
QCAtMzI4LDYgKzMzMSwxNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJmYWNlU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsKIH0KIAor
U3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0VuY29kaW5nTWltZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKK3sKKyAgICBTdHJpbmcgbG93ZXJjYXNlTWltZVR5cGUgPSBtaW1lVHlwZS5s
b3dlcigpOworCisgICAgLy8gRklYTUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcgdGhyZWFkc2FmZSAodG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBvbiBh
IHdvcmtlciB0aHJlYWQpLgorICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobG93ZXJjYXNlTWlt
ZVR5cGUpKQorICAgICAgICBsb3dlcmNhc2VNaW1lVHlwZSA9ICJpbWFnZS9wbmciOworCisgICAg
cmV0dXJuIGxvd2VyY2FzZU1pbWVUeXBlOworfQorCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHks
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9vcmlnaW5DbGVhbikgewpAQCAtMzM4
LDMxICszNTIsNTQgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXQKICAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSB8fCAhYnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoImRhdGE6LCIpOwog
Ci0gICAgU3RyaW5nIGxvd2VyY2FzZU1pbWVUeXBlID0gbWltZVR5cGUubG93ZXIoKTsKLQotICAg
IC8vIEZJWE1FOiBNYWtlIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nIHRocmVh
ZHNhZmUgKHRvIGFsbG93IHRoaXMgbWV0aG9kIHRvIGJlIHVzZWQgb24gYSB3b3JrZXIgdGhyZWFk
KS4KLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGxvd2VyY2FzZU1pbWVUeXBlKSkKLSAgICAg
ICAgbG93ZXJjYXNlTWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsKKyAgICBTdHJpbmcgZW5jb2RpbmdN
aW1lVHlwZSA9IHRvRW5jb2RpbmdNaW1lVHlwZShtaW1lVHlwZSk7CiAKICNpZiBVU0UoQ0cpIHx8
IFVTRShTS0lBKQogICAgIC8vIFRyeSB0byBnZXQgSW1hZ2VEYXRhIGZpcnN0LCBhcyB0aGF0IG1h
eSBhdm9pZCBsb3NzeSBjb252ZXJzaW9ucy4KICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBnZXRJbWFnZURhdGEoKTsKIAogICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHJldHVy
biBJbWFnZURhdGFUb0RhdGFVUkwoKmltYWdlRGF0YSwgbG93ZXJjYXNlTWltZVR5cGUsIHF1YWxp
dHkpOworICAgICAgICByZXR1cm4gSW1hZ2VEYXRhVG9EYXRhVVJMKCppbWFnZURhdGEsIGVuY29k
aW5nTWltZVR5cGUsIHF1YWxpdHkpOwogI2VuZGlmCiAKICAgICBtYWtlUmVuZGVyaW5nUmVzdWx0
c0F2YWlsYWJsZSgpOwotICAgICAgCi0gICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobG93
ZXJjYXNlTWltZVR5cGUsIHF1YWxpdHkpOworCisgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFV
UkwoZW5jb2RpbmdNaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKKyNpZiBFTkFCTEUoQkxPQikKKwor
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9iKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEZp
bGVUaHJlYWQqIGZpbGVUaHJlYWQsIFBhc3NSZWZQdHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4gY2Fs
bGJhY2ssIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCFtX29yaWdpbkNsZWFuKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPEltYWdlVG9CbG9iQXN5bmM+IGluc3RhbmNl
ID0gSW1hZ2VUb0Jsb2JBc3luYzo6Y3JlYXRlKGNhbGxiYWNrLCB0b0VuY29kaW5nTWltZVR5cGUo
bWltZVR5cGUpLCBxdWFsaXR5KTsKKworICAgIC8vIEZJWE1FOiBzdGFuZGFyZCB0ZXh0IG1lbnRp
b25zIHRoaXMgY2FzZSBmb3IgdG9EYXRhVVJMKCksIGJ1dCBub3QgZm9yIHRvQmxvYigpLiBTaG91
bGQKKyAgICAvLyB3ZSBjb250aW51ZSB0aGUgdG9CbG9iKCkgc3RlcHMgYXMgaGVyZSBvciBmYWls
L2Fib3J0IHRoZXNlIHN0ZXBzPyB0b0RhdGFVUkwoKSByZXR1cm5zCisgICAgLy8gImRhdGE6LCIg
b24gYW55IGZhaWx1cmUsIHRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgaW4gdGhlIHNwZWMgcHJvc2Ug
Zm9yIHRvQmxvYigpLgorCisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWJ1ZmZlcigpKSB7
CisgICAgICAgIEltYWdlVG9CbG9iQXN5bmM6OnRvQmxvYihmaWxlVGhyZWFkLCBpbnN0YW5jZS5y
ZWxlYXNlKCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFrZVJlbmRlcmlu
Z1Jlc3VsdHNBdmFpbGFibGUoKTsKKworICAgIEltYWdlVG9CbG9iQXN5bmM6OnRvQmxvYihmaWxl
VGhyZWFkLCBpbnN0YW5jZS5yZWxlYXNlKCksIGJ1ZmZlcigpLT5jb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSkpOworfQorCisjZW5kaWYKKwogUGFzc1JlZlB0cjxJbWFnZURhdGE+IEhUTUxDYW52
YXNFbGVtZW50OjpnZXRJbWFnZURhdGEoKQogewogICAgIGlmICghbV9jb250ZXh0IHx8ICFtX2Nv
bnRleHQtPmlzM2QoKSkKICAgICAgICByZXR1cm4gMDsKIAotI2lmIEVOQUJMRShXRUJHTCkgICAg
CisjaWYgRU5BQkxFKFdFQkdMKQogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4ID0gc3Rh
dGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKIAogICAg
IHJldHVybiBjdHgtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggZWFjNTlhYi4uNzIwMGEyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtNDQsMTEgKzQ0LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXM7CiBj
bGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgRmlsZVRocmVhZDsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSW1hZ2U7CiBj
bGFzcyBJbWFnZURhdGE7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlVG9CbG9iQ2Fs
bGJhY2s7CiBjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBDYW52YXNPYnNlcnZlciB7CkBAIC05MSw4
ICs5MywxMiBAQCBwdWJsaWM6CiAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBnZXRDb250
ZXh0KGNvbnN0IFN0cmluZyYsIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0g
MCk7CiAKKyAgICBzdGF0aWMgU3RyaW5nIHRvRW5jb2RpbmdNaW1lVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IHRvRGF0YVVSTChtaW1lVHlwZSwgMCwgZWMpOyB9CisjaWYgRU5BQkxFKEJMT0IpCisgICAgdm9p
ZCB0b0Jsb2IoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRmlsZVRocmVhZCosIFBhc3NSZWZQdHI8
SW1hZ2VUb0Jsb2JDYWxsYmFjaz4sIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29k
ZSYpOworI2VuZGlmCiAKICAgICAvLyBVc2VkIGZvciByZW5kZXJpbmcKICAgICB2b2lkIGRpZERy
YXcoY29uc3QgRmxvYXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCmluZGV4IDUwZDRhZTQuLjkyYWUyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaWRsCkBAIC0zNiw2ICszNiwxMSBAQCBtb2R1bGUgaHRtbCB7CiAgICAg
ICAgIFtDdXN0b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51
bGxUb051bGxTdHJpbmcsT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIERPTVN0cmluZyB0
eXBlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVO
QUJMRV9CTE9CKSAmJiBFTkFCTEVfQkxPQgorICAgICAgICBbQ3VzdG9tXSB2b2lkIHRvQmxvYihp
biBJbWFnZVRvQmxvYkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVs
bFRvTnVsbFN0cmluZyxPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gRE9NU3RyaW5nIHR5
cGUpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorCiAjaWYgIWRl
ZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAjaWYgIWRlZmluZWQoTEFOR1VB
R0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVfQwogICAgICAgICAvLyBUaGUg
Y3VzdG9tIGJpbmRpbmcgaXMgbmVlZGVkIHRvIGhhbmRsZSBjb250ZXh0IGNyZWF0aW9uIGF0dHJp
YnV0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQXN5bmMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTYzZTgyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYkFzeW5jLmNwcApAQCAtMCwwICsxLDEzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVRvQmxvYkFzeW5jLmgiCisKKyNpZiBF
TkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZVRvQmxvYkNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iQ2FsbGJhY2sgeworcHVi
bGljOgorICAgIEJsb2JDYWxsYmFjayhQYXNzUmVmUHRyPEltYWdlVG9CbG9iQ2FsbGJhY2s+IGNh
bGxiYWNrLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpIDogbV9jYWxsYmFjayhjYWxsYmFjayksIG1f
YmxvYihibG9iKSB7IH0KKworICAgIEltYWdlVG9CbG9iQ2FsbGJhY2sqIGNhbGxiYWNrKCkgeyBy
ZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsgfQorICAgIEJsb2IqIGJsb2IoKSB7IHJldHVybiBtX2Js
b2IuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4g
bV9jYWxsYmFjazsKKyAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOworfTsKKworc3RhdGljIHZvaWQg
dG9CbG9iQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgLy8gRklYTUU6IHRvRGF0YVVSTCgpIHJldHVybnMgImRhdGE6LCIgb24gYW55
IGZhaWx1cmUsIHRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgaW4gdGhlCisgICAgLy8gc3BlYyBwcm9z
ZSBmb3IgdG9CbG9iKCkuIFRoZSBpbnN0YW5jZS0+YmxvYigpIG1heSBiZSBudWxsLCBzbyByZXR1
cm4gdGhhdCBpbiB0aGUKKyAgICAvLyB1c2VyIEpTIGNhbGxiYWNrLiAgU3BlYyBwcm9zZSBzaG91
bGQgZGVmaW5lIHRoZSBmYWlsdXJlIGNhc2UgcmV0dXJuIHR5cGUuCisKKyAgICBCbG9iQ2FsbGJh
Y2sqIGluc3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxCbG9iQ2FsbGJhY2sqPihjb250ZXh0KTsK
KyAgICBpbnN0YW5jZS0+Y2FsbGJhY2soKS0+aGFuZGxlRXZlbnQoaW5zdGFuY2UtPmJsb2IoKSk7
CisgICAgZGVsZXRlIGluc3RhbmNlOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEltYWdlVG9CbG9i
QXN5bmM6OmltYWdlVG9CbG9iKCkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVy
biAwOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1faW1hZ2UtPnNpemUoKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRmxvYXRSZWN0IHNvdXJjZShGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7
CisgICAgYnVmZmVyLT5jb250ZXh0KCktPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBzb3VyY2UsIHNvdXJjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZmFsc2Up
OworCisgICAgUmVmUHRyPFJhd0RhdGE+IGJsb2IgPSBSYXdEYXRhOjpjcmVhdGUoKTsKKyAgICBp
ZiAoIWJsb2IgfHwgIWJ1ZmZlci0+dG9EYXRhQmxvYihtX21pbWVUeXBlLCBtX3F1YWxpdHlQdHIs
IGJsb2ItPm11dGFibGVEYXRhKCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE93blB0cjxC
bG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgaWYgKCFibG9iRGF0
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBibG9iRGF0YS0+YXBwZW5kRGF0YShibG9iLCAw
LCBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKTsKKyAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5
cGUobV9taW1lVHlwZSk7CisKKyAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVh
c2UoKSwgYmxvYi0+bGVuZ3RoKCkpOworfQorCitJbWFnZVRvQmxvYkFzeW5jOjpJbWFnZVRvQmxv
YkFzeW5jKFBhc3NSZWZQdHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4gY2FsbGJhY2ssIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKKyAgICA6IEZpbGVUaHJlYWQ6
OlRhc2sodGhpcykKKyAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX21pbWVUeXBl
KG1pbWVUeXBlLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9xdWFsaXR5UHRyKDApCit7CisgICAg
QVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1fbWltZVR5cGUpKTsKKworICAgIGlmIChxdWFsaXR5KSB7CisgICAgICAgIG1fcXVhbGl0
eVB0ciA9ICZtX3F1YWxpdHk7CisgICAgICAgIG1fcXVhbGl0eSA9ICpxdWFsaXR5OworICAgIH0K
K30KKwordm9pZCBJbWFnZVRvQmxvYkFzeW5jOjp0b0Jsb2IoRmlsZVRocmVhZCogZmlsZVRocmVh
ZCwgUGFzc093blB0cjxJbWFnZVRvQmxvYkFzeW5jPiBpbnN0YW5jZSwgUGFzc1JlZlB0cjxJbWFn
ZT4gaW1hZ2UpCit7CisgICAgaW5zdGFuY2UtPm1faW1hZ2UgPSBpbWFnZTsKKworICAgIGlmIChm
aWxlVGhyZWFkKSB7CisgICAgICAgIGZpbGVUaHJlYWQtPnBvc3RUYXNrKGluc3RhbmNlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGluc3RhbmNlLT5wZXJmb3JtVGFzaygpOworfQor
Cit2b2lkIEltYWdlVG9CbG9iQXN5bmM6OnBlcmZvcm1UYXNrKCkKK3sKKyAgICBjYWxsT25NYWlu
VGhyZWFkKHRvQmxvYkNhbGxiYWNrLCBuZXcgQmxvYkNhbGxiYWNrKG1fY2FsbGJhY2sucmVsZWFz
ZSgpLCBpbWFnZVRvQmxvYigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQXN5bmMuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JBc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjZjNjY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlVG9CbG9iQXN5bmMuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFn
ZVRvQmxvYkFzeW5jX2gKKyNkZWZpbmUgSW1hZ2VUb0Jsb2JBc3luY19oCisKKyNpZiBFTkFCTEUo
QkxPQikKKworI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2I7CitjbGFzcyBJ
bWFnZTsKK2NsYXNzIEltYWdlVG9CbG9iQ2FsbGJhY2s7CisKK2NsYXNzIEltYWdlVG9CbG9iQXN5
bmMgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW1hZ2VUb0Jsb2JBc3luYz4gY3JlYXRlKFBhc3NSZWZQdHI8SW1hZ2VUb0Jsb2JDYWxs
YmFjaz4gY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVh
bGl0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VUb0Jsb2JBc3lu
YyhjYWxsYmFjaywgbWltZVR5cGUsIHF1YWxpdHkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCB0b0Jsb2IoRmlsZVRocmVhZCosIFBhc3NPd25QdHI8SW1hZ2VUb0Jsb2JBc3luYz4sIFBhc3NS
ZWZQdHI8SW1hZ2U+KTsKKworcHJpdmF0ZToKKyAgICBJbWFnZVRvQmxvYkFzeW5jKFBhc3NSZWZQ
dHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRv
dWJsZSogcXVhbGl0eSk7CisKKyAgICBSZWZQdHI8SW1hZ2VUb0Jsb2JDYWxsYmFjaz4gbV9jYWxs
YmFjazsKKyAgICBTdHJpbmcgbV9taW1lVHlwZTsKKyAgICBkb3VibGUqIG1fcXVhbGl0eVB0cjsK
KyAgICBkb3VibGUgbV9xdWFsaXR5OworCisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAg
IFBhc3NSZWZQdHI8QmxvYj4gaW1hZ2VUb0Jsb2IoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2su
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWRlODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaApAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbWFnZVRvQmxvYkNhbGxiYWNrX2gKKyNkZWZpbmUgSW1hZ2VUb0Jsb2JDYWxsYmFja19o
CisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKKworY2xhc3MgSW1hZ2VUb0Jsb2JDYWxs
YmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlVG9CbG9iQ2FsbGJhY2s+IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5JbWFnZVRvQmxvYkNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBib29s
IGhhbmRsZUV2ZW50KEJsb2IqKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JDYWxsYmFjay5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDY3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iQ2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgc3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9QkxPQiwK
KyAgICAgICAgQ2FsbGJhY2sKKyAgICBdIEltYWdlVG9CbG9iQ2FsbGJhY2sgeworICAgICAgICBi
b29sZWFuIGhhbmRsZUV2ZW50KGluIEJsb2IgYmxvYik7CisgICAgfTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDY2YjZjYzMuLmRl
NjUxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaApAQCAtOTcsMTAgKzk3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSosIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwotICAgICAgICAKKwogICAgICAgICB2b2lkIGNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkgPSAwKSBj
b25zdDsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgYm9vbCB0b0RhdGFCbG9iKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgVmVjdG9yPGNoYXI+KikgY29u
c3Q7CisjZW5kaWYKKwogI2lmICFVU0UoQ0cpCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNl
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICAgICAg
dm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSBkc3RDb2xvclNwYWNlKTsKQEAgLTE0NCw3ICsxNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgfTsKIAogI2lmIFVTRShDRykgfHwgVVNFKFNLSUEpCi0gICAgU3RyaW5nIEltYWdl
RGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIGlucHV0LCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpOworICAgIFN0cmluZyBJbWFnZURhdGFUb0RhdGFV
UkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91Ymxl
KiBxdWFsaXR5KTsKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAKaW5kZXggNDYyYmE2OS4uNmUzNzEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApAQCAtMzcw
LDM4ICszNzAsNTggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc28KIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdGF0aWMgU3RyaW5nIEltYWdlVG9EYXRhVVJMKFQmIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQorc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoVCYgaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSwgVmVjdG9yPGNoYXI+KiBvdXRwdXQpCiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAK
LSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZW5jb2RlZEltYWdlOwogICAgIGlmIChtaW1lVHlw
ZSA9PSAiaW1hZ2UvanBlZyIpIHsKLSAgICAgICAgaW50IGNvbXByZXNzaW9uUXVhbGl0eSA9IEpQ
RUdJbWFnZUVuY29kZXI6OkRlZmF1bHRDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGlmIChx
dWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApCi0gICAgICAgICAg
ICBjb21wcmVzc2lvblF1YWxpdHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsg
MC41KTsKLSAgICAgICAgaWYgKCFKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNlLCBjb21w
cmVzc2lvblF1YWxpdHksICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICAgICAgcmV0dXJuICJkYXRh
OiwiOworICAgICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSBKUEVHSW1hZ2VFbmNvZGVyOjpE
ZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApCisgICAgICAgICAgIGNvbXByZXNzaW9uUXVhbGl0
eSA9IHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAgKyAwLjUpOworICAgICAgIGlmICgh
SlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGltYWdlLCBjb21wcmVzc2lvblF1YWxpdHksIHJlaW50
ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVuc2lnbmVkIGNoYXI+Kj4ob3V0cHV0KSkpCisgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIVBOR0ltYWdlRW5jb2Rl
cjo6ZW5jb2RlKHNvdXJjZSwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAgICAgICByZXR1cm4gImRh
dGE6LCI7Ci0gICAgICAgIEFTU0VSVChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7CisgICAgICAg
aWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29kZShpbWFnZSwgcmVpbnRlcnByZXRfY2FzdDxWZWN0
b3I8dW5zaWduZWQgY2hhcj4qPihvdXRwdXQpKSkKKyAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgIEFTU0VSVChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7CiAgICAgfQogCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKK3sKKyAgICBWZWN0b3I8
Y2hhcj4gZW5jb2RlZEltYWdlOworICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBjb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2aWNlKCk7CisgICAgaWYgKCFlbmNvZGVJ
bWFnZShkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSksIG1pbWVUeXBlLCBxdWFsaXR5LCAmZW5j
b2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCiAgICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKCpyZWludGVycHJldF9jYXN0PFZlY3Rvcjxj
aGFyPio+KCZlbmNvZGVkSW1hZ2UpLCBiYXNlNjREYXRhKTsKKyAgICBiYXNlNjRFbmNvZGUoZW5j
b2RlZEltYWdlLCBiYXNlNjREYXRhKTsKIAogICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUg
KyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KSBjb25z
dAorU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQogewotICAgIFNr
RGV2aWNlKiBkZXZpY2UgPSBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0RGV2aWNlKCk7Ci0gICAgcmV0dXJuIEltYWdlVG9EYXRhVVJMKGRldmljZS0+YWNjZXNzQml0
bWFwKGZhbHNlKSwgbWltZVR5cGUsIHF1YWxpdHkpOworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVk
SW1hZ2U7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZURhdGEsIG1pbWVUeXBlLCBxdWFsaXR5
LCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgVmVjdG9y
PGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZSwgYmFzZTY0
RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJh
c2U2NERhdGE7CiB9CiAKLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRh
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkK
KyNpZiBFTkFCTEUoQkxPQikKKworYm9vbCBJbWFnZUJ1ZmZlcjo6dG9EYXRhQmxvYihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIFZlY3RvcjxjaGFyPiogZW5j
b2RlZEltYWdlKSBjb25zdAogewotICAgIHJldHVybiBJbWFnZVRvRGF0YVVSTChzb3VyY2UsIG1p
bWVUeXBlLCBxdWFsaXR5KTsKKyAgICBTa0RldmljZSogZGV2aWNlID0gY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpOworICAgIHJldHVybiBlbmNvZGVJ
bWFnZShkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSksIG1pbWVUeXBlLCBxdWFsaXR5LCBlbmNv
ZGVkSW1hZ2UpOwogfQogCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119856</attachid>
            <date>2011-12-19 06:02:53 -0800</date>
            <delta_ts>2011-12-19 06:02:53 -0800</delta_ts>
            <desc>Patch: sequential workqueue.</desc>
            <filename>bug-71270-20111220010251.patch</filename>
            <type>text/plain</type>
            <size>23150</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDU3MDM0ZTdjMGY0Yjlh
NWIwZWU4Y2YzZWY2YzlmNWQxZTNiNTA1OC4uYWYyODI5MWMxOGZkNDFiYmVjZjkxZDZkOGZjNGZm
YzMxOTlmY2MzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDExLTEyLTE5ICBOb2Vs
IEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEV4
cGVyaW1lbnQgaW4gPGNhbnZhcz4udG9CbG9iCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3MAorCisgICAgICAgIENvcHkgaW1hZ2Ugb2ZmIGNhbnZh
cyBhbmQgcG9zdCBpdCBhcyBhIHRhc2sgb24gYSB3b3JrIHF1ZXVlIHRocmVhZC4gVGhlIHF1ZXVl
CisgICAgICAgIGNvbnZlcnRzIGl0cyBpbWFnZXMgdG8gYmxvYnMgaW4gc2VxdWVuY2UsIGFuZCBj
YWxscyBiYWNrIGludG8gdGhlIG1haW4gdGhyZWFkCisgICAgICAgIEpTIHdpdGggZWFjaCBibG9i
IHJlc3VsdC4gVXNlcyB0aGUgcHJlLWV4aXN0aW5nIGZpbGVUaHJlYWQgYXMgdGhlIHdvcmsgcXVl
dWUsCisgICAgICAgIGJ1dCBhbnkgbm9uLW1haW4tdGhyZWFkIHdvdWxkIHN1ZmZpY2UuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6dG9E
YXRhVVJMQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6
dG9CbG9iQ2FsbGJhY2spOgorICAgICAgICAqIGZpbGVhcGkvQmxvYkNhbGxiYWNrLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmxvYkNhbGxiYWNrOjp+QmxvYkNhbGxiYWNrKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2JDYWxsYmFjay5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvQmxvYik6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSW1hZ2VUb0Jsb2JU
YXNrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRvQmxvYlJlc3VsdDo6SW1h
Z2VUb0Jsb2JSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Jsb2JSZXN1bHQ6OmNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9CbG9iUmVzdWx0OjpibG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvQmxvYkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
VG9CbG9iVGFzazo6aW1hZ2VUb0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Jsb2JU
YXNrOjpJbWFnZVRvQmxvYlRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Jsb2JUYXNr
Ojp0b0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Jsb2JUYXNrOjpwZXJmb3JtVGFz
ayk6CisgICAgICAgICogaHRtbC9JbWFnZVRvQmxvYlRhc2suaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVRvQmxvYlRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVRvQmxvYlRhc2s6OnRvQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhQmxvYik6CisKIDIw
MTEtMTItMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
SW1wbGVtZW50IDxpbnB1dCB0eXBlPWNvbG9yPiBVSSBXZWJLaXQgY2hyb21pdW0gcGFydApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGNmZGU2MTc5NDNlMzAxN2I5MWU3NjQxMDFkMzVlZWQ0NGI1MGQ0NTYu
LmRjNGU0YzkxODk4NzBiOGE2ODkzMWM0ZTY5MDQ1MjlmYjk1NGUyYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTEyNDEsNiArMTI0MSw3IEBACiAgICAgICAgICAgICAnZG9tL1dlYktpdFRyYW5zaXRp
b25FdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmlkbCcsCiAgICAgICAg
ICAgICAnZmlsZWFwaS9CbG9iLmlkbCcsCisgICAgICAgICAgICAnZmlsZWFwaS9CbG9iQ2FsbGJh
Y2suaWRsJywKICAgICAgICAgICAgICdmaWxlYXBpL0RpcmVjdG9yeUVudHJ5LmlkbCcsCiAgICAg
ICAgICAgICAnZmlsZWFwaS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsJywKICAgICAgICAgICAgICdm
aWxlYXBpL0RpcmVjdG9yeVJlYWRlci5pZGwnLApAQCAtMjYwNSw2ICsyNjA2LDcgQEAKICAgICAg
ICAgICAgICdmaWxlYXBpL0FzeW5jRmlsZVdyaXRlckNsaWVudC5oJywKICAgICAgICAgICAgICdm
aWxlYXBpL0Jsb2IuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0Jsb2IuaCcsCisgICAgICAg
ICAgICAnZmlsZWFwaS9CbG9iQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9CbG9i
VVJMLmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9CbG9iVVJMLmgnLAogICAgICAgICAgICAg
J2ZpbGVhcGkvRE9NRmlsZVBhdGguY3BwJywKQEAgLTU2NzgsNiArNTY4MCw4IEBACiAgICAgICAg
ICAgICAnaHRtbC9JbWFnZURvY3VtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvSW1hZ2VJbnB1
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0ltYWdlSW5wdXRUeXBlLmgnLAorICAgICAg
ICAgICAgJ2h0bWwvSW1hZ2VUb0Jsb2JUYXNrLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9JbWFn
ZVRvQmxvYlRhc2suaCcsCiAgICAgICAgICAgICAnaHRtbC9JbnB1dFR5cGUuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0lzSW5kZXhJbnB1dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0lz
SW5kZXhJbnB1dFR5cGUuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNTI0
NjViNjJlNzNiYjU3MGQ5YTJjZTg0OTgyYzM5ODQ2NjBhNDFkMi4uZmQ1ZGUwN2YwZjRmMjNiYTEz
NDY0OWE4Yzc5MjEwYTc5MmI1NTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4QmxvYkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC0xMDEs
NyArMTAyLDEwIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0
b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAg
JiYgYXJnc1swXS0+SXNTdHJpbmcoKSkKKyAgICAgICB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOworCiAgICAgZG91YmxlIHF1YWxpdHk7CiAgICAgZG91YmxlKiBxdWFsaXR5UHRyID0g
MDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNOdW1iZXIoKSkgewpA
QCAtMTE0LDQgKzExOCw0MyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxl
bWVudDo6dG9EYXRhVVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogICAgIHJldHVybiB2
OFN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdCk7CiB9CiAKKyNpZiBFTkFCTEUoQkxPQikKKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvQmxvYkNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBW
OEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZShob2xkZXIpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworCisgICAgLy8gRklYTUU6IHN0YW5kYXJkIHRleHQgc2F5cyB0byBsb29rIGZvciBh
ICJudWxsIiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgKGNhbGxiYWNrKQorICAgIC8vIGFuZCBhYm9y
dCB0aGVzZSB0b0Jsb2IoKSBzdGVwcyBpZiBmb3VuZC4gV2VsbCwgd2hhdCBpZiBpdCBpcyAidW5k
ZWZpbmVkIiwgb3IgYQorICAgIC8vIFN0cmluZywgZXRjPyBJbnN0ZWFkLCBhYm9ydCB0aGUgdG9C
bG9iKCkgc3RlcHMsIHdpdGggYSBUWVBFLUVSUk9SIGV4Y2VwdGlvbiwgaWYKKyAgICAvLyB0aGUg
Zmlyc3QgYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uCisKKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDEgfHwgIWFyZ3NbMF0tPklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIkZ1bmN0aW9uIGV4cGVjdGVkIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKworICAgIFJlZlB0
cjxWOEJsb2JDYWxsYmFjaz4gY2FsbGJhY2sgPQorICAgICAgICBWOEJsb2JDYWxsYmFjazo6Y3Jl
YXRlKGFyZ3NbMF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBTdHJpbmcg
dHlwZTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNTdHJpbmcoKSkK
KyAgICAgICB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOworCisgICAgZG91YmxlIHF1
YWxpdHk7CisgICAgZG91YmxlKiBxdWFsaXR5UHRyID0gMDsKKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDIgJiYgYXJnc1syXS0+SXNOdW1iZXIoKSkgeworICAgICAgICBxdWFsaXR5ID0gYXJnc1sy
XS0+TnVtYmVyVmFsdWUoKTsKKyAgICAgICAgcXVhbGl0eVB0ciA9ICZxdWFsaXR5OworICAgIH0K
KworICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmZpbGVUaHJlYWQoKTsKKyAgICBjYW52YXMtPnRvQmxvYihjYWxsYmFjay5yZWxlYXNlKCks
IHR5cGUsIHF1YWxpdHlQdHIsIGZpbGVUaHJlYWQsIGVjKTsKKyAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oZWMpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYkNhbGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JDYWxsYmFj
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNjMDE5NDZjNjQ4NzI5MzY2Yzc4ZDhiYjI3MWViYzA0ZTRlMzI4NDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JDYWxsYmFjay5o
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JDYWxsYmFja19oCisjZGVmaW5lIEJsb2JDYWxs
YmFja19oCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKKworY2xhc3MgQmxvYkNhbGxi
YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+QmxvYkNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KEJs
b2IqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkNhbGxiYWNrLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkNhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDQ3
ODU1MDg1ZjUxMTQzZDYxYzMzY2Y1YzcyNTBjYzFjNzE0NTc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQ2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgc3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9QkxP
QiwKKyAgICAgICAgQ2FsbGJhY2sKKyAgICBdIEJsb2JDYWxsYmFjayB7CisgICAgICAgIGJvb2xl
YW4gaGFuZGxlRXZlbnQoaW4gQmxvYiBibG9iKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjYTk5M2UzMWMzYjgyYjBkYmJhZDZjYzRi
Y2ZlZDNjODNmYjQwYzhjLi41NTk3NzFlMGRhYmJiZjBjNmJjMTJhZDQ1YTU1ZmZhYmUxMzE2ZjJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNTMsNyAr
NTMsMTMgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoV0VCR0wpICAgIAorI2lmIEVOQUJMRShCTE9CKQorI2luY2x1ZGUgIkJsb2JDYWxsYmFjay5o
IgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlICJJbWFnZVRvQmxvYlRhc2suaCIK
KyNlbmRpZgorCisjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJp
YnV0ZXMuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgpAQCAt
MzY0LDYgKzM3MCwzNCBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdAogICAgIHJldHVybiBidWZm
ZXIoKS0+dG9EYXRhVVJMKGVuY29kaW5nTWltZVR5cGUsIHF1YWxpdHkpOwogfQogCisjaWYgRU5B
QkxFKEJMT0IpCisKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnRvQmxvYihQYXNzUmVmUHRyPEJs
b2JDYWxsYmFjaz4gY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJs
ZSogcXVhbGl0eSwgRmlsZVRocmVhZCogZmlsZVRocmVhZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFtX29yaWdpbkNsZWFuKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPEltYWdlVG9CbG9iVGFzaz4gdGFz
ayA9IEltYWdlVG9CbG9iVGFzazo6Y3JlYXRlKGNhbGxiYWNrLCB0b0VuY29kaW5nTWltZVR5cGUo
bWltZVR5cGUpLCBxdWFsaXR5KTsKKworICAgIC8vIEZJWE1FOiBzdGFuZGFyZCB0ZXh0IG1lbnRp
b25zIHRoaXMgY2FzZSBmb3IgdG9EYXRhVVJMKCkgYnV0IG5vdCBmb3IgdG9CbG9iKCkuIFNob3Vs
ZCB3ZQorICAgIC8vIGNvbnRpbnVlIHRoZSB0b0Jsb2IoKSBzdGVwcyBhcyBoZXJlIG9yIGFib3J0
IHRoZW0/IE5vdGUgdG9EYXRhVVJMKCkgcmV0dXJucyAiZGF0YTosIiBvbgorICAgIC8vIGFueSBm
YWlsdXJlLCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgaW4gdGhlIHRvQmxvYigpIHNwZWMgcHJvc2Uu
IFNvIHNlbmQgYW4gbnVsbCBpbWFnZSB0bworICAgIC8vIG1ha2UgdG9CbG9iKCkgY2FsbGJhY2sg
d2l0aCBhIEpTIG51bGwgQmxvYiwgdml6LiwgdXNlIEpTIG51bGwgdG8gc2lnbmFsIGZhaWx1cmVz
LgorCisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWJ1ZmZlcigpKSB7CisgICAgICAgIElt
YWdlVG9CbG9iVGFzazo6dG9CbG9iKHRhc2sucmVsZWFzZSgpLCBSZWZQdHI8SW1hZ2U+KDApKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxh
YmxlKCk7CisKKyAgICBJbWFnZVRvQmxvYlRhc2s6OnRvQmxvYih0YXNrLnJlbGVhc2UoKSwgYnVm
ZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSwgZmlsZVRocmVhZCk7Cit9CisKKyNl
bmRpZgorCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdl
RGF0YSgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dC0+aXMzZCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IDFiZmU1MmNmZWMzYmExNjE1
OTI1N2VjYjIzM2EzMDVlNTc3NTcwYTIuLjYxZGE0N2QyODM1MmQ1YjllN2JiMmY4NTE4YzhmOWVl
Y2M1ZDRjM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTUx
LDYgKzUxLDExIEBAIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3Mg
SW50U2l6ZTsKIAorI2lmIEVOQUJMRShCTE9CKQorY2xhc3MgQmxvYkNhbGxiYWNrOworY2xhc3Mg
RmlsZVRocmVhZDsKKyNlbmRpZgorCiBjbGFzcyBDYW52YXNPYnNlcnZlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+Q2FudmFzT2JzZXJ2ZXIoKSB7IH0KQEAgLTk0LDYgKzk5LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBTdHJpbmcgdG9FbmNvZGluZ01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9E
YXRhVVJMKG1pbWVUeXBlLCAwLCBlYyk7IH0KKyNpZiBFTkFCTEUoQkxPQikKKyAgICB2b2lkIHRv
QmxvYihQYXNzUmVmUHRyPEJsb2JDYWxsYmFjaz4sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IGRvdWJsZSogcXVhbGl0eSwgRmlsZVRocmVhZCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRp
ZgogCiAgICAgLy8gVXNlZCBmb3IgcmVuZGVyaW5nCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZs
b2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAppbmRl
eCA1MGQ0YWU0NjE4ZTk4MjkzY2M3ZjI5Njg0NzhmNmQzM2RkMWNiYzJiLi4xMjVlMTNmNTYxNmJm
NzViNDJkNDExZTYzMWE3OWMyZmYwOWFjNTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmlkbApAQCAtMzUsNiArMzUsOCBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICAg
ICAgW0N1c3RvbV0gRE9NU3RyaW5nIHRvRGF0YVVSTChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVs
bFRvTnVsbFN0cmluZyxPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gRE9NU3RyaW5nIHR5
cGUpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbSwg
Q29uZGl0aW9uYWw9QkxPQl0gdm9pZCB0b0Jsb2IoaW4gQmxvYkNhbGxiYWNrIGNhbGxiYWNrLCBp
biBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZyxPcHRpb25hbD1DYWxsV2l0aERl
ZmF1bHRWYWx1ZV0gRE9NU3RyaW5nIHR5cGUpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKIAogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogI2lm
ICFkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JUYXNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VUb0Jsb2JUYXNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDkxOGM3
MDlmZmNlYzVjYzVmYWU0NDg3NGExYWMzYTI2NDhkYjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYlRhc2suY3BwCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlVG9CbG9iVGFzay5oIgorCisjaWYgRU5B
QkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYkNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiRmlsZVRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZVRvQmxvYlJlc3VsdCB7CitwdWJsaWM6
CisgICAgSW1hZ2VUb0Jsb2JSZXN1bHQoUGFzc1JlZlB0cjxCbG9iQ2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykK
KyAgICAgICAgLCBtX2Jsb2IoYmxvYikKKyAgICB7IH0KKworICAgIEJsb2JDYWxsYmFjayogY2Fs
bGJhY2soKSB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisgICAgQmxvYiogYmxvYigpIHsg
cmV0dXJuIG1fYmxvYi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCbG9iQ2FsbGJh
Y2s+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKK307CisKK3N0YXRpYyB2
b2lkIHRvQmxvYkNhbGxiYWNrKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiB0b0RhdGFVUkwoKSByZXR1cm5zICJkYXRhOiwiIG9u
IGFueSBmYWlsdXJlLCB0aGVyZSBpcyBubyBlcXVpdmFsZW50IGluIHRoZQorICAgIC8vIHRvQmxv
YigpIHNwZWMgcHJvc2UuIFRoZSBpbnN0YW5jZS0+YmxvYigpIG1heSBiZSBudWxsIChmYWlsdXJl
KSBzbyByZXR1cm4gdGhhdCBpbgorICAgIC8vIHRoZSB1c2VyIEpTIGNhbGxiYWNrLiBTcGVjIHBy
b3NlIHNob3VsZCBkZWZpbmUgdGhlIGZhaWx1cmUgY2FzZSByZXR1cm4gdHlwZS4KKworICAgIElt
YWdlVG9CbG9iUmVzdWx0KiBpbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VUb0Jsb2JS
ZXN1bHQqPihjb250ZXh0KTsKKyAgICBpbnN0YW5jZS0+Y2FsbGJhY2soKS0+aGFuZGxlRXZlbnQo
aW5zdGFuY2UtPmJsb2IoKSk7CisgICAgZGVsZXRlIGluc3RhbmNlOworfQorCitQYXNzUmVmUHRy
PEJsb2I+IEltYWdlVG9CbG9iVGFzazo6aW1hZ2VUb0Jsb2IoKQoreworICAgIGlmICghbV9pbWFn
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGbG9hdFJlY3Qgc291cmNlKEZsb2F0UG9pbnQoKSwg
bV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBidWZmZXItPmNvbnRleHQoKS0+ZHJhd0ltYWdlKG1faW1h
Z2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHNvdXJjZSwgc291cmNlLCBDb21wb3NpdGVT
b3VyY2VPdmVyLCBmYWxzZSk7CisKKyAgICBSZWZQdHI8UmF3RGF0YT4gYmxvYiA9IFJhd0RhdGE6
OmNyZWF0ZSgpOworICAgIGlmICghYmxvYiB8fCAhYnVmZmVyLT50b0RhdGFCbG9iKG1fbWltZVR5
cGUsIG1fcXVhbGl0eVB0ciwgYmxvYi0+bXV0YWJsZURhdGEoKSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsK
KyAgICBpZiAoIWJsb2JEYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJsb2JEYXRhLT5h
cHBlbmREYXRhKGJsb2IsIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOworICAgIGJsb2JE
YXRhLT5zZXRDb250ZW50VHlwZShtX21pbWVUeXBlKTsKKworICAgIHJldHVybiBCbG9iOjpjcmVh
dGUoYmxvYkRhdGEucmVsZWFzZSgpLCBibG9iLT5sZW5ndGgoKSk7Cit9CisKK0ltYWdlVG9CbG9i
VGFzazo6SW1hZ2VUb0Jsb2JUYXNrKFBhc3NSZWZQdHI8QmxvYkNhbGxiYWNrPiBjYWxsYmFjaywg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQorICAgIDogRmls
ZVRocmVhZDo6VGFzayh0aGlzKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1f
bWltZVR5cGUobWltZVR5cGUuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX3F1YWxpdHlQdHIoMCkK
K3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcobV9taW1lVHlwZSkpOworCisgICAgaWYgKHF1YWxpdHkpIHsKKyAgICAgICAg
bV9xdWFsaXR5UHRyID0gJm1fcXVhbGl0eTsKKyAgICAgICAgbV9xdWFsaXR5ID0gKnF1YWxpdHk7
CisgICAgfQorfQorCit2b2lkIEltYWdlVG9CbG9iVGFzazo6dG9CbG9iKFBhc3NPd25QdHI8SW1h
Z2VUb0Jsb2JUYXNrPiB0YXNrLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgRmlsZVRocmVhZCog
ZmlsZVRocmVhZCkKK3sKKyAgICB0YXNrLT5tX2ltYWdlID0gaW1hZ2U7CisKKyAgICBpZiAoZmls
ZVRocmVhZCkgeworICAgICAgICBmaWxlVGhyZWFkLT5wb3N0VGFzayh0YXNrKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7Cit9CisKK3ZvaWQgSW1h
Z2VUb0Jsb2JUYXNrOjpwZXJmb3JtVGFzaygpCit7CisgICAgY2FsbE9uTWFpblRocmVhZCh0b0Js
b2JDYWxsYmFjaywgbmV3IEltYWdlVG9CbG9iUmVzdWx0KG1fY2FsbGJhY2sucmVsZWFzZSgpLCBp
bWFnZVRvQmxvYigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlVG9CbG9iVGFzay5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZVRvQmxvYlRhc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2MwOTJkNzEwYzE1
MDg3ZTY3ODU3ZjgwMWJiYzUxNzNlZjg1ODg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZVRvQmxvYlRhc2suaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFn
ZVRvQmxvYlRhc2tfaAorI2RlZmluZSBJbWFnZVRvQmxvYlRhc2tfaAorCisjaWYgRU5BQkxFKEJM
T0IpCisKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iOworY2xhc3MgQmxv
YkNhbGxiYWNrOworY2xhc3MgSW1hZ2U7CisKK2NsYXNzIEltYWdlVG9CbG9iVGFzayA6IHB1Ymxp
YyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFn
ZVRvQmxvYlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEJsb2JDYWxsYmFjaz4gY2FsbGJhY2ssIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VUb0Jsb2JUYXNrKGNhbGxiYWNrLCBtaW1lVHlw
ZSwgcXVhbGl0eSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRvQmxvYihQYXNzT3duUHRy
PEltYWdlVG9CbG9iVGFzaz4gdGFzaywgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgewor
ICAgICAgICB0b0Jsb2IodGFzaywgaW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8RmlsZVRocmVhZCo+
KDApKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0b0Jsb2IoUGFzc093blB0cjxJbWFnZVRv
QmxvYlRhc2s+LCBQYXNzUmVmUHRyPEltYWdlPiwgRmlsZVRocmVhZCopOworCitwcml2YXRlOgor
ICAgIEltYWdlVG9CbG9iVGFzayhQYXNzUmVmUHRyPEJsb2JDYWxsYmFjaz4sIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSk7CisKKyAgICBSZWZQdHI8QmxvYkNh
bGxiYWNrPiBtX2NhbGxiYWNrOworICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgIGRvdWJsZSog
bV9xdWFsaXR5UHRyOworICAgIGRvdWJsZSBtX3F1YWxpdHk7CisKKyAgICBSZWZQdHI8SW1hZ2U+
IG1faW1hZ2U7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBpbWFnZVRvQmxvYigpOworCisgICAgdm9p
ZCBwZXJmb3JtVGFzaygpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAppbmRleCA3ZGYxMzQyODA3Zjk4ZDA5YTY2MTE3YzJlODZmOTY0YWJmZDg3MTI2Li41MTQ5
N2JhNTFmYjdlMDMzZjAwM2VlZTNkYTIyYWZmYTdlMGY4ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEwMSw2ICsxMDEsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygp
OwogICAgICAgICAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkgPSAwKSBjb25zdDsKKyNpZiBFTkFCTEUoQkxPQikK
KyAgICAgICAgYm9vbCB0b0RhdGFCbG9iKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRv
dWJsZSogcXVhbGl0eSwgVmVjdG9yPGNoYXI+KikgY29uc3Q7CisjZW5kaWYKICNpZiAhVVNFKENH
KQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAKaW5kZXggOWUwNWI5NzMwZjZjNTllNTY1M2I4ZjZhM2FjYzBlOTllMzM2ZjZi
NS4uMzNiYjBjZTgyMDkwZDVhNjM4Mjc2Njk4ZGQxMDc5YzkzOWZkZmIyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcApAQCAtMzk2LDQgKzM5NiwxNiBAQCBTdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjbwogICAg
IHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKIH0K
IAorI2lmIEVOQUJMRShCTE9CKQorCitib29sIEltYWdlQnVmZmVyOjp0b0RhdGFCbG9iKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgVmVjdG9yPGNoYXI+KiBv
dXRwdXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBTa0RldmljZSogZGV2
aWNlID0gY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgp
OworICAgIHJldHVybiBlbmNvZGVJbWFnZShkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSksIG1p
bWVUeXBlLCBxdWFsaXR5LCBvdXRwdXQpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>