SC CODE: Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "contracts.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "2b9a0b42f388a578b55756cd6bc598237ced1c2d675fb16de3925890ee8bbf18")
37 STORE("fileCheckS", "064c37c914628dcb406ea3635b78b9ac060b77640209f7a69433eef92a72f78b")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// DERO Explorer v2.0 - Contracts Module
const module = (function() {
'use strict';
var D = window.DeroExplorer, S = D.state, U = D.utils, ui = D.ui, R = D.router, M = D.modules;
var KW = ['Function', 'End Function', 'IF', 'THEN', 'ELSE', 'GOTO', 'RETURN', 'DIM', 'LET', 'AS', 'Uint64', 'String', 'Blob'];
var BI = ['STORE', 'EXISTS', 'LOAD', 'DELETE', 'MAPEXISTS', 'MAPGET', 'MAPSTORE', 'MAPDELETE', 'RANDOM', 'SCID', 'BLID', 'TXID', 'BLOCK_HEIGHT', 'BLOCK_TOPOHEIGHT', 'SIGNER', 'IS_ADDRESS_VALID', 'ADDRESS_RAW', 'ADDRESS_STRING', 'SEND_DERO_TO_ADDRESS', 'SEND_ASSET_TO_ADDRESS', 'DEROVALUE', 'ASSETVALUE', 'UPDATE_SC_CODE', 'HEX', 'HEXDECODE', 'SHA256', 'SHA3256', 'KECCAK256', 'STRLEN', 'SUBSTR', 'ATOI', 'ITOA', 'PANIC'];
var C = { cache: new Map(), maxCache: 20 };
function init() { window.addEventListener('explorer:viewChange', handleView); }
function handleView(e) {
var v = e.detail.view, p = e.detail.param;
if (v === 'contracts') renderListView();
else if (v === 'scDetail' && p) renderDetail(p);
}
function renderListView() {
var el = document.getElementById('view-contracts');
if (!el) return;
el.innerHTML = '<div class="section-card">' + ui.sectionHeader({ icon: '</>', title: 'Smart Contracts' }) +
'<div class="section-content"><div class="sc-search"><div class="search-container" style="max-width:100%;margin-bottom:var(--s-4)">' +
'<span class="search-icon"></></span><input type="text" class="search-input" id="sc-search-input" placeholder="Enter SCID (64-character hex)..." onkeydown="if(event.key===\'Enter\')DeroExplorer.modules.get(\'contracts\').searchSC()">' +
'<button class="btn btn-primary btn-sm" onclick="DeroExplorer.modules.get(\'contracts\').searchSC()">View Contract</button></div></div>' +
'<div class="sc-info-box"><h4 class="detail-subtitle">How to Find Smart Contracts</h4><ul class="sc-info-list">' +
'<li><strong>SCID</strong> is the unique 64-character identifier for a smart contract</li>' +
'<li>Find SCIDs in transaction details when viewing SC invocations</li>' +
'<li>Check project documentation or community resources for popular contracts</li>' +
'<li>Use Gnomon indexer to discover and track smart contracts</li></ul></div>' +
'<div class="sc-known" style="margin-top:var(--s-6)"><h4 class="detail-subtitle">Sample Contracts</h4><div class="sc-known-list">' + renderKnown() + '</div>' +
'<p class="text-muted text-sm" style="margin-top:var(--s-4)">More contracts can be discovered through transaction history or community resources.</p></div></div></div>';
}
function renderKnown() {
var known = [
{ name: 'DERO Name Service (NRS)', scid: '0000000000000000000000000000000000000000000000000000000000000001', desc: 'Official registry for human-readable wallet names' },
{ name: 'Algorithm of Faith', scid: '813b020791998dbefafb72e89c812f8cb0b9c04efbe11963a1ca140e2da72eb9', desc: 'A Decentralized Guide to Divine Living' }
];
return known.map(function(sc) {
return '<div class="sc-known-item" onclick="viewSC(\'' + sc.scid + '\')"><div class="sc-known-name">' + esc(sc.name) + '</div><div class="sc-known-desc text-muted">' + esc(sc.desc) + '</div><div class="sc-known-scid mono">' + U.truncHash(sc.scid, 8, 6) + '</div></div>';
}).join('');
}
function searchSC() {
var inp = document.getElementById('sc-search-input');
if (!inp) return;
var scid = inp.value.trim();
if (!scid) { ui.toast('Please enter a SCID', 'warning'); return; }
if (!U.isValidHash(scid)) { ui.toast('Invalid SCID format (must be 64 hex characters)', 'warning'); return; }
R.goToSC(scid);
}
async function renderDetail(scid) {
var el = document.getElementById('view-scDetail');
if (!el) { var main = document.getElementById('main-content'); el = document.createElement('div'); el.id = 'view-scDetail'; main.appendChild(el); }
el.classList.remove('hidden');
ui.showLoading(el, 'Loading smart contract...');
try {
var conn = M.get('connectivity'), sc = C.cache.get(scid);
if (!sc) { sc = await conn.getSmartContract(scid, true, true); cache(scid, sc); }
if (!sc) throw new Error('Smart contract not found');
el.innerHTML = renderDetailHTML(scid, sc);
} catch (e) { ui.showError(el, 'Smart Contract Not Found', e.message); }
}
function cache(scid, sc) {
if (C.cache.size >= C.maxCache) C.cache.delete(C.cache.keys().next().value);
C.cache.set(scid, sc);
}
function renderDetailHTML(scid, sc) {
var bal = sc.balance || 0, code = sc.code || '', u64 = sc.uint64keys || {}, str = sc.stringkeys || {};
var cnt = Object.keys(u64).length + Object.keys(str).length;
return '<div class="detail-view"><div class="detail-nav"><button class="btn btn-ghost" onclick="goBack()">< Back</button></div>' +
'<div class="section-card">' + ui.sectionHeader({ icon: '</>', title: 'Smart Contract', badge: { text: 'ACTIVE', class: 'badge-ok' } }) +
'<div class="section-content"><div class="detail-grid"><div class="detail-column"><h4 class="detail-subtitle">Contract Information</h4>' +
ui.detailRow('SCID', scid, { mono: true, copyable: true }) + ui.detailRow('Balance', U.fmtDERO(bal) + ' DERO') +
ui.detailRow('Variables', cnt.toString()) + (code ? ui.detailRow('Code Size', U.fmtBytes(code.length)) : '') +
'</div><div class="detail-column"><h4 class="detail-subtitle">Extracted Info</h4>' + extractMeta(u64, str) + '</div></div></div></div>' +
'<div class="section-card">' + ui.sectionHeader({ icon: '[V]', title: 'Variables (' + cnt + ')' }) +
'<div class="section-content">' + renderVars(u64, str) + '</div></div>' +
(code ? '<div class="section-card">' + ui.sectionHeader({ icon: '[C]', title: 'DVM-BASIC Code' }) +
'<div class="section-content"><div class="code-container"><pre class="code-block">' + highlight(code) + '</pre></div></div></div>' : '') + '</div>';
}
function extractMeta(u64, str) {
var m = [], n = str.nameHdr || str.name || str.Name, d = str.descrHdr || str.description || str.desc, url = str.dURL || str.url, ico = str.iconURLHdr || str.icon;
if (n) m.push(ui.detailRow('Name', n));
if (d) m.push(ui.detailRow('Description', U.truncHash(d, 30, 0)));
if (url) m.push(ui.detailRow('URL', url));
if (ico) m.push(ui.detailRow('Icon', U.truncHash(ico, 20, 0)));
return m.length ? m.join('') : '<p class="text-muted">No standard metadata found</p>';
}
function renderVars(u64, str) {
var u = Object.entries(u64), s = Object.entries(str);
if (!u.length && !s.length) return '<p class="text-muted">No variables stored</p>';
var html = '';
if (u.length) {
html += '<div class="vars-section"><h4 class="vars-title">Uint64 Variables (' + u.length + ')</h4><div class="vars-table">' +
u.slice(0, 50).map(function(e) { return '<div class="var-row"><span class="var-key mono">' + esc(e[0]) + '</span><span class="var-value">' + U.fmtNum(e[1]) + '</span></div>'; }).join('') +
(u.length > 50 ? '<div class="vars-more text-muted">... and ' + (u.length - 50) + ' more</div>' : '') + '</div></div>';
}
if (s.length) {
html += '<div class="vars-section" style="margin-top:var(--s-6)"><h4 class="vars-title">String Variables (' + s.length + ')</h4><div class="vars-table">' +
s.slice(0, 50).map(function(e) { return '<div class="var-row"><span class="var-key mono">' + esc(e[0]) + '</span><span class="var-value">' + esc(U.truncHash(e[1], 40, 0)) + '</span></div>'; }).join('') +
(s.length > 50 ? '<div class="vars-more text-muted">... and ' + (s.length - 50) + ' more</div>' : '') + '</div></div>';
}
return html;
}
function highlight(code) {
if (!code) return '';
return code.split('\n').map(function(line) { return hlLine(line); }).join('\n');
}
function hlLine(line) {
var cm = line.match(/^(\s*)(\/\/.*)$/) || line.match(/^(\s*)(REM\s.*)$/i);
if (cm) return esc(cm[1]) + '<span class="code-comment">' + esc(cm[2]) + '</span>';
// Note: '*' + '/' is split to avoid breaking TELA's comment wrapper
if (line.trim().startsWith('/' + '*') || line.trim().startsWith('*' + '/') || line.trim().startsWith('*')) return '<span class="code-comment">' + esc(line) + '</span>';
var r = '', i = 0;
while (i < line.length) {
if (line.slice(i, i + 2) === '//') { r += '<span class="code-comment">' + esc(line.slice(i)) + '</span>'; break; }
if (line[i] === '"') { var end = line.indexOf('"', i + 1); if (end !== -1) { r += '<span class="code-string">' + esc(line.slice(i, end + 1)) + '</span>'; i = end + 1; continue; } }
if ((r.trim() === '' || r.match(/^\s*$/))) { var lm = line.slice(i).match(/^(\s*)(\d+)(\s+)/); if (lm) { r += lm[1] + '<span class="code-linenum">' + lm[2] + '</span>' + lm[3]; i += lm[0].length; continue; } }
var wm = line.slice(i).match(/^([A-Za-z_][A-Za-z0-9_]*)/);
if (wm) {
var w = wm[1], up = w.toUpperCase();
var isKw = KW.some(function(k) { return k.toUpperCase() === up || (k === 'End Function' && up === 'END'); });
var nx = line[i + w.length], isBi = BI.some(function(f) { return f.toUpperCase() === up; }) && (nx === '(' || line.slice(i + w.length).match(/^\s*\(/));
if (isKw) r += '<span class="code-keyword">' + esc(w) + '</span>';
else if (isBi) r += '<span class="code-builtin">' + esc(w) + '</span>';
else r += esc(w);
i += w.length; continue;
}
var nm = line.slice(i).match(/^(\d+)/);
if (nm) { r += '<span class="code-number">' + nm[1] + '</span>'; i += nm[1].length; continue; }
r += esc(line[i]); i++;
}
return r;
}
function esc(s) { return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }
return { init: init, renderContractsView: renderListView, renderSCDetail: renderDetail, searchSC: searchSC, highlightDVMBasic: highlight };
})();
*/ |
| SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "contracts.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "2b9a0b42f388a578b55756cd6bc598237ced1c2d675fb16de3925890ee8bbf18")
37 STORE("fileCheckS", "064c37c914628dcb406ea3635b78b9ac060b77640209f7a69433eef92a72f78b")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// DERO Explorer v2.0 - Contracts Module
const module = (function() {
'use strict';
var D = window.DeroExplorer, S = D.state, U = D.utils, ui = D.ui, R = D.router, M = D.modules;
var KW = ['Function', 'End Function', 'IF', 'THEN', 'ELSE', 'GOTO', 'RETURN', 'DIM', 'LET', 'AS', 'Uint64', 'String', 'Blob'];
var BI = ['STORE', 'EXISTS', 'LOAD', 'DELETE', 'MAPEXISTS', 'MAPGET', 'MAPSTORE', 'MAPDELETE', 'RANDOM', 'SCID', 'BLID', 'TXID', 'BLOCK_HEIGHT', 'BLOCK_TOPOHEIGHT', 'SIGNER', 'IS_ADDRESS_VALID', 'ADDRESS_RAW', 'ADDRESS_STRING', 'SEND_DERO_TO_ADDRESS', 'SEND_ASSET_TO_ADDRESS', 'DEROVALUE', 'ASSETVALUE', 'UPDATE_SC_CODE', 'HEX', 'HEXDECODE', 'SHA256', 'SHA3256', 'KECCAK256', 'STRLEN', 'SUBSTR', 'ATOI', 'ITOA', 'PANIC'];
var C = { cache: new Map(), maxCache: 20 };
function init() { window.addEventListener('explorer:viewChange', handleView); }
function handleView(e) {
var v = e.detail.view, p = e.detail.param;
if (v === 'contracts') renderListView();
else if (v === 'scDetail' && p) renderDetail(p);
}
function renderListView() {
var el = document.getElementById('view-contracts');
if (!el) return;
el.innerHTML = '<div class="section-card">' + ui.sectionHeader({ icon: '</>', title: 'Smart Contracts' }) +
'<div class="section-content"><div class="sc-search"><div class="search-container" style="max-width:100%;margin-bottom:var(--s-4)">' +
'<span class="search-icon"></></span><input type="text" class="search-input" id="sc-search-input" placeholder="Enter SCID (64-character hex)..." onkeydown="if(event.key===\'Enter\')DeroExplorer.modules.get(\'contracts\').searchSC()">' +
'<button class="btn btn-primary btn-sm" onclick="DeroExplorer.modules.get(\'contracts\').searchSC()">View Contract</button></div></div>' +
'<div class="sc-info-box"><h4 class="detail-subtitle">How to Find Smart Contracts</h4><ul class="sc-info-list">' +
'<li><strong>SCID</strong> is the unique 64-character identifier for a smart contract</li>' +
'<li>Find SCIDs in transaction details when viewing SC invocations</li>' +
'<li>Check project documentation or community resources for popular contracts</li>' +
'<li>Use Gnomon indexer to discover and track smart contracts</li></ul></div>' +
'<div class="sc-known" style="margin-top:var(--s-6)"><h4 class="detail-subtitle">Sample Contracts</h4><div class="sc-known-list">' + renderKnown() + '</div>' +
'<p class="text-muted text-sm" style="margin-top:var(--s-4)">More contracts can be discovered through transaction history or community resources.</p></div></div></div>';
}
function renderKnown() {
var known = [
{ name: 'DERO Name Service (NRS)', scid: '0000000000000000000000000000000000000000000000000000000000000001', desc: 'Official registry for human-readable wallet names' },
{ name: 'Algorithm of Faith', scid: '813b020791998dbefafb72e89c812f8cb0b9c04efbe11963a1ca140e2da72eb9', desc: 'A Decentralized Guide to Divine Living' }
];
return known.map(function(sc) {
return '<div class="sc-known-item" onclick="viewSC(\'' + sc.scid + '\')"><div class="sc-known-name">' + esc(sc.name) + '</div><div class="sc-known-desc text-muted">' + esc(sc.desc) + '</div><div class="sc-known-scid mono">' + U.truncHash(sc.scid, 8, 6) + '</div></div>';
}).join('');
}
function searchSC() {
var inp = document.getElementById('sc-search-input');
if (!inp) return;
var scid = inp.value.trim();
if (!scid) { ui.toast('Please enter a SCID', 'warning'); return; }
if (!U.isValidHash(scid)) { ui.toast('Invalid SCID format (must be 64 hex characters)', 'warning'); return; }
R.goToSC(scid);
}
async function renderDetail(scid) {
var el = document.getElementById('view-scDetail');
if (!el) { var main = document.getElementById('main-content'); el = document.createElement('div'); el.id = 'view-scDetail'; main.appendChild(el); }
el.classList.remove('hidden');
ui.showLoading(el, 'Loading smart contract...');
try {
var conn = M.get('connectivity'), sc = C.cache.get(scid);
if (!sc) { sc = await conn.getSmartContract(scid, true, true); cache(scid, sc); }
if (!sc) throw new Error('Smart contract not found');
el.innerHTML = renderDetailHTML(scid, sc);
} catch (e) { ui.showError(el, 'Smart Contract Not Found', e.message); }
}
function cache(scid, sc) {
if (C.cache.size >= C.maxCache) C.cache.delete(C.cache.keys().next().value);
C.cache.set(scid, sc);
}
function renderDetailHTML(scid, sc) {
var bal = sc.balance || 0, code = sc.code || '', u64 = sc.uint64keys || {}, str = sc.stringkeys || {};
var cnt = Object.keys(u64).length + Object.keys(str).length;
return '<div class="detail-view"><div class="detail-nav"><button class="btn btn-ghost" onclick="goBack()">< Back</button></div>' +
'<div class="section-card">' + ui.sectionHeader({ icon: '</>', title: 'Smart Contract', badge: { text: 'ACTIVE', class: 'badge-ok' } }) +
'<div class="section-content"><div class="detail-grid"><div class="detail-column"><h4 class="detail-subtitle">Contract Information</h4>' +
ui.detailRow('SCID', scid, { mono: true, copyable: true }) + ui.detailRow('Balance', U.fmtDERO(bal) + ' DERO') +
ui.detailRow('Variables', cnt.toString()) + (code ? ui.detailRow('Code Size', U.fmtBytes(code.length)) : '') +
'</div><div class="detail-column"><h4 class="detail-subtitle">Extracted Info</h4>' + extractMeta(u64, str) + '</div></div></div></div>' +
'<div class="section-card">' + ui.sectionHeader({ icon: '[V]', title: 'Variables (' + cnt + ')' }) +
'<div class="section-content">' + renderVars(u64, str) + '</div></div>' +
(code ? '<div class="section-card">' + ui.sectionHeader({ icon: '[C]', title: 'DVM-BASIC Code' }) +
'<div class="section-content"><div class="code-container"><pre class="code-block">' + highlight(code) + '</pre></div></div></div>' : '') + '</div>';
}
function extractMeta(u64, str) {
var m = [], n = str.nameHdr || str.name || str.Name, d = str.descrHdr || str.description || str.desc, url = str.dURL || str.url, ico = str.iconURLHdr || str.icon;
if (n) m.push(ui.detailRow('Name', n));
if (d) m.push(ui.detailRow('Description', U.truncHash(d, 30, 0)));
if (url) m.push(ui.detailRow('URL', url));
if (ico) m.push(ui.detailRow('Icon', U.truncHash(ico, 20, 0)));
return m.length ? m.join('') : '<p class="text-muted">No standard metadata found</p>';
}
function renderVars(u64, str) {
var u = Object.entries(u64), s = Object.entries(str);
if (!u.length && !s.length) return '<p class="text-muted">No variables stored</p>';
var html = '';
if (u.length) {
html += '<div class="vars-section"><h4 class="vars-title">Uint64 Variables (' + u.length + ')</h4><div class="vars-table">' +
u.slice(0, 50).map(function(e) { return '<div class="var-row"><span class="var-key mono">' + esc(e[0]) + '</span><span class="var-value">' + U.fmtNum(e[1]) + '</span></div>'; }).join('') +
(u.length > 50 ? '<div class="vars-more text-muted">... and ' + (u.length - 50) + ' more</div>' : '') + '</div></div>';
}
if (s.length) {
html += '<div class="vars-section" style="margin-top:var(--s-6)"><h4 class="vars-title">String Variables (' + s.length + ')</h4><div class="vars-table">' +
s.slice(0, 50).map(function(e) { return '<div class="var-row"><span class="var-key mono">' + esc(e[0]) + '</span><span class="var-value">' + esc(U.truncHash(e[1], 40, 0)) + '</span></div>'; }).join('') +
(s.length > 50 ? '<div class="vars-more text-muted">... and ' + (s.length - 50) + ' more</div>' : '') + '</div></div>';
}
return html;
}
function highlight(code) {
if (!code) return '';
return code.split('\n').map(function(line) { return hlLine(line); }).join('\n');
}
function hlLine(line) {
var cm = line.match(/^(\s*)(\/\/.*)$/) || line.match(/^(\s*)(REM\s.*)$/i);
if (cm) return esc(cm[1]) + '<span class="code-comment">' + esc(cm[2]) + '</span>';
// Note: '*' + '/' is split to avoid breaking TELA's comment wrapper
if (line.trim().startsWith('/' + '*') || line.trim().startsWith('*' + '/') || line.trim().startsWith('*')) return '<span class="code-comment">' + esc(line) + '</span>';
var r = '', i = 0;
while (i < line.length) {
if (line.slice(i, i + 2) === '//') { r += '<span class="code-comment">' + esc(line.slice(i)) + '</span>'; break; }
if (line[i] === '"') { var end = line.indexOf('"', i + 1); if (end !== -1) { r += '<span class="code-string">' + esc(line.slice(i, end + 1)) + '</span>'; i = end + 1; continue; } }
if ((r.trim() === '' || r.match(/^\s*$/))) { var lm = line.slice(i).match(/^(\s*)(\d+)(\s+)/); if (lm) { r += lm[1] + '<span class="code-linenum">' + lm[2] + '</span>' + lm[3]; i += lm[0].length; continue; } }
var wm = line.slice(i).match(/^([A-Za-z_][A-Za-z0-9_]*)/);
if (wm) {
var w = wm[1], up = w.toUpperCase();
var isKw = KW.some(function(k) { return k.toUpperCase() === up || (k === 'End Function' && up === 'END'); });
var nx = line[i + w.length], isBi = BI.some(function(f) { return f.toUpperCase() === up; }) && (nx === '(' || line.slice(i + w.length).match(/^\s*\(/));
if (isKw) r += '<span class="code-keyword">' + esc(w) + '</span>';
else if (isBi) r += '<span class="code-builtin">' + esc(w) + '</span>';
else r += esc(w);
i += w.length; continue;
}
var nm = line.slice(i).match(/^(\d+)/);
if (nm) { r += '<span class="code-number">' + nm[1] + '</span>'; i += nm[1].length; continue; }
r += esc(line[i]); i++;
}
return r;
}
function esc(s) { return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }
return { init: init, renderContractsView: renderListView, renderSCDetail: renderDetail, searchSC: searchSC, highlightDVMBasic: highlight };
})();
*/'] |