<?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>124727</bug_id>
          
          <creation_ts>2013-11-21 11:06:17 -0800</creation_ts>
          <short_desc>ARM64: Hang running pdfjs test, suspect DFG generated code for &quot;in&quot;</short_desc>
          <delta_ts>2013-12-13 12:44:44 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>953181</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-11-21 11:06:17 -0800</bug_when>
    <thetext>When running the pdfjs test, we end up in a infinite loop.  Looks like it is in DFG generated code for &quot;in&quot;.  Here is one example of the register values and generated code after getting stuck:

(lldb) reg read x1 x16 x17
      x1 = 0x0000000000000007
     x16 = 0x0000000101695f70
     x17 = 0x0000000101695f70

Generated DFG JIT code for charToGlyph#DoDTlR:[0x14cdf7890-&gt;0x102319d70, DFGFunctionCall (StrictMode)], instruction count = 1061:
    Optimized with execution counter = 3015.000000/2830.000000, 5
    Code at [0x16540e1a0, 0x16540f9c8):
...

    Block #56 (bc#812):
      Predecessors: #30 #22 #27 #11 #14 #4 #7 #34 #44 #54 #50 #55
      Dominated by: #0 #56
      Dominates: #56 #57 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69
      Phi Nodes: @509&lt;3&gt;-&gt;(@231, @208), @205&lt;2&gt;-&gt;(@280, @202), @282&lt;1&gt;-&gt;(@283, @332, @120), @119&lt;1&gt;-&gt;(@282, @204, @331), @281&lt;1&gt;-&gt;(@119, @364, @556), @363&lt;1&gt;-&gt;(@281, @203, @609), @280&lt;1&gt;-&gt;(@363, @330, @118), @102&lt;2&gt;-&gt;(@99, @768), @167&lt;1&gt;-&gt;(@168, @304, @100), @303&lt;1&gt;-&gt;(@167, @869, @788), @334&lt;1&gt;-&gt;(@303, @583, @568), @337&lt;1&gt;-&gt;(@334, @636, @621), @99&lt;1&gt;-&gt;(@337, @738, @710), @95&lt;2&gt;-&gt;(@260, @766), @94&lt;1&gt;-&gt;(@172, @216, @299), @338&lt;1&gt;-&gt;(@94, @339, @215), @214&lt;1&gt;-&gt;(@338, @298, @371), @92&lt;1&gt;-&gt;(@214, @93, @297), @260&lt;1&gt;-&gt;(@92, @370, @185), @354&lt;1&gt;-&gt;(@510, @272, @348), @374&lt;1&gt;-&gt;(@354, @351, @357), @384&lt;1&gt;-&gt;(@374, @359, @379), @78&lt;1&gt;-&gt;(@384, @382, @386), @231&lt;1&gt;-&gt;(@78, @388, @177), @232&lt;2&gt;-&gt;(@393, @286), @176&lt;1&gt;-&gt;(@253, @396, @407), @394&lt;1&gt;-&gt;(@176, @73, @230), @72&lt;1&gt;-&gt;(@394, @251, @276), @229&lt;1&gt;-&gt;(@72, @406, @133), @393&lt;1&gt;-&gt;(@229, @175, @250)
             0x16540e950:    tst    x29, #0x7
             0x16540e954:    b.eq   0x16540e95c
             0x16540e958:    brk    #0
     947:           &lt; 1:-15&gt;    JSConstant(JS|UseAsOther, Stringident, $1 = String (identifier): toUnicode, bc#812)
     948:           &lt; 1:-11&gt;    GetLocal(@509, JS|UseAsOther, Final, arg0(N&lt;Final&gt;/FlushedCell), machine:arg0, R:Variables(6), bc#812)  predicting Final
             0x16540e95c:    ldur   x0, [x29, #48]
     949:           &lt;!1:-11&gt;    In(@947&lt;StringIdent&gt;, Cell:@948&lt;Final&gt;, Boolean|MustGen|Clobbers|UseAsOther, Bool, R:World, W:World, bc#812)
             0x16540e960:    tst    x0, x28
             0x16540e964:    b.eq   0x16540e96c
             0x16540e968:    brk    #0
       ==&gt;   0x16540e96c:    b      0x16540f090  &lt;== this branch has been patched to &quot;b 0x16540f9e0&quot;
     950:  skipped  &lt; 0:-&gt;      MovHint(@949&lt;Boolean&gt;, loc6(QH~&lt;Boolean&gt;/FlushedJSValue), machine:loc6, W:SideState, bc#812)
     450:           &lt;!0:-&gt;      InvalidationPoint(MustGen|CanExit, W:SideState, bc#816)
     951:           &lt;!0:-&gt;      Branch(Boolean:@949&lt;Boolean&gt;, MustGen|CanExit, T:#58, F:#57, W:SideState, bc#816)
             0x16540e970:    tbnz   x1, #0, 0x16540e990
    Block #57 (bc#819):
…

Generated JIT code for DFG In (found = yes) stub for charToGlyph#DoDTlR:[0x14cdf7890-&gt;0x102319d70, DFGFunctionCall (StrictMode)], return point 0x16540e96c:
    Code at [0x16540f9e0, 0x16540fa20):
         0x16540f9e0:    ldur   x17, [x0]
         0x16540f9e4:    movz   x16, #24432
         0x16540f9e8:    movk   x16, #361, lsl #16
         0x16540f9ec:    movk   x16, #1, lsl #32
         0x16540f9f0:    cmp    x17, x16
         0x16540f9f4:    b.ne   0x16540f090
         0x16540f9f8:    nop
         0x16540f9fc:    mov    x1, #0x7
         0x16540fa00:    b      0x16540e96c

We execute through the stub with the compare of x16 &amp; x17 being equal.  The branch at the end of the stub takes us to the branch that has been patch, which takes us back to the stub.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953206</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-11-21 11:42:28 -0800</bug_when>
    <thetext>I commented out the isConstant() fast path in SpeculativeJIT::compileIn() and pdfjs now works.  Looking into the patching that happens in operationInOptimize().

    if (isConstant(node-&gt;child1().node())) {
        JSString* string =
            jsDynamicCast&lt;JSString*&gt;(valueOfJSConstant(node-&gt;child1().node()));
        if (string &amp;&amp; string-&gt;tryGetValueImpl()
            &amp;&amp; string-&gt;tryGetValueImpl()-&gt;isIdentifier()) {
            StructureStubInfo* stubInfo = m_jit.codeBlock()-&gt;addStubInfo();
            
            GPRTemporary result(this);
            GPRReg resultGPR = result.gpr();

            use(node-&gt;child1());
                
            MacroAssembler::PatchableJump jump = m_jit.patchableJump();
            
            OwnPtr&lt;SlowPathGenerator&gt; slowPath = slowPathCall(
                jump.m_jump, this, operationInOptimize,
                JSValueRegs::payloadOnly(resultGPR), stubInfo, baseGPR,
                string-&gt;tryGetValueImpl());
            
            stubInfo-&gt;codeOrigin = node-&gt;codeOrigin;
            stubInfo-&gt;patch.baseGPR = static_cast&lt;int8_t&gt;(baseGPR);
            stubInfo-&gt;patch.valueGPR = static_cast&lt;int8_t&gt;(resultGPR);
            stubInfo-&gt;patch.usedRegisters = usedRegisters();
            stubInfo-&gt;patch.registersFlushed = false;
            
            m_jit.addIn(InRecord(jump, slowPath.get(), stubInfo));
            addSlowPathGenerator(slowPath.release());
                
            base.use();
                
#if USE(JSVALUE64)
            jsValueResult(
                resultGPR, node, DataFormatJSBoolean, UseChildrenCalledExplicitly);
#else
            booleanResult(resultGPR, node, UseChildrenCalledExplicitly);
#endif
            return;
        }
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953364</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-11-21 17:17:51 -0800</bug_when>
    <thetext>The issue here is the differences between ARM64 and most other macro assemblers as to how a CodeLocationLabel records the location of a jump.  For ARM64, we record the address of the jump while most of the other architectures point at the instruction AFTER the jump.  We overuse the CodeLocationLabel for the jump to patch AND the location to continue after the stub we jumped to.  It is that returning jump that gets messed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958793</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-11 10:53:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/15566923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959045</commentid>
    <comment_count>4</comment_count>
      <attachid>219041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-11 21:17:30 -0800</bug_when>
    <thetext>Created attachment 219041
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959046</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-11 21:19:34 -0800</bug_when>
    <thetext>Attachment 219041 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/StructureStubInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/dfg/DFGJITCompiler.h:87:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 1 in 7 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>959234</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-12 10:36:12 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/160493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959627</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-13 12:43:07 -0800</bug_when>
    <thetext>Can we add a test for this to run-webkit-tests or run-javascriptcore-tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959629</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-13 12:44:44 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Can we add a test for this to run-webkit-tests or run-javascriptcore-tests?

We have the ability to run pdfjs as part of both of those things.

Also, I believe that we already have op_in tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219041</attachid>
            <date>2013-12-11 21:17:30 -0800</date>
            <delta_ts>2013-12-12 08:14:48 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11800</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNDc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDEzLTEyLTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QVJNNjQ6IEhhbmcgcnVubmluZyBwZGZqcyB0ZXN0LCBzdXNwZWN0IERGRyBnZW5lcmF0ZWQgY29k
ZSBmb3IgImluIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI0NzI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTU2NjkyMz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEdldCByaWQgb2Yg
SW4ncyBoYWNraXNoIHVzZSBvZiBTdHJ1Y3R1cmVTdHViSW5mby4gUHJldmlvdXNseSBpdCB3YXMg
dXNpbmcgaG90UGF0aEJlZ2luLAorICAgICAgICBhbmQgaXQgd2FzIHRoZSBvbmx5IElDIHRoYXQg
dXNlZCB0aGF0IGZpZWxkLCB3aGljaCB3YXMgd2FzdGVmdWwuIE1vcmVvdmVyLCBpdCB1c2VkIGl0
CisgICAgICAgIHRvIHN0b3JlIHR3byBzZXBhcmF0ZSBsb2NhdGlvbnM6IHRoZSBsYWJlbCBmb3Ig
cGF0Y2hpbmcgdGhlIGp1bXAgYW5kIHRoZSBsYWJlbCByaWdodAorICAgICAgICBhZnRlciB0aGUg
anVtcC4gVGhlIGNvZGUgd2FzIHJlbHlpbmcgb24gdGhvc2UgdHdvIGJlaW5nIHRoZSBzYW1lIGxh
YmVsLCB3aGljaCBpcyB0cnVlCisgICAgICAgIG9uIFg4NiBhbmQgc29tZSBvdGhlciBwbGF0Zm9y
bXMsIGJ1dCBpdCBpc24ndCB0cnVlIG9uIEFSTTY0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBn
ZXRzIHJpZCBvZiBob3RQYXRoQmVnaW4gYW5kIG1ha2VzIEluIGV4cHJlc3MgdGhvc2UgdHdvIGxv
Y2F0aW9ucyBhcyBvZmZzZXRzIGZyb20KKyAgICAgICAgdGhlIGNhbGxSZXR1cm5Mb2NhdGlvbiwg
d2hpY2ggaXMgYW5hbG9nb3VzIHRvIHdoYXQgdGhlIG90aGVyIElDJ3MgZG8uCisgICAgICAgIAor
ICAgICAgICBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGFueSBzdWNjZXNzZnVsIEluIHBhdGNoaW5n
IHdvdWxkIHJlc3VsdCBpbiBhIHRyaXZpYWxseSBpbmZpbml0ZQorICAgICAgICBsb29wIC0gYW5k
IGhlbmNlIGEgaGFuZyAtIG9uIEFSTTY0LgorCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblJlY29yZDo6SW5SZWNvcmQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAg
ICAoSlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldEluKToKKwogMjAx
My0xMi0xMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFB1c2ggTW9yZSBJbnNwZWN0b3IgUmVxdWlyZWQgQ2xhc3NlcyBEb3du
IGludG8gSmF2YVNjcmlwdENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxNjA0NDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CiAgICAgICAgIGludDMyX3QgZGVsdGFDYWxs
VG9Eb25lOwogICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQ7Ci0gICAgICAg
IGludDMyX3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICAgICAgaW50MzJfdCBkZWx0YUNh
bGxUb0p1bXA7CiAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKICAgICAgICAg
aW50MzJfdCBkZWx0YUNoZWNrSW1tVG9DYWxsOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yOTEs
NyArMjkxLDYgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOyAvLyBGSVhNRTog
VGhpcyBpcyBvbmx5IHVzZWQgYnkgREZHIEluIElDLgogICAgIFJlZlB0cjxXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9pbnRzOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDQ0OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjEsOSArMjIxLDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5zLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gKm1faW5zW2ldLm1fc3R1Yklu
Zm87Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGp1bXAgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9pbnNbaV0ubV9qdW1wKTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVy
YXRvci0+Y2FsbCgpKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBqdW1wOworICAgICAg
ICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUp
KTsKKyAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAgPSBkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNb
aV0ubV9qdW1wKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVy
bkxvY2F0aW9uOwogICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9u
IDE2MDQ0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtODEsMTUgKzgxLDE3IEBAIHN0cnVjdCBDYWxsTGlua1JlY29yZCB7
CiAKIHN0cnVjdCBJblJlY29yZCB7CiAgICAgSW5SZWNvcmQoCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIGp1bXAsIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdlbmVy
YXRvciwKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBqdW1wLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZSwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2VuZXJhdG9yLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8pCiAgICAgICAgIDogbV9qdW1wKGp1bXApCisgICAgICAgICwg
bV9kb25lKGRvbmUpCiAgICAgICAgICwgbV9zbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aEdlbmVy
YXRvcikKICAgICAgICAgLCBtX3N0dWJJbmZvKHN0dWJJbmZvKQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9qdW1wOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIG1fc2xvd1BhdGhH
ZW5lcmF0b3I7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE2MDQ0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsOCArOTcyLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKIAogICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAganVtcCA9IG1faml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcCwgdGhpcywgb3BlcmF0aW9uSW5P
cHRpbWl6ZSwKQEAgLTk4Niw3ICs5ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SW4oTm9kZSogbm9kCiAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5yZWdpc3RlcnNG
bHVzaGVkID0gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEluKElu
UmVjb3JkKGp1bXAsIHNsb3dQYXRoLmdldCgpLCBzdHViSW5mbykpOworICAgICAgICAgICAgbV9q
aXQuYWRkSW4oSW5SZWNvcmQoanVtcCwgZG9uZSwgc2xvd1BhdGguZ2V0KCksIHN0dWJJbmZvKSk7
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgYmFzZS51c2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNjA0NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lk
IEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmCiAgICAgbV9zdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwogICAgIG1fc3R1YkluZm8tPnBh
dGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAogICAgICAgICBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwg
Y2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAg
ICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0p1bXAgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAogICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQ
YXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2MDQ0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0
aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlCiAgICAgCiAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCiAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogfQogCkBAIC00NTcsNyArNDU3LDcgQEAgc3Rh
dGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQgogICAgIGlmIChzdHViSW5mby51
LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCks
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAzMyw3ICsxMDMzLDcgQEAgc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluaygKICAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9KdW1wKSwKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaENhbGwocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RC
dWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKQEAg
LTExMzcsNyArMTEzNyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKQEAgLTExODEsNyArMTE4MSw3IEBAIHN0YXRp
YyBib29sIHRyeVJlcGF0Y2hJbigKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7CiAgICAgCiAgICAgaWYgKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CkBAIC0xMjU5LDcgKzEyNTksNyBAQCBz
dGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCiAgICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUr
KzsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0
KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICByZXR1cm4gbGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwogfQpAQCAtMTQzMiw3ICsxNDMy
LDcgQEAgdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaAogICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAw
KTsKICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOwogI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQog
CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNDY2LDEyICsxNDY2LDEyIEBAIHZvaWQgcmVzZXRQ
dXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2gKICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwogICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwogI2VuZGlm
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1w
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
Cg==
</data>
<flag name="review"
          id="242631"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>