<?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>84523</bug_id>
          
          <creation_ts>2012-04-21 01:31:52 -0700</creation_ts>
          <short_desc>Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints</short_desc>
          <delta_ts>2012-04-21 13:03:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607167</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 01:31:52 -0700</bug_when>
    <thetext>Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607168</commentid>
    <comment_count>1</comment_count>
      <attachid>138225</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 01:42:29 -0700</bug_when>
    <thetext>Created attachment 138225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607169</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 01:43:43 -0700</bug_when>
    <thetext>I could use some help performance testing this. I have every reason to believe it is faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607171</commentid>
    <comment_count>3</comment_count>
      <attachid>138225</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-21 01:47:38 -0700</bug_when>
    <thetext>Comment on attachment 138225
Patch

Attachment 138225 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12469428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607172</commentid>
    <comment_count>4</comment_count>
      <attachid>138225</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-21 01:49:11 -0700</bug_when>
    <thetext>Comment on attachment 138225
Patch

Attachment 138225 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12472388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607176</commentid>
    <comment_count>5</comment_count>
      <attachid>138227</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 01:58:27 -0700</bug_when>
    <thetext>Created attachment 138227
Patch with fix for Qt build issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607239</commentid>
    <comment_count>6</comment_count>
      <attachid>138227</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-04-21 10:59:01 -0700</bug_when>
    <thetext>Comment on attachment 138227
Patch with fix for Qt build issue

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

Overall this patch makes me happy, I&apos;d still rather not mix renames in with semantic/functionality changes, but in this case the overhead is relatively low.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:3
&gt; + *  Copyright (C) 2006, 2007, 2008, 2009, 2012 Apple Inc. All Rights Reserved.

Err, this should also probably have 2011 in as well.  I&apos;d swear I&apos;ve made that change before and it just keeps disappearing.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:371
&gt; -UString Lexer&lt;T&gt;::getInvalidCharMessage()
&gt; +UString Lexer&lt;T&gt;::invalidCharacterMessage() const

I would rather we didn&apos;t have unrelated renaming in patches that change functionality (albeit slightly), as it makes the patch bigger than it might otherwise need to be.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:-482
&gt; -    int m_prev = m_current;

/me boggles at that naming

&gt; Source/JavaScriptCore/parser/Lexer.h:3
&gt; + *  Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights reserved.

Can you add 2011 in here as well

&gt; Source/JavaScriptCore/parser/Lexer.h:114
&gt; -        // Faster than an if-else sequence
&gt; -        m_current = -1;
&gt;          if (LIKELY(m_code &lt; m_codeEnd))
&gt;              m_current = *m_code;
&gt; +        else
&gt; +            m_current = 0;

Why the sequencing change? no measurable difference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607259</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 12:33:35 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Source/JavaScriptCore/parser/Lexer.h:114
&gt; &gt; -        // Faster than an if-else sequence
&gt; &gt; -        m_current = -1;
&gt; &gt;          if (LIKELY(m_code &lt; m_codeEnd))
&gt; &gt;              m_current = *m_code;
&gt; &gt; +        else
&gt; &gt; +            m_current = 0;
&gt; 
&gt; Why the sequencing change? no measurable difference?

There is no measurable difference.

This is non-hot setup code. Someone copied the strange idiom from the super-hot get each character code here. Here, there is no good justification for that kind of micro-optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607262</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 12:46:08 -0700</bug_when>
    <thetext>Committed r114844: &lt;http://trac.webkit.org/changeset/114844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607263</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-21 13:03:20 -0700</bug_when>
    <thetext>Committed r114845: &lt;http://trac.webkit.org/changeset/114845&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138225</attachid>
            <date>2012-04-21 01:42:29 -0700</date>
            <delta_ts>2012-04-21 01:58:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84523-20120421014228.patch</filename>
            <type>text/plain</type>
            <size>21361</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDEyLTA0LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgSmF2YVNjcmlwdCBsZXhlciB0byB1c2UgMCBpbnN0ZWFkIG9mIC0xIGZvciBzZW50aW5l
bCwgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcHV0IGNoYXJhY3RlcnMgaW50byBpbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDUyMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb2ZpbGVzIHNob3dl
ZCB0aGF0IGNoZWNrcyBhZ2FpbnN0IC0xIHdlcmUgY29zdGx5LCBhbmQgSSBzYXcgdGhleSBjb3Vs
ZCBiZSBlbGltaW5hdGVkLgorICAgICAgICBTdHJlYW1saW5lZCB0aGlzIGNvZGUgdG8gdXNlIHN0
YW5kYXJkIGNoYXJhY3RlciB0eXBlcyBhbmQgMCByYXRoZXIgdGhhbiAtMS4gT25lIGJlbmVmaXQK
KyAgICAgICAgb2YgdGhpcyBpcyB0aGF0IHRoZXJlJ3Mgbm8gd2lkZW5pbmcgYW5kIG5hcnJvd2lu
Zy4gQW5vdGhlciBpcyB0aGF0IHRoZXJlIGFyZSBtYW55IGNhc2VzCisgICAgICAgIHdoZXJlIHdl
IGFscmVhZHkgaGF2ZSB0aGUgY29ycmVjdCBiZWhhdmlvciBmb3IgMCwgc28gY2FuIGVsaW1pbmF0
ZSBhIGJyYW5jaCB0aGF0IHdhcworICAgICAgICB1c2VkIHRvIHRlc3QgZm9yIC0xIGJlZm9yZS4g
QWxzbyBlbGltaW5hdGVzIHR5cGVjYXN0cyBpbiB0aGUgY29kZS4KKworICAgICAgICAqIHBhcnNl
ci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjppbnZhbGlkQ2hhcmFjdGVyTWVzc2Fn
ZSk6IFJlbW92ZWQgImdldCIgZnJvbSBuYW1lIHRvIG1hdGNoIFdlYktpdCBuYW1pbmcgY29udmVu
dGlvbnMuCisgICAgICAgIFVwZGF0ZWQgdXNlIG9mIFN0cmluZzo6Zm9ybWF0IHNpbmNlIG1fY3Vy
cmVudCBpcyBub3cgYSBjaGFyYWN0ZXIgdHlwZSwgbm90IGFuIHVuc2lnbmVkLgorICAgICAgICAo
SlNDOjpMZXhlcjo6c2V0Q29kZSk6IFVzZSAwIHJhdGhlciB0aGFuIC0xIHdoZW4gcGFzdCB0aGUg
ZW5kLgorICAgICAgICAoSlNDOjpMZXhlcjo6c2hpZnQpOiBEaXR0by4gQWxzbyBzcHJ1Y2VkIHVw
IHRoZSBjb21tZW50IGEgYml0LgorICAgICAgICAoSlNDOjpMZXhlcjo6YXRFbmQpOiBBZGRlZC4g
TmV3IGZ1bmN0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBhbiBhY3R1YWwgMCBjaGFyYWN0ZXIgZnJv
bSB0aGUgZW5kCisgICAgICAgIG9mIHRoZSBjb2RlLiBUaGlzIGNhbiBiZSB1c2VkIHBsYWNlcyB3
ZSB1c2VkIHRvIGNoZWVjayBmb3IgLTEuCisgICAgICAgIChKU0M6OkxleGVyOjpwZWVrKTogVXBk
YXRlZCB0byB1c2UgLTEgaW5zdGVhZCBvZiAwLiBSZW1vdmVkIG1lYW5pbmdsZXNzIGNvbW1lbnQu
CisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZUZvdXJEaWdpdFVuaWNvZGVIZXgpOiBSZW5hbWVk
IGZyb20gZ2V0VW5pY29kZUNoYXJhY3RlciB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQKKyAgICAg
ICAgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIENoYW5nZWQgdG8gdXNlIGNoYXJhY3RlciB0eXBl
cyBpbnN0ZWFkIG9mIGludC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0
b3IpOiBSZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlIGNhc3RzLiBDaGFuZ2VkIGxvY2FsIHZhcmlh
YmxlIHRoYXQKKyAgICAgICAgaGFkIGEgZGF0YS1tZW1iZXItc3R5bGUgbmFtZS4KKyAgICAgICAg
KEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllcik6IFJlbW92ZWQgbm93LXVubmVlZGVkIGV4cGxp
Y2l0IGNoZWNrcyBmb3IgLTEsIHNpbmNlIHRoZSBpc0lkZW50UGFydAorICAgICAgICBmdW5jdGlv
biBhbHJlYWR5IHJldHVybnMgZmFsc2UgZm9yIHRoZSAwIGNoYXJhY3Rlci4gVXBkYXRlZCB0eXBl
cyBpbiBhIGNvdXBsZSBvdGhlciBwbGFjZXMuIFVzZWQKKyAgICAgICAgdGhlIGF0RW5kIGZ1bmN0
aW9uIHdoZXJlIG5lZWRlZC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllclNs
b3dDYXNlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZVN0cmluZ1Nsb3dDYXNlKTog
RGl0dG8uCisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZU11bHRpbGluZUNvbW1lbnQpOiBEaXR0
by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OmxleCk6IE1vcmUgb2YgdGhlIHNhbWUuIEFsc28gY2hh
bmdlZCBjb2RlIHRvIHNldCB0aGUgc3RhcnRPZmZzZXQgZGlyZWN0bHkgaW4KKyAgICAgICAgdGhl
IHRva2VuSW5mbyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBmaXJz
dCwgc2F2aW5nIHNvbWUgbWVtb3J5IGFjY2Vzcy4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNjYW5S
ZWdFeHApOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNraXBSZWdFeHApOiBEaXR0by4K
KworICAgICAgICAqIHBhcnNlci9MZXhlci5oOiBSZW1vdmVkIGFuIHVubmVlZGVkIGZvcndhcmQg
ZGVjbGFyYXRpb24gb2YgdGhlIFJlZ0V4cCBjbGFzcy4gQ2hhbmdlZCByZXR1cm4gdHlwZQorICAg
ICAgICBvZiB0aGUgcGVlayBmdW5jdGlvbiwgYW5kIHRoZSB0eXBlIG9mIG1fY3VycmVudCBmcm9t
IGludCB0byBhIGNoYXJhY3RlciB0eXBlLiBSZW5hbWVkCisgICAgICAgIGdldEludmFsaWRDaGFy
TWVzc2FnZSB0byBpbnZhbGlkQ2hhcmFjdGVyTWVzc2FnZSBhbmQgbWFkZSBpdCBjb25zdC4gUmVu
YW1lZCBnZXRVbmljb2RlQ2hhcmFjdGVyIHRvCisgICAgICAgIHBhcnNlRm91ckRpZ2l0VW5pY29k
ZUhleC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldE9mZnNldCk6IFVzZWQgMCBpbnN0ZWFkIG9m
IC0xIGFuZCByZW1vdmVkIGFuIG92ZXJ6ZWFsb3VzIGF0dGVtcHQgdG8gb3B0aW1pemUuIAorICAg
ICAgICAoSlNDOjpMZXhlcjo6bGV4RXhwZWN0SWRlbnRpZmllcik6IFVzZWQgMCBpbnN0ZWFkIG9m
IC0xLgorCiAyMDEyLTA0LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgREZHIHNob3VsZCBvcHRpbWl6ZSBpbnQ4IGFuZCBpbnQxNiBhcnJheXMgb24gQVJNdjcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxMTQ4
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2Fy
aWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
KHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlh
cyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBMZXhlcjxUPjo6
fkxleGVyKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1VU3RyaW5nIExleGVyPFQ+Ojpn
ZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQorVVN0cmluZyBMZXhlcjxUPjo6aW52YWxpZENoYXJhY3Rl
ck1lc3NhZ2UoKSBjb25zdAogewogICAgIHN3aXRjaCAobV9jdXJyZW50KSB7CiAgICAgY2FzZSAw
OgpAQCAtMzg2LDcgKzM4Niw3IEBAIFVTdHJpbmcgTGV4ZXI8VD46OmdldEludmFsaWRDaGFyTWVz
c2FnZSgKICAgICBjYXNlIDk2OgogICAgICAgICByZXR1cm4gIkludmFsaWQgY2hhcmFjdGVyOiAn
YCciOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiSW52YWxp
ZCBjaGFyYWN0ZXIgJ1xcdSUwNHUnIiwgbV9jdXJyZW50KS5pbXBsKCk7CisgICAgICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdSUwNHUnIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fY3VycmVudCkpLmltcGwoKTsKICAgICB9CiB9CiAKQEAgLTQyNSw3ICs0
MjUsNyBAQCB2b2lkIExleGVyPFQ+OjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmCiAgICAgaWYg
KExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQogICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2Rl
OwogICAgIGVsc2UKLSAgICAgICAgbV9jdXJyZW50ID0gLTE7CisgICAgICAgIG1fY3VycmVudCA9
IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRPZmZzZXQoKSA9PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSk7
CiB9CiAKQEAgLTQzOSwyOSArNDM5LDM0IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQ+IEFM
V0FZU19JTkxJTkUKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSB2b2lkIExl
eGVyPFQ+OjpzaGlmdCgpCiB7Ci0gICAgLy8gRmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5j
ZQotICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOwotICAgIG1fY3VycmVudCA9IC0xOwotICAg
IG1fY29kZSsrOworICAgIC8vIEF0IG9uZSBwb2ludCB0aW1pbmcgc2hvd2VkIHRoYXQgc2V0dGlu
ZyBtX2N1cnJlbnQgdG8gMCB1bmNvbmRpdGlvbmFsbHkgd2FzIGZhc3RlciB0aGFuIGFuIGlmLWVs
c2Ugc2VxdWVuY2UuCisgICAgbV9jdXJyZW50ID0gMDsKKyAgICArK21fY29kZTsKICAgICBpZiAo
TElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI8VD46
OnBlZWsoaW50IG9mZnNldCkKK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6YXRFbmQoKSBj
b25zdAoreworICAgIEFTU0VSVCghbV9jdXJyZW50IHx8IG1fY29kZSA8IG1fY29kZUVuZCk7Cisg
ICAgcmV0dXJuIFVOTElLRUxZKFVOTElLRUxZKCFtX2N1cnJlbnQpICYmIG1fY29kZSA9PSBtX2Nv
ZGVFbmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgVCBMZXhl
cjxUPjo6cGVlayhpbnQgb2Zmc2V0KSBjb25zdAogewotICAgIC8vIE9ubHkgdXNlIGlmIG5lY2Vz
c2FyeQogICAgIEFTU0VSVChvZmZzZXQgPiAwICYmIG9mZnNldCA8IDUpOwogICAgIGNvbnN0IFQq
IGNvZGUgPSBtX2NvZGUgKyBvZmZzZXQ7Ci0gICAgcmV0dXJuIChjb2RlIDwgbV9jb2RlRW5kKSA/
ICpjb2RlIDogLTE7CisgICAgcmV0dXJuIChjb2RlIDwgbV9jb2RlRW5kKSA/ICpjb2RlIDogMDsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFy
YWN0ZXIoKQoraW50IExleGVyPFQ+OjpwYXJzZUZvdXJEaWdpdFVuaWNvZGVIZXgoKQogewotICAg
IGludCBjaGFyMSA9IHBlZWsoMSk7Ci0gICAgaW50IGNoYXIyID0gcGVlaygyKTsKLSAgICBpbnQg
Y2hhcjMgPSBwZWVrKDMpOworICAgIFQgY2hhcjEgPSBwZWVrKDEpOworICAgIFQgY2hhcjIgPSBw
ZWVrKDIpOworICAgIFQgY2hhcjMgPSBwZWVrKDMpOwogCiAgICAgaWYgKFVOTElLRUxZKCFpc0FT
Q0lJSGV4RGlnaXQobV9jdXJyZW50KSB8fCAhaXNBU0NJSUhleERpZ2l0KGNoYXIxKSB8fCAhaXNB
U0NJSUhleERpZ2l0KGNoYXIyKSB8fCAhaXNBU0NJSUhleERpZ2l0KGNoYXIzKSkpCiAgICAgICAg
IHJldHVybiAtMTsKQEAgLTQ3NywxMyArNDgyLDEzIEBAIGludCBMZXhlcjxUPjo6Z2V0VW5pY29k
ZUNoYXJhY3RlcigpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQgTGV4ZXI8VD46OnNoaWZ0
TGluZVRlcm1pbmF0b3IoKQogewotICAgIEFTU0VSVChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19j
YXN0PFQ+KG1fY3VycmVudCkpKTsKKyAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJl
bnQpKTsKIAotICAgIGludCBtX3ByZXYgPSBtX2N1cnJlbnQ7CisgICAgVCBwcmV2ID0gbV9jdXJy
ZW50OwogICAgIHNoaWZ0KCk7CiAKICAgICAvLyBBbGxvdyBib3RoIENSTEYgYW5kIExGQ1IuCi0g
ICAgaWYgKG1fcHJldiArIG1fY3VycmVudCA9PSAnXG4nICsgJ1xyJykKKyAgICBpZiAocHJldiAr
IG1fY3VycmVudCA9PSAnXG4nICsgJ1xyJykKICAgICAgICAgc2hpZnQoKTsKIAogICAgICsrbV9s
aW5lTnVtYmVyOwpAQCAtNjMzLDcgKzYzOCw3IEBAIGlubGluZSB2b2lkIExleGVyPFQ+OjpyZWNv
cmQxNihpbnQgYykKIH0KIAogdGVtcGxhdGUgPD4KLSAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRD
cmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFyPjo6
cGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleGVyRmxh
Z3MsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZp
ZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8TENoYXI+OjpwYXJzZUlkZW50aWZp
ZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJp
Y3RNb2RlKQogewogICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcgPSBtX2NvZGVFbmQgLSBt
X2NvZGU7CiAgICAgaWYgKChyZW1haW5pbmcgPj0gbWF4VG9rZW5MZW5ndGgpICYmICEobGV4ZXJG
bGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewpAQCAtNjQ2LDcgKzY1MSw3
IEBAIHRlbXBsYXRlIDw+CiAKICAgICBjb25zdCBMQ2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3Vy
cmVudENoYXJhY3RlcigpOwogICAgIAotICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gLTEgJiYgaXNJ
ZGVudFBhcnQoc3RhdGljX2Nhc3Q8TENoYXI+KG1fY3VycmVudCkpKQorICAgIHdoaWxlIChpc0lk
ZW50UGFydChtX2N1cnJlbnQpKQogICAgICAgICBzaGlmdCgpOwogICAgIAogICAgIGlmIChVTkxJ
S0VMWShtX2N1cnJlbnQgPT0gJ1xcJykpIHsKQEAgLTY5MSwxMSArNjk2LDEyIEBAIHRlbXBsYXRl
IDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICAgICAgICAgIHJldHVybiBrZXl3
b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3RyaWN0TW9kZSA/IElERU5UIDoga2V5d29y
ZDsKICAgICAgICAgfQogICAgIH0KKwogICAgIGNvbnN0IFVDaGFyKiBpZGVudGlmaWVyU3RhcnQg
PSBjdXJyZW50Q2hhcmFjdGVyKCk7CiAKICAgICBVQ2hhciBvckFsbENoYXJzID0gMDsKICAgICAK
LSAgICB3aGlsZSAobV9jdXJyZW50ICE9IC0xICYmIGlzSWRlbnRQYXJ0KHN0YXRpY19jYXN0PFVD
aGFyPihtX2N1cnJlbnQpKSkgeworICAgIHdoaWxlIChpc0lkZW50UGFydChtX2N1cnJlbnQpKSB7
CiAgICAgICAgIG9yQWxsQ2hhcnMgfD0gbV9jdXJyZW50OwogICAgICAgICBzaGlmdCgpOwogICAg
IH0KQEAgLTc0Nyw3ICs3NTMsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlm
aWVyPiBKCiAgICAgYm9vbCBidWZmZXJSZXF1aXJlZCA9IGZhbHNlOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2N1cnJlbnQgIT0gLTEgJiYgaXNJZGVudFBhcnQo
c3RhdGljX2Nhc3Q8VD4obV9jdXJyZW50KSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNJZGVu
dFBhcnQobV9jdXJyZW50KSkpIHsKICAgICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQpAQCAtNzYyLDcgKzc2OCw3IEBAIHRlbXBsYXRlIDxib29sIHNo
b3VsZENyZWF0ZUlkZW50aWZpZXI+IEoKICAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCAh
PSAndScpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBzaGlmdCgpOwot
ICAgICAgICBpbnQgY2hhcmFjdGVyID0gZ2V0VW5pY29kZUNoYXJhY3RlcigpOworICAgICAgICBp
bnQgY2hhcmFjdGVyID0gcGFyc2VGb3VyRGlnaXRVbmljb2RlSGV4KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShjaGFyYWN0ZXIgPT0gLTEpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwog
ICAgICAgICBVQ2hhciB1Y2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3Rlcik7
CkBAIC04MTIsMTMgKzgxOCwxMyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+
IEFMV0FZCiB7CiAgICAgaW50IHN0YXJ0aW5nT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAg
IGludCBzdGFydGluZ0xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyKCk7Ci0gICAgaW50IHN0cmluZ1F1
b3RlQ2hhcmFjdGVyID0gbV9jdXJyZW50OworICAgIFQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIgPSBt
X2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIAogICAgIGNvbnN0IFQqIHN0cmluZ1N0YXJ0ID0gY3Vy
cmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJpbmdRdW90ZUNo
YXJhY3RlcikgewotICAgICAgICBpZiAoVU5MSUtFTFkoKG1fY3VycmVudCA9PSAnXFwnKSkpIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkgewogICAgICAgICAgICAg
aWYgKHN0cmluZ1N0YXJ0ICE9IGN1cnJlbnRDaGFyYWN0ZXIoKSAmJiBzaG91bGRCdWlsZFN0cmlu
Z3MpCiAgICAgICAgICAgICAgICAgYXBwZW5kOChzdHJpbmdTdGFydCwgY3VycmVudENoYXJhY3Rl
cigpIC0gc3RyaW5nU3RhcnQpOwogICAgICAgICAgICAgc2hpZnQoKTsKQEAgLTgzOCw3ICs4NDQs
NyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZCiAgICAgICAgICAg
ICAgICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gIlxceCBjYW4gb25seSBiZSBmb2xsb3dlZCBi
eSBhIGhleCBjaGFyYWN0ZXIgc2VxdWVuY2UiOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludCBwcmV2ID0gbV9j
dXJyZW50OworICAgICAgICAgICAgICAgIFQgcHJldiA9IG1fY3VycmVudDsKICAgICAgICAgICAg
ICAgICBzaGlmdCgpOwogICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCiAg
ICAgICAgICAgICAgICAgICAgIHJlY29yZDgoY29udmVydEhleChwcmV2LCBtX2N1cnJlbnQpKTsK
QEAgLTg1Myw3ICs4NTksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFM
V0FZCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChVTkxJ
S0VMWSgoKG1fY3VycmVudCA+IDB4ZmYpIHx8IChtX2N1cnJlbnQgPCAweGUpKSkpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA+IDB4RkYgfHwgbV9jdXJyZW50IDwgMHhFKSkgewog
ICAgICAgICAgICAgc2V0T2Zmc2V0KHN0YXJ0aW5nT2Zmc2V0KTsKICAgICAgICAgICAgIHNldExp
bmVOdW1iZXIoc3RhcnRpbmdMaW5lTnVtYmVyKTsKICAgICAgICAgICAgIG1fYnVmZmVyOC5yZXNp
emUoMCk7CkBAIC04NzcsNyArODgzLDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJp
bmdzPiBBTFdBWQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRC
dWlsZFN0cmluZ3M+IGJvb2wgTGV4ZXI8VD46OnBhcnNlU3RyaW5nU2xvd0Nhc2UoSlNUb2tlbkRh
dGEqIHRva2VuRGF0YSwgYm9vbCBzdHJpY3RNb2RlKQogewotICAgIGludCBzdHJpbmdRdW90ZUNo
YXJhY3RlciA9IG1fY3VycmVudDsKKyAgICBUIHN0cmluZ1F1b3RlQ2hhcmFjdGVyID0gbV9jdXJy
ZW50OwogICAgIHNoaWZ0KCk7CiAKICAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9IGN1cnJlbnRD
aGFyYWN0ZXIoKTsKQEAgLTg5NSw3ICs5MDEsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWls
ZFN0cmluZ3M+IGJvb2wgCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykK
ICAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoZXNjYXBlKTsKICAgICAgICAgICAgICAgICBz
aGlmdCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9y
KHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkpKSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVU5M
SUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSkKICAgICAgICAgICAgICAgICBzaGlm
dExpbmVUZXJtaW5hdG9yKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ3gn
KSB7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKQEAgLTkwMywxNCArOTA5LDE0IEBAIHRlbXBs
YXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gYm9vbCAKICAgICAgICAgICAgICAgICAgICAg
bV9sZXhFcnJvck1lc3NhZ2UgPSAiXFx4IGNhbiBvbmx5IGJlIGZvbGxvd2VkIGJ5IGEgaGV4IGNo
YXJhY3RlciBzZXF1ZW5jZSI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgVCBwcmV2ID0gbV9jdXJyZW50OwogICAgICAgICAgICAgICAgIHNoaWZ0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKICAgICAgICAgICAg
ICAgICAgICAgcmVjb3JkMTYoY29udmVydEhleChwcmV2LCBtX2N1cnJlbnQpKTsKICAgICAgICAg
ICAgICAgICBzaGlmdCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ3Un
KSB7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgICAgICBpbnQgY2hhcmFj
dGVyID0gZ2V0VW5pY29kZUNoYXJhY3RlcigpOworICAgICAgICAgICAgICAgIGludCBjaGFyYWN0
ZXIgPSBwYXJzZUZvdXJEaWdpdFVuaWNvZGVIZXgoKTsKICAgICAgICAgICAgICAgICBpZiAoY2hh
cmFjdGVyICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmlu
Z3MpCiAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjaGFyYWN0ZXIpOwpAQCAtOTMz
LDExICs5MzksMTEgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBib29sIAog
ICAgICAgICAgICAgICAgICAgICByZWNvcmQxNigwKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IXN0cmljdE1vZGUgJiYgaXNBU0NJSU9jdGFsRGlnaXQobV9jdXJyZW50KSkgewogICAgICAgICAg
ICAgICAgIC8vIE9jdGFsIGNoYXJhY3RlciBzZXF1ZW5jZXMKLSAgICAgICAgICAgICAgICBpbnQg
Y2hhcmFjdGVyMSA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBUIGNoYXJhY3RlcjEgPSBt
X2N1cnJlbnQ7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAgICAgICBpZiAo
aXNBU0NJSU9jdGFsRGlnaXQobV9jdXJyZW50KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBU
d28gb2N0YWwgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcmFjdGVyMiA9
IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgVCBjaGFyYWN0ZXIyID0gbV9jdXJyZW50
OwogICAgICAgICAgICAgICAgICAgICBzaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hhcmFjdGVyMSA+PSAnMCcgJiYgY2hhcmFjdGVyMSA8PSAnMycgJiYgaXNBU0NJSU9jdGFsRGln
aXQobV9jdXJyZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxk
U3RyaW5ncykKQEAgLTk1MSw3ICs5NTcsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0
cmluZ3M+IGJvb2wgCiAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjaGFyYWN0ZXIxIC0gJzAnKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCAhPSAtMSkg
eworICAgICAgICAgICAgfSBlbHNlIGlmICghYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChzaG91bGRCdWlsZFN0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KG1fY3Vy
cmVudCk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKQEAgLTk2NCwxMSArOTcwLDExIEBAIHRl
bXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gYm9vbCAKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAgICAgICAgIC8vIEZhc3QgY2hlY2sgZm9yIGNoYXJhY3RlcnMgdGhh
dCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcuCi0gICAgICAgIC8vIENhdGNoZXMgLTEsIFxuLCBc
ciwgMHgyMDI4LCBhbmQgMHgyMDI5IGFzIGVmZmljaWVudGx5CisgICAgICAgIC8vIENhdGNoZXMg
MCwgXG4sIFxyLCAweDIwMjgsIGFuZCAweDIwMjkgYXMgZWZmaWNpZW50bHkKICAgICAgICAgLy8g
YXMgcG9zc2libGUsIGFuZCBsZXRzIHRocm91Z2ggYWxsIGNvbW1vbiBBU0NJSSBjaGFyYWN0ZXJz
LgogICAgICAgICBpZiAoVU5MSUtFTFkoKChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50
KSAtIDB4RSkgJiAweDIwMDApKSkgewogICAgICAgICAgICAgLy8gTmV3LWxpbmUgb3IgZW5kIG9m
IGlucHV0IGlzIG5vdCBhbGxvd2VkCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50
ID09IC0xKSB8fCBVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0PFQ+KG1fY3Vy
cmVudCkpKSkgeworICAgICAgICAgICAgaWYgKGF0RW5kKCkgfHwgaXNMaW5lVGVybWluYXRvciht
X2N1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiVW5leHBl
Y3RlZCBFT0YiOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0K
QEAgLTExNDUsMTAgKzExNTEsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+OjpwYXJz
ZU11bHRpbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFVOTElLRUxZ
KG1fY3VycmVudCA9PSAtMSkpCisgICAgICAgIGlmIChhdEVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0PFQ+
KG1fY3VycmVudCkpKSB7CisgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkp
IHsKICAgICAgICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKICAgICAgICAgICAgIG1fdGVy
bWluYXRvciA9IHRydWU7CiAgICAgICAgIH0gZWxzZQpAQCAtMTE3NywyMCArMTE4MywyMCBAQCBK
U1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4KEpTVG9rZW5EYXRhKiB0CiAgICAgbV90ZXJtaW5hdG9y
ID0gZmFsc2U7CiAKIHN0YXJ0OgotICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gLTEgJiYgaXNXaGl0
ZVNwYWNlKHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkpKQorICAgIHdoaWxlIChpc1doaXRlU3Bh
Y2UobV9jdXJyZW50KSkKICAgICAgICAgc2hpZnQoKTsKIAotICAgIGludCBzdGFydE9mZnNldCA9
IGN1cnJlbnRPZmZzZXQoKTsKLQotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gLTEpKQor
ICAgIGlmIChhdEVuZCgpKQogICAgICAgICByZXR1cm4gRU9GVE9LOworICAgIAorICAgIHRva2Vu
SW5mby0+c3RhcnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CiAKICAgICBDaGFyYWN0ZXJUeXBl
IHR5cGU7Ci0gICAgaWYgKExJS0VMWShpc0xhdGluMShzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQp
KSkpCisgICAgaWYgKExJS0VMWShpc0xhdGluMShtX2N1cnJlbnQpKSkKICAgICAgICAgdHlwZSA9
IHN0YXRpY19jYXN0PENoYXJhY3RlclR5cGU+KHR5cGVzT2ZMYXRpbjFDaGFyYWN0ZXJzW21fY3Vy
cmVudF0pOwogICAgIGVsc2UgaWYgKGlzTm9uTGF0aW4xSWRlbnRTdGFydChtX2N1cnJlbnQpKQog
ICAgICAgICB0eXBlID0gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OwotICAgIGVsc2UgaWYgKGlz
TGluZVRlcm1pbmF0b3Ioc3RhdGljX2Nhc3Q8VD4obV9jdXJyZW50KSkpCisgICAgZWxzZSBpZiAo
aXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKQogICAgICAgICB0eXBlID0gQ2hhcmFjdGVyTGlu
ZVRlcm1pbmF0b3I7CiAgICAgZWxzZQogICAgICAgICB0eXBlID0gQ2hhcmFjdGVySW52YWxpZDsK
QEAgLTE0NzUsNyArMTQ4MSw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBObyBpZGVudGlmaWVycyBhbGxvd2VkIGRpcmVjdGx5IGFmdGVyIG51
bWVyaWMgbGl0ZXJhbCwgZS5nLiAiM2luIiBpcyBiYWQuCi0gICAgICAgIGlmIChVTkxJS0VMWSht
X2N1cnJlbnQgIT0gLTEgJiYgaXNJZGVudFN0YXJ0KHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkp
KSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoaXNJZGVudFN0YXJ0KG1fY3VycmVudCkpKSB7CiAg
ICAgICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9ICJBdCBsZWFzdCBvbmUgZGlnaXQgbXVzdCBv
Y2N1ciBhZnRlciBhIGRlY2ltYWwgcG9pbnQiOwogICAgICAgICAgICAgZ290byByZXR1cm5FcnJv
cjsKICAgICAgICAgfQpAQCAtMTQ5Myw3ICsxNDk5LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQ
b2ludDoKICAgICAgICAgdG9rZW4gPSBTVFJJTkc7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OgotICAgICAgICBBU1NFUlQoaXNJZGVudFN0YXJ0KHN0
YXRpY19jYXN0PFQ+KG1fY3VycmVudCkpKTsKKyAgICAgICAgQVNTRVJUKGlzSWRlbnRTdGFydCht
X2N1cnJlbnQpKTsKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGludG8gQ2hhcmFjdGVyQmFja1Ns
YXNoLgogICAgIGNhc2UgQ2hhcmFjdGVyQmFja1NsYXNoOgogICAgICAgICBpZiAobGV4ZXJGbGFn
cyAmIExleGV4RmxhZ3NEb250QnVpbGRLZXl3b3JkcykKQEAgLTE1MDIsMTMgKzE1MDgsMTMgQEAg
aW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVu
dGlmaWVyPHRydWU+KHRva2VuRGF0YSwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ2hhcmFjdGVyTGluZVRlcm1pbmF0b3I6Ci0gICAgICAgIEFTU0VS
VChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkpKTsKKyAgICAgICAg
QVNTRVJUKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSk7CiAgICAgICAgIHNoaWZ0TGluZVRl
cm1pbmF0b3IoKTsKICAgICAgICAgbV9hdExpbmVTdGFydCA9IHRydWU7CiAgICAgICAgIG1fdGVy
bWluYXRvciA9IHRydWU7CiAgICAgICAgIGdvdG8gc3RhcnQ7CiAgICAgY2FzZSBDaGFyYWN0ZXJJ
bnZhbGlkOgotICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IGdldEludmFsaWRDaGFyTWVzc2Fn
ZSgpOworICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IGludmFsaWRDaGFyYWN0ZXJNZXNzYWdl
KCk7CiAgICAgICAgIGdvdG8gcmV0dXJuRXJyb3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNTIwLDggKzE1MjYsOCBAQCBpbk51bWJlckFmdGVyRGVj
aW1hbFBvaW50OgogICAgIGdvdG8gcmV0dXJuVG9rZW47CiAKIGluU2luZ2xlTGluZUNvbW1lbnQ6
Ci0gICAgd2hpbGUgKCFpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkp
KSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gLTEpKQorICAgIHdoaWxlICgh
aXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSB7CisgICAgICAgIGlmIChhdEVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIEVPRlRPSzsKICAgICAgICAgc2hpZnQoKTsKICAgICB9CkBAIC0xNTM2
LDcgKzE1NDIsNiBAQCBpblNpbmdsZUxpbmVDb21tZW50OgogCiByZXR1cm5Ub2tlbjoKICAgICB0
b2tlbkluZm8tPmxpbmUgPSBtX2xpbmVOdW1iZXI7Ci0gICAgdG9rZW5JbmZvLT5zdGFydE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0OwogICAgIHRva2VuSW5mby0+ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNl
dCgpOwogICAgIG1fbGFzdFRva2VuID0gdG9rZW47CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMTU0
NCw3ICsxNTQ5LDYgQEAgcmV0dXJuVG9rZW46CiByZXR1cm5FcnJvcjoKICAgICBtX2Vycm9yID0g
dHJ1ZTsKICAgICB0b2tlbkluZm8tPmxpbmUgPSBtX2xpbmVOdW1iZXI7Ci0gICAgdG9rZW5JbmZv
LT5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OwogICAgIHRva2VuSW5mby0+ZW5kT2Zmc2V0ID0g
Y3VycmVudE9mZnNldCgpOwogICAgIHJldHVybiBFUlJPUlRPSzsKIH0KQEAgLTE1NjUsMjYgKzE1
NjksMjYgQEAgYm9vbCBMZXhlcjxUPjo6c2NhblJlZ0V4cChjb25zdCBJZGVudGlmaQogICAgIH0K
IAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBjdXJyZW50ID0gbV9jdXJyZW50Owot
Ci0gICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0PFQ+KGN1cnJlbnQpKSB8
fCBjdXJyZW50ID09IC0xKSB7CisgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVu
dCkgfHwgYXRFbmQoKSkgewogICAgICAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBUIHByZXYgPSBtX2N1
cnJlbnQ7CisgICAgICAgIAogICAgICAgICBzaGlmdCgpOwogCi0gICAgICAgIGlmIChjdXJyZW50
ID09ICcvJyAmJiAhbGFzdFdhc0VzY2FwZSAmJiAhaW5CcmFja2V0cykKKyAgICAgICAgaWYgKHBy
ZXYgPT0gJy8nICYmICFsYXN0V2FzRXNjYXBlICYmICFpbkJyYWNrZXRzKQogICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgcmVjb3JkMTYoY3VycmVudCk7CisgICAgICAgIHJlY29yZDE2KHBy
ZXYpOwogCiAgICAgICAgIGlmIChsYXN0V2FzRXNjYXBlKSB7CiAgICAgICAgICAgICBsYXN0V2Fz
RXNjYXBlID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN3aXRjaCAoY3VycmVudCkgeworICAgICAgICBzd2l0Y2ggKHByZXYpIHsKICAgICAgICAg
Y2FzZSAnWyc6CiAgICAgICAgICAgICBpbkJyYWNrZXRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTYwMCw3ICsxNjA0LDcgQEAgYm9vbCBMZXhlcjxUPjo6c2NhblJlZ0V4cChjb25z
dCBJZGVudGlmaQogICAgIHBhdHRlcm4gPSBtYWtlSWRlbnRpZmllcihtX2J1ZmZlcjE2LmRhdGEo
KSwgbV9idWZmZXIxNi5zaXplKCkpOwogICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwogCi0gICAg
d2hpbGUgKG1fY3VycmVudCAhPSAtMSAmJiBpc0lkZW50UGFydChzdGF0aWNfY2FzdDxUPihtX2N1
cnJlbnQpKSkgeworICAgIHdoaWxlIChpc0lkZW50UGFydChtX2N1cnJlbnQpKSB7CiAgICAgICAg
IHJlY29yZDE2KG1fY3VycmVudCk7CiAgICAgICAgIHNoaWZ0KCk7CiAgICAgfQpAQCAtMTYxOCwx
NCArMTYyMiwxNCBAQCBib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKICAgICBib29sIGluQnJh
Y2tldHMgPSBmYWxzZTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBjdXJyZW50
ID0gbV9jdXJyZW50OwotCi0gICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19jYXN0
PFQ+KGN1cnJlbnQpKSB8fCBjdXJyZW50ID09IC0xKQorICAgICAgICBpZiAoaXNMaW5lVGVybWlu
YXRvcihtX2N1cnJlbnQpIHx8IGF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICAgICAgVCBwcmV2ID0gbV9jdXJyZW50OworICAgICAgICAKICAgICAgICAgc2hpZnQoKTsK
IAotICAgICAgICBpZiAoY3VycmVudCA9PSAnLycgJiYgIWxhc3RXYXNFc2NhcGUgJiYgIWluQnJh
Y2tldHMpCisgICAgICAgIGlmIChwcmV2ID09ICcvJyAmJiAhbGFzdFdhc0VzY2FwZSAmJiAhaW5C
cmFja2V0cykKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChsYXN0V2FzRXNjYXBl
KSB7CkBAIC0xNjMzLDcgKzE2MzcsNyBAQCBib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoIChjdXJyZW50
KSB7CisgICAgICAgIHN3aXRjaCAocHJldikgewogICAgICAgICBjYXNlICdbJzoKICAgICAgICAg
ICAgIGluQnJhY2tldHMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjQ2LDcgKzE2
NTAsNyBAQCBib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gLTEgJiYgaXNJZGVudFBhcnQoc3RhdGljX2Nhc3Q8VD4o
bV9jdXJyZW50KSkpCisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCiAgICAgICAg
IHNoaWZ0KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0xleGVyLmgJKHJldmlzaW9uIDExNDgzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBI
ZXJjemVnICh6aGVyY3plZ0BpbmYudS1zemVnZWQuaHUpCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTY3LDgg
KzY3LDYgQEAgZW51bSBMZXhlckZsYWdzIHsKICAgICBMZXhleEZsYWdzRG9udEJ1aWxkS2V5d29y
ZHMgPSA0CiB9OwogCi1jbGFzcyBSZWdFeHA7Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xh
c3MgTGV4ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExleGVyKTsKQEAgLTExMCwxMCAr
MTA4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlID0gbV9jb2RlU3RhcnQgKyBvZmZzZXQ7
CiAgICAgICAgIG1fYnVmZmVyOC5yZXNpemUoMCk7CiAgICAgICAgIG1fYnVmZmVyMTYucmVzaXpl
KDApOwotICAgICAgICAvLyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlCi0gICAgICAg
IG1fY3VycmVudCA9IC0xOwogICAgICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkp
CiAgICAgICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2RlOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2N1cnJlbnQgPSAwOwogICAgIH0KICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxp
bmUpCiAgICAgewpAQCAtMTMzLDExICsxMzEsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVu
ZDE2KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSB7IG1fYnVmZmVyMTYu
YXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
aGlmdCgpOwotICAgIEFMV0FZU19JTkxJTkUgaW50IHBlZWsoaW50IG9mZnNldCk7Ci0gICAgaW50
IGdldFVuaWNvZGVDaGFyYWN0ZXIoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgYXRFbmQoKSBj
b25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIFQgcGVlayhpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBp
bnQgcGFyc2VGb3VyRGlnaXRVbmljb2RlSGV4KCk7CiAgICAgdm9pZCBzaGlmdExpbmVUZXJtaW5h
dG9yKCk7CiAKLSAgICBVU3RyaW5nIGdldEludmFsaWRDaGFyTWVzc2FnZSgpOworICAgIFVTdHJp
bmcgaW52YWxpZENoYXJhY3Rlck1lc3NhZ2UoKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIGludCBj
dXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T2Zmc2V0RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hh
ck9mZnNldCkgeyBzZXRPZmZzZXQoY2hhck9mZnNldCAtIG1fY29kZVN0YXJ0KTsgfQpAQCAtMTYy
LDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhcnNlTnVtYmVy
QWZ0ZXJEZWNpbWFsUG9pbnQoKTsKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VOdW1iZXJB
ZnRlckV4cG9uZW50SW5kaWNhdG9yKCk7CiAgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlTXVs
dGlsaW5lQ29tbWVudCgpOwotCisgICAgCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbml0aWFs
UmVhZEJ1ZmZlckNhcGFjaXR5ID0gMzI7CiAKICAgICBpbnQgbV9saW5lTnVtYmVyOwpAQCAtMTgy
LDggKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Vycm9yOwogICAgIFVTdHJpbmcgbV9s
ZXhFcnJvck1lc3NhZ2U7CiAKLSAgICAvLyBjdXJyZW50IGFuZCBmb2xsb3dpbmcgdW5pY29kZSBj
aGFyYWN0ZXJzIChpbnQgdG8gYWxsb3cgZm9yIC0xIGZvciBlbmQtb2YtZmlsZSBtYXJrZXIpCi0g
ICAgaW50IG1fY3VycmVudDsKKyAgICBUIG1fY3VycmVudDsKIAogICAgIElkZW50aWZpZXJBcmVu
YSogbV9hcmVuYTsKIApAQCAtMjg0LDcgKzI4Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI8VD46OmxleEUKICAgICAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CiAgICAgICAgIG1f
Y3VycmVudCA9ICpwdHI7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY3VycmVudCA9IC0xOworICAg
ICAgICBtX2N1cnJlbnQgPSAwOwogCiAgICAgbV9jb2RlID0gcHRyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138227</attachid>
            <date>2012-04-21 01:58:27 -0700</date>
            <delta_ts>2012-04-21 10:59:01 -0700</delta_ts>
            <desc>Patch with fix for Qt build issue</desc>
            <filename>bug-84523-20120421015826.patch</filename>
            <type>text/plain</type>
            <size>21794</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDEyLTA0LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgSmF2YVNjcmlwdCBsZXhlciB0byB1c2UgMCBpbnN0ZWFkIG9mIC0xIGZvciBzZW50aW5l
bCwgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcHV0IGNoYXJhY3RlcnMgaW50byBpbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDUyMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb2ZpbGVzIHNob3dl
ZCB0aGF0IGNoZWNrcyBhZ2FpbnN0IC0xIHdlcmUgY29zdGx5LCBhbmQgSSBzYXcgdGhleSBjb3Vs
ZCBiZSBlbGltaW5hdGVkLgorICAgICAgICBTdHJlYW1saW5lZCB0aGlzIGNvZGUgdG8gdXNlIHN0
YW5kYXJkIGNoYXJhY3RlciB0eXBlcyBhbmQgMCByYXRoZXIgdGhhbiAtMS4gT25lIGJlbmVmaXQK
KyAgICAgICAgb2YgdGhpcyBpcyB0aGF0IHRoZXJlJ3Mgbm8gd2lkZW5pbmcgYW5kIG5hcnJvd2lu
Zy4gQW5vdGhlciBpcyB0aGF0IHRoZXJlIGFyZSBtYW55IGNhc2VzCisgICAgICAgIHdoZXJlIHdl
IGFscmVhZHkgaGF2ZSB0aGUgY29ycmVjdCBiZWhhdmlvciBmb3IgMCwgc28gY2FuIGVsaW1pbmF0
ZSBhIGJyYW5jaCB0aGF0IHdhcworICAgICAgICB1c2VkIHRvIHRlc3QgZm9yIC0xIGJlZm9yZS4g
QWxzbyBlbGltaW5hdGVzIHR5cGVjYXN0cyBpbiB0aGUgY29kZS4KKworICAgICAgICAqIHBhcnNl
ci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjppbnZhbGlkQ2hhcmFjdGVyTWVzc2Fn
ZSk6IFJlbW92ZWQgImdldCIgZnJvbSBuYW1lIHRvIG1hdGNoIFdlYktpdCBuYW1pbmcgY29udmVu
dGlvbnMuCisgICAgICAgIFVwZGF0ZWQgdXNlIG9mIFN0cmluZzo6Zm9ybWF0IHNpbmNlIG1fY3Vy
cmVudCBpcyBub3cgYSBjaGFyYWN0ZXIgdHlwZSwgbm90IGFuIHVuc2lnbmVkLgorICAgICAgICAo
SlNDOjpMZXhlcjo6c2V0Q29kZSk6IFVzZSAwIHJhdGhlciB0aGFuIC0xIHdoZW4gcGFzdCB0aGUg
ZW5kLgorICAgICAgICAoSlNDOjpMZXhlcjo6c2hpZnQpOiBEaXR0by4gQWxzbyBzcHJ1Y2VkIHVw
IHRoZSBjb21tZW50IGEgYml0LgorICAgICAgICAoSlNDOjpMZXhlcjo6YXRFbmQpOiBBZGRlZC4g
TmV3IGZ1bmN0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBhbiBhY3R1YWwgMCBjaGFyYWN0ZXIgZnJv
bSB0aGUgZW5kCisgICAgICAgIG9mIHRoZSBjb2RlLiBUaGlzIGNhbiBiZSB1c2VkIHBsYWNlcyB3
ZSB1c2VkIHRvIGNoZWVjayBmb3IgLTEuCisgICAgICAgIChKU0M6OkxleGVyOjpwZWVrKTogVXBk
YXRlZCB0byB1c2UgLTEgaW5zdGVhZCBvZiAwLiBSZW1vdmVkIG1lYW5pbmdsZXNzIGNvbW1lbnQu
CisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZUZvdXJEaWdpdFVuaWNvZGVIZXgpOiBSZW5hbWVk
IGZyb20gZ2V0VW5pY29kZUNoYXJhY3RlciB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQKKyAgICAg
ICAgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIENoYW5nZWQgdG8gdXNlIGNoYXJhY3RlciB0eXBl
cyBpbnN0ZWFkIG9mIGludC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0
b3IpOiBSZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlIGNhc3RzLiBDaGFuZ2VkIGxvY2FsIHZhcmlh
YmxlIHRoYXQKKyAgICAgICAgaGFkIGEgZGF0YS1tZW1iZXItc3R5bGUgbmFtZS4KKyAgICAgICAg
KEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllcik6IFJlbW92ZWQgbm93LXVubmVlZGVkIGV4cGxp
Y2l0IGNoZWNrcyBmb3IgLTEsIHNpbmNlIHRoZSBpc0lkZW50UGFydAorICAgICAgICBmdW5jdGlv
biBhbHJlYWR5IHJldHVybnMgZmFsc2UgZm9yIHRoZSAwIGNoYXJhY3Rlci4gVXBkYXRlZCB0eXBl
cyBpbiBhIGNvdXBsZSBvdGhlciBwbGFjZXMuIFVzZWQKKyAgICAgICAgdGhlIGF0RW5kIGZ1bmN0
aW9uIHdoZXJlIG5lZWRlZC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllclNs
b3dDYXNlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZVN0cmluZ1Nsb3dDYXNlKTog
RGl0dG8uCisgICAgICAgIChKU0M6OkxleGVyOjpwYXJzZU11bHRpbGluZUNvbW1lbnQpOiBEaXR0
by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OmxleCk6IE1vcmUgb2YgdGhlIHNhbWUuIEFsc28gY2hh
bmdlZCBjb2RlIHRvIHNldCB0aGUgc3RhcnRPZmZzZXQgZGlyZWN0bHkgaW4KKyAgICAgICAgdGhl
IHRva2VuSW5mbyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBmaXJz
dCwgc2F2aW5nIHNvbWUgbWVtb3J5IGFjY2Vzcy4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNjYW5S
ZWdFeHApOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNraXBSZWdFeHApOiBEaXR0by4K
KworICAgICAgICAqIHBhcnNlci9MZXhlci5oOiBSZW1vdmVkIGFuIHVubmVlZGVkIGZvcndhcmQg
ZGVjbGFyYXRpb24gb2YgdGhlIFJlZ0V4cCBjbGFzcy4gQ2hhbmdlZCByZXR1cm4gdHlwZQorICAg
ICAgICBvZiB0aGUgcGVlayBmdW5jdGlvbiwgYW5kIHRoZSB0eXBlIG9mIG1fY3VycmVudCBmcm9t
IGludCB0byBhIGNoYXJhY3RlciB0eXBlLiBSZW5hbWVkCisgICAgICAgIGdldEludmFsaWRDaGFy
TWVzc2FnZSB0byBpbnZhbGlkQ2hhcmFjdGVyTWVzc2FnZSBhbmQgbWFkZSBpdCBjb25zdC4gUmVu
YW1lZCBnZXRVbmljb2RlQ2hhcmFjdGVyIHRvCisgICAgICAgIHBhcnNlRm91ckRpZ2l0VW5pY29k
ZUhleC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldE9mZnNldCk6IFVzZWQgMCBpbnN0ZWFkIG9m
IC0xIGFuZCByZW1vdmVkIGFuIG92ZXJ6ZWFsb3VzIGF0dGVtcHQgdG8gb3B0aW1pemUuIAorICAg
ICAgICAoSlNDOjpMZXhlcjo6bGV4RXhwZWN0SWRlbnRpZmllcik6IFVzZWQgMCBpbnN0ZWFkIG9m
IC0xLgorCiAyMDEyLTA0LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgREZHIHNob3VsZCBvcHRpbWl6ZSBpbnQ4IGFuZCBpbnQxNiBhcnJheXMgb24gQVJNdjcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxMTQ4
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2Fy
aWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
KHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlh
cyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBMZXhlcjxUPjo6
fkxleGVyKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1VU3RyaW5nIExleGVyPFQ+Ojpn
ZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQorVVN0cmluZyBMZXhlcjxUPjo6aW52YWxpZENoYXJhY3Rl
ck1lc3NhZ2UoKSBjb25zdAogewogICAgIHN3aXRjaCAobV9jdXJyZW50KSB7CiAgICAgY2FzZSAw
OgpAQCAtMzg2LDcgKzM4Niw3IEBAIFVTdHJpbmcgTGV4ZXI8VD46OmdldEludmFsaWRDaGFyTWVz
c2FnZSgKICAgICBjYXNlIDk2OgogICAgICAgICByZXR1cm4gIkludmFsaWQgY2hhcmFjdGVyOiAn
YCciOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiSW52YWxp
ZCBjaGFyYWN0ZXIgJ1xcdSUwNHUnIiwgbV9jdXJyZW50KS5pbXBsKCk7CisgICAgICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdSUwNHUnIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fY3VycmVudCkpLmltcGwoKTsKICAgICB9CiB9CiAKQEAgLTQyNSw3ICs0
MjUsNyBAQCB2b2lkIExleGVyPFQ+OjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmCiAgICAgaWYg
KExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQogICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2Rl
OwogICAgIGVsc2UKLSAgICAgICAgbV9jdXJyZW50ID0gLTE7CisgICAgICAgIG1fY3VycmVudCA9
IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRPZmZzZXQoKSA9PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSk7
CiB9CiAKQEAgLTQzOSwyOSArNDM5LDM0IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQ+IEFM
V0FZU19JTkxJTkUKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSB2b2lkIExl
eGVyPFQ+OjpzaGlmdCgpCiB7Ci0gICAgLy8gRmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5j
ZQotICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOwotICAgIG1fY3VycmVudCA9IC0xOwotICAg
IG1fY29kZSsrOworICAgIC8vIEF0IG9uZSBwb2ludCB0aW1pbmcgc2hvd2VkIHRoYXQgc2V0dGlu
ZyBtX2N1cnJlbnQgdG8gMCB1bmNvbmRpdGlvbmFsbHkgd2FzIGZhc3RlciB0aGFuIGFuIGlmLWVs
c2Ugc2VxdWVuY2UuCisgICAgbV9jdXJyZW50ID0gMDsKKyAgICArK21fY29kZTsKICAgICBpZiAo
TElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI8VD46
OnBlZWsoaW50IG9mZnNldCkKK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6YXRFbmQoKSBj
b25zdAoreworICAgIEFTU0VSVCghbV9jdXJyZW50IHx8IG1fY29kZSA8IG1fY29kZUVuZCk7Cisg
ICAgcmV0dXJuIFVOTElLRUxZKFVOTElLRUxZKCFtX2N1cnJlbnQpICYmIG1fY29kZSA9PSBtX2Nv
ZGVFbmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgVCBMZXhl
cjxUPjo6cGVlayhpbnQgb2Zmc2V0KSBjb25zdAogewotICAgIC8vIE9ubHkgdXNlIGlmIG5lY2Vz
c2FyeQogICAgIEFTU0VSVChvZmZzZXQgPiAwICYmIG9mZnNldCA8IDUpOwogICAgIGNvbnN0IFQq
IGNvZGUgPSBtX2NvZGUgKyBvZmZzZXQ7Ci0gICAgcmV0dXJuIChjb2RlIDwgbV9jb2RlRW5kKSA/
ICpjb2RlIDogLTE7CisgICAgcmV0dXJuIChjb2RlIDwgbV9jb2RlRW5kKSA/ICpjb2RlIDogMDsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFy
YWN0ZXIoKQoraW50IExleGVyPFQ+OjpwYXJzZUZvdXJEaWdpdFVuaWNvZGVIZXgoKQogewotICAg
IGludCBjaGFyMSA9IHBlZWsoMSk7Ci0gICAgaW50IGNoYXIyID0gcGVlaygyKTsKLSAgICBpbnQg
Y2hhcjMgPSBwZWVrKDMpOworICAgIFQgY2hhcjEgPSBwZWVrKDEpOworICAgIFQgY2hhcjIgPSBw
ZWVrKDIpOworICAgIFQgY2hhcjMgPSBwZWVrKDMpOwogCiAgICAgaWYgKFVOTElLRUxZKCFpc0FT
Q0lJSGV4RGlnaXQobV9jdXJyZW50KSB8fCAhaXNBU0NJSUhleERpZ2l0KGNoYXIxKSB8fCAhaXNB
U0NJSUhleERpZ2l0KGNoYXIyKSB8fCAhaXNBU0NJSUhleERpZ2l0KGNoYXIzKSkpCiAgICAgICAg
IHJldHVybiAtMTsKQEAgLTQ3NywxMyArNDgyLDEzIEBAIGludCBMZXhlcjxUPjo6Z2V0VW5pY29k
ZUNoYXJhY3RlcigpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQgTGV4ZXI8VD46OnNoaWZ0
TGluZVRlcm1pbmF0b3IoKQogewotICAgIEFTU0VSVChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19j
YXN0PFQ+KG1fY3VycmVudCkpKTsKKyAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJl
bnQpKTsKIAotICAgIGludCBtX3ByZXYgPSBtX2N1cnJlbnQ7CisgICAgVCBwcmV2ID0gbV9jdXJy
ZW50OwogICAgIHNoaWZ0KCk7CiAKICAgICAvLyBBbGxvdyBib3RoIENSTEYgYW5kIExGQ1IuCi0g
ICAgaWYgKG1fcHJldiArIG1fY3VycmVudCA9PSAnXG4nICsgJ1xyJykKKyAgICBpZiAocHJldiAr
IG1fY3VycmVudCA9PSAnXG4nICsgJ1xyJykKICAgICAgICAgc2hpZnQoKTsKIAogICAgICsrbV9s
aW5lTnVtYmVyOwpAQCAtNjMzLDcgKzYzOCw3IEBAIGlubGluZSB2b2lkIExleGVyPFQ+OjpyZWNv
cmQxNihpbnQgYykKIH0KIAogdGVtcGxhdGUgPD4KLSAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRD
cmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFyPjo6
cGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleGVyRmxh
Z3MsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZp
ZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8TENoYXI+OjpwYXJzZUlkZW50aWZp
ZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJp
Y3RNb2RlKQogewogICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcgPSBtX2NvZGVFbmQgLSBt
X2NvZGU7CiAgICAgaWYgKChyZW1haW5pbmcgPj0gbWF4VG9rZW5MZW5ndGgpICYmICEobGV4ZXJG
bGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewpAQCAtNjQ2LDcgKzY1MSw3
IEBAIHRlbXBsYXRlIDw+CiAKICAgICBjb25zdCBMQ2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3Vy
cmVudENoYXJhY3RlcigpOwogICAgIAotICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gLTEgJiYgaXNJ
ZGVudFBhcnQoc3RhdGljX2Nhc3Q8TENoYXI+KG1fY3VycmVudCkpKQorICAgIHdoaWxlIChpc0lk
ZW50UGFydChtX2N1cnJlbnQpKQogICAgICAgICBzaGlmdCgpOwogICAgIAogICAgIGlmIChVTkxJ
S0VMWShtX2N1cnJlbnQgPT0gJ1xcJykpIHsKQEAgLTY5MSwxMSArNjk2LDEyIEBAIHRlbXBsYXRl
IDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICAgICAgICAgIHJldHVybiBrZXl3
b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3RyaWN0TW9kZSA/IElERU5UIDoga2V5d29y
ZDsKICAgICAgICAgfQogICAgIH0KKwogICAgIGNvbnN0IFVDaGFyKiBpZGVudGlmaWVyU3RhcnQg
PSBjdXJyZW50Q2hhcmFjdGVyKCk7CiAKICAgICBVQ2hhciBvckFsbENoYXJzID0gMDsKICAgICAK
LSAgICB3aGlsZSAobV9jdXJyZW50ICE9IC0xICYmIGlzSWRlbnRQYXJ0KHN0YXRpY19jYXN0PFVD
aGFyPihtX2N1cnJlbnQpKSkgeworICAgIHdoaWxlIChpc0lkZW50UGFydChtX2N1cnJlbnQpKSB7
CiAgICAgICAgIG9yQWxsQ2hhcnMgfD0gbV9jdXJyZW50OwogICAgICAgICBzaGlmdCgpOwogICAg
IH0KQEAgLTc0Nyw3ICs3NTMsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlm
aWVyPiBKCiAgICAgYm9vbCBidWZmZXJSZXF1aXJlZCA9IGZhbHNlOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2N1cnJlbnQgIT0gLTEgJiYgaXNJZGVudFBhcnQo
c3RhdGljX2Nhc3Q8VD4obV9jdXJyZW50KSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoaXNJZGVu
dFBhcnQobV9jdXJyZW50KSkpIHsKICAgICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQpAQCAtNzYyLDcgKzc2OCw3IEBAIHRlbXBsYXRlIDxib29sIHNo
b3VsZENyZWF0ZUlkZW50aWZpZXI+IEoKICAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCAh
PSAndScpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBzaGlmdCgpOwot
ICAgICAgICBpbnQgY2hhcmFjdGVyID0gZ2V0VW5pY29kZUNoYXJhY3RlcigpOworICAgICAgICBp
bnQgY2hhcmFjdGVyID0gcGFyc2VGb3VyRGlnaXRVbmljb2RlSGV4KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShjaGFyYWN0ZXIgPT0gLTEpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwog
ICAgICAgICBVQ2hhciB1Y2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3Rlcik7
CkBAIC04MDcsMTggKzgxMywyOCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlm
aWVyPiBKCiAgICAgcmV0dXJuIElERU5UOwogfQogCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IGNoYXJhY3RlclJlcXVpcmVzUGFyc2VTdHJpbmdTbG93Q2FzZShMQ2hhciBjaGFyYWN0ZXIpCit7
CisgICAgcmV0dXJuIGNoYXJhY3RlciA8IDB4RTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUg
Ym9vbCBjaGFyYWN0ZXJSZXF1aXJlc1BhcnNlU3RyaW5nU2xvd0Nhc2UoVUNoYXIgY2hhcmFjdGVy
KQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPCAweEUgfHwgY2hhcmFjdGVyID4gMHhGRjsKK30K
KwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmlu
Z3M+IEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VTdHJpbmcoSlNUb2tlbkRhdGEq
IHRva2VuRGF0YSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAgIGludCBzdGFydGluZ09mZnNldCA9
IGN1cnJlbnRPZmZzZXQoKTsKICAgICBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyID0gbGluZU51bWJl
cigpOwotICAgIGludCBzdHJpbmdRdW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKKyAgICBUIHN0
cmluZ1F1b3RlQ2hhcmFjdGVyID0gbV9jdXJyZW50OwogICAgIHNoaWZ0KCk7CiAKICAgICBjb25z
dCBUKiBzdHJpbmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKIAogICAgIHdoaWxlIChtX2N1
cnJlbnQgIT0gc3RyaW5nUXVvdGVDaGFyYWN0ZXIpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCht
X2N1cnJlbnQgPT0gJ1xcJykpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnQgPT0g
J1xcJykpIHsKICAgICAgICAgICAgIGlmIChzdHJpbmdTdGFydCAhPSBjdXJyZW50Q2hhcmFjdGVy
KCkgJiYgc2hvdWxkQnVpbGRTdHJpbmdzKQogICAgICAgICAgICAgICAgIGFwcGVuZDgoc3RyaW5n
U3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0cmluZ1N0YXJ0KTsKICAgICAgICAgICAgIHNo
aWZ0KCk7CkBAIC04MzgsNyArODU0LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJp
bmdzPiBBTFdBWQogICAgICAgICAgICAgICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9ICJcXHgg
Y2FuIG9ubHkgYmUgZm9sbG93ZWQgYnkgYSBoZXggY2hhcmFjdGVyIHNlcXVlbmNlIjsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpbnQgcHJldiA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBUIHByZXYgPSBt
X2N1cnJlbnQ7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkQnVpbGRTdHJpbmdzKQogICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KGNvbnZlcnRI
ZXgocHJldiwgbV9jdXJyZW50KSk7CkBAIC04NTMsNyArODY5LDcgQEAgdGVtcGxhdGUgPGJvb2wg
c2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoVU5MSUtFTFkoKChtX2N1cnJlbnQgPiAweGZmKSB8fCAobV9jdXJy
ZW50IDwgMHhlKSkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShjaGFyYWN0ZXJSZXF1aXJlc1Bh
cnNlU3RyaW5nU2xvd0Nhc2UobV9jdXJyZW50KSkpIHsKICAgICAgICAgICAgIHNldE9mZnNldChz
dGFydGluZ09mZnNldCk7CiAgICAgICAgICAgICBzZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGluZU51
bWJlcik7CiAgICAgICAgICAgICBtX2J1ZmZlcjgucmVzaXplKDApOwpAQCAtODc3LDcgKzg5Myw3
IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVkKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBib29sIExleGVy
PFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIGJvb2wgc3Ry
aWN0TW9kZSkKIHsKLSAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIgPSBtX2N1cnJlbnQ7Cisg
ICAgVCBzdHJpbmdRdW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKICAgICBzaGlmdCgpOwogCiAg
ICAgY29uc3QgVCogc3RyaW5nU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CkBAIC04OTUsNyAr
OTExLDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBib29sIAogICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgIHJl
Y29yZDE2KGVzY2FwZSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihzdGF0aWNfY2FzdDxUPihtX2N1cnJl
bnQpKSkpCisgICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKGlzTGluZVRlcm1pbmF0b3Io
bV9jdXJyZW50KSkpCiAgICAgICAgICAgICAgICAgc2hpZnRMaW5lVGVybWluYXRvcigpOwogICAg
ICAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50ID09ICd4JykgewogICAgICAgICAgICAgICAgIHNo
aWZ0KCk7CkBAIC05MDMsMTQgKzkxOSwxNCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0
cmluZ3M+IGJvb2wgCiAgICAgICAgICAgICAgICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gIlxc
eCBjYW4gb25seSBiZSBmb2xsb3dlZCBieSBhIGhleCBjaGFyYWN0ZXIgc2VxdWVuY2UiOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGludCBwcmV2ID0gbV9jdXJyZW50OworICAgICAgICAgICAgICAgIFQgcHJldiA9
IG1fY3VycmVudDsKICAgICAgICAgICAgICAgICBzaGlmdCgpOwogICAgICAgICAgICAgICAgIGlm
IChzaG91bGRCdWlsZFN0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGNvbnZl
cnRIZXgocHJldiwgbV9jdXJyZW50KSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICd1JykgewogICAgICAgICAgICAgICAgIHNo
aWZ0KCk7Ci0gICAgICAgICAgICAgICAgaW50IGNoYXJhY3RlciA9IGdldFVuaWNvZGVDaGFyYWN0
ZXIoKTsKKyAgICAgICAgICAgICAgICBpbnQgY2hhcmFjdGVyID0gcGFyc2VGb3VyRGlnaXRVbmlj
b2RlSGV4KCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciAhPSAtMSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjb3JkMTYoY2hhcmFjdGVyKTsKQEAgLTkzMywxMSArOTQ5LDExIEBAIHRlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gYm9vbCAKICAgICAgICAgICAgICAgICAgICAgcmVj
b3JkMTYoMCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3RNb2RlICYmIGlzQVNDSUlP
Y3RhbERpZ2l0KG1fY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAvLyBPY3RhbCBjaGFyYWN0
ZXIgc2VxdWVuY2VzCi0gICAgICAgICAgICAgICAgaW50IGNoYXJhY3RlcjEgPSBtX2N1cnJlbnQ7
CisgICAgICAgICAgICAgICAgVCBjaGFyYWN0ZXIxID0gbV9jdXJyZW50OwogICAgICAgICAgICAg
ICAgIHNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlPY3RhbERpZ2l0KG1fY3Vy
cmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVHdvIG9jdGFsIGNoYXJhY3RlcnMKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGNoYXJhY3RlcjIgPSBtX2N1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgICAgIFQgY2hhcmFjdGVyMiA9IG1fY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAg
c2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlcjEgPj0gJzAnICYmIGNo
YXJhY3RlcjEgPD0gJzMnICYmIGlzQVNDSUlPY3RhbERpZ2l0KG1fY3VycmVudCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCkBAIC05NTEsNyArOTY3
LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBib29sIAogICAgICAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVjb3JkMTYoY2hhcmFjdGVyMSAtICcwJyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgIT0gLTEpIHsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIWF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQog
ICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihtX2N1cnJlbnQpOwogICAgICAgICAgICAgICAg
IHNoaWZ0KCk7CkBAIC05NjQsMTEgKzk4MCwxMSBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWls
ZFN0cmluZ3M+IGJvb2wgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICAvLyBGYXN0IGNoZWNrIGZvciBjaGFyYWN0ZXJzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGhhbmRs
aW5nLgotICAgICAgICAvLyBDYXRjaGVzIC0xLCBcbiwgXHIsIDB4MjAyOCwgYW5kIDB4MjAyOSBh
cyBlZmZpY2llbnRseQorICAgICAgICAvLyBDYXRjaGVzIDAsIFxuLCBcciwgMHgyMDI4LCBhbmQg
MHgyMDI5IGFzIGVmZmljaWVudGx5CiAgICAgICAgIC8vIGFzIHBvc3NpYmxlLCBhbmQgbGV0cyB0
aHJvdWdoIGFsbCBjb21tb24gQVNDSUkgY2hhcmFjdGVycy4KICAgICAgICAgaWYgKFVOTElLRUxZ
KCgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudCkgLSAweEUpICYgMHgyMDAwKSkpIHsK
ICAgICAgICAgICAgIC8vIE5ldy1saW5lIG9yIGVuZCBvZiBpbnB1dCBpcyBub3QgYWxsb3dlZAot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAtMSkgfHwgVU5MSUtFTFkoaXNM
aW5lVGVybWluYXRvcihzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQpKSkpIHsKKyAgICAgICAgICAg
IGlmIChhdEVuZCgpIHx8IGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSkgewogICAgICAgICAg
ICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gIlVuZXhwZWN0ZWQgRU9GIjsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0xMTQ1LDEwICsxMTYxLDEwIEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VNdWx0aWwKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gLTEpKQorICAg
ICAgICBpZiAoYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
ZiAoaXNMaW5lVGVybWluYXRvcihzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQpKSkgeworICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSB7CiAgICAgICAgICAgICBzaGlmdExp
bmVUZXJtaW5hdG9yKCk7CiAgICAgICAgICAgICBtX3Rlcm1pbmF0b3IgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UKQEAgLTExNzcsMjAgKzExOTMsMjAgQEAgSlNUb2tlblR5cGUgTGV4ZXI8VD46Omxl
eChKU1Rva2VuRGF0YSogdAogICAgIG1fdGVybWluYXRvciA9IGZhbHNlOwogCiBzdGFydDoKLSAg
ICB3aGlsZSAobV9jdXJyZW50ICE9IC0xICYmIGlzV2hpdGVTcGFjZShzdGF0aWNfY2FzdDxUPiht
X2N1cnJlbnQpKSkKKyAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKG1fY3VycmVudCkpCiAgICAgICAg
IHNoaWZ0KCk7CiAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7Ci0KLSAg
ICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09IC0xKSkKKyAgICBpZiAoYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIEVPRlRPSzsKKyAgICAKKyAgICB0b2tlbkluZm8tPnN0YXJ0T2Zmc2V0ID0gY3Vy
cmVudE9mZnNldCgpOwogCiAgICAgQ2hhcmFjdGVyVHlwZSB0eXBlOwotICAgIGlmIChMSUtFTFko
aXNMYXRpbjEoc3RhdGljX2Nhc3Q8VD4obV9jdXJyZW50KSkpKQorICAgIGlmIChMSUtFTFkoaXNM
YXRpbjEobV9jdXJyZW50KSkpCiAgICAgICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJU
eXBlPih0eXBlc09mTGF0aW4xQ2hhcmFjdGVyc1ttX2N1cnJlbnRdKTsKICAgICBlbHNlIGlmIChp
c05vbkxhdGluMUlkZW50U3RhcnQobV9jdXJyZW50KSkKICAgICAgICAgdHlwZSA9IENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydDsKLSAgICBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKHN0YXRpY19j
YXN0PFQ+KG1fY3VycmVudCkpKQorICAgIGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IobV9jdXJy
ZW50KSkKICAgICAgICAgdHlwZSA9IENoYXJhY3RlckxpbmVUZXJtaW5hdG9yOwogICAgIGVsc2UK
ICAgICAgICAgdHlwZSA9IENoYXJhY3RlckludmFsaWQ7CkBAIC0xNDc1LDcgKzE0OTEsNyBAQCBp
bk51bWJlckFmdGVyRGVjaW1hbFBvaW50OgogICAgICAgICB9CiAKICAgICAgICAgLy8gTm8gaWRl
bnRpZmllcnMgYWxsb3dlZCBkaXJlY3RseSBhZnRlciBudW1lcmljIGxpdGVyYWwsIGUuZy4gIjNp
biIgaXMgYmFkLgotICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ICE9IC0xICYmIGlzSWRl
bnRTdGFydChzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQpKSkpIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGlzSWRlbnRTdGFydChtX2N1cnJlbnQpKSkgewogICAgICAgICAgICAgbV9sZXhFcnJvck1l
c3NhZ2UgPSAiQXQgbGVhc3Qgb25lIGRpZ2l0IG11c3Qgb2NjdXIgYWZ0ZXIgYSBkZWNpbWFsIHBv
aW50IjsKICAgICAgICAgICAgIGdvdG8gcmV0dXJuRXJyb3I7CiAgICAgICAgIH0KQEAgLTE0OTMs
NyArMTUwOSw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgIHRva2VuID0g
U1RSSU5HOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dDoKLSAgICAgICAgQVNTRVJUKGlzSWRlbnRTdGFydChzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQp
KSk7CisgICAgICAgIEFTU0VSVChpc0lkZW50U3RhcnQobV9jdXJyZW50KSk7CiAgICAgICAgIC8v
IEZhbGwgdGhyb3VnaCBpbnRvIENoYXJhY3RlckJhY2tTbGFzaC4KICAgICBjYXNlIENoYXJhY3Rl
ckJhY2tTbGFzaDoKICAgICAgICAgaWYgKGxleGVyRmxhZ3MgJiBMZXhleEZsYWdzRG9udEJ1aWxk
S2V5d29yZHMpCkBAIC0xNTAyLDEzICsxNTE4LDEzIEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9p
bnQ6CiAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllcjx0cnVlPih0b2tlbkRhdGEs
IGxleGVyRmxhZ3MsIHN0cmljdE1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENoYXJh
Y3RlckxpbmVUZXJtaW5hdG9yOgotICAgICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihzdGF0
aWNfY2FzdDxUPihtX2N1cnJlbnQpKSk7CisgICAgICAgIEFTU0VSVChpc0xpbmVUZXJtaW5hdG9y
KG1fY3VycmVudCkpOwogICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CiAgICAgICAgIG1f
YXRMaW5lU3RhcnQgPSB0cnVlOwogICAgICAgICBtX3Rlcm1pbmF0b3IgPSB0cnVlOwogICAgICAg
ICBnb3RvIHN0YXJ0OwogICAgIGNhc2UgQ2hhcmFjdGVySW52YWxpZDoKLSAgICAgICAgbV9sZXhF
cnJvck1lc3NhZ2UgPSBnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKTsKKyAgICAgICAgbV9sZXhFcnJv
ck1lc3NhZ2UgPSBpbnZhbGlkQ2hhcmFjdGVyTWVzc2FnZSgpOwogICAgICAgICBnb3RvIHJldHVy
bkVycm9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MTUyMCw4ICsxNTM2LDggQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICBnb3RvIHJl
dHVyblRva2VuOwogCiBpblNpbmdsZUxpbmVDb21tZW50OgotICAgIHdoaWxlICghaXNMaW5lVGVy
bWluYXRvcihzdGF0aWNfY2FzdDxUPihtX2N1cnJlbnQpKSkgewotICAgICAgICBpZiAoVU5MSUtF
TFkobV9jdXJyZW50ID09IC0xKSkKKyAgICB3aGlsZSAoIWlzTGluZVRlcm1pbmF0b3IobV9jdXJy
ZW50KSkgeworICAgICAgICBpZiAoYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBFT0ZUT0s7
CiAgICAgICAgIHNoaWZ0KCk7CiAgICAgfQpAQCAtMTUzNiw3ICsxNTUyLDYgQEAgaW5TaW5nbGVM
aW5lQ29tbWVudDoKIAogcmV0dXJuVG9rZW46CiAgICAgdG9rZW5JbmZvLT5saW5lID0gbV9saW5l
TnVtYmVyOwotICAgIHRva2VuSW5mby0+c3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKICAgICB0
b2tlbkluZm8tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICBtX2xhc3RUb2tlbiA9
IHRva2VuOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTE1NDQsNyArMTU1OSw2IEBAIHJldHVyblRv
a2VuOgogcmV0dXJuRXJyb3I6CiAgICAgbV9lcnJvciA9IHRydWU7CiAgICAgdG9rZW5JbmZvLT5s
aW5lID0gbV9saW5lTnVtYmVyOwotICAgIHRva2VuSW5mby0+c3RhcnRPZmZzZXQgPSBzdGFydE9m
ZnNldDsKICAgICB0b2tlbkluZm8tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICBy
ZXR1cm4gRVJST1JUT0s7CiB9CkBAIC0xNTY1LDI2ICsxNTc5LDI2IEBAIGJvb2wgTGV4ZXI8VD46
OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmkKICAgICB9CiAKICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICBpbnQgY3VycmVudCA9IG1fY3VycmVudDsKLQotICAgICAgICBpZiAoaXNMaW5lVGVy
bWluYXRvcihzdGF0aWNfY2FzdDxUPihjdXJyZW50KSkgfHwgY3VycmVudCA9PSAtMSkgeworICAg
ICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpIHx8IGF0RW5kKCkpIHsKICAgICAg
ICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAKKyAgICAgICAgVCBwcmV2ID0gbV9jdXJyZW50OworICAgICAgICAKICAgICAg
ICAgc2hpZnQoKTsKIAotICAgICAgICBpZiAoY3VycmVudCA9PSAnLycgJiYgIWxhc3RXYXNFc2Nh
cGUgJiYgIWluQnJhY2tldHMpCisgICAgICAgIGlmIChwcmV2ID09ICcvJyAmJiAhbGFzdFdhc0Vz
Y2FwZSAmJiAhaW5CcmFja2V0cykKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHJlY29y
ZDE2KGN1cnJlbnQpOworICAgICAgICByZWNvcmQxNihwcmV2KTsKIAogICAgICAgICBpZiAobGFz
dFdhc0VzY2FwZSkgewogICAgICAgICAgICAgbGFzdFdhc0VzY2FwZSA9IGZhbHNlOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGN1cnJlbnQpIHsK
KyAgICAgICAgc3dpdGNoIChwcmV2KSB7CiAgICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICAg
aW5CcmFja2V0cyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MDAsNyArMTYxNCw3
IEBAIGJvb2wgTGV4ZXI8VD46OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmkKICAgICBwYXR0ZXJu
ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1fYnVmZmVyMTYuc2l6ZSgpKTsK
ICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKIAotICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gLTEg
JiYgaXNJZGVudFBhcnQoc3RhdGljX2Nhc3Q8VD4obV9jdXJyZW50KSkpIHsKKyAgICB3aGlsZSAo
aXNJZGVudFBhcnQobV9jdXJyZW50KSkgewogICAgICAgICByZWNvcmQxNihtX2N1cnJlbnQpOwog
ICAgICAgICBzaGlmdCgpOwogICAgIH0KQEAgLTE2MTgsMTQgKzE2MzIsMTQgQEAgYm9vbCBMZXhl
cjxUPjo6c2tpcFJlZ0V4cCgpCiAgICAgYm9vbCBpbkJyYWNrZXRzID0gZmFsc2U7CiAKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgY3VycmVudCA9IG1fY3VycmVudDsKLQotICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihzdGF0aWNfY2FzdDxUPihjdXJyZW50KSkgfHwgY3VycmVu
dCA9PSAtMSkKKyAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSB8fCBhdEVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIFQgcHJldiA9IG1fY3Vy
cmVudDsKKyAgICAgICAgCiAgICAgICAgIHNoaWZ0KCk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnQg
PT0gJy8nICYmICFsYXN0V2FzRXNjYXBlICYmICFpbkJyYWNrZXRzKQorICAgICAgICBpZiAocHJl
diA9PSAnLycgJiYgIWxhc3RXYXNFc2NhcGUgJiYgIWluQnJhY2tldHMpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBpZiAobGFzdFdhc0VzY2FwZSkgewpAQCAtMTYzMyw3ICsxNjQ3LDcg
QEAgYm9vbCBMZXhlcjxUPjo6c2tpcFJlZ0V4cCgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAoY3VycmVudCkgeworICAgICAgICBzd2l0Y2ggKHBy
ZXYpIHsKICAgICAgICAgY2FzZSAnWyc6CiAgICAgICAgICAgICBpbkJyYWNrZXRzID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY0Niw3ICsxNjYwLDcgQEAgYm9vbCBMZXhlcjxUPjo6
c2tpcFJlZ0V4cCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICB3aGlsZSAobV9jdXJyZW50ICE9
IC0xICYmIGlzSWRlbnRQYXJ0KHN0YXRpY19jYXN0PFQ+KG1fY3VycmVudCkpKQorICAgIHdoaWxl
IChpc0lkZW50UGFydChtX2N1cnJlbnQpKQogICAgICAgICBzaGlmdCgpOwogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAx
MTQ4MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyAoemhlcmN6ZWdAaW5mLnUt
c3plZ2VkLmh1KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC02Nyw4ICs2Nyw2IEBAIGVudW0gTGV4ZXJGbGFn
cyB7CiAgICAgTGV4ZXhGbGFnc0RvbnRCdWlsZEtleXdvcmRzID0gNAogfTsKIAotY2xhc3MgUmVn
RXhwOwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIExleGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShMZXhlcik7CkBAIC0xMTAsMTAgKzEwOCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY29kZSA9IG1fY29kZVN0YXJ0ICsgb2Zmc2V0OwogICAgICAgICBtX2J1ZmZlcjgucmVz
aXplKDApOwogICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKLSAgICAgICAgLy8gRmFzdGVy
IHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZQotICAgICAgICBtX2N1cnJlbnQgPSAtMTsKICAgICAg
ICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQogICAgICAgICAgICAgbV9jdXJyZW50
ID0gKm1fY29kZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50ID0gMDsKICAg
ICB9CiAgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHsKQEAgLTEzMywxMSAr
MTMxLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmQxNihjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5n
dGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKLSAgICBBTFdBWVNfSU5M
SU5FIGludCBwZWVrKGludCBvZmZzZXQpOwotICAgIGludCBnZXRVbmljb2RlQ2hhcmFjdGVyKCk7
CisgICAgQUxXQVlTX0lOTElORSBib29sIGF0RW5kKCkgY29uc3Q7CisgICAgQUxXQVlTX0lOTElO
RSBUIHBlZWsoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW50IHBhcnNlRm91ckRpZ2l0VW5pY29k
ZUhleCgpOwogICAgIHZvaWQgc2hpZnRMaW5lVGVybWluYXRvcigpOwogCi0gICAgVVN0cmluZyBn
ZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKTsKKyAgICBVU3RyaW5nIGludmFsaWRDaGFyYWN0ZXJNZXNz
YWdlKCkgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBUKiBjdXJyZW50Q2hhcmFjdGVy
KCkgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBpbnQgY3VycmVudE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZSAtIG1fY29kZVN0YXJ0OyB9CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dE9mZnNldEZyb21DaGFyT2Zmc2V0KGNvbnN0IFQqIGNoYXJPZmZzZXQpIHsgc2V0T2Zmc2V0KGNo
YXJPZmZzZXQgLSBtX2NvZGVTdGFydCk7IH0KQEAgLTE2Miw3ICsxNjEsNyBAQCBwcml2YXRlOgog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYXJzZU51bWJlckFmdGVyRGVjaW1hbFBvaW50KCk7CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigp
OwogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZU11bHRpbGluZUNvbW1lbnQoKTsKLQorICAg
IAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSA9IDMy
OwogCiAgICAgaW50IG1fbGluZU51bWJlcjsKQEAgLTE4Miw4ICsxODEsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9lcnJvcjsKICAgICBVU3RyaW5nIG1fbGV4RXJyb3JNZXNzYWdlOwogCi0gICAg
Ly8gY3VycmVudCBhbmQgZm9sbG93aW5nIHVuaWNvZGUgY2hhcmFjdGVycyAoaW50IHRvIGFsbG93
IGZvciAtMSBmb3IgZW5kLW9mLWZpbGUgbWFya2VyKQotICAgIGludCBtX2N1cnJlbnQ7CisgICAg
VCBtX2N1cnJlbnQ7CiAKICAgICBJZGVudGlmaWVyQXJlbmEqIG1fYXJlbmE7CiAKQEAgLTI4NCw3
ICsyODIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAg
ICAgICAgICBnb3RvIHNsb3dDYXNlOwogICAgICAgICBtX2N1cnJlbnQgPSAqcHRyOwogICAgIH0g
ZWxzZQotICAgICAgICBtX2N1cnJlbnQgPSAtMTsKKyAgICAgICAgbV9jdXJyZW50ID0gMDsKIAog
ICAgIG1fY29kZSA9IHB0cjsKIAo=
</data>
<flag name="review"
          id="143526"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>