| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| <title>Geopol Forecaster — Prediction Runs</title> |
| <link rel="stylesheet" href="style.css" /> |
| <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"></script> |
| </head> |
| <body> |
|
|
| |
| <header class="hero"> |
| <div class="container"> |
| <h1>Geopol Forecaster</h1> |
| <p class="subtitle">Open-sourced geopolitical prediction runs using a two-stage LLM ensemble pipeline</p> |
| <div class="badge-row"> |
| <a href="https://github.com/danielrosehill/Geopol-Forecaster" target="_blank" class="badge">Pipeline Source</a> |
| <a href="https://github.com/danielrosehill/Geopol-Forecasts-Index" target="_blank" class="badge">Forecasts Index</a> |
| </div> |
| </div> |
| </header> |
|
|
| |
| <section id="stack" class="section"> |
| <div class="container"> |
| <h2>The Stack</h2> |
| <p>The pipeline combines two established LLM ensemble techniques into a single grounded forecasting system. Each stage runs independently — when their probability estimates converge, it suggests genuine signal rather than averaging noise.</p> |
|
|
| <div class="stack-grid"> |
| <div class="stack-card"> |
| <div class="stack-icon">A</div> |
| <h3>Stage A — Actor Simulation</h3> |
| <p class="stack-source">Inspired by <a href="https://github.com/IQTLabs/snowglobe" target="_blank">Snowglobe</a> (IQTLabs)</p> |
| <p>Monte Carlo actor simulation with a referee + per-actor control loop. Each actor commits privately and independently. A referee narrates the evolving world state between turns using authority-precedence conflict resolution. Actors see only referee-authored state and their own private memory — no cross-contamination.</p> |
| </div> |
| <div class="stack-card"> |
| <div class="stack-icon">B</div> |
| <h3>Stage B — Council Protocol</h3> |
| <p class="stack-source">Inspired by <a href="https://github.com/karpathy/llm-council" target="_blank">LLM Council</a> (Karpathy)</p> |
| <p>Six analytical lenses (Neutral, Pessimistic, Optimistic, Blindsides, Probabilistic, Historical) deliberate via a 3-stage protocol: parallel independent answers, blind peer review, chairman synthesis. No cross-contamination between lenses until review stage.</p> |
| </div> |
| </div> |
|
|
| <div class="stack-details"> |
| <h3>Infrastructure</h3> |
| <div class="tech-pills"> |
| <span class="pill">LangGraph</span> |
| <span class="pill">SQLite checkpointing</span> |
| <span class="pill">Tavily search</span> |
| <span class="pill">RSS / ISW feeds</span> |
| <span class="pill">Pinecone vector memory</span> |
| <span class="pill">OpenRouter</span> |
| <span class="pill">Claude Sonnet 4.5</span> |
| <span class="pill">Typst PDF rendering</span> |
| </div> |
| <div class="pipeline-flow"> |
| <div class="flow-step"> |
| <div class="flow-num">0</div> |
| <div class="flow-label">Gather & freeze live news<br><small>Tavily + ISW/RSS</small></div> |
| </div> |
| <div class="flow-arrow">→</div> |
| <div class="flow-step"> |
| <div class="flow-num">A</div> |
| <div class="flow-label">Actor simulation<br><small>N actors × T timesteps</small></div> |
| </div> |
| <div class="flow-arrow">→</div> |
| <div class="flow-step"> |
| <div class="flow-num">B</div> |
| <div class="flow-label">6-lens council<br><small>Answers → Review → Chairman</small></div> |
| </div> |
| <div class="flow-arrow">→</div> |
| <div class="flow-step"> |
| <div class="flow-num">out</div> |
| <div class="flow-label">Report + PDF<br><small>Typst rendering</small></div> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="stack-details" style="margin-top:2rem"> |
| <h3>Experiment Design Philosophy</h3> |
| <p style="color:var(--muted);font-size:0.92rem;max-width:800px">Both stages are grounded with a <strong style="color:var(--text)">frozen news bundle</strong> (Tavily search + ISW/RSS feeds) so every actor and every council lens reasons from an identical world state. All LLM calls are routed through <strong style="color:var(--text)">OpenRouter</strong> to the same model. Stage A produces emergent outcomes from N agents reasoning from their own persona in a game-theoretic loop. Stage B produces calibrated probabilities from expert-style analytical reasoning. Neither stage has access to the other's reasoning during execution. When they converge on similar probability estimates, it provides evidence the pipeline is surfacing genuine signal.</p> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="run3" class="section section-alt"> |
| <div class="container"> |
| <div class="run-header"> |
| <span class="run-number">#3</span> |
| <div> |
| <h2>Iran Forced Regime Change Probability</h2> |
| <p class="run-date">10 April 2026 · 10 actors · 6 lenses · Claude Sonnet 4.5</p> |
| </div> |
| </div> |
|
|
| <div class="headline-box"> |
| <p class="headline-question"><strong>Question:</strong> What is the probability of forced regime change in Iran — defined as the IRGC being removed from power and replaced by a non-autocratic government that formally recognises Israel and renounces eliminationism — within 1 week, 1 month, and 1 year?</p> |
| <div class="headline-forecast"> |
| <div class="forecast-pill red"><1%<span>+1 week</span></div> |
| <div class="forecast-pill orange">1-3%<span>+1 month</span></div> |
| <div class="forecast-pill yellow">4-9%<span>+1 year</span></div> |
| </div> |
| <p class="headline-summary">Forced regime change remains highly unlikely. Despite 85% defence industrial base destruction and 92% public dissatisfaction, the IRGC maintains institutional cohesion. The most probable pathway involves cascading failures requiring 9-18 months to materialise.</p> |
| </div> |
|
|
| <div class="charts-row"> |
| <div class="chart-box"> |
| <h3>Per-Lens Probability at +1 Year</h3> |
| <canvas id="chart-rc-1yr"></canvas> |
| </div> |
| <div class="chart-box"> |
| <h3>Simulation vs Council Across Horizons</h3> |
| <canvas id="chart-rc-convergence"></canvas> |
| </div> |
| </div> |
|
|
| <div class="key-findings"> |
| <h3>Key Findings</h3> |
| <ol> |
| <li><strong>IRGC institutional resilience exceeds military degradation.</strong> Despite 85% industrial base destruction, IRGC controls 40%+ of economy and maintains internal security apparatus.</li> |
| <li><strong>Opposition fragmentation is the binding constraint.</strong> 92% dissatisfaction does not equal organised capacity. No parallel governance structures visible.</li> |
| <li><strong>Nuclear escalation continues.</strong> 60-75% probability of 90% uranium enrichment at Fordow within a month.</li> |
| <li><strong>Historical precedent unfavourable.</strong> IRGC survived Iran-Iraq War, 2009 Green Movement, 2019 protests, and 2022 Mahsa Amini uprising.</li> |
| <li><strong>Simulation overestimates regime fragility.</strong> Stage A estimated 12% at 1 year — discounted to 4-9% by the council based on fresh data constraints.</li> |
| </ol> |
| </div> |
|
|
| <div class="experiment-details"> |
| <h3>Experiment Parameters</h3> |
| <div class="param-grid"> |
| <div class="param"><span class="param-key">Actors</span><span class="param-val">10 (Khamenei, Netanyahu, Trump, IRGC, Hezbollah, CENTCOM, Mossad, IDF, Russia, MBS)</span></div> |
| <div class="param"><span class="param-key">Timesteps</span><span class="param-val">3 (+1wk, +1mo, +1yr)</span></div> |
| <div class="param"><span class="param-key">MC runs</span><span class="param-val">1</span></div> |
| <div class="param"><span class="param-key">Actor temp</span><span class="param-val">0.8 (exploratory)</span></div> |
| <div class="param"><span class="param-key">Referee temp</span><span class="param-val">0.4 (consistent)</span></div> |
| <div class="param"><span class="param-key">Council protocol</span><span class="param-val">3-stage (0.6 / 0.4 / 0.5)</span></div> |
| <div class="param"><span class="param-key">Grounding</span><span class="param-val">6 Tavily queries + RSS (48h)</span></div> |
| <div class="param"><span class="param-key">Chairman max tokens</span><span class="param-val">12,000</span></div> |
| </div> |
| </div> |
|
|
| <div class="run-links"> |
| <a href="https://github.com/danielrosehill/Iran-Regime-Change-Forecast-1004" target="_blank" class="badge">Full Report & Data</a> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="run2" class="section"> |
| <div class="container"> |
| <div class="run-header"> |
| <span class="run-number">#2</span> |
| <div> |
| <h2>Iran-Israel-US Ceasefire Durability</h2> |
| <p class="run-date">9 April 2026 · 38 actors · 6 lenses · Claude Sonnet 4.5</p> |
| </div> |
| </div> |
|
|
| <div class="headline-box"> |
| <p class="headline-question"><strong>Question:</strong> What is the probability that the two-week ceasefire announced on 8 April 2026 between Iran, the United States, and Israel holds at +24h, +72h, +1 week, and +1 month?</p> |
| <div class="headline-forecast"> |
| <div class="forecast-pill yellow">55%<span>+24 hours</span></div> |
| <div class="forecast-pill orange">22%<span>+72 hours</span></div> |
| <div class="forecast-pill red">10%<span>+1 week</span></div> |
| <div class="forecast-pill dark-red">4%<span>+1 month</span></div> |
| </div> |
| <p class="headline-summary">The council assessed the ceasefire as a <strong>tactical pause, not genuine de-escalation</strong>, with rapidly decaying survival probabilities. The 72-hour mark (April 11-13) was identified as the critical inflection point.</p> |
| </div> |
|
|
| <div class="charts-row"> |
| <div class="chart-box"> |
| <h3>Ceasefire Survival by Lens</h3> |
| <canvas id="chart-cf-lenses"></canvas> |
| </div> |
| <div class="chart-box"> |
| <h3>72h Convergence — All Perspectives</h3> |
| <canvas id="chart-cf-72h"></canvas> |
| </div> |
| </div> |
|
|
| <div class="convergence-callout"> |
| <h3>Stage A / Stage B Convergence</h3> |
| <p>The most notable experimental finding: <strong>Stage A (actor simulation) and Stage B (analytical council) converged to within 6 percentage points on the critical 72-hour window</strong> — despite being completely independent processes with no shared reasoning.</p> |
| <div class="convergence-stats"> |
| <div class="conv-stat"> |
| <div class="conv-value">28%</div> |
| <div class="conv-label">Simulation (Stage A)</div> |
| </div> |
| <div class="conv-stat"> |
| <div class="conv-value">22%</div> |
| <div class="conv-label">Chairman (Stage B)</div> |
| </div> |
| <div class="conv-stat"> |
| <div class="conv-value">6pt</div> |
| <div class="conv-label">Spread</div> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="key-findings"> |
| <h3>Key Findings</h3> |
| <ol> |
| <li><strong>Lebanon scope ambiguity is weaponised, not accidental.</strong> Both sides exploit undefined terms to continue operations while claiming compliance.</li> |
| <li><strong>Hezbollah is the most likely immediate trigger</strong> (24-72h window) — has never maintained operational pause >72h while under sustained attack.</li> |
| <li><strong>Hormuz status is the sole genuine de-escalatory action.</strong> Iran keeping the Strait partially open (10-15 vessels/day vs pre-war 135/day) as leverage.</li> |
| <li><strong>Russian evacuation from Iranian nuclear facilities</strong> was the single most important fresh data point, suggesting Israel planning strikes within 72-96h.</li> |
| <li><strong>Mojtaba Khamenei's functional status</strong> identified as highest-impact uncertainty — if incapacitated, ceasefire collapse rises to 80% within 72h.</li> |
| </ol> |
| </div> |
|
|
| <div class="experiment-details"> |
| <h3>Experiment Parameters</h3> |
| <div class="param-grid"> |
| <div class="param"><span class="param-key">Actors</span><span class="param-val">38 (Iranian factions, Israeli security, US apparatus, Lebanon, proxies, regional, global)</span></div> |
| <div class="param"><span class="param-key">Timesteps</span><span class="param-val">4 (now, +24h, +1wk, +1mo)</span></div> |
| <div class="param"><span class="param-key">LLM calls</span><span class="param-val">~165</span></div> |
| <div class="param"><span class="param-key">Wall clock</span><span class="param-val">~18 min</span></div> |
| <div class="param"><span class="param-key">Estimated cost</span><span class="param-val">$6-12</span></div> |
| <div class="param"><span class="param-key">Actor temp</span><span class="param-val">0.8</span></div> |
| <div class="param"><span class="param-key">Referee temp</span><span class="param-val">0.4</span></div> |
| <div class="param"><span class="param-key">Grounding</span><span class="param-val">4 Tavily queries + ISW/RSS (48h)</span></div> |
| </div> |
| </div> |
|
|
| <div class="run-links"> |
| <a href="https://github.com/danielrosehill/Iran-Israel-Ceasefire-Prediction-090426" target="_blank" class="badge">Full Report & Data</a> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="accuracy" class="section section-alt"> |
| <div class="container"> |
| <h2>Accuracy Tracking</h2> |
| <p>All predictions are graded on a standard 4-point rubric as prediction windows close. Wire services (Reuters, AP) take precedence over opinion sources.</p> |
|
|
| <div class="accuracy-table-wrapper"> |
| <h3>Run 1 — Iran-Israel-US Conflict Trajectory (24/03/2026)</h3> |
| <p class="run-score">Run Score: <strong>0.75</strong> — 5 Correct, 1 Incorrect</p> |
| <table class="accuracy-table"> |
| <thead> |
| <tr><th>#</th><th>Window</th><th>Prediction</th><th>Outcome</th><th>Grade</th></tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>1.1</td><td>24h-1wk</td> |
| <td>Israeli operations continue at full intensity</td> |
| <td>IDF continued strikes through to April 8 ceasefire</td> |
| <td class="grade-correct">Correct</td> |
| </tr> |
| <tr> |
| <td>1.2</td><td>24h-1wk</td> |
| <td>Iranian proxy retaliations continue</td> |
| <td>Hezbollah maintained 55+ attacks/day</td> |
| <td class="grade-correct">Correct</td> |
| </tr> |
| <tr> |
| <td>1.3</td><td>1mo</td> |
| <td>Iranian ballistic missile capabilities degraded 50%+</td> |
| <td>Coalition struck ~330/470 known launchers (70%)</td> |
| <td class="grade-correct">Correct</td> |
| </tr> |
| <tr> |
| <td>1.4</td><td>1mo</td> |
| <td>IDF maintains/extends buffer zone to Litani</td> |
| <td>IDF reached Litani River by March 24</td> |
| <td class="grade-correct">Correct</td> |
| </tr> |
| <tr> |
| <td>1.5</td><td>1wk</td> |
| <td>March 27 deadline fails</td> |
| <td>No deal reached; war continued until April 8</td> |
| <td class="grade-correct">Correct</td> |
| </tr> |
| <tr> |
| <td>1.6</td><td>1mo</td> |
| <td>No ceasefire holds before March 27</td> |
| <td>Ceasefire reached April 8 — model assessed as improbable</td> |
| <td class="grade-incorrect">Incorrect</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
|
|
| <div class="accuracy-table-wrapper"> |
| <h3>Runs 2 & 3 — Windows Still Open</h3> |
| <p style="color:var(--muted)">Prediction windows for the ceasefire durability and regime change runs have not yet closed. Accuracy will be assessed as ground truth becomes available.</p> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="index" class="section"> |
| <div class="container"> |
| <h2>All Prediction Runs</h2> |
| <table class="index-table"> |
| <thead> |
| <tr><th>#</th><th>Date</th><th>Topic</th><th>Actors</th><th>Lenses</th><th>Model</th><th>Key Finding</th></tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>3</td><td>10/04/2026</td> |
| <td><a href="https://github.com/danielrosehill/Iran-Regime-Change-Forecast-1004" target="_blank">Iran forced regime change</a></td> |
| <td>10</td><td>6</td><td>Claude Sonnet 4.5</td> |
| <td><1% / 1-3% / 4-9% at +1wk/+1mo/+1yr</td> |
| </tr> |
| <tr> |
| <td>2</td><td>09/04/2026</td> |
| <td><a href="https://github.com/danielrosehill/Iran-Israel-Ceasefire-Prediction-090426" target="_blank">Iran-Israel-US ceasefire durability</a></td> |
| <td>38</td><td>6</td><td>Claude Sonnet 4.5</td> |
| <td>22% chance ceasefire holds at +72h (sim: 28%)</td> |
| </tr> |
| <tr> |
| <td>1</td><td>24/03/2026</td> |
| <td><a href="https://github.com/danielrosehill/Iran-Israel-Conflict-Trajectory-240326" target="_blank">Iran-Israel-US conflict trajectory</a></td> |
| <td>--</td><td>6</td><td>--</td> |
| <td>5/5 high-confidence predictions validated</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </section> |
|
|
| |
| <footer class="footer"> |
| <div class="container"> |
| <p><strong>Daniel Rosehill</strong> · <a href="https://danielrosehill.com" target="_blank">danielrosehill.com</a></p> |
| <p class="footer-sub">Reports and data released under CC BY 4.0. Pipeline source: <a href="https://github.com/danielrosehill/Geopol-Forecaster" target="_blank">Geopol-Forecaster</a></p> |
| </div> |
| </footer> |
|
|
| |
| <script> |
| const COLORS = { |
| neutral: '#6366f1', |
| pessimistic: '#ef4444', |
| optimistic: '#22c55e', |
| blindsides: '#f59e0b', |
| probabilistic: '#3b82f6', |
| historical: '#8b5cf6', |
| chairman: '#ffffff', |
| simulation: '#f97316', |
| }; |
| |
| const defaults = Chart.defaults; |
| defaults.color = '#94a3b8'; |
| defaults.borderColor = 'rgba(148,163,184,0.15)'; |
| defaults.font.family = "'Inter', system-ui, -apple-system, sans-serif"; |
| |
| |
| new Chart(document.getElementById('chart-rc-1yr'), { |
| type: 'bar', |
| data: { |
| labels: ['Neutral','Pessimistic','Optimistic','Blindsides','Probabilistic','Historical','Chairman','Simulation'], |
| datasets: [{ |
| label: '+1 Year Probability (%)', |
| data: [8, 5, 15, 20, 6, 8, 6.5, 12], |
| backgroundColor: [ |
| COLORS.neutral, COLORS.pessimistic, COLORS.optimistic, COLORS.blindsides, |
| COLORS.probabilistic, COLORS.historical, COLORS.chairman, COLORS.simulation |
| ], |
| borderRadius: 4, |
| }] |
| }, |
| options: { |
| responsive: true, |
| plugins: { |
| legend: { display: false }, |
| tooltip: { callbacks: { label: ctx => ctx.parsed.y + '%' } } |
| }, |
| scales: { |
| y: { beginAtZero: true, max: 25, ticks: { callback: v => v + '%' }, grid: { color: 'rgba(148,163,184,0.1)' } }, |
| x: { ticks: { maxRotation: 45 }, grid: { display: false } } |
| } |
| } |
| }); |
| |
| |
| new Chart(document.getElementById('chart-rc-convergence'), { |
| type: 'line', |
| data: { |
| labels: ['+1 Week', '+1 Month', '+1 Year'], |
| datasets: [ |
| { label: 'Chairman', data: [0.5, 2, 6.5], borderColor: COLORS.chairman, backgroundColor: 'rgba(255,255,255,0.1)', tension: 0.3, pointRadius: 5, borderWidth: 3 }, |
| { label: 'Simulation', data: [0.5, 3, 12], borderColor: COLORS.simulation, backgroundColor: 'rgba(249,115,22,0.1)', tension: 0.3, pointRadius: 5, borderWidth: 3 }, |
| { label: 'Neutral', data: [0.5, 2, 8], borderColor: COLORS.neutral, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Optimistic', data: [1, 5, 15], borderColor: COLORS.optimistic, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Blindsides', data: [2, 8, 20], borderColor: COLORS.blindsides, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Probabilistic', data: [0.3, 1.5, 6], borderColor: COLORS.probabilistic, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| ] |
| }, |
| options: { |
| responsive: true, |
| plugins: { tooltip: { callbacks: { label: ctx => ctx.dataset.label + ': ' + ctx.parsed.y + '%' } } }, |
| scales: { |
| y: { beginAtZero: true, max: 25, ticks: { callback: v => v + '%' }, grid: { color: 'rgba(148,163,184,0.1)' } }, |
| x: { grid: { display: false } } |
| } |
| } |
| }); |
| |
| |
| new Chart(document.getElementById('chart-cf-lenses'), { |
| type: 'line', |
| data: { |
| labels: ['+24h', '+72h', '+1 Week', '+1 Month'], |
| datasets: [ |
| { label: 'Chairman', data: [55, 22, 10, 4], borderColor: COLORS.chairman, borderWidth: 3, tension: 0.3, pointRadius: 5 }, |
| { label: 'Simulation', data: [55, 28, null, null], borderColor: COLORS.simulation, borderWidth: 3, tension: 0.3, pointRadius: 5 }, |
| { label: 'Neutral', data: [62, 28, 15, 8], borderColor: COLORS.neutral, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Pessimistic', data: [18, 12, 8, 3], borderColor: COLORS.pessimistic, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Optimistic', data: [72, 58, 45, 32], borderColor: COLORS.optimistic, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Blindsides', data: [12, 3, 0.5, 0], borderColor: COLORS.blindsides, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Probabilistic', data: [72, 38, 18, 8], borderColor: COLORS.probabilistic, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| { label: 'Historical', data: [45, 18, 8, 3], borderColor: COLORS.historical, borderDash: [4,4], tension: 0.3, pointRadius: 3 }, |
| ] |
| }, |
| options: { |
| responsive: true, |
| plugins: { tooltip: { callbacks: { label: ctx => ctx.dataset.label + ': ' + ctx.parsed.y + '%' } } }, |
| scales: { |
| y: { beginAtZero: true, max: 80, ticks: { callback: v => v + '%' }, title: { display: true, text: 'P(ceasefire holds)' }, grid: { color: 'rgba(148,163,184,0.1)' } }, |
| x: { grid: { display: false } } |
| } |
| } |
| }); |
| |
| |
| new Chart(document.getElementById('chart-cf-72h'), { |
| type: 'bar', |
| data: { |
| labels: ['Blindsides','Pessimistic','Historical','Chairman','Neutral','Simulation','Probabilistic','Optimistic'], |
| datasets: [{ |
| label: 'P(ceasefire holds at +72h)', |
| data: [3, 12, 18, 22, 28, 28, 38, 58], |
| backgroundColor: [ |
| COLORS.blindsides, COLORS.pessimistic, COLORS.historical, COLORS.chairman, |
| COLORS.neutral, COLORS.simulation, COLORS.probabilistic, COLORS.optimistic |
| ], |
| borderRadius: 4, |
| }] |
| }, |
| options: { |
| indexAxis: 'y', |
| responsive: true, |
| plugins: { |
| legend: { display: false }, |
| tooltip: { callbacks: { label: ctx => ctx.parsed.x + '%' } } |
| }, |
| scales: { |
| x: { beginAtZero: true, max: 65, ticks: { callback: v => v + '%' }, grid: { color: 'rgba(148,163,184,0.1)' } }, |
| y: { grid: { display: false } } |
| } |
| } |
| }); |
| </script> |
| </body> |
| </html> |
|
|