<html>
<head>
<style>
.c10 { display: table-caption; width: 65536px; }
.c12 > .c7 { visibility: hidden; float: left; }
.c13:nth-of-type(2n) { color: Yellow; }
.c15:nth-last-of-type(-n+6) { display: -webkit-box; padding-left: 65536px; }
</style>

<script>
if (window.testRunner) {
    testRunner.waitUntilDone();
}

var nodes = Array();

function tryToCrash()
{
    try { nodes[84].setAttribute('class', 'c18'); } catch(e) {};
    setTimeout('testRunner.notifyDone();',1000);
}

function boom() {
    try { nodes[8] = document.createElement('select'); } catch(e) {}
    try { nodes[8].setAttribute('class', 'c7'); } catch(e) {}
    try { nodes[16] = document.createElement('abbr'); } catch(e) {}
    try { nodes[84] = document.createElement('li'); } catch(e) {}
    try { document.documentElement.appendChild(nodes[84]); } catch(e) {}
    try { nodes[91] = document.createElement('caption'); } catch(e) {}
    try { nodes[91].setAttribute('class', 'c12'); } catch(e) {}
    try { document.documentElement.appendChild(nodes[91]); } catch(e) {}
    try { nodes[92] = document.createElement('details'); } catch(e) {}
    try { nodes[92].setAttribute('class', 'c10'); } catch(e) {}
    try { document.documentElement.appendChild(nodes[92]); } catch(e) {}
    try { nodes[94] = document.createElement('ruby'); } catch(e) {}
    try { nodes[94].setAttribute('class', 'c13'); } catch(e) {}
    try { document.documentElement.appendChild(nodes[94]); } catch(e) {}

    setTimeout("try { nodes[8].setAttribute('class', 'c15'); } catch(e) {}", 616);
    setTimeout('try { nodes[91].appendChild(nodes[8]); } catch(e) {}', 502);
    setTimeout('try { nodes[92].appendChild(nodes[16]); } catch(e) {}', 461);
    setTimeout('tryToCrash();', 519);
}
</script>
</head>
<body onLoad="setTimeout('boom();',0)">
Passes if it doesn't crash!
</body>
</html>