<?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>259756</bug_id>
          
          <creation_ts>2023-08-02 17:53:45 -0700</creation_ts>
          <short_desc>GPUP WebGL in MiniBrowser still continuously allocates IOSurfaces</short_desc>
          <delta_ts>2024-01-04 03:50:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>255860</dependson>
          <blocked>267054</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1969357</commentid>
    <comment_count>0</comment_count>
      <attachid>467185</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2023-08-02 17:53:45 -0700</bug_when>
    <thetext>Created attachment 467185
Test case

When MiniBrowser is run in WebKit2 mode with GPUP WebGL enabled, the attached test case causes IOSurfaces to be continuously allocated because they&apos;re in use too long. Increasing maxReusedDrawingBuffers in Source/WebCore/platform/graphics/cocoa/GraphicsContextGLCocoa.h causes the drawing buffers to be recycled. (Locally, I increased them to 6, but a smaller number would probably work.)

To reproduce:

1) Serve up the attached test case on localhost
2) Add an fprintf to stderr in this code which calls EGL_CreatePbufferFromClientBuffer:
https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/graphics/cocoa/GraphicsContextGLCocoa.mm#L625
3) Tools/WebKit/build-webkit
4) Tools/WebKit/run-minibrowser

Note that there&apos;s a continuous stream of output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1969358</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2023-08-02 17:54:52 -0700</bug_when>
    <thetext>Note: discovered while investigating ANGLE/Metal issue in Chromium: crbug.com/1468346 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1970403</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-08-09 17:54:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/113659847&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>467185</attachid>
            <date>2023-08-02 17:53:45 -0700</date>
            <delta_ts>2023-08-02 17:53:45 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>clouds_high_perf_gpu_with_fps.html</filename>
            <type>text/html</type>
            <size>17335</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzdHlsZT4KICBodG1sLCBib2R5IHsKICBtYXJnaW46IDA7CiAgaGVpZ2h0OiAxMDAl
Owp9Ci5vdXRlciB7CiAgZGlzcGxheTogZmxleDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEw
MCU7Cn0KLm91dGVyPiogewogIGZsZXg6IDAgMCA1MCU7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9
CmNhbnZhcyB7CiAgd2lkdGg6IDY0MHB4OwogIGhlaWdodDogNjQwcHg7Cn0KLmxhYmVsIHsKICBw
b3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMDsKICBib3R0b206IDA7CiAgcGFkZGluZzogMC41
ZW07CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOwogIGNvbG9yOiB3aGl0
ZTsKfQo8L3N0eWxlPgo8Ym9keT4KICA8ZGl2IHdpZHRoPTc2OCBoZWlnaHQ9NzY4IGlkPSJoIj4K
ICAgIDxjYW52YXMgd2lkdGg9NjQwIGhlaWdodD02NDA+PC9jYW52YXM+CiAgICA8cCBpZD0iZnBz
Ij5GUFM8L3A+CiAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+PC9kaXY+CiAgPC9kaXY+CjwvYm9keT4K
PHNjcmlwdCB0eXBlPSJtb2R1bGUiPgoKdmFyIG1zZWNQZXJGcmFtZUxpc3QgPSBbXTsKdmFyIHJl
bmRlclRpbWUgPSAwOwoKY29uc3QgbG93UG93ZXJGUyA9IGAjdmVyc2lvbiAzMDAgZXMKICAgIHBy
ZWNpc2lvbiBoaWdocCBmbG9hdDsKCiAgICB1bmlmb3JtIHZlYzIgaVJlc29sdXRpb247CiAgICB1
bmlmb3JtIHZlYzIgaU1vdXNlOwogICAgdW5pZm9ybSBmbG9hdCBpVGltZTsKCiAgICAvLyB3ZSBu
ZWVkIHRvIGRlY2xhcmUgYW4gb3V0cHV0IGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyCiAgICBvdXQg
dmVjNCBvdXRDb2xvcjsKCgpmbG9hdCBzdW4odmVjMiB1diwgZmxvYXQgYmF0dGVyeSkKewogCWZs
b2F0IHZhbCA9IHNtb290aHN0ZXAoMC4zLCAwLjI5LCBsZW5ndGgodXYpKTsKIAlmbG9hdCBibG9v
bSA9IHNtb290aHN0ZXAoMC43LCAwLjAsIGxlbmd0aCh1dikpOwogICAgZmxvYXQgY3V0ID0gMy4w
ICogc2luKCh1di55ICsgaVRpbWUgKiAwLjIgKiAoYmF0dGVyeSArIDAuMDIpKSAqIDEwMC4wKQoJ
CQkJKyBjbGFtcCh1di55ICogMTQuMCArIDEuMCwgLTYuMCwgNi4wKTsKICAgIGN1dCA9IGNsYW1w
KGN1dCwgMC4wLCAxLjApOwogICAgcmV0dXJuIGNsYW1wKHZhbCAqIGN1dCwgMC4wLCAxLjApICsg
Ymxvb20gKiAwLjY7Cn0KCmZsb2F0IGdyaWQodmVjMiB1diwgZmxvYXQgYmF0dGVyeSkKewogICAg
dmVjMiBzaXplID0gdmVjMih1di55LCB1di55ICogdXYueSAqIDAuMikgKiAwLjAxOwogICAgdXYg
Kz0gdmVjMigwLjAsIGlUaW1lICogNC4wICogKGJhdHRlcnkgKyAwLjA1KSk7CiAgICB1diA9IGFi
cyhmcmFjdCh1dikgLSAwLjUpOwogCXZlYzIgbGluZXMgPSBzbW9vdGhzdGVwKHNpemUsIHZlYzIo
MC4wKSwgdXYpOwogCWxpbmVzICs9IHNtb290aHN0ZXAoc2l6ZSAqIDUuMCwgdmVjMigwLjApLCB1
dikgKiAwLjQgKiBiYXR0ZXJ5OwogICAgcmV0dXJuIGNsYW1wKGxpbmVzLnggKyBsaW5lcy55LCAw
LjAsIDMuMCk7Cn0KCmZsb2F0IGRvdDIoaW4gdmVjMiB2ICkgeyByZXR1cm4gZG90KHYsdik7IH0K
CmZsb2F0IHNkVHJhcGV6b2lkKCBpbiB2ZWMyIHAsIGluIGZsb2F0IHIxLCBmbG9hdCByMiwgZmxv
YXQgaGUgKQp7CiAgICB2ZWMyIGsxID0gdmVjMihyMixoZSk7CiAgICB2ZWMyIGsyID0gdmVjMihy
Mi1yMSwyLjAqaGUpOwogICAgcC54ID0gYWJzKHAueCk7CiAgICB2ZWMyIGNhID0gdmVjMihwLngt
bWluKHAueCwocC55PDAuMCk/cjE6cjIpLCBhYnMocC55KS1oZSk7CiAgICB2ZWMyIGNiID0gcCAt
IGsxICsgazIqY2xhbXAoIGRvdChrMS1wLGsyKS9kb3QyKGsyKSwgMC4wLCAxLjAgKTsKICAgIGZs
b2F0IHMgPSAoY2IueDwwLjAgJiYgY2EueTwwLjApID8gLTEuMCA6IDEuMDsKICAgIHJldHVybiBz
KnNxcnQoIG1pbihkb3QyKGNhKSxkb3QyKGNiKSkgKTsKfQoKZmxvYXQgc2RMaW5lKCBpbiB2ZWMy
IHAsIGluIHZlYzIgYSwgaW4gdmVjMiBiICkKewogICAgdmVjMiBwYSA9IHAtYSwgYmEgPSBiLWE7
CiAgICBmbG9hdCBoID0gY2xhbXAoIGRvdChwYSxiYSkvZG90KGJhLGJhKSwgMC4wLCAxLjAgKTsK
ICAgIHJldHVybiBsZW5ndGgoIHBhIC0gYmEqaCApOwp9CgpmbG9hdCBzZEJveCggaW4gdmVjMiBw
LCBpbiB2ZWMyIGIgKQp7CiAgICB2ZWMyIGQgPSBhYnMocCktYjsKICAgIHJldHVybiBsZW5ndGgo
bWF4KGQsdmVjMigwKSkpICsgbWluKG1heChkLngsZC55KSwwLjApOwp9CgpmbG9hdCBvcFNtb290
aFVuaW9uKGZsb2F0IGQxLCBmbG9hdCBkMiwgZmxvYXQgayl7CglmbG9hdCBoID0gY2xhbXAoMC41
ICsgMC41ICogKGQyIC0gZDEpIC9rLDAuMCwxLjApOwogICAgcmV0dXJuIG1peChkMiwgZDEgLCBo
KSAtIGsgKiBoICogKCAxLjAgLSBoKTsKfQoKZmxvYXQgc2RDbG91ZChpbiB2ZWMyIHAsIGluIHZl
YzIgYTEsIGluIHZlYzIgYjEsIGluIHZlYzIgYTIsIGluIHZlYzIgYjIsIGZsb2F0IHcpCnsKCS8v
ZmxvYXQgbGluZVZhbDEgPSBzbW9vdGhzdGVwKHcgLSAwLjAwMDEsIHcsIHNkTGluZShwLCBhMSwg
YjEpKTsKICAgIGZsb2F0IGxpbmVWYWwxID0gc2RMaW5lKHAsIGExLCBiMSk7CiAgICBmbG9hdCBs
aW5lVmFsMiA9IHNkTGluZShwLCBhMiwgYjIpOwogICAgdmVjMiB3dyA9IHZlYzIodyoxLjUsIDAu
MCk7CiAgICB2ZWMyIGxlZnQgPSBtYXgoYTEgKyB3dywgYTIgKyB3dyk7CiAgICB2ZWMyIHJpZ2h0
ID0gbWluKGIxIC0gd3csIGIyIC0gd3cpOwogICAgdmVjMiBib3hDZW50ZXIgPSAobGVmdCArIHJp
Z2h0KSAqIDAuNTsKICAgIC8vZmxvYXQgYm94VyA9IHJpZ2h0LnggLSBsZWZ0Lng7CiAgICBmbG9h
dCBib3hIID0gYWJzKGEyLnkgLSBhMS55KSAqIDAuNTsKICAgIC8vZmxvYXQgYm94VmFsID0gc2RC
b3gocCAtIGJveENlbnRlciwgdmVjMihib3hXLCBib3hIKSkgKyB3OwogICAgZmxvYXQgYm94VmFs
ID0gc2RCb3gocCAtIGJveENlbnRlciwgdmVjMigwLjA0LCBib3hIKSkgKyB3OwoKICAgIGZsb2F0
IHVuaVZhbDEgPSBvcFNtb290aFVuaW9uKGxpbmVWYWwxLCBib3hWYWwsIDAuMDUpOwogICAgZmxv
YXQgdW5pVmFsMiA9IG9wU21vb3RoVW5pb24obGluZVZhbDIsIGJveFZhbCwgMC4wNSk7CgogICAg
cmV0dXJuIG1pbih1bmlWYWwxLCB1bmlWYWwyKTsKfQoKdm9pZCBtYWluSW1hZ2UoIG91dCB2ZWM0
IGZyYWdDb2xvciwgaW4gdmVjMiBmcmFnQ29vcmQgKQp7CiAgICB2ZWMyIHV2ID0gKDIuMCAqIGZy
YWdDb29yZC54eSAtIGlSZXNvbHV0aW9uLnh5KS9pUmVzb2x1dGlvbi55OwogICAgZmxvYXQgYmF0
dGVyeSA9IDEuMDsKICAgIC8vaWYgKGlNb3VzZS54ID4gMS4wICYmIGlNb3VzZS55ID4gMS4wKSBi
YXR0ZXJ5ID0gaU1vdXNlLnkgLyBpUmVzb2x1dGlvbi55OwogICAgLy9lbHNlIGJhdHRlcnkgPSAw
Ljg7CgogICAgLy9pZiAoYWJzKHV2LngpIDwgKDkuMCAvIDE2LjApKQogICAgewogICAgICAgIC8v
IEdyaWQKICAgICAgICBmbG9hdCBmb2cgPSBzbW9vdGhzdGVwKDAuMSwgLTAuMDIsIGFicyh1di55
ICsgMC4yKSk7CiAgICAgICAgdmVjMyBjb2wgPSB2ZWMzKDAuMCwgMC4xLCAwLjIpOwogICAgICAg
IGlmICh1di55IDwgLTAuMikKICAgICAgICB7CiAgICAgICAgICAgIHV2LnkgPSAzLjAgLyAoYWJz
KHV2LnkgKyAwLjIpICsgMC4wNSk7CiAgICAgICAgICAgIHV2LnggKj0gdXYueSAqIDEuMDsKICAg
ICAgICAgICAgZmxvYXQgZ3JpZFZhbCA9IGdyaWQodXYsIGJhdHRlcnkpOwogICAgICAgICAgICBj
b2wgPSBtaXgoY29sLCB2ZWMzKDEuMCwgMC41LCAxLjApLCBncmlkVmFsKTsKICAgICAgICB9CiAg
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgZmxvYXQgZnVqaUQgPSBtaW4odXYueSAq
IDQuNSAtIDAuNSwgMS4wKTsKICAgICAgICAgICAgdXYueSAtPSBiYXR0ZXJ5ICogMS4xIC0gMC41
MTsKCiAgICAgICAgICAgIHZlYzIgc3VuVVYgPSB1djsKICAgICAgICAgICAgdmVjMiBmdWppVVYg
PSB1djsKCiAgICAgICAgICAgIC8vIFN1bgogICAgICAgICAgICBzdW5VViArPSB2ZWMyKDAuNzUs
IDAuMik7CiAgICAgICAgICAgIC8vdXYueSAtPSAxLjEgLSAwLjUxOwogICAgICAgICAgICBjb2wg
PSB2ZWMzKDEuMCwgMC4yLCAxLjApOwogICAgICAgICAgICBmbG9hdCBzdW5WYWwgPSBzdW4oc3Vu
VVYsIGJhdHRlcnkpOwoKICAgICAgICAgICAgY29sID0gbWl4KGNvbCwgdmVjMygxLjAsIDAuNCwg
MC4xKSwgc3VuVVYueSAqIDIuMCArIDAuMik7CiAgICAgICAgICAgIGNvbCA9IG1peCh2ZWMzKDAu
MCwgMC4wLCAwLjApLCBjb2wsIHN1blZhbCk7CgogICAgICAgICAgICAvLyBmdWppCiAgICAgICAg
ICAgIGZsb2F0IGZ1amlWYWwgPSBzZFRyYXBlem9pZCggdXYgICsgdmVjMigtMC43NStzdW5VVi55
ICogMC4wLCAwLjUpLCAxLjc1ICsgcG93KHV2LnkgKiB1di55LCAyLjEpLCAwLjIsIDAuNSk7CiAg
ICAgICAgICAgIGZsb2F0IHdhdmVWYWwgPSB1di55ICsgc2luKHV2LnggKiAyMC4wICsgaVRpbWUg
KiAyLjApICogMC4wNSArIDAuMjsKICAgICAgICAgICAgZmxvYXQgd2F2ZV93aWR0aCA9IHNtb290
aHN0ZXAoMC4wLDAuMDEsKHdhdmVWYWwpKTsKCiAgICAgICAgICAgIC8vIGZ1amkgY29sb3IKICAg
ICAgICAgICAgY29sID0gbWl4KCBjb2wsIG1peCh2ZWMzKDAuMCwgMC4wLCAwLjI1KSwgdmVjMygx
LjAsIDAuMCwgMC41KSwgZnVqaUQpLCBzdGVwKGZ1amlWYWwsIDAuMCkpOwogICAgICAgICAgICAv
LyBmdWppIHRvcCBzbm93CiAgICAgICAgICAgIGNvbCA9IG1peCggY29sLCB2ZWMzKDEuMCwgMC41
LCAxLjApLCB3YXZlX3dpZHRoICogc3RlcChmdWppVmFsLCAwLjApKTsKICAgICAgICAgICAgLy8g
ZnVqaSBvdXRsaW5lCiAgICAgICAgICAgIGNvbCA9IG1peCggY29sLCB2ZWMzKDEuMCwgMC41LCAx
LjApLCAxLjAtc21vb3Roc3RlcCgwLjAsMC4wMSxhYnMoZnVqaVZhbCkpICk7CiAgICAgICAgICAg
IC8vY29sID0gbWl4KCBjb2wsIHZlYzMoMS4wLCAxLjAsIDEuMCksIDEuMC1zbW9vdGhzdGVwKDAu
MDMsMC4wNCxhYnMoZnVqaVZhbCkpICk7CiAgICAgICAgICAgIC8vY29sID0gdmVjMygxLjAsIDEu
MCwgMS4wKSAqKDEuMC1zbW9vdGhzdGVwKDAuMDMsMC4wNCxhYnMoZnVqaVZhbCkpKTsKCiAgICAg
ICAgICAgIC8vIGhvcml6b24gY29sb3IKICAgICAgICAgICAgY29sICs9IG1peCggY29sLCBtaXgo
dmVjMygxLjAsIDAuMTIsIDAuOCksIHZlYzMoMC4wLCAwLjAsIDAuMiksIGNsYW1wKHV2LnkgKiAz
LjUgKyAzLjAsIDAuMCwgMS4wKSksIHN0ZXAoMC4wLCBmdWppVmFsKSApOwoKICAgICAgICAgICAg
Ly8gY2xvdWQKICAgICAgICAgICAgdmVjMiBjbG91ZFVWID0gdXY7CiAgICAgICAgICAgIGNsb3Vk
VVYueCA9IG1vZChjbG91ZFVWLnggKyBpVGltZSAqIDAuMSwgNC4wKSAtIDIuMDsKICAgICAgICAg
ICAgZmxvYXQgY2xvdWRUaW1lID0gaVRpbWUgKiAwLjU7CiAgICAgICAgICAgIGZsb2F0IGNsb3Vk
WSA9IC0wLjU7CiAgICAgICAgICAgIGZsb2F0IGNsb3VkVmFsMSA9IHNkQ2xvdWQoY2xvdWRVViwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoMC4xICsgc2luKGNsb3Vk
VGltZSArIDE0MC41KSowLjEsY2xvdWRZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlYzIoMS4wNSArIGNvcyhjbG91ZFRpbWUgKiAwLjkgLSAzNi41NikgKiAwLjEsIGNs
b3VkWSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKDAuMiArIGNv
cyhjbG91ZFRpbWUgKiAwLjg2NyArIDM4Ny4xNjUpICogMC4xLDAuMjUrY2xvdWRZKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoMC41ICsgY29zKGNsb3VkVGltZSAq
IDAuOTY3NSAtIDE1LjE2MikgKiAwLjA5LCAwLjI1K2Nsb3VkWSksIDAuMDc1KTsKICAgICAgICAg
ICAgY2xvdWRZID0gLTAuNjsKICAgICAgICAgICAgZmxvYXQgY2xvdWRWYWwyID0gc2RDbG91ZChj
bG91ZFVWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigtMC45ICsg
Y29zKGNsb3VkVGltZSAqIDEuMDIgKyA1NDEuNzUpICogMC4xLGNsb3VkWSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKC0wLjUgKyBzaW4oY2xvdWRUaW1lICogMC45
IC0gMzE2LjU2KSAqIDAuMSwgY2xvdWRZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlYzIoLTEuNSArIGNvcyhjbG91ZFRpbWUgKiAwLjg2NyArIDM3LjE2NSkgKiAwLjEs
MC4yNStjbG91ZFkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigt
MC42ICsgc2luKGNsb3VkVGltZSAqIDAuOTY3NSArIDY2NS4xNjIpICogMC4wOSwgMC4yNStjbG91
ZFkpLCAwLjA3NSk7CgogICAgICAgICAgICBmbG9hdCBjbG91ZFZhbCA9IG1pbihjbG91ZFZhbDEs
IGNsb3VkVmFsMik7CgogICAgICAgICAgICAvL2NvbCA9IG1peChjb2wsIHZlYzMoMS4wLDEuMCww
LjApLCBzbW9vdGhzdGVwKDAuMDc1MSwgMC4wNzUsIGNsb3VkVmFsKSk7CiAgICAgICAgICAgIGNv
bCA9IG1peChjb2wsIHZlYzMoMC4wLCAwLjAsIDAuMiksIDEuMCAtIHNtb290aHN0ZXAoMC4wNzUg
LSAwLjAwMDEsIDAuMDc1LCBjbG91ZFZhbCkpOwogICAgICAgICAgICBjb2wgKz0gdmVjMygxLjAs
IDEuMCwgMS4wKSooMS4wIC0gc21vb3Roc3RlcCgwLjAsMC4wMSxhYnMoY2xvdWRWYWwgLSAwLjA3
NSkpKTsKICAgICAgICB9CgogICAgICAgIGNvbCArPSBmb2cgKiBmb2cgKiBmb2c7CiAgICAgICAg
Y29sID0gbWl4KHZlYzMoY29sLnIsIGNvbC5yLCBjb2wucikgKiAwLjUsIGNvbCwgYmF0dGVyeSAq
IDAuNyk7CgogICAgICAgIGZyYWdDb2xvciA9IHZlYzQoY29sLDEuMCk7CiAgICB9CiAgICAvL2Vs
c2UgZnJhZ0NvbG9yID0gdmVjNCgwLjApOwoKCn0KCiAgICB2b2lkIG1haW4oKSB7CiAgICAgIG1h
aW5JbWFnZShvdXRDb2xvciwgZ2xfRnJhZ0Nvb3JkLnh5KTsKICAgIH0KYDsKCmNvbnN0IGhpZ2hQ
ZXJmRlMgPSBgI3ZlcnNpb24gMzAwIGVzCiAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgogICAg
dW5pZm9ybSB2ZWMyIGlSZXNvbHV0aW9uOwogICAgdW5pZm9ybSB2ZWMyIGlNb3VzZTsKICAgIHVu
aWZvcm0gZmxvYXQgaVRpbWU7CgogICAgLy8gd2UgbmVlZCB0byBkZWNsYXJlIGFuIG91dHB1dCBm
b3IgdGhlIGZyYWdtZW50IHNoYWRlcgogICAgb3V0IHZlYzQgb3V0Q29sb3I7CgovLyBQcm90ZWFu
IGNsb3VkcyBieSBuaW1pdHogKHR3aXR0ZXI6IEBzdG9ybW9pZCkKLy8gaHR0cHM6Ly93d3cuc2hh
ZGVydG95LmNvbS92aWV3LzNsMjNSaAovLyBMaWNlbnNlIENyZWF0aXZlIENvbW1vbnMgQXR0cmli
dXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZCBMaWNlbnNlCi8vIENv
bnRhY3QgdGhlIGF1dGhvciBmb3Igb3RoZXIgbGljZW5zaW5nIG9wdGlvbnMKCi8qCglUZWNobmlj
YWwgZGV0YWlsczoKCglUaGUgbWFpbiB2b2x1bWUgbm9pc2UgaXMgZ2VuZXJhdGVkIGZyb20gYSBk
ZWZvcm1lZCBwZXJpb2RpYyBncmlkLCB3aGljaCBjYW4gcHJvZHVjZQoJYSBsYXJnZSByYW5nZSBv
ZiBub2lzZS1saWtlIHBhdHRlcm5zIGF0IHZlcnkgY2hlYXAgZXZhbHV0YXRpb24gY29zdC4gQWxs
b3dpbmcgZm9yIG11bHRpcGxlCglmZXRjaGVzIG9mIHZvbHVtZSBncmFkaWVudCBjb21wdXRhdGlv
biBmb3IgaW1wcm92ZWQgbGlnaHRpbmcuCgoJVG8gZnVydGhlciBhY2NlbGVyYXRlIG1hcmNoaW5n
LCBzaW5jZSB0aGUgdm9sdW1lIGlzIHNtb290aCwgbW9yZSB0aGFuIGhhbGYgdGhlIHRoZSBkZW5z
aXR5CglpbmZvcm1hdGlvbiBpc24ndCB1c2VkIHRvIHJlbmRlcmluZyBvciBzaGFkaW5nIGJ1dCBv
bmx5IGFzIGFuIHVuZGVybHlpbmcgdm9sdW1lCWRpc3RhbmNlIHRvCglkZXRlcm1pbmUgZHluYW1p
YyBzdGVwIHNpemUsIGJ5IGNhcmVmdWxseSBzZWxlY3RpbmcgYW4gZXF1YXRpb24JKHBvbHlub21p
YWwgZm9yIHNwZWVkKSB0bwoJc3RlcCBhcyBhIGZ1bmN0aW9uIG9mIG92ZXJhbGwgZGVuc2l0eSAo
bm90IG5lY2Vzc2FyaWFseSByZW5kZXJlZCkgdGhlIHZpc3VhbCByZXN1bHRzIGNhbiBiZQoJdGhl
CXNhbWUgYXMgYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIH40MCUgaW5jcmVhc2UgaW4gcmVu
ZGVyaW5nIHBlcmZvcm1hbmNlLgoKCVNpbmNlIHRoZSBkeW5hbWljIG1hcmNoaW5nIHN0ZXAgc2l6
ZSBpcyBldmVuIGxlc3MgdW5pZm9ybSBkdWUgdG8gc3RlcHMgbm90IGJlaW5nIHJlbmRlcmVkIGF0
IGFsbAoJdGhlIGZvZyBpcyBldmFsdWF0ZWQgYXMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGZvZyBp
bnRlZ3JhbCBhdCBlYWNoIHJlbmRlcmVkIHN0ZXAuCgoqLwoKbWF0MiByb3QoaW4gZmxvYXQgYSl7
ZmxvYXQgYyA9IGNvcyhhKSwgcyA9IHNpbihhKTtyZXR1cm4gbWF0MihjLHMsLXMsYyk7fQpjb25z
dCBtYXQzIG0zID0gbWF0MygwLjMzMzM4LCAwLjU2MDM0LCAtMC43MTgxNywgLTAuODc4ODcsIDAu
MzI2NTEsIC0wLjE1MzIzLCAwLjE1MTYyLCAwLjY5NTk2LCAwLjYxMzM5KSoxLjkzOwpmbG9hdCBt
YWcyKHZlYzIgcCl7cmV0dXJuIGRvdChwLHApO30KZmxvYXQgbGluc3RlcChpbiBmbG9hdCBtbiwg
aW4gZmxvYXQgbXgsIGluIGZsb2F0IHgpeyByZXR1cm4gY2xhbXAoKHggLSBtbikvKG14IC0gbW4p
LCAwLiwgMS4pOyB9CmZsb2F0IHBybTEgPSAwLjsKdmVjMiBic01vID0gdmVjMigwKTsKCnZlYzIg
ZGlzcChmbG9hdCB0KXsgcmV0dXJuIHZlYzIoc2luKHQqMC4yMikqMS4sIGNvcyh0KjAuMTc1KSox
LikqMi47IH0KCnZlYzIgbWFwKHZlYzMgcCkKewogICAgdmVjMyBwMiA9IHA7CiAgICBwMi54eSAt
PSBkaXNwKHAueikueHk7CiAgICBwLnh5ICo9IHJvdChzaW4ocC56K2lUaW1lKSooMC4xICsgcHJt
MSowLjA1KSArIGlUaW1lKjAuMDkpOwogICAgZmxvYXQgY2wgPSBtYWcyKHAyLnh5KTsKICAgIGZs
b2F0IGQgPSAwLjsKICAgIHAgKj0gLjYxOwogICAgZmxvYXQgeiA9IDEuOwogICAgZmxvYXQgdHJr
ID0gMS47CiAgICBmbG9hdCBkc3BBbXAgPSAwLjEgKyBwcm0xKjAuMjsKICAgIGZvcihpbnQgaSA9
IDA7IGkgPCA1OyBpKyspCiAgICB7CgkJcCArPSBzaW4ocC56eHkqMC43NSp0cmsgKyBpVGltZSp0
cmsqLjgpKmRzcEFtcDsKICAgICAgICBkIC09IGFicyhkb3QoY29zKHApLCBzaW4ocC55engpKSp6
KTsKICAgICAgICB6ICo9IDAuNTc7CiAgICAgICAgdHJrICo9IDEuNDsKICAgICAgICBwID0gcCpt
MzsKICAgIH0KICAgIGQgPSBhYnMoZCArIHBybTEqMy4pKyBwcm0xKi4zIC0gMi41ICsgYnNNby55
OwogICAgcmV0dXJuIHZlYzIoZCArIGNsKi4yICsgMC4yNSwgY2wpOwp9Cgp2ZWM0IHJlbmRlcigg
aW4gdmVjMyBybywgaW4gdmVjMyByZCwgZmxvYXQgdGltZSApCnsKCXZlYzQgcmV6ID0gdmVjNCgw
KTsKICAgIGNvbnN0IGZsb2F0IGxkc3QgPSA4LjsKCXZlYzMgbHBvcyA9IHZlYzMoZGlzcCh0aW1l
ICsgbGRzdCkqMC41LCB0aW1lICsgbGRzdCk7CglmbG9hdCB0ID0gMS41OwoJZmxvYXQgZm9nVCA9
IDAuOwoJZm9yKGludCBpPTA7IGk8MTMwOyBpKyspCgl7CgkJaWYocmV6LmEgPiAwLjk5KWJyZWFr
OwoKCQl2ZWMzIHBvcyA9IHJvICsgdCpyZDsKICAgICAgICB2ZWMyIG1wdiA9IG1hcChwb3MpOwoJ
CWZsb2F0IGRlbiA9IGNsYW1wKG1wdi54LTAuMywwLiwxLikqMS4xMjsKCQlmbG9hdCBkbiA9IGNs
YW1wKChtcHYueCArIDIuKSwwLiwzLik7CgoJCXZlYzQgY29sID0gdmVjNCgwKTsKICAgICAgICBp
ZiAobXB2LnggPiAwLjYpCiAgICAgICAgewoKICAgICAgICAgICAgY29sID0gdmVjNChzaW4odmVj
Myg1LiwwLjQsMC4yKSArIG1wdi55KjAuMSArc2luKHBvcy56KjAuNCkqMC41ICsgMS44KSowLjUg
KyAwLjUsMC4wOCk7CiAgICAgICAgICAgIGNvbCAqPSBkZW4qZGVuKmRlbjsKCQkJY29sLnJnYiAq
PSBsaW5zdGVwKDQuLC0yLjUsIG1wdi54KSoyLjM7CiAgICAgICAgICAgIGZsb2F0IGRpZiA9ICBj
bGFtcCgoZGVuIC0gbWFwKHBvcysuOCkueCkvOS4sIDAuMDAxLCAxLiApOwogICAgICAgICAgICBk
aWYgKz0gY2xhbXAoKGRlbiAtIG1hcChwb3MrLjM1KS54KS8yLjUsIDAuMDAxLCAxLiApOwogICAg
ICAgICAgICBjb2wueHl6ICo9IGRlbioodmVjMygwLjAwNSwuMDQ1LC4wNzUpICsgMS41KnZlYzMo
MC4wMzMsMC4wNywwLjAzKSpkaWYpOwogICAgICAgIH0KCgkJZmxvYXQgZm9nQyA9IGV4cCh0KjAu
MiAtIDIuMik7CgkJY29sLnJnYmEgKz0gdmVjNCgwLjA2LDAuMTEsMC4xMSwgMC4xKSpjbGFtcChm
b2dDLWZvZ1QsIDAuLCAxLik7CgkJZm9nVCA9IGZvZ0M7CgkJcmV6ID0gcmV6ICsgY29sKigxLiAt
IHJlei5hKTsKCQl0ICs9IGNsYW1wKDAuNSAtIGRuKmRuKi4wNSwgMC4wOSwgMC4zKTsKCX0KCXJl
dHVybiBjbGFtcChyZXosIDAuMCwgMS4wKTsKfQoKZmxvYXQgZ2V0c2F0KHZlYzMgYykKewogICAg
ZmxvYXQgbWkgPSBtaW4obWluKGMueCwgYy55KSwgYy56KTsKICAgIGZsb2F0IG1hID0gbWF4KG1h
eChjLngsIGMueSksIGMueik7CiAgICByZXR1cm4gKG1hIC0gbWkpLyhtYSsgMWUtNyk7Cn0KCi8v
ZnJvbSBteSAiV2lsbCBpdCBibGVuZCIgc2hhZGVyIChodHRwczovL3d3dy5zaGFkZXJ0b3kuY29t
L3ZpZXcvbHNkR3pOKQp2ZWMzIGlMZXJwKGluIHZlYzMgYSwgaW4gdmVjMyBiLCBpbiBmbG9hdCB4
KQp7CiAgICB2ZWMzIGljID0gbWl4KGEsIGIsIHgpICsgdmVjMygxZS02LDAuLDAuKTsKICAgIGZs
b2F0IHNkID0gYWJzKGdldHNhdChpYykgLSBtaXgoZ2V0c2F0KGEpLCBnZXRzYXQoYiksIHgpKTsK
ICAgIHZlYzMgZGlyID0gbm9ybWFsaXplKHZlYzMoMi4qaWMueCAtIGljLnkgLSBpYy56LCAyLipp
Yy55IC0gaWMueCAtIGljLnosIDIuKmljLnogLSBpYy55IC0gaWMueCkpOwogICAgZmxvYXQgbGd0
ID0gZG90KHZlYzMoMS4wKSwgaWMpOwogICAgZmxvYXQgZmYgPSBkb3QoZGlyLCBub3JtYWxpemUo
aWMpKTsKICAgIGljICs9IDEuNSpkaXIqc2QqZmYqbGd0OwogICAgcmV0dXJuIGNsYW1wKGljLDAu
LDEuKTsKfQoKdm9pZCBtYWluSW1hZ2UoIG91dCB2ZWM0IGZyYWdDb2xvciwgaW4gdmVjMiBmcmFn
Q29vcmQgKQp7Cgl2ZWMyIHEgPSBmcmFnQ29vcmQueHkvaVJlc29sdXRpb24ueHk7CiAgICB2ZWMy
IHAgPSAoZ2xfRnJhZ0Nvb3JkLnh5IC0gMC41KmlSZXNvbHV0aW9uLnh5KS9pUmVzb2x1dGlvbi55
OwogICAgYnNNbyA9IChpTW91c2UueHkgLSAwLjUqaVJlc29sdXRpb24ueHkpL2lSZXNvbHV0aW9u
Lnk7CgogICAgZmxvYXQgdGltZSA9IGlUaW1lKjMuOwogICAgdmVjMyBybyA9IHZlYzMoMCwwLHRp
bWUpOwoKICAgIHJvICs9IHZlYzMoc2luKGlUaW1lKSowLjUsc2luKGlUaW1lKjEuKSowLiwwKTsK
CiAgICBmbG9hdCBkc3BBbXAgPSAuODU7CiAgICByby54eSArPSBkaXNwKHJvLnopKmRzcEFtcDsK
ICAgIGZsb2F0IHRndERzdCA9IDMuNTsKCiAgICB2ZWMzIHRhcmdldCA9IG5vcm1hbGl6ZShybyAt
IHZlYzMoZGlzcCh0aW1lICsgdGd0RHN0KSpkc3BBbXAsIHRpbWUgKyB0Z3REc3QpKTsKICAgIHJv
LnggLT0gYnNNby54KjIuOwogICAgdmVjMyByaWdodGRpciA9IG5vcm1hbGl6ZShjcm9zcyh0YXJn
ZXQsIHZlYzMoMCwxLDApKSk7CiAgICB2ZWMzIHVwZGlyID0gbm9ybWFsaXplKGNyb3NzKHJpZ2h0
ZGlyLCB0YXJnZXQpKTsKICAgIHJpZ2h0ZGlyID0gbm9ybWFsaXplKGNyb3NzKHVwZGlyLCB0YXJn
ZXQpKTsKCXZlYzMgcmQ9bm9ybWFsaXplKChwLngqcmlnaHRkaXIgKyBwLnkqdXBkaXIpKjEuIC0g
dGFyZ2V0KTsKICAgIHJkLnh5ICo9IHJvdCgtZGlzcCh0aW1lICsgMy41KS54KjAuMiArIGJzTW8u
eCk7CiAgICBwcm0xID0gc21vb3Roc3RlcCgtMC40LCAwLjQsc2luKGlUaW1lKjAuMykpOwoJdmVj
NCBzY24gPSByZW5kZXIocm8sIHJkLCB0aW1lKTsKCiAgICB2ZWMzIGNvbCA9IHNjbi5yZ2I7CiAg
ICBjb2wgPSBpTGVycChjb2wuYmdyLCBjb2wucmdiLCBjbGFtcCgxLi1wcm0xLDAuMDUsMS4pKTsK
CiAgICBjb2wgPSBwb3coY29sLCB2ZWMzKC41NSwwLjY1LDAuNikpKnZlYzMoMS4sLjk3LC45KTsK
CiAgICBjb2wgKj0gcG93KCAxNi4wKnEueCpxLnkqKDEuMC1xLngpKigxLjAtcS55KSwgMC4xMikq
MC43KzAuMzsgLy9WaWduCgoJZnJhZ0NvbG9yID0gdmVjNCggY29sLCAxLjAgKTsKfQoKICAgIHZv
aWQgbWFpbigpIHsKICAgICAgbWFpbkltYWdlKG91dENvbG9yLCBnbF9GcmFnQ29vcmQueHkpOwog
ICAgfQogIGA7CgoKZnVuY3Rpb24gc2V0dXAocGFyZW50LCBwb3dlclByZWZlcmVuY2UsIGZzKSB7
CiAgLy8gR2V0IEEgV2ViR0wgY29udGV4dAogIC8qKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9
ICovCiAgY29uc3QgY2FudmFzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOwogIGNv
bnN0IGxhYmVsID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYWJlbCcpOwogIGNvbnN0IGdsID0g
Y2FudmFzLmdldENvbnRleHQoIndlYmdsMiIsIHtwb3dlclByZWZlcmVuY2V9KTsKICBpZiAoIWds
KSB7CiAgICBsYWJlbC50ZXh0Q29udGVudCA9ICdjb3VsZCBub3Qgc3RhcnQgV2ViR0wyJzsKICAg
IHJldHVybjsKICB9CiAgY29uc3QgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9kZWJ1Z19y
ZW5kZXJlcl9pbmZvJyk7CiAgY29uc3QgZ3B1ID0gZXh0ID8gZ2wuZ2V0UGFyYW1ldGVyKGV4dC5V
Tk1BU0tFRF9SRU5ERVJFUl9XRUJHTCkgOiAiKiogR1BVIHVua25vd246IG5vIGV4dGVuc2lvbiAq
KiI7CiAgbGFiZWwudGV4dENvbnRlbnQgPSBncHU7CgogIGNvbnN0IHZzID0gYCN2ZXJzaW9uIDMw
MCBlcwogICAgLy8gYW4gYXR0cmlidXRlIGlzIGFuIGlucHV0IChpbikgdG8gYSB2ZXJ0ZXggc2hh
ZGVyLgogICAgLy8gSXQgd2lsbCByZWNlaXZlIGRhdGEgZnJvbSBhIGJ1ZmZlcgogICAgaW4gdmVj
NCBhX3Bvc2l0aW9uOwoKICAgIC8vIGFsbCBzaGFkZXJzIGhhdmUgYSBtYWluIGZ1bmN0aW9uCiAg
ICB2b2lkIG1haW4oKSB7CgogICAgICAvLyBnbF9Qb3NpdGlvbiBpcyBhIHNwZWNpYWwgdmFyaWFi
bGUgYSB2ZXJ0ZXggc2hhZGVyCiAgICAgIC8vIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nCiAg
ICAgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsKICAgIH0KICBgOwoKICBmdW5jdGlvbiBjcmVh
dGVTaGFkZXIoZ2wsIHR5cGUsIHNyYykgewogICAgY29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hh
ZGVyKHR5cGUpOwogICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTsKICAgIGdsLmNvbXBp
bGVTaGFkZXIoc2hhZGVyKTsKICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwg
Z2wuQ09NUElMRV9TVEFUVVMpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihnbC5nZXRTaGFkZXJJ
bmZvTG9nKHNoYWRlcikpOwogICAgfQogICAgcmV0dXJuIHNoYWRlcjsKICB9CgogIGZ1bmN0aW9u
IGNyZWF0ZVByb2dyYW0oZ2wsIHNoYWRlcnMpIHsKICAgIGNvbnN0IHZTaGFkZXIgPSBjcmVhdGVT
aGFkZXIoZ2wsIGdsLlZFUlRFWF9TSEFERVIsIHNoYWRlcnNbMF0pOwogICAgY29uc3QgZlNoYWRl
ciA9IGNyZWF0ZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBzaGFkZXJzWzFdKTsKCiAg
ICBjb25zdCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwogICAgZ2wuYXR0YWNoU2hhZGVy
KHByb2dyYW0sIHZTaGFkZXIpOwogICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZTaGFkZXIp
OwogICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJh
bWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihn
bC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7CiAgICB9CiAgICByZXR1cm4gcHJvZ3JhbTsK
ICB9CgogIC8vIHNldHVwIEdMU0wgcHJvZ3JhbQogIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9n
cmFtKGdsLCBbdnMsIGZzXSk7CgogIC8vIGxvb2sgdXAgd2hlcmUgdGhlIHZlcnRleCBkYXRhIG5l
ZWRzIHRvIGdvLgogIGNvbnN0IHBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbC5nZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCAiYV9wb3NpdGlvbiIpOwoKICAvLyBsb29rIHVwIHVuaWZvcm0g
bG9jYXRpb25zCiAgY29uc3QgcmVzb2x1dGlvbkxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sICJpUmVzb2x1dGlvbiIpOwogIGNvbnN0IG1vdXNlTG9jYXRpb24gPSBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlNb3VzZSIpOwogIGNvbnN0IHRpbWVMb2NhdGlv
biA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaVRpbWUiKTsKCiAgLy8gQ3JlYXRl
IGEgdmVydGV4IGFycmF5IG9iamVjdCAoYXR0cmlidXRlIHN0YXRlKQogIGNvbnN0IHZhbyA9IGds
LmNyZWF0ZVZlcnRleEFycmF5KCk7CgogIC8vIGFuZCBtYWtlIGl0IHRoZSBvbmUgd2UncmUgY3Vy
cmVudGx5IHdvcmtpbmcgd2l0aAogIGdsLmJpbmRWZXJ0ZXhBcnJheSh2YW8pOwoKICAvLyBDcmVh
dGUgYSBidWZmZXIgdG8gcHV0IHRocmVlIDJkIGNsaXAgc3BhY2UgcG9pbnRzIGluCiAgY29uc3Qg
cG9zaXRpb25CdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKCiAgLy8gQmluZCBpdCB0byBBUlJB
WV9CVUZGRVIgKHRoaW5rIG9mIGl0IGFzIEFSUkFZX0JVRkZFUiA9IHBvc2l0aW9uQnVmZmVyKQog
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CgogIC8vIGZp
bGwgaXQgd2l0aCBhIDIgdHJpYW5nbGVzIHRoYXQgY292ZXIgY2xpcCBzcGFjZQogIGdsLmJ1ZmZl
ckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKICAgIC0xLCAtMSwgIC8v
IGZpcnN0IHRyaWFuZ2xlCiAgICAgMSwgLTEsCiAgICAtMSwgIDEsCiAgICAtMSwgIDEsICAvLyBz
ZWNvbmQgdHJpYW5nbGUKICAgICAxLCAtMSwKICAgICAxLCAgMSwKICBdKSwgZ2wuU1RBVElDX0RS
QVcpOwoKICAvLyBUdXJuIG9uIHRoZSBhdHRyaWJ1dGUKICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKCiAgLy8gVGVsbCB0aGUgYXR0cmlidXRl
IGhvdyB0byBnZXQgZGF0YSBvdXQgb2YgcG9zaXRpb25CdWZmZXIgKEFSUkFZX0JVRkZFUikKICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKAogICAgICBwb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLAog
ICAgICAyLCAgICAgICAgICAvLyAyIGNvbXBvbmVudHMgcGVyIGl0ZXJhdGlvbgogICAgICBnbC5G
TE9BVCwgICAvLyB0aGUgZGF0YSBpcyAzMmJpdCBmbG9hdHMKICAgICAgZmFsc2UsICAgICAgLy8g
ZG9uJ3Qgbm9ybWFsaXplIHRoZSBkYXRhCiAgICAgIDAsICAgICAgICAgIC8vIDAgPSBtb3ZlIGZv
cndhcmQgc2l6ZSAqIHNpemVvZih0eXBlKSBlYWNoIGl0ZXJhdGlvbiB0byBnZXQgdGhlIG5leHQg
cG9zaXRpb24KICAgICAgMCwgICAgICAgICAgLy8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUgYnVmZmVyCiAgKTsKCiAgZnVuY3Rpb24gcmVzaXplQ2FudmFzVG9EaXNwbGF5U2l6ZShjYW52
YXMpIHsKICAgIGlmIChjYW52YXMud2lkdGggIT09IGNhbnZhcy5jbGllbnRXaWR0aCB8fCBjYW52
YXMuaGVpZ2h0ICE9PSBjYW52YXMuY2xpZW50SGVpZ2h0KSB7CiAgICAgIGNvbnNvbGUubG9nKGNh
bnZhcy5jbGllbnRXaWR0aCk7CiAgICAgIGNvbnNvbGUubG9nKGNhbnZhcy53aWR0aCk7CgogICAg
ICBjb25zb2xlLmxvZyhjYW52YXMuY2xpZW50SGVpZ2h0KTsKICAgICAgY29uc29sZS5sb2coY2Fu
dmFzLmhlaWdodCk7CiAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aDsKICAg
ICAgY2FudmFzLmhlaWdodCA9IGNhbnZhcy5jbGllbnRIZWlnaHQ7CiAgICB9CiAgfQoKICBmdW5j
dGlvbiByZW5kZXIodGltZSkgewogICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKICAgIGxldCBt
c2VjUGVyRnJhbWUgPSBub3cgLSByZW5kZXJUaW1lOwoKICAgIHJlbmRlclRpbWUgPSBub3c7Cgog
ICAgbXNlY1BlckZyYW1lTGlzdC5wdXNoKG1zZWNQZXJGcmFtZSk7CiAgICBjb25zb2xlLmxvZyht
c2VjUGVyRnJhbWVMaXN0KTsKICAgIGlmIChtc2VjUGVyRnJhbWVMaXN0Lmxlbmd0aCA+IDEwKSB7
CiAgICAgIGxldCBvdXQgPSAnJzsKICAgICAgbGV0IGF2ZyA9IDA7CiAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbXNlY1BlckZyYW1lTGlzdC5sZW5ndGg7ICsraSkgewogICAgICAgIGF2ZyArPSBt
c2VjUGVyRnJhbWVMaXN0W2ldOwogICAgICAgIG91dCArPSAoMS8obXNlY1BlckZyYW1lTGlzdFtp
XS8xMDAwKSkudG9GaXhlZCgpICsgJywnOwogICAgICB9CiAgICAgIGF2ZyAvPSBtc2VjUGVyRnJh
bWVMaXN0Lmxlbmd0aDsKICAgICAgbXNlY1BlckZyYW1lTGlzdCA9IFtdOwoKICAgICAgbGV0IG1z
ZWNQZXJGcmFtZSA9IGF2ZzsKICAgICAgbGV0IHNlY1BlckZyYW1lID0gbXNlY1BlckZyYW1lIC8g
MTAwMDsKICAgICAgbGV0IGZwcyA9IDEvc2VjUGVyRnJhbWU7CiAgICAgIG91dCA9IGZwcy50b0Zp
eGVkKDIpICsgJyBGUFMgKCcgKyBvdXQgKyAnKScKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImZwcyIpLmlubmVyVGV4dCA9IG91dDsKICAgIH0KCgogICAgcmVzaXplQ2FudmFzVG9EaXNw
bGF5U2l6ZShnbC5jYW52YXMpOwoKICAgIC8vIFRlbGwgV2ViR0wgaG93IHRvIGNvbnZlcnQgZnJv
bSBjbGlwIHNwYWNlIHRvIHBpeGVscwogICAgZ2wudmlld3BvcnQoMCwgMCwgZ2wuY2FudmFzLndp
ZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTsKCiAgICAvLyBUZWxsIGl0IHRvIHVzZSBvdXIgcHJvZ3Jh
bSAocGFpciBvZiBzaGFkZXJzKQogICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKCiAgICAvLyBC
aW5kIHRoZSBhdHRyaWJ1dGUvYnVmZmVyIHNldCB3ZSB3YW50LgogICAgZ2wuYmluZFZlcnRleEFy
cmF5KHZhbyk7CgogICAgZ2wudW5pZm9ybTJmKHJlc29sdXRpb25Mb2NhdGlvbiwgZ2wuY2FudmFz
LndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTsKICAgIGdsLnVuaWZvcm0yZihtb3VzZUxvY2F0aW9u
LCAwLCAwKTsKICAgIGdsLnVuaWZvcm0xZih0aW1lTG9jYXRpb24sIHRpbWUgKiAwLjAwMSk7Cgog
ICAgZ2wuZHJhd0FycmF5cygKICAgICAgICBnbC5UUklBTkdMRVMsCiAgICAgICAgMCwgICAgIC8v
IG9mZnNldAogICAgICAgIDYsICAgICAvLyBudW0gdmVydGljZXMgdG8gcHJvY2VzcwogICAgKTsK
CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTsKICB9CiAgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKHJlbmRlcik7Cn0KCnNldHVwKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNoJyksICdo
aWdoLXBlcmZvcm1hbmNlJywgaGlnaFBlcmZGUyk7Ci8vIHNldHVwKGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJyNsJyksICdoaWdoLXBlcmZvcm1hbmNlJywgbG93UG93ZXJGUyk7Cjwvc2NyaXB0Pgo8
L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>