Initial website deployment
All checks were successful
Deploy Website / build-and-deploy (push) Successful in 1m44s
1316
static/css/main.css
Normal file
BIN
static/cursors/mac-arrow.png
Normal file
|
After Width: | Height: | Size: 457 B |
BIN
static/cursors/mac-hand.png
Normal file
|
After Width: | Height: | Size: 419 B |
BIN
static/fonts/VT323-Regular.ttf
Normal file
1
static/icons/gitea.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Gitea</title><path d="M4.209 4.603c-.247 0-.525.02-.84.088-.333.07-1.28.283-2.054 1.027C-.403 7.25.035 9.685.089 10.052c.065.446.263 1.687 1.21 2.768 1.749 2.141 5.513 2.092 5.513 2.092s.462 1.103 1.168 2.119c.955 1.263 1.936 2.248 2.89 2.367 2.406 0 7.212-.004 7.212-.004s.458.004 1.08-.394c.535-.324 1.013-.893 1.013-.893s.492-.527 1.18-1.73c.21-.37.385-.729.538-1.068 0 0 2.107-4.471 2.107-8.823-.042-1.318-.367-1.55-.443-1.627-.156-.156-.366-.153-.366-.153s-4.475.252-6.792.306c-.508.011-1.012.023-1.512.027v4.474l-.634-.301c0-1.39-.004-4.17-.004-4.17-1.107.016-3.405-.084-3.405-.084s-5.399-.27-5.987-.324c-.187-.011-.401-.032-.648-.032zm.354 1.832h.111s.271 2.269.6 3.597C5.549 11.147 6.22 13 6.22 13s-.996-.119-1.641-.348c-.99-.324-1.409-.714-1.409-.714s-.73-.511-1.096-1.52C1.444 8.73 2.021 7.7 2.021 7.7s.32-.859 1.47-1.145c.395-.106.863-.12 1.072-.12zm8.33 2.554c.26.003.509.127.509.127l.868.422-.529 1.075a.686.686 0 0 0-.614.359.685.685 0 0 0 .072.756l-.939 1.924a.69.69 0 0 0-.66.527.687.687 0 0 0 .347.763.686.686 0 0 0 .867-.206.688.688 0 0 0-.069-.882l.916-1.874a.667.667 0 0 0 .237-.02.657.657 0 0 0 .271-.137 8.826 8.826 0 0 1 1.016.512.761.761 0 0 1 .286.282c.073.21-.073.569-.073.569-.087.29-.702 1.55-.702 1.55a.692.692 0 0 0-.676.477.681.681 0 1 0 1.157-.252c.073-.141.141-.282.214-.431.19-.397.515-1.16.515-1.16.035-.066.218-.394.103-.814-.095-.435-.48-.638-.48-.638-.467-.301-1.116-.58-1.116-.58s0-.156-.042-.27a.688.688 0 0 0-.148-.241l.516-1.062 2.89 1.401s.48.218.583.619c.073.282-.019.534-.069.657-.24.587-2.1 4.317-2.1 4.317s-.232.554-.748.588a1.065 1.065 0 0 1-.393-.045l-.202-.08-4.31-2.1s-.417-.218-.49-.596c-.083-.31.104-.691.104-.691l2.073-4.272s.183-.37.466-.497a.855.855 0 0 1 .35-.077z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
1
static/icons/github.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||
|
After Width: | Height: | Size: 837 B |
1
static/icons/google-scholar.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Google Scholar</title><path d="M5.242 13.769L0 9.5 12 0l12 9.5-5.242 4.269C17.548 11.249 14.978 9.5 12 9.5c-2.977 0-5.548 1.748-6.758 4.269zM12 10a7 7 0 1 0 0 14 7 7 0 0 0 0-14z"/></svg>
|
||||
|
After Width: | Height: | Size: 279 B |
1
static/icons/linkedin.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
|
||||
|
After Width: | Height: | Size: 610 B |
5
static/icons/rss.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M5 3c8.837 0 16 7.163 16 16h-4C17 12.373 11.627 7 5 7V3z"/>
|
||||
<path d="M5 10c4.971 0 9 4.029 9 9h-4c0-2.761-2.239-5-5-5v-4z"/>
|
||||
<path d="M8 18.5A2.5 2.5 0 1 1 3 18.5a2.5 2.5 0 0 1 5 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 268 B |
1
static/icons/twitter.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>X</title><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg>
|
||||
|
After Width: | Height: | Size: 314 B |
BIN
static/images/1_blackwell_dc_vs_gf/5090_65536_cropped.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
static/images/1_blackwell_dc_vs_gf/b200_65536_cropped.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
static/images/1_blackwell_dc_vs_gf/geforce_ncu.png
Normal file
|
After Width: | Height: | Size: 307 KiB |
BIN
static/images/1_blackwell_dc_vs_gf/nvtop_b200.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 313 KiB |
BIN
static/images/2_qwen36_tokens_per_kwh/fig1_tokens_per_day.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 150 KiB |
@@ -0,0 +1,49 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="520" viewBox="0 0 1200 520" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Autoregressive decoding</title>
|
||||
<desc id="desc">A simplified diagram showing one target model pass producing one accepted token, repeated sequentially.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f4ed; }
|
||||
.panel { fill: #fffdf7; stroke: #cfc8ba; stroke-width: 2; }
|
||||
.ink { fill: #181612; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
|
||||
.muted { fill: #6b6254; font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; }
|
||||
.box-title { fill: #181612; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-anchor: middle; }
|
||||
.box-sub { fill: #6b6254; font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; text-anchor: middle; }
|
||||
.accent { fill: #0f6f77; }
|
||||
.arrow-line { stroke: #5c554a; stroke-width: 3; fill: none; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.arrow-head { fill: #5c554a; }
|
||||
.dash { stroke: #b8ad9b; stroke-width: 2; stroke-dasharray: 8 8; fill: none; }
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" width="1200" height="520" rx="24"/>
|
||||
|
||||
<text class="ink" x="56" y="72" font-size="34" font-weight="650">Autoregressive decode</text>
|
||||
<text class="muted" x="56" y="112" font-size="18">one target model pass gives one accepted token</text>
|
||||
|
||||
<rect class="panel" x="72" y="188" width="220" height="118" rx="18"/>
|
||||
<text class="box-title" x="182" y="238" font-size="24" font-weight="650">context</text>
|
||||
<text class="box-sub" x="182" y="274" font-size="17">prompt + KV cache</text>
|
||||
|
||||
<path class="arrow-line" d="M292 247 L385 247"/>
|
||||
<path class="arrow-head" d="M410 247 L385 234 L385 260 Z"/>
|
||||
|
||||
<rect class="panel" x="430" y="168" width="280" height="158" rx="20"/>
|
||||
<text class="box-title" x="570" y="228" font-size="25" font-weight="650">target model</text>
|
||||
<text class="box-sub" x="570" y="265" font-size="17">full forward pass</text>
|
||||
<rect class="accent" x="485" y="287" width="170" height="8" rx="4"/>
|
||||
|
||||
<path class="arrow-line" d="M710 247 L810 247"/>
|
||||
<path class="arrow-head" d="M835 247 L810 234 L810 260 Z"/>
|
||||
|
||||
<rect class="panel" x="855" y="188" width="166" height="118" rx="18"/>
|
||||
<text class="box-title" x="938" y="238" font-size="24" font-weight="650">token</text>
|
||||
<text class="box-sub" x="938" y="274" font-size="17">+1</text>
|
||||
|
||||
<path class="arrow-line" d="M1021 247 C1110 247 1102 397 940 417 C650 452 290 427 210 333"/>
|
||||
<path class="arrow-head" d="M188 309 L214 320 L201 346 Z"/>
|
||||
|
||||
<path class="dash" d="M430 344 L710 344"/>
|
||||
<text class="muted" x="458" y="382" font-size="16">the GPU pays this cost one token at a time</text>
|
||||
<text class="muted" x="454" y="456" font-size="17">append token, then run again</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
73
static/images/2_qwen36_tokens_per_kwh/fig6_mtp_decode.svg
Normal file
@@ -0,0 +1,73 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="560" viewBox="0 0 1200 560" role="img" aria-labelledby="title desc">
|
||||
<title id="title">MTP speculative decoding</title>
|
||||
<desc id="desc">A simplified diagram showing a multi token prediction path proposing draft tokens and the target model verifying them together.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f4ed; }
|
||||
.panel { fill: #fffdf7; stroke: #cfc8ba; stroke-width: 2; }
|
||||
.ink { fill: #181612; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
|
||||
.muted { fill: #6b6254; font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; }
|
||||
.box-title { fill: #181612; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-anchor: middle; }
|
||||
.box-sub { fill: #6b6254; font-family: ui-monospace, "SFMono-Regular", Consolas, monospace; text-anchor: middle; }
|
||||
.accent { fill: #0f6f77; }
|
||||
.warm { fill: #c06922; }
|
||||
.cool { fill: #315f9f; }
|
||||
.arrow-line { stroke: #5c554a; stroke-width: 3; fill: none; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.arrow-head { fill: #5c554a; }
|
||||
.thin { stroke: #b8ad9b; stroke-width: 2; fill: none; }
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" width="1200" height="560" rx="24"/>
|
||||
|
||||
<text class="ink" x="56" y="72" font-size="34" font-weight="650">MTP speculative decode</text>
|
||||
<text class="muted" x="56" y="112" font-size="18">draft several tokens, verify them, keep the accepted prefix</text>
|
||||
|
||||
<rect class="panel" x="72" y="218" width="220" height="118" rx="18"/>
|
||||
<text class="box-title" x="182" y="268" font-size="24" font-weight="650">context</text>
|
||||
<text class="box-sub" x="182" y="304" font-size="17">prompt + KV cache</text>
|
||||
|
||||
<path class="arrow-line" d="M292 277 C342 277 342 196 395 196"/>
|
||||
<path class="arrow-head" d="M420 196 L395 183 L395 209 Z"/>
|
||||
|
||||
<path class="arrow-line" d="M292 277 C342 277 342 374 395 374"/>
|
||||
<path class="arrow-head" d="M420 374 L395 361 L395 387 Z"/>
|
||||
|
||||
<rect class="panel" x="440" y="138" width="270" height="116" rx="20"/>
|
||||
<text class="box-title" x="575" y="188" font-size="24" font-weight="650">MTP lookahead</text>
|
||||
<text class="box-sub" x="575" y="224" font-size="17">propose draft tokens</text>
|
||||
|
||||
<rect class="panel" x="440" y="316" width="270" height="116" rx="20"/>
|
||||
<text class="box-title" x="575" y="366" font-size="24" font-weight="650">target model</text>
|
||||
<text class="box-sub" x="575" y="402" font-size="17">verify in one pass</text>
|
||||
|
||||
<path class="arrow-line" d="M710 196 L738 196"/>
|
||||
<path class="arrow-head" d="M763 196 L738 183 L738 209 Z"/>
|
||||
|
||||
<g transform="translate(782 170)">
|
||||
<rect class="warm" x="0" y="0" width="54" height="54" rx="12"/>
|
||||
<rect class="warm" x="66" y="0" width="54" height="54" rx="12"/>
|
||||
<rect class="warm" x="132" y="0" width="54" height="54" rx="12"/>
|
||||
<rect class="warm" x="198" y="0" width="54" height="54" rx="12"/>
|
||||
<rect class="warm" x="264" y="0" width="54" height="54" rx="12"/>
|
||||
<rect class="warm" x="330" y="0" width="54" height="54" rx="12"/>
|
||||
</g>
|
||||
<text class="muted" x="874" y="252" font-size="17">draft block</text>
|
||||
|
||||
<path class="arrow-line" d="M710 374 L748 374"/>
|
||||
<path class="arrow-head" d="M773 374 L748 361 L748 387 Z"/>
|
||||
|
||||
<path class="arrow-line" d="M1030 232 L1030 340"/>
|
||||
<path class="arrow-head" d="M1030 365 L1017 340 L1043 340 Z"/>
|
||||
|
||||
<rect class="panel" x="790" y="356" width="344" height="102" rx="18"/>
|
||||
<rect class="accent" x="820" y="384" width="50" height="50" rx="11"/>
|
||||
<rect class="accent" x="880" y="384" width="50" height="50" rx="11"/>
|
||||
<rect class="accent" x="940" y="384" width="50" height="50" rx="11"/>
|
||||
<rect class="cool" x="1000" y="384" width="50" height="50" rx="11"/>
|
||||
<rect class="cool" x="1060" y="384" width="50" height="50" rx="11"/>
|
||||
|
||||
<path class="thin" d="M820 448 L990 448"/>
|
||||
<text class="muted" x="820" y="492" font-size="16">accepted prefix, retry on mismatch</text>
|
||||
<text class="muted" x="720" y="530" font-size="16">best case, one pass advances several tokens</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
BIN
static/images/apps/clipbored/icon.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
static/images/apps/clipbored/panel.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
static/images/apps/feedme/demo.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
static/images/apps/ihatepdfs/default-reading.png
Normal file
|
After Width: | Height: | Size: 875 KiB |
BIN
static/images/apps/ihatepdfs/icon.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
135
static/js/site.js
Normal file
@@ -0,0 +1,135 @@
|
||||
(() => {
|
||||
const $$ = (selector, root = document) => [...root.querySelectorAll(selector)];
|
||||
|
||||
function setupToc() {
|
||||
const headings = $$(".post-content h2[id], .post-content h3[id]");
|
||||
const links = $$("#TableOfContents a");
|
||||
if (!headings.length || !links.length) return;
|
||||
|
||||
let queued = false;
|
||||
|
||||
function update() {
|
||||
const y = window.scrollY + window.innerHeight * 0.35;
|
||||
let activeId = headings[0].id;
|
||||
|
||||
for (const heading of headings) {
|
||||
if (heading.offsetTop > y) break;
|
||||
activeId = heading.id;
|
||||
}
|
||||
|
||||
for (const link of links) {
|
||||
link.classList.toggle(
|
||||
"active",
|
||||
decodeURIComponent(link.hash.slice(1)) === activeId
|
||||
);
|
||||
}
|
||||
|
||||
queued = false;
|
||||
}
|
||||
|
||||
function queue() {
|
||||
if (queued) return;
|
||||
queued = true;
|
||||
window.requestAnimationFrame(update);
|
||||
}
|
||||
|
||||
window.addEventListener("scroll", queue, { passive: true });
|
||||
window.addEventListener("resize", queue);
|
||||
update();
|
||||
}
|
||||
|
||||
function setupPostTags() {
|
||||
const list = document.querySelector("[data-post-list]");
|
||||
if (!list) return;
|
||||
|
||||
const rows = $$(".post-row", list);
|
||||
const links = $$("[data-tag]");
|
||||
const status = document.querySelector("[data-tag-filter-status]");
|
||||
const clear = status?.querySelector("a");
|
||||
|
||||
function setUrl(tag) {
|
||||
const url = new URL(window.location.href);
|
||||
if (tag) {
|
||||
url.searchParams.set("tag", tag);
|
||||
} else {
|
||||
url.searchParams.delete("tag");
|
||||
}
|
||||
window.history.pushState(null, "", `${url.pathname}${url.search}`);
|
||||
}
|
||||
|
||||
function applyTag(tag) {
|
||||
for (const link of links) {
|
||||
link.classList.toggle("active", link.dataset.tag === tag);
|
||||
}
|
||||
|
||||
let visible = 0;
|
||||
for (const row of rows) {
|
||||
const tags = JSON.parse(row.dataset.tags || "[]");
|
||||
const matched = !tag || tags.includes(tag);
|
||||
row.hidden = !matched;
|
||||
if (matched) visible += 1;
|
||||
}
|
||||
|
||||
if (status) {
|
||||
const name = status.querySelector("[data-tag-filter-name]");
|
||||
if (name) name.textContent = tag ? `[${tag}]` : "";
|
||||
status.hidden = !tag;
|
||||
status.classList.toggle("is-empty", visible === 0);
|
||||
}
|
||||
}
|
||||
|
||||
for (const link of links) {
|
||||
link.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
const nextTag = link.classList.contains("active") ? null : link.dataset.tag;
|
||||
applyTag(nextTag);
|
||||
setUrl(nextTag);
|
||||
});
|
||||
}
|
||||
|
||||
if (clear) {
|
||||
clear.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
applyTag(null);
|
||||
setUrl(null);
|
||||
});
|
||||
}
|
||||
|
||||
applyTag(new URLSearchParams(window.location.search).get("tag"));
|
||||
}
|
||||
|
||||
function setupClickableRows() {
|
||||
const rows = $$("[data-row-href]");
|
||||
|
||||
function openRow(row) {
|
||||
const href = row.dataset.rowHref;
|
||||
if (href) window.location.href = href;
|
||||
}
|
||||
|
||||
for (const row of rows) {
|
||||
row.addEventListener("click", (event) => {
|
||||
if (event.target.closest("a")) return;
|
||||
openRow(row);
|
||||
});
|
||||
|
||||
row.addEventListener("keydown", (event) => {
|
||||
if (event.key !== "Enter" && event.key !== " ") return;
|
||||
event.preventDefault();
|
||||
openRow(row);
|
||||
});
|
||||
|
||||
row.addEventListener("pointerdown", (event) => {
|
||||
if (event.target.closest(".item-links a")) return;
|
||||
row.classList.add("is-pressed");
|
||||
});
|
||||
|
||||
for (const eventName of ["pointerup", "pointercancel", "pointerleave", "blur"]) {
|
||||
row.addEventListener(eventName, () => row.classList.remove("is-pressed"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupToc();
|
||||
setupPostTags();
|
||||
setupClickableRows();
|
||||
})();
|
||||
93
static/licenses/VT323-OFL.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright 2011, The VT323 Project Authors (peter.hull@oikoi.com)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||