<?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>159863</bug_id>
          
          <creation_ts>2016-07-17 16:03:40 -0700</creation_ts>
          <short_desc>RegisterSet should use a Bitmap instead of a BitVector so that it never allocates memory and is trivial to copy</short_desc>
          <delta_ts>2016-07-19 09:32:18 -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>WebKit 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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1211872</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-17 16:03:40 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211873</commentid>
    <comment_count>1</comment_count>
      <attachid>283872</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-17 16:09:23 -0700</bug_when>
    <thetext>Created attachment 283872
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211874</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-17 16:11:53 -0700</bug_when>
    <thetext>Attachment 283872 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/RegisterSet.h:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211877</commentid>
    <comment_count>3</comment_count>
      <attachid>283874</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-17 17:18:38 -0700</bug_when>
    <thetext>Created attachment 283874
the patch

fix arms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211879</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-17 17:20:29 -0700</bug_when>
    <thetext>Attachment 283874 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/RegisterSet.h:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211882</commentid>
    <comment_count>5</comment_count>
      <attachid>283874</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-17 17:46:15 -0700</bug_when>
    <thetext>Comment on attachment 283874
the patch

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

r=me

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:40
&gt; +    static const unsigned numGPRs = 32;

Why put this in the MacroAssembler instead of GPRInfo? I thought GPRInfo is the place for such things.

&gt; Source/WTF/ChangeLog:8
&gt; +        Give Bigmap all of the power of BitVector (except for automatic resizing). This means a

Typo: Bigmap

&gt; Source/WTF/wtf/Bitmap.h:39
&gt; +// NOTE: WordType must not be bigger than unsigned.

This should be a static assert instead of a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211884</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-17 17:55:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 283874 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=283874&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:40
&gt; &gt; +    static const unsigned numGPRs = 32;
&gt; 
&gt; Why put this in the MacroAssembler instead of GPRInfo? I thought GPRInfo is
&gt; the place for such things.

No, because GPRInfo is the set of registers that are useful to high-level-MacroAssembler-based compilers.  It already has a numberOfRegisters field, and it doesn&apos;t count things like SP, FP, or the scratch registers.

That&apos;s the separation: MacroAssembler has some reflection over registers that tells you about *all* registers, while GPRInfo has reflection over registers that tells you just about those registers that you would find useful if you were casually using MacroAssembler API.

Note that RegisterSet is to MacroAssembler as TempRegisterSet is to GPRInfo/FPRInfo.  TempRegisterSet uses GPRInfo::numberOfRegisters for example.

&gt; 
&gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; +        Give Bigmap all of the power of BitVector (except for automatic resizing). This means a
&gt; 
&gt; Typo: Bigmap

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/Bitmap.h:39
&gt; &gt; +// NOTE: WordType must not be bigger than unsigned.
&gt; 
&gt; This should be a static assert instead of a comment.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211886</commentid>
    <comment_count>7</comment_count>
      <attachid>283876</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-17 17:58:01 -0700</bug_when>
    <thetext>Created attachment 283876
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211887</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-17 17:59:43 -0700</bug_when>
    <thetext>Attachment 283876 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/RegisterSet.h:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212058</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-18 12:52:59 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/203365</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212359</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-19 07:32:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Landed in https://trac.webkit.org/changeset/203365

This one or r203364 made many tests crash on Apple Mac 32 bit bots:
- https://build.webkit.org/builders/Apple%20Yosemite%2032-bit%20JSC%20%28BuildAndTest%29/builds/9824
- https://build.webkit.org/builders/Apple%20El%20Capitan%2032-bit%20JSC%20%28BuildAndTest%29/builds/2948

( Last known good revision: r203363, first known bad revision: r203368 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212394</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-19 09:32:18 -0700</bug_when>
    <thetext>This change is innocent, the other one is the culprit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283872</attachid>
            <date>2016-07-17 16:09:23 -0700</date>
            <delta_ts>2016-07-17 17:18:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15386</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE2LTA3LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVnaXN0ZXJTZXQgc2hvdWxkIHVzZSBhIEJpdG1hcCBpbnN0ZWFkIG9mIGEgQml0VmVjdG9yIHNv
IHRoYXQgaXQgbmV2ZXIgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaXMgdHJpdmlhbCB0byBjb3B5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFN3
aXRjaCBSZWdpc3RlclNldCBzZXQgdG8gQml0bWFwIGJlY2F1c2UgQml0bWFwIGRvZXNuJ3QgZXZl
ciBhbGxvY2F0ZSBtZW1vcnkgYW5kIGNhbiBiZQorICAgICAgICBhc3NpZ25lZCBieSBtZW1jcHku
IFRoaXMgc2hvdWxkIGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIGNvbXBpbGVyIGNv
ZGUgdGhhdCBkb2VzIGEKKyAgICAgICAgbG90IG9mIHRoaW5ncyB3aXRoIFJlZ2lzdGVyU2V0LiBG
b3IgZXhhbXBsZSwgaXQncyBvbmUgb2YgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBp
bgorICAgICAgICBBaXIuIFRoZSBwcmV2aW91cyB1c2Ugb2YgQml0VmVjdG9yIG1lYW50IHRoYXQg
YWxtb3N0IGV2ZXJ5IG9wZXJhdGlvbiBvbiBSZWdpc3RlclNldCB3b3VsZAorICAgICAgICBoYXZl
IGEgc2xvdyBwYXRoIGNhbGwuIE9uIEFSTTY0LCBpdCB3b3VsZCBtZWFuIG1lbW9yeSBhbGxvY2F0
aW9uIGZvciBhbnkgUmVnaXN0ZXJTZXQgdGhhdAorICAgICAgICB1c2VkIGFsbCBhdmFpbGFibGUg
cmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFudCBhZGRpbmcgZXZlbiBtb3Jl
IEdQUi9GUFIgcmVmbGVjdGlvbiB0byB0aGUgTWFjcm9Bc3NlbWJsZXIgQVBJOiB3ZSBub3cgaGF2
ZSBjb25zdHMKKyAgICAgICAgY2FsbGVkIG51bUdQUnMgYW5kIG51bUZQUnMuIFRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIHN0YXRpY2FsbHkgc2l6ZSB0aGUgQml0bWFwIGluIFJlZ2lzdGVyU2V0LgorICAg
ICAgICAKKyAgICAgICAgSGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygc2l6ZXMgb2YgUmVnaXN0ZXJT
ZXQgb24gZGlmZmVyZW50IENQVXM6CisgICAgICAgIAorICAgICAgICB4ODYtMzI6IDggYml0cyAo
R1BScykgKyA4IGJpdHMgKEZQUnMpICsgMSBiaXQgKGlzIGRlbGV0ZWQpID0gMXggdWludDMyX3Qu
CisgICAgICAgIHg4Ni02NDogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90
LgorICAgICAgICBBUk12NzogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90
LgorICAgICAgICBBUk02NDogMzIgYml0cyArIDMyIGJpdHMgKyAxIGJpdCA9IDN4IHVpbnQzMl90
LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Ni5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c2NyYXRjaFJlZ2lzdGVyKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldCk6CisgICAgICAg
IChKU0M6OlJlZ2lzdGVyU2V0OjpnZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0
QWxsKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJTZXQ6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpleGNsdWRl
KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51bWJlck9mU2V0UmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojppc0Rl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpmb3JFYWNoKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldE1hbnkpOgorCiAyMDE2LTA3LTE2ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIENTRSBpcyBicm9rZW4gZm9y
IE11bHRpR2V0QnlPZmZzZXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFj
cm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTTY0QXNz
ZW1ibGVyLCBNYWNyb0Fzc2VtYmxlckFSTTY0PiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bUdQUnMgPSAzMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtRlBS
cyA9IDMyOworICAgIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0
ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1l
bW9yeVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHJl
dmlzaW9uIDIwMzMzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNIDogcHVibGljIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI8QVJNQXNzZW1ibGVyLCBNYWNyb0Fzc2VtYmxlckFSTT4geworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1HUFJzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bUZQUnMgPSAxNjsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgaW50IERvdWJsZUNvbmRpdGlvbk1h
c2sgPSAweDBmOwogICAgIHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lh
bCA9IDB4MTA7CiAgICAgQ09NUElMRV9BU1NFUlQoIShEb3VibGVDb25kaXRpb25CaXRTcGVjaWFs
ICYgRG91YmxlQ29uZGl0aW9uTWFzayksIERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWxfc2hvdWxk
X25vdF9pbnRlcmZlcmVfd2l0aF9BUk1Bc3NlbWJsZXJfQ29uZGl0aW9uX2NvZGVzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNdjcgOiBwdWJs
aWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk12N0Fzc2VtYmxlciwgTWFjcm9Bc3NlbWJsZXJB
Uk12Nz4geworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0gMTY7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bUZQUnMgPSAxNjsKKyAgICAKICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjppcDsKICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpy
NjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMjAzMzM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NiA6IHB1
YmxpYyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bUdQUnMgPSA4OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1GUFJz
ID0gODsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7
CiAKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YWRkMzI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc19zY3JhdGNoUmVnaXN0ZXI7CiAg
ICAgfQogI2VuZGlmCi0KKyAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgaW50IERv
dWJsZUNvbmRpdGlvbkJpdEludmVydCA9IDB4MTA7CiAgICAgc3RhdGljIGNvbnN0IGludCBEb3Vi
bGVDb25kaXRpb25CaXRTcGVjaWFsID0gMHgyMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9u
IDIwMzMzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTWFjcm9Bc3NlbWJsZXJYODZfNjQgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24gewogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0g
MTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUZQUnMgPSAxNjsKKyAgICAKICAgICBz
dGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0VpZ2h0OwogCiAgICAgdXNpbmcgTWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjAzMzM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJSZWcuaCIKICNpbmNsdWRlICJU
ZW1wUmVnaXN0ZXJTZXQuaCIKLSNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNzEsNyArNzEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXQoUmVnIHJlZywgYm9vbCB2YWx1ZSA9IHRydWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoISFyZWcpOwotICAgICAgICBtX3ZlY3Rvci5zZXQocmVnLmluZGV4KCksIHZh
bHVlKTsKKyAgICAgICAgbV9iaXRzLnNldChyZWcuaW5kZXgoKSwgdmFsdWUpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldChKU1ZhbHVlUmVncyByZWdzLCBib29sIHZhbHVlID0gdHJ1ZSkKQEAg
LTkwLDkgKzkwLDkgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KFJlZyByZWcpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoISFyZWcpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3IuZ2V0KHJl
Zy5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5nZXQocmVnLmluZGV4KCkpOwogICAg
IH0KLQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIHZvaWQgc2V0
QWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CkBAIC0xMDAsMTMgKzEwMCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBzZXQocmVnKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBt
ZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IubWVyZ2Uob3RoZXIubV92
ZWN0b3IpOyB9Ci0gICAgdm9pZCBmaWx0ZXIoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
dmVjdG9yLmZpbHRlcihvdGhlci5tX3ZlY3Rvcik7IH0KLSAgICB2b2lkIGV4Y2x1ZGUoY29uc3Qg
UmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLmV4Y2x1ZGUob3RoZXIubV92ZWN0b3IpOyB9
CisgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV9iaXRzLm1lcmdl
KG90aGVyLm1fYml0cyk7IH0KKyAgICB2b2lkIGZpbHRlcihjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIHsgbV9iaXRzLmZpbHRlcihvdGhlci5tX2JpdHMpOyB9CisgICAgdm9pZCBleGNsdWRlKGNv
bnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2JpdHMuZXhjbHVkZShvdGhlci5tX2JpdHMpOyB9
CiAgICAgCiAgICAgc2l6ZV90IG51bWJlck9mU2V0R1BScygpIGNvbnN0OwogICAgIHNpemVfdCBu
dW1iZXJPZlNldEZQUnMoKSBjb25zdDsKLSAgICBzaXplX3QgbnVtYmVyT2ZTZXRSZWdpc3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzLmNvdW50KCk7IH0KICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKQEAgLTExNCwyNiArMTE0
LDM4IEBAIHB1YmxpYzoKICAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9
OwogICAgIAogICAgIFJlZ2lzdGVyU2V0KEVtcHR5VmFsdWVUYWcpCi0gICAgICAgIDogbV92ZWN0
b3IoQml0VmVjdG9yOjpFbXB0eVZhbHVlKQogICAgIHsKKyAgICAgICAgbV9iaXRzLnNldChoYXNo
U3BlY2lhbEJpdEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQoRGVsZXRlZFZh
bHVlVGFnKQotICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQogICAg
IHsKKyAgICAgICAgbV9iaXRzLnNldChoYXNoU3BlY2lhbEJpdEluZGV4KTsKKyAgICAgICAgbV9i
aXRzLnNldChkZWxldGVkQml0SW5kZXgpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzRW1wdHlW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlWYWx1ZSgpOyB9Ci0gICAgYm9v
bCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRGVsZXRlZFZhbHVl
KCk7IH0KKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9iaXRzLmdldChoYXNoU3BlY2lhbEJpdEluZGV4KSAmJiAhbV9iaXRzLmdldChkZWxldGVk
Qml0SW5kZXgpOworICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0
ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3Rvcjsg
fQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yKQotICAgICAgICAg
ICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgICAgICByZXR1cm4gbV9iaXRz
LmdldChoYXNoU3BlY2lhbEJpdEluZGV4KSAmJiBtX2JpdHMuZ2V0KGRlbGV0ZWRCaXRJbmRleCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
IT0gb3RoZXIubV9iaXRzOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0cy5oYXNoKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9iaXRzLmZvckVhY2hTZXRCaXQoCisgICAgICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewor
ICAgICAgICAgICAgICAgIGZ1bmMoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAg
IH0pOwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0xNDcsNyArMTU5LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIHNldE1hbnkocmVncy4uLik7CiAgICAgfQogCi0gICAgQml0VmVjdG9yIG1fdmVj
dG9yOworICAgIC8vIFRoZXNlIG9mZnNldHMgbWlycm9yIHRoZSBsb2dpYyBpbiBSZWcuaC4KKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ3ByT2Zmc2V0ID0gMDsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZnByT2Zmc2V0ID0gZ3ByT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om51bUdQUnM7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGhhc2hTcGVjaWFsQml0SW5kZXggPSBmcHJPZmZz
ZXQgKyBNYWNyb0Fzc2VtYmxlcjo6bnVtRlBSczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVsZXRlZEJpdEluZGV4ID0gMDsKKyAgICAKKyAgICBCaXRtYXA8TWFjcm9Bc3NlbWJsZXI6Om51
bUdQUnMgKyBNYWNyb0Fzc2VtYmxlcjo6bnVtRlBScyArIDE+IG1fYml0czsKIH07CiAKIHN0cnVj
dCBSZWdpc3RlclNldEhhc2ggewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzNikKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTcg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZWdpc3RlclNldCBz
aG91bGQgdXNlIGEgQml0bWFwIGluc3RlYWQgb2YgYSBCaXRWZWN0b3Igc28gdGhhdCBpdCBuZXZl
ciBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBpcyB0cml2aWFsIHRvIGNvcHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTg2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgR2l2ZSBCaWdtYXAgYWxs
IG9mIHRoZSBwb3dlciBvZiBCaXRWZWN0b3IgKGV4Y2VwdCBmb3IgYXV0b21hdGljIHJlc2l6aW5n
KS4gVGhpcyBtZWFucyBhCisgICAgICAgIHZhcmlhbnQgb2Ygc2V0KCkgdGhhdCB0YWtlcyBhIGJv
b2wsIGFuZCBhIGJ1bmNoIG9mIGhlbHBlciBtZXRob2RzIChtZXJnZSwgZmlsdGVyLCBleGNsdWRl
LAorICAgICAgICBmb3JFYWNoU2V0Qml0LCA9PSwgIT0sIGFuZCBoYXNoKS4KKworICAgICAgICAq
IHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpzZXQpOgorICAgICAgICAo
V1RGOjpXb3JkVHlwZT46OnRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Omlz
RnVsbCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6bWVyZ2UpOgorICAgICAgICAoV1RGOjpX
b3JkVHlwZT46OmZpbHRlcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6ZXhjbHVkZSk6Cisg
ICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9yRWFjaFNldEJpdCk6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Omhhc2gpOgorCiAyMDE2LTA3LTE3ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCBuZXcg
ZW1vamkgZ3JvdXAgY2FuZGlkYXRlcwpJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDIwMzMzNikKKysr
IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNiw2ICszNiw3IEBAIGVudW0gQml0bWFw
QXRvbWljTW9kZSB7CiAgICAgQml0bWFwQXRvbWljCiB9OwogCisvLyBOT1RFOiBXb3JkVHlwZSBt
dXN0IG5vdCBiZSBiaWdnZXIgdGhhbiB1bnNpZ25lZC4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBT
aXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGUgPSBCaXRtYXBOb3RBdG9taWMsIHR5cGVu
YW1lIFdvcmRUeXBlID0gdWludDMyX3Q+CiBjbGFzcyBCaXRtYXAgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGdldChz
aXplX3QpIGNvbnN0OwogICAgIHZvaWQgc2V0KHNpemVfdCk7CisgICAgdm9pZCBzZXQoc2l6ZV90
LCBib29sKTsKICAgICBib29sIHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBib29sIHRlc3RBbmRD
bGVhcihzaXplX3QpOwogICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90KTsKQEAg
LTYwLDYgKzYyLDE4IEBAIHB1YmxpYzoKICAgICBzaXplX3QgY291bnQoc2l6ZV90ID0gMCkgY29u
c3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKICAgICBzaXplX3QgaXNGdWxsKCkgY29u
c3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBCaXRtYXAmKTsKKyAgICB2b2lkIGZpbHRl
cihjb25zdCBCaXRtYXAmKTsKKyAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0bWFwJik7CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTZXRCaXQoY29u
c3QgRnVuYyYpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRtYXAm
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQml0bWFwJikgY29uc3Q7CisgICAg
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB3b3JkU2l6ZSA9IHNpemVvZihXb3JkVHlwZSkgKiA4OwpAQCAtOTQsNiArMTA4
LDE1IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBhdG9taWNNb2QKIH0KIAogdGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9k
ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4sIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
KQorICAgICAgICBzZXQobik7CisgICAgZWxzZQorICAgICAgICBjbGVhcihuKTsKK30KKwordGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9k
ZSwgV29yZFR5cGU+Ojp0ZXN0QW5kU2V0KHNpemVfdCBuKQogewogICAgIFdvcmRUeXBlIG1hc2sg
PSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CkBAIC0yMjQsNSArMjQ3LDcxIEBAIGlubGluZSBzaXpl
X3QgQml0bWFwPGJpdG1hcFNpemUsIGF0b21pY00KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9k
ZSwgV29yZFR5cGU+OjptZXJnZShjb25zdCBCaXRtYXAmIG90aGVyKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSB8PSBvdGhlci5iaXRz
W2ldOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWljTW9kZSBh
dG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46OmZpbHRlcihjb25zdCBCaXRtYXAmIG90aGVyKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tp
XSAmPSBvdGhlci5iaXRzW2ldOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0
bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lk
IEJpdG1hcDxiaXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46OmV4Y2x1ZGUoY29uc3Qg
Qml0bWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kp
CisgICAgICAgIGJpdHNbaV0gJj0gfm90aGVyLmJpdHNbaV07CiB9CisKK3RlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRU
eXBlPgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46OmZvckVhY2hTZXRCaXQoY29uc3QgRnVuYyYgZnVu
YykgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAg
ICAgICAgV29yZFR5cGUgd29yZCA9IGJpdHNbaV07CisgICAgICAgIGlmICghd29yZCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3b3JkU2l6ZTsgKytqKSB7CisgICAgICAgICAg
ICBpZiAod29yZCAmIDEpCisgICAgICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAg
ICAgICB3b3JkID4+PSAxOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KK2lubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46
Om9wZXJhdG9yPT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAgICAgICAgaWYgKGJpdHNbaV0gIT0gb3RoZXIu
Yml0c1tpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0
b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNp
emUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKwordGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlwZW5hbWUg
V29yZFR5cGU+CitpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUs
IFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIHJlc3VsdCBePSBJ
bnRIYXNoPFdvcmRUeXBlPjo6aGFzaChiaXRzW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCaXRtYXA7CisKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283874</attachid>
            <date>2016-07-17 17:18:38 -0700</date>
            <delta_ts>2016-07-17 17:58:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15354</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE2LTA3LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVnaXN0ZXJTZXQgc2hvdWxkIHVzZSBhIEJpdG1hcCBpbnN0ZWFkIG9mIGEgQml0VmVjdG9yIHNv
IHRoYXQgaXQgbmV2ZXIgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaXMgdHJpdmlhbCB0byBjb3B5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFN3
aXRjaCBSZWdpc3RlclNldCBzZXQgdG8gQml0bWFwIGJlY2F1c2UgQml0bWFwIGRvZXNuJ3QgZXZl
ciBhbGxvY2F0ZSBtZW1vcnkgYW5kIGNhbiBiZQorICAgICAgICBhc3NpZ25lZCBieSBtZW1jcHku
IFRoaXMgc2hvdWxkIGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIGNvbXBpbGVyIGNv
ZGUgdGhhdCBkb2VzIGEKKyAgICAgICAgbG90IG9mIHRoaW5ncyB3aXRoIFJlZ2lzdGVyU2V0LiBG
b3IgZXhhbXBsZSwgaXQncyBvbmUgb2YgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBp
bgorICAgICAgICBBaXIuIFRoZSBwcmV2aW91cyB1c2Ugb2YgQml0VmVjdG9yIG1lYW50IHRoYXQg
YWxtb3N0IGV2ZXJ5IG9wZXJhdGlvbiBvbiBSZWdpc3RlclNldCB3b3VsZAorICAgICAgICBoYXZl
IGEgc2xvdyBwYXRoIGNhbGwuIE9uIEFSTTY0LCBpdCB3b3VsZCBtZWFuIG1lbW9yeSBhbGxvY2F0
aW9uIGZvciBhbnkgUmVnaXN0ZXJTZXQgdGhhdAorICAgICAgICB1c2VkIGFsbCBhdmFpbGFibGUg
cmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFudCBhZGRpbmcgZXZlbiBtb3Jl
IEdQUi9GUFIgcmVmbGVjdGlvbiB0byB0aGUgTWFjcm9Bc3NlbWJsZXIgQVBJOiB3ZSBub3cgaGF2
ZSBjb25zdHMKKyAgICAgICAgY2FsbGVkIG51bUdQUnMgYW5kIG51bUZQUnMuIFRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIHN0YXRpY2FsbHkgc2l6ZSB0aGUgQml0bWFwIGluIFJlZ2lzdGVyU2V0LgorICAg
ICAgICAKKyAgICAgICAgSGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygc2l6ZXMgb2YgUmVnaXN0ZXJT
ZXQgb24gZGlmZmVyZW50IENQVXM6CisgICAgICAgIAorICAgICAgICB4ODYtMzI6IDggYml0cyAo
R1BScykgKyA4IGJpdHMgKEZQUnMpICsgMSBiaXQgKGlzIGRlbGV0ZWQpID0gMXggdWludDMyX3Qu
CisgICAgICAgIHg4Ni02NDogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90
LgorICAgICAgICBBUk12NzogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90
LgorICAgICAgICBBUk02NDogMzIgYml0cyArIDMyIGJpdHMgKyAxIGJpdCA9IDN4IHVpbnQzMl90
LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Ni5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c2NyYXRjaFJlZ2lzdGVyKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldCk6CisgICAgICAg
IChKU0M6OlJlZ2lzdGVyU2V0OjpnZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0
QWxsKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJTZXQ6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpleGNsdWRl
KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51bWJlck9mU2V0UmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojppc0Rl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpmb3JFYWNoKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldE1hbnkpOgorCiAyMDE2LTA3LTE2ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIENTRSBpcyBicm9rZW4gZm9y
IE11bHRpR2V0QnlPZmZzZXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFj
cm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTTY0QXNz
ZW1ibGVyLCBNYWNyb0Fzc2VtYmxlckFSTTY0PiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bUdQUnMgPSAzMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtRlBS
cyA9IDMyOworICAgIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0
ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1l
bW9yeVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHJl
dmlzaW9uIDIwMzMzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBjbGFzcyBNYWNy
b0Fzc2VtYmxlckFSTSA6IHB1YmxpYyBBYnN0cmFjCiAgICAgc3RhdGljIGNvbnN0IGludCBEb3Vi
bGVDb25kaXRpb25CaXRTcGVjaWFsID0gMHgxMDsKICAgICBDT01QSUxFX0FTU0VSVCghKERvdWJs
ZUNvbmRpdGlvbkJpdFNwZWNpYWwgJiBEb3VibGVDb25kaXRpb25NYXNrKSwgRG91YmxlQ29uZGl0
aW9uQml0U3BlY2lhbF9zaG91bGRfbm90X2ludGVyZmVyZV93aXRoX0FSTUFzc2VtYmxlcl9Db25k
aXRpb25fY29kZXMpOwogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJz
ID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUZQUnMgPSAxNjsKKyAgICAKICAg
ICB0eXBlZGVmIEFSTVJlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKIAogICAg
IGVudW0gUmVsYXRpb25hbENvbmRpdGlvbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjAz
MzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJBUk12NyA6IHB1YmxpYyBBYnN0cgogICAgIGlubGluZSBBUk1SZWdpc3RlcnM6OkZQU2luZ2xl
UmVnaXN0ZXJJRCBmcFRlbXBSZWdpc3RlckFzU2luZ2xlKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJz
Ojphc1NpbmdsZShmcFRlbXBSZWdpc3Rlcik7IH0KIAogcHVibGljOgorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1HUFJzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUZQ
UnMgPSAxNjsKKyAgICAKICAgICBNYWNyb0Fzc2VtYmxlckFSTXY3KCkKICAgICAgICAgOiBtX21h
a2VKdW1wUGF0Y2hhYmxlKGZhbHNlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDIwMzMz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgTWFjcm9Bc3NlbWJsZXJYODYgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24gewog
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0gODsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtRlBScyA9IDg7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IFNj
YWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOwogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZD
b21tb246OmFkZDMyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjAzMzM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNfc2NyYXRjaFJlZ2lzdGVyOwogICAgIH0KICNlbmRpZgotCisgICAgCiBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRJbnZlcnQgPSAweDEwOwog
ICAgIHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lhbCA9IDB4MjA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2XzY0
IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtR1BScyA9IDE2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1GUFJzID0gMTY7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGlt
ZXNFaWdodDsKIAogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDIwMzMz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5j
bHVkZSAiUmVnLmgiCiAjaW5jbHVkZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSA8d3Rm
L0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0KFJlZyByZWcsIGJvb2wg
dmFsdWUgPSB0cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEhcmVnKTsKLSAgICAgICAgbV92
ZWN0b3Iuc2V0KHJlZy5pbmRleCgpLCB2YWx1ZSk7CisgICAgICAgIG1fYml0cy5zZXQocmVnLmlu
ZGV4KCksIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoSlNWYWx1ZVJlZ3MgcmVn
cywgYm9vbCB2YWx1ZSA9IHRydWUpCkBAIC05MCw5ICs5MCw5IEBAIHB1YmxpYzoKICAgICBib29s
IGdldChSZWcgcmVnKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhcmVnKTsKLSAgICAg
ICAgcmV0dXJuIG1fdmVjdG9yLmdldChyZWcuaW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2Jp
dHMuZ2V0KHJlZy5pbmRleCgpKTsKICAgICB9Ci0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVyYWJsZT4KICAgICB2b2lkIHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCiAg
ICAgewpAQCAtMTAwLDEzICsxMDAsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgc2V0KHJlZyk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7
IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQotICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9
Ci0gICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5l
eGNsdWRlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJT
ZXQmIG90aGVyKSB7IG1fYml0cy5tZXJnZShvdGhlci5tX2JpdHMpOyB9CisgICAgdm9pZCBmaWx0
ZXIoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5maWx0ZXIob3RoZXIubV9iaXRz
KTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV9iaXRz
LmV4Y2x1ZGUob3RoZXIubV9iaXRzKTsgfQogICAgIAogICAgIHNpemVfdCBudW1iZXJPZlNldEdQ
UnMoKSBjb25zdDsKICAgICBzaXplX3QgbnVtYmVyT2ZTZXRGUFJzKCkgY29uc3Q7Ci0gICAgc2l6
ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYml0Q291
bnQoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fYml0cy5jb3VudCgpOyB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAgICAgCkBAIC0xMTQsMjYgKzExNCwzOCBAQCBwdWJsaWM6CiAgICAgZW51bSBEZWxldGVk
VmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKICAgICAKICAgICBSZWdpc3RlclNldChFbXB0eVZh
bHVlVGFnKQotICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RW1wdHlWYWx1ZSkKICAgICB7
CisgICAgICAgIG1fYml0cy5zZXQoaGFzaFNwZWNpYWxCaXRJbmRleCk7CiAgICAgfQogICAgIAog
ICAgIFJlZ2lzdGVyU2V0KERlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBtX3ZlY3RvcihCaXRW
ZWN0b3I6OkRlbGV0ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIG1fYml0cy5zZXQoaGFzaFNwZWNp
YWxCaXRJbmRleCk7CisgICAgICAgIG1fYml0cy5zZXQoZGVsZXRlZEJpdEluZGV4KTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5p
c0VtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5nZXQoaGFzaFNwZWNpYWxCaXRJbmRl
eCkgJiYgIW1fYml0cy5nZXQoZGVsZXRlZEJpdEluZGV4KTsKKyAgICB9CiAgICAgCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIGJv
b2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggOiBtX3ZlY3RvcikKLSAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5nZXQoaGFzaFNwZWNpYWxCaXRJbmRleCkgJiYgbV9i
aXRzLmdldChkZWxldGVkQml0SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3Ro
ZXIubV9iaXRzOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9iaXRzICE9IG90aGVyLm1fYml0czsgfQorICAgIAorICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX2JpdHMuaGFzaCgpOyB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVu
YykgY29uc3QKKyAgICB7CisgICAgICAgIG1fYml0cy5mb3JFYWNoU2V0Qml0KAorICAgICAgICAg
ICAgWyZdIChzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmdW5jKFJlZzo6ZnJvbUlu
ZGV4KGluZGV4KSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpAQCAt
MTQ3LDcgKzE1OSwxMyBAQCBwcml2YXRlOgogICAgICAgICBzZXRNYW55KHJlZ3MuLi4pOwogICAg
IH0KIAotICAgIEJpdFZlY3RvciBtX3ZlY3RvcjsKKyAgICAvLyBUaGVzZSBvZmZzZXRzIG1pcnJv
ciB0aGUgbG9naWMgaW4gUmVnLmguCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwck9mZnNl
dCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZwck9mZnNldCA9IGdwck9mZnNldCAr
IE1hY3JvQXNzZW1ibGVyOjpudW1HUFJzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNo
U3BlY2lhbEJpdEluZGV4ID0gZnByT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om51bUZQUnM7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlbGV0ZWRCaXRJbmRleCA9IDA7CisgICAgCisgICAg
Qml0bWFwPE1hY3JvQXNzZW1ibGVyOjpudW1HUFJzICsgTWFjcm9Bc3NlbWJsZXI6Om51bUZQUnMg
KyAxPiBtX2JpdHM7CiB9OwogCiBzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI1IEBACisyMDE2LTA3LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmVnaXN0ZXJTZXQgc2hvdWxkIHVzZSBhIEJpdG1hcCBpbnN0ZWFkIG9mIGEg
Qml0VmVjdG9yIHNvIHRoYXQgaXQgbmV2ZXIgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaXMgdHJpdmlh
bCB0byBjb3B5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTk4NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEdpdmUgQmlnbWFwIGFsbCBvZiB0aGUgcG93ZXIgb2YgQml0VmVjdG9yIChleGNl
cHQgZm9yIGF1dG9tYXRpYyByZXNpemluZykuIFRoaXMgbWVhbnMgYQorICAgICAgICB2YXJpYW50
IG9mIHNldCgpIHRoYXQgdGFrZXMgYSBib29sLCBhbmQgYSBidW5jaCBvZiBoZWxwZXIgbWV0aG9k
cyAobWVyZ2UsIGZpbHRlciwgZXhjbHVkZSwKKyAgICAgICAgZm9yRWFjaFNldEJpdCwgPT0sICE9
LCBhbmQgaGFzaCkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6Oldv
cmRUeXBlPjo6c2V0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojp0ZXN0QW5kU2V0KToKKyAg
ICAgICAgKFdURjo6V29yZFR5cGU+Ojppc0Z1bGwpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46
Om1lcmdlKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpmaWx0ZXIpOgorICAgICAgICAoV1RG
OjpXb3JkVHlwZT46OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmZvckVhY2hT
ZXRCaXQpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpoYXNo
KToKKwogMjAxNi0wNy0xNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIFN1cHBvcnQgbmV3IGVtb2ppIGdyb3VwIGNhbmRpZGF0ZXMKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1h
cC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MzYsNiArMzYsNyBAQCBlbnVtIEJpdG1hcEF0b21pY01vZGUgewogICAgIEJpdG1hcEF0b21pYwog
fTsKIAorLy8gTk9URTogV29yZFR5cGUgbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gdW5zaWduZWQu
CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2Rl
ID0gQml0bWFwTm90QXRvbWljLCB0eXBlbmFtZSBXb3JkVHlwZSA9IHVpbnQzMl90PgogY2xhc3Mg
Qml0bWFwIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ5LDYgKzUwLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBnZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIHNldChzaXpl
X3QpOworICAgIHZvaWQgc2V0KHNpemVfdCwgYm9vbCk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0KHNp
emVfdCk7CiAgICAgYm9vbCB0ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKICAgICBib29sIGNvbmN1cnJl
bnRUZXN0QW5kU2V0KHNpemVfdCk7CkBAIC02MCw2ICs2MiwxOCBAQCBwdWJsaWM6CiAgICAgc2l6
ZV90IGNvdW50KHNpemVfdCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7
CiAgICAgc2l6ZV90IGlzRnVsbCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3Qg
Qml0bWFwJik7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgQml0bWFwJik7CisgICAgdm9pZCBleGNs
dWRlKGNvbnN0IEJpdG1hcCYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1bmMmKSBjb25zdDsKKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQml0bWFwJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEJpdG1hcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd29yZFNpemUgPSBzaXplb2YoV29y
ZFR5cGUpICogODsKQEAgLTk0LDYgKzEwOCwxNSBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFw
U2l6ZSwgYXRvbWljTW9kCiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBB
dG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6c2V0KHNpemVfdCBuLCBib29s
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgc2V0KG4pOworICAgIGVsc2UKKyAg
ICAgICAgY2xlYXIobik7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBB
dG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIGJvb2wgQml0
bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6dGVzdEFuZFNldChzaXplX3Qg
bikKIHsKICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwpAQCAtMjI0
LDUgKzI0Nyw3MSBAQCBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBhdG9taWNNCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBB
dG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6bWVyZ2UoY29uc3QgQml0bWFw
JiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAg
ICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tpXTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlwZW5hbWUgV29yZFR5cGU+Citp
bmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9kZSwgV29yZFR5cGU+OjpmaWx0
ZXIoY29uc3QgQml0bWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdv
cmRzOyArK2kpCisgICAgICAgIGJpdHNbaV0gJj0gb3RoZXIuYml0c1tpXTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlwZW5h
bWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9kZSwg
V29yZFR5cGU+OjpleGNsdWRlKGNvbnN0IEJpdG1hcCYgb3RoZXIpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBiaXRzW2ldICY9IH5vdGhlci5iaXRz
W2ldOwogfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWljTW9kZSBh
dG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9kZSwgV29yZFR5cGU+Ojpmb3JF
YWNoU2V0Qml0KGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3b3JkczsgKytpKSB7CisgICAgICAgIFdvcmRUeXBlIHdvcmQgPSBiaXRzW2ldOwor
ICAgICAgICBpZiAoIXdvcmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2l6ZV90
IGJhc2UgPSBpICogd29yZFNpemU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd29y
ZFNpemU7ICsraikgeworICAgICAgICAgICAgaWYgKHdvcmQgJiAxKQorICAgICAgICAgICAgICAg
IGZ1bmMoYmFzZSArIGopOworICAgICAgICAgICAgd29yZCA+Pj0gMTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRv
bWljTW9kZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6
ZSwgYXRvbWljTW9kZSwgV29yZFR5cGU+OjpvcGVyYXRvcj09KGNvbnN0IEJpdG1hcCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKSB7CisgICAg
ICAgIGlmIChiaXRzW2ldICE9IG90aGVyLmJpdHNbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgQml0bWFwQXRvbWljTW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lu
bGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46Om9wZXJh
dG9yIT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBBdG9taWNN
b2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHVuc2lnbmVkIEJpdG1h
cDxiaXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAoreworICAg
IHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jkczsg
KytpKQorICAgICAgICByZXN1bHQgXj0gSW50SGFzaDxXb3JkVHlwZT46Omhhc2goYml0c1tpXSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6Qml0bWFwOworCiAjZW5kaWYK
</data>
<flag name="review"
          id="307539"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283876</attachid>
            <date>2016-07-17 17:58:01 -0700</date>
            <delta_ts>2016-07-17 17:58:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15406</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE2LTA3LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVnaXN0ZXJTZXQgc2hvdWxkIHVzZSBhIEJpdG1hcCBpbnN0ZWFkIG9mIGEgQml0VmVjdG9yIHNv
IHRoYXQgaXQgbmV2ZXIgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaXMgdHJpdmlhbCB0byBjb3B5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKyAgICAgICAgCisgICAgICAgIFN3aXRj
aCBSZWdpc3RlclNldCBzZXQgdG8gQml0bWFwIGJlY2F1c2UgQml0bWFwIGRvZXNuJ3QgZXZlciBh
bGxvY2F0ZSBtZW1vcnkgYW5kIGNhbiBiZQorICAgICAgICBhc3NpZ25lZCBieSBtZW1jcHkuIFRo
aXMgc2hvdWxkIGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIGNvbXBpbGVyIGNvZGUg
dGhhdCBkb2VzIGEKKyAgICAgICAgbG90IG9mIHRoaW5ncyB3aXRoIFJlZ2lzdGVyU2V0LiBGb3Ig
ZXhhbXBsZSwgaXQncyBvbmUgb2YgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBpbgor
ICAgICAgICBBaXIuIFRoZSBwcmV2aW91cyB1c2Ugb2YgQml0VmVjdG9yIG1lYW50IHRoYXQgYWxt
b3N0IGV2ZXJ5IG9wZXJhdGlvbiBvbiBSZWdpc3RlclNldCB3b3VsZAorICAgICAgICBoYXZlIGEg
c2xvdyBwYXRoIGNhbGwuIE9uIEFSTTY0LCBpdCB3b3VsZCBtZWFuIG1lbW9yeSBhbGxvY2F0aW9u
IGZvciBhbnkgUmVnaXN0ZXJTZXQgdGhhdAorICAgICAgICB1c2VkIGFsbCBhdmFpbGFibGUgcmVn
aXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFudCBhZGRpbmcgZXZlbiBtb3JlIEdQ
Ui9GUFIgcmVmbGVjdGlvbiB0byB0aGUgTWFjcm9Bc3NlbWJsZXIgQVBJOiB3ZSBub3cgaGF2ZSBj
b25zdHMKKyAgICAgICAgY2FsbGVkIG51bUdQUnMgYW5kIG51bUZQUnMuIFRoaXMgaXMgbmVjZXNz
YXJ5IHRvIHN0YXRpY2FsbHkgc2l6ZSB0aGUgQml0bWFwIGluIFJlZ2lzdGVyU2V0LgorICAgICAg
ICAKKyAgICAgICAgSGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygc2l6ZXMgb2YgUmVnaXN0ZXJTZXQg
b24gZGlmZmVyZW50IENQVXM6CisgICAgICAgIAorICAgICAgICB4ODYtMzI6IDggYml0cyAoR1BS
cykgKyA4IGJpdHMgKEZQUnMpICsgMSBiaXQgKGlzIGRlbGV0ZWQpID0gMXggdWludDMyX3QuCisg
ICAgICAgIHg4Ni02NDogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90Lgor
ICAgICAgICBBUk12NzogMTYgYml0cyArIDE2IGJpdHMgKyAxIGJpdCA9IDJ4IHVpbnQzMl90Lgor
ICAgICAgICBBUk02NDogMzIgYml0cyArIDMyIGJpdHMgKyAxIGJpdCA9IDN4IHVpbnQzMl90Lgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5o
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c2NyYXRjaFJlZ2lzdGVyKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKiBqaXQvUmVn
aXN0ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldCk6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyU2V0OjpnZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0QWxs
KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpleGNsdWRlKToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51bWJlck9mU2V0UmVnaXN0ZXJzKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKyAgICAgICAgKEpTQzo6UmVnaXN0
ZXJTZXQ6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
clNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpmb3JFYWNoKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldE1hbnkpOgorCiAyMDE2LTA3LTE2ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIENTRSBpcyBicm9rZW4gZm9yIE11
bHRpR2V0QnlPZmZzZXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFjcm9B
c3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTTY0QXNzZW1i
bGVyLCBNYWNyb0Fzc2VtYmxlckFSTTY0PiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bUdQUnMgPSAzMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtRlBScyA9
IDMyOworICAgIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIg
PSBBUk02NFJlZ2lzdGVyczo6aXAwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1lbW9y
eVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHJldmlz
aW9uIDIwMzMzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBjbGFzcyBNYWNyb0Fz
c2VtYmxlckFSTSA6IHB1YmxpYyBBYnN0cmFjCiAgICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVD
b25kaXRpb25CaXRTcGVjaWFsID0gMHgxMDsKICAgICBDT01QSUxFX0FTU0VSVCghKERvdWJsZUNv
bmRpdGlvbkJpdFNwZWNpYWwgJiBEb3VibGVDb25kaXRpb25NYXNrKSwgRG91YmxlQ29uZGl0aW9u
Qml0U3BlY2lhbF9zaG91bGRfbm90X2ludGVyZmVyZV93aXRoX0FSTUFzc2VtYmxlcl9Db25kaXRp
b25fY29kZXMpOwogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0g
MTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUZQUnMgPSAxNjsKKyAgICAKICAgICB0
eXBlZGVmIEFSTVJlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKIAogICAgIGVu
dW0gUmVsYXRpb25hbENvbmRpdGlvbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjAzMzM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJB
Uk12NyA6IHB1YmxpYyBBYnN0cgogICAgIGlubGluZSBBUk1SZWdpc3RlcnM6OkZQU2luZ2xlUmVn
aXN0ZXJJRCBmcFRlbXBSZWdpc3RlckFzU2luZ2xlKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJzOjph
c1NpbmdsZShmcFRlbXBSZWdpc3Rlcik7IH0KIAogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBudW1HUFJzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUZQUnMg
PSAxNjsKKyAgICAKICAgICBNYWNyb0Fzc2VtYmxlckFSTXY3KCkKICAgICAgICAgOiBtX21ha2VK
dW1wUGF0Y2hhYmxlKGZhbHNlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDIwMzMzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJYODYgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24gewogcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0gODsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtRlBScyA9IDg7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IFNjYWxl
IFNjYWxlUHRyID0gVGltZXNGb3VyOwogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmFkZDMyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjAzMzM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHNfc2NyYXRjaFJlZ2lzdGVyOwogICAgIH0KICNlbmRpZgotCisgICAgCiBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRJbnZlcnQgPSAweDEwOwogICAg
IHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lhbCA9IDB4MjA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2XzY0IDog
cHVibGljIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtR1BScyA9IDE2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1G
UFJzID0gMTY7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNF
aWdodDsKIAogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDIwMzMzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVk
ZSAiUmVnLmgiCiAjaW5jbHVkZSAiVGVtcFJlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSA8d3RmL0Jp
dFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0KFJlZyByZWcsIGJvb2wgdmFs
dWUgPSB0cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEhcmVnKTsKLSAgICAgICAgbV92ZWN0
b3Iuc2V0KHJlZy5pbmRleCgpLCB2YWx1ZSk7CisgICAgICAgIG1fYml0cy5zZXQocmVnLmluZGV4
KCksIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoSlNWYWx1ZVJlZ3MgcmVncywg
Ym9vbCB2YWx1ZSA9IHRydWUpCkBAIC05MCw5ICs5MCw5IEBAIHB1YmxpYzoKICAgICBib29sIGdl
dChSZWcgcmVnKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhcmVnKTsKLSAgICAgICAg
cmV0dXJuIG1fdmVjdG9yLmdldChyZWcuaW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2JpdHMu
Z2V0KHJlZy5pbmRleCgpKTsKICAgICB9Ci0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYWJsZT4KICAgICB2b2lkIHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCiAgICAg
ewpAQCAtMTAwLDEzICsxMDAsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgc2V0KHJlZyk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
dmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJl
Z2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9Ci0g
ICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5leGNs
dWRlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQm
IG90aGVyKSB7IG1fYml0cy5tZXJnZShvdGhlci5tX2JpdHMpOyB9CisgICAgdm9pZCBmaWx0ZXIo
Y29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5maWx0ZXIob3RoZXIubV9iaXRzKTsg
fQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV9iaXRzLmV4
Y2x1ZGUob3RoZXIubV9iaXRzKTsgfQogICAgIAogICAgIHNpemVfdCBudW1iZXJPZlNldEdQUnMo
KSBjb25zdDsKICAgICBzaXplX3QgbnVtYmVyT2ZTZXRGUFJzKCkgY29uc3Q7Ci0gICAgc2l6ZV90
IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYml0Q291bnQo
KTsgfQorICAgIHNpemVfdCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0cy5jb3VudCgpOyB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCkBAIC0xMTQsMjYgKzExNCwzOCBAQCBwdWJsaWM6CiAgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKICAgICAKICAgICBSZWdpc3RlclNldChFbXB0eVZhbHVl
VGFnKQotICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RW1wdHlWYWx1ZSkKICAgICB7Cisg
ICAgICAgIG1fYml0cy5zZXQoaGFzaFNwZWNpYWxCaXRJbmRleCk7CiAgICAgfQogICAgIAogICAg
IFJlZ2lzdGVyU2V0KERlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0
b3I6OkRlbGV0ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIG1fYml0cy5zZXQoaGFzaFNwZWNpYWxC
aXRJbmRleCk7CisgICAgICAgIG1fYml0cy5zZXQoZGVsZXRlZEJpdEluZGV4KTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5pc0Vt
cHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0cy5nZXQoaGFzaFNwZWNpYWxCaXRJbmRleCkg
JiYgIW1fYml0cy5nZXQoZGVsZXRlZEJpdEluZGV4KTsKKyAgICB9CiAgICAgCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3IuaGFzaCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIGJvb2wg
aXNEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXgg
OiBtX3ZlY3RvcikKLSAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsK
KyAgICAgICAgcmV0dXJuIG1fYml0cy5nZXQoaGFzaFNwZWNpYWxCaXRJbmRleCkgJiYgbV9iaXRz
LmdldChkZWxldGVkQml0SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIu
bV9iaXRzOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV9iaXRzICE9IG90aGVyLm1fYml0czsgfQorICAgIAorICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX2JpdHMuaGFzaCgpOyB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykg
Y29uc3QKKyAgICB7CisgICAgICAgIG1fYml0cy5mb3JFYWNoU2V0Qml0KAorICAgICAgICAgICAg
WyZdIChzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmdW5jKFJlZzo6ZnJvbUluZGV4
KGluZGV4KSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTQ3
LDcgKzE1OSwxMyBAQCBwcml2YXRlOgogICAgICAgICBzZXRNYW55KHJlZ3MuLi4pOwogICAgIH0K
IAotICAgIEJpdFZlY3RvciBtX3ZlY3RvcjsKKyAgICAvLyBUaGVzZSBvZmZzZXRzIG1pcnJvciB0
aGUgbG9naWMgaW4gUmVnLmguCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwck9mZnNldCA9
IDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZwck9mZnNldCA9IGdwck9mZnNldCArIE1h
Y3JvQXNzZW1ibGVyOjpudW1HUFJzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNoU3Bl
Y2lhbEJpdEluZGV4ID0gZnByT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om51bUZQUnM7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlbGV0ZWRCaXRJbmRleCA9IDA7CisgICAgCisgICAgQml0
bWFwPE1hY3JvQXNzZW1ibGVyOjpudW1HUFJzICsgTWFjcm9Bc3NlbWJsZXI6Om51bUZQUnMgKyAx
PiBtX2JpdHM7CiB9OwogCiBzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDMzMzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE2LTA3LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVnaXN0ZXJTZXQgc2hvdWxkIHVzZSBhIEJpdG1hcCBpbnN0ZWFkIG9mIGEgQml0
VmVjdG9yIHNvIHRoYXQgaXQgbmV2ZXIgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaXMgdHJpdmlhbCB0
byBjb3B5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTk4NjMKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKyAgICAgICAgCisgICAg
ICAgIEdpdmUgQml0bWFwIGFsbCBvZiB0aGUgcG93ZXIgb2YgQml0VmVjdG9yIChleGNlcHQgZm9y
IGF1dG9tYXRpYyByZXNpemluZykuIFRoaXMgbWVhbnMgYQorICAgICAgICB2YXJpYW50IG9mIHNl
dCgpIHRoYXQgdGFrZXMgYSBib29sLCBhbmQgYSBidW5jaCBvZiBoZWxwZXIgbWV0aG9kcyAobWVy
Z2UsIGZpbHRlciwgZXhjbHVkZSwKKyAgICAgICAgZm9yRWFjaFNldEJpdCwgPT0sICE9LCBhbmQg
aGFzaCkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBl
Pjo6c2V0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojp0ZXN0QW5kU2V0KToKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+Ojppc0Z1bGwpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om1lcmdl
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpmaWx0ZXIpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmZvckVhY2hTZXRCaXQp
OgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpoYXNoKToKKwog
MjAxNi0wNy0xNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFN1cHBvcnQgbmV3IGVtb2ppIGdyb3VwIGNhbmRpZGF0ZXMKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShy
ZXZpc2lvbiAyMDMzMzYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNiAr
MzksOCBAQCBlbnVtIEJpdG1hcEF0b21pY01vZGUgewogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNp
emUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSA9IEJpdG1hcE5vdEF0b21pYywgdHlwZW5h
bWUgV29yZFR5cGUgPSB1aW50MzJfdD4KIGNsYXNzIEJpdG1hcCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV29yZFR5cGUpIDw9
IHNpemVvZih1bnNpZ25lZCksICJXb3JkVHlwZSBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiB1bnNp
Z25lZCIpOwogcHVibGljOgogICAgIEJpdG1hcCgpOwogCkBAIC00OSw2ICs1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgZ2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBzZXQoc2l6ZV90KTsK
KyAgICB2b2lkIHNldChzaXplX3QsIGJvb2wpOwogICAgIGJvb2wgdGVzdEFuZFNldChzaXplX3Qp
OwogICAgIGJvb2wgdGVzdEFuZENsZWFyKHNpemVfdCk7CiAgICAgYm9vbCBjb25jdXJyZW50VGVz
dEFuZFNldChzaXplX3QpOwpAQCAtNjAsNiArNjMsMTggQEAgcHVibGljOgogICAgIHNpemVfdCBj
b3VudChzaXplX3QgPSAwKSBjb25zdDsKICAgICBzaXplX3QgaXNFbXB0eSgpIGNvbnN0OwogICAg
IHNpemVfdCBpc0Z1bGwoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEJpdG1h
cCYpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IEJpdG1hcCYpOworICAgIHZvaWQgZXhjbHVkZShj
b25zdCBCaXRtYXAmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZv
aWQgZm9yRWFjaFNldEJpdChjb25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEJpdG1hcCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBC
aXRtYXAmKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdvcmRTaXplID0gc2l6ZW9mKFdvcmRUeXBl
KSAqIDg7CkBAIC05NCw2ICsxMDksMTUgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUs
IGF0b21pY01vZAogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWlj
TW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxi
aXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46OnNldChzaXplX3QgbiwgYm9vbCB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHNldChuKTsKKyAgICBlbHNlCisgICAgICAg
IGNsZWFyKG4pOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWlj
TW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxi
aXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46OnRlc3RBbmRTZXQoc2l6ZV90IG4pCiB7
CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAlIHdvcmRTaXplKTsKQEAgLTIyNCw1ICsy
NDgsNzEgQEAgaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTQogICAgIHJl
dHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWlj
TW9kZSBhdG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxi
aXRtYXBTaXplLCBhdG9taWNNb2RlLCBXb3JkVHlwZT46Om1lcmdlKGNvbnN0IEJpdG1hcCYgb3Ro
ZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBi
aXRzW2ldIHw9IG90aGVyLmJpdHNbaV07Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5l
IHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6ZmlsdGVyKGNv
bnN0IEJpdG1hcCYgb3RoZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jkczsg
KytpKQorICAgICAgICBiaXRzW2ldICY9IG90aGVyLmJpdHNbaV07Cit9CisKK3RlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01vZGUsIHR5cGVuYW1lIFdv
cmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRU
eXBlPjo6ZXhjbHVkZShjb25zdCBCaXRtYXAmIG90aGVyKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSAmPSB+b3RoZXIuYml0c1tpXTsK
K30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIEJpdG1hcEF0b21pY01vZGUgYXRvbWlj
TW9kZSwgdHlwZW5hbWUgV29yZFR5cGU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5l
IHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIGF0b21pY01vZGUsIFdvcmRUeXBlPjo6Zm9yRWFjaFNl
dEJpdChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkgeworICAgICAgICBXb3JkVHlwZSB3b3JkID0gYml0c1tpXTsKKyAgICAg
ICAgaWYgKCF3b3JkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNpemVfdCBiYXNl
ID0gaSAqIHdvcmRTaXplOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdvcmRTaXpl
OyArK2opIHsKKyAgICAgICAgICAgIGlmICh3b3JkICYgMSkKKyAgICAgICAgICAgICAgICBmdW5j
KGJhc2UgKyBqKTsKKyAgICAgICAgICAgIHdvcmQgPj49IDE7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCBCaXRtYXBBdG9taWNNb2RlIGF0b21pY01v
ZGUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIGF0
b21pY01vZGUsIFdvcmRUeXBlPjo6b3BlcmF0b3I9PShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgICAgICBp
ZiAoYml0c1tpXSAhPSBvdGhlci5iaXRzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IEJpdG1hcEF0b21pY01vZGUgYXRvbWljTW9kZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUg
Ym9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgYXRvbWljTW9kZSwgV29yZFR5cGU+OjpvcGVyYXRvciE9
KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgQml0bWFwQXRvbWljTW9kZSBh
dG9taWNNb2RlLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0
bWFwU2l6ZSwgYXRvbWljTW9kZSwgV29yZFR5cGU+OjpoYXNoKCkgY29uc3QKK3sKKyAgICB1bnNp
Z25lZCByZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkK
KyAgICAgICAgcmVzdWx0IF49IEludEhhc2g8V29yZFR5cGU+OjpoYXNoKGJpdHNbaV0pOworICAg
IHJldHVybiByZXN1bHQ7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkJp
dG1hcDsKKwogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>