cloudflare
tcp/443 tcp/80
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c63442d9d63442d9d9754ec5d9754ec5d9754ec5d9754ec5d
Found 1 files trough .DS_Store spidering: /files
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c63442d9d63442d9d9754ec5d9754ec5d9754ec5d9754ec5d
Found 1 files trough .DS_Store spidering: /files
Open service 104.21.42.26:443 · app.cutviewer.com
2026-01-09 21:00
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 21:00:23 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=N4OwEOB8amvCZU9BSygqxsw5S60uSN%2B1f0PfZ7RtacYgAEQafTU%2FgAIW%2Fsz6BGQPpEVyYjewW5kh15AjMERfQxAnlDLHdFYSc3AI7UJJkxuQ"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bb6dd284be8feaf-AMS
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:80 · app.cutviewer.com
2026-01-09 12:36
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 12:36:02 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=e%2BgXtbEobWlZAREZGZhJ43m3aZC1rlYEoZ0fZmYxsJqQPbAI7oGMkIRxsqWZvC0nLOJW1%2FDECiQqRjEcGwr2S1FNBi1GIjvjNLsv2I5EFrn9"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bb3fa5d5c7e227b-LHR
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:80 · app.cutviewer.com
2026-01-02 20:22
HTTP/1.1 200 OK
Date: Fri, 02 Jan 2026 20:22:40 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=41,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=ynUW%2FYtWKad5sqCVGWlgRnIxoIqOkHV0xczV6Pw3ByhU%2BDqpQkIIDaMlQRvWzhTSy3jF25xoX7MPHCMMrCu2Xn8gSh7sd0QNQSkMijHNgw%3D%3D"}]}
Server: cloudflare
CF-RAY: 9b7cf848cb290b11-EWR
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:443 · app.cutviewer.com
2026-01-02 16:30
HTTP/1.1 200 OK
Date: Fri, 02 Jan 2026 16:30:00 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=zwJfu2%2B94X9Aqzm3oSO%2BdFxilI9YFF9nik3UFMSJoVtxPcuAq8S4bVFuEY68QP1PBVaHoJ9bzk6vbawiGk76EnrHfWypCh6gESkX%2FfTInK0P"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9b7ba3756a0b0ad6-FRA
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:443 · app.cutviewer.com
2025-12-23 06:16
HTTP/1.1 200 OK
Date: Tue, 23 Dec 2025 06:16:16 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=6BfstQUAd81BadfIJGwFGNTpa5CftX9zIr3sNP0%2BDvBDTy5o2ZLvVagQOxzoRHYJ%2F2KFh8e6Q6u0j2EwsHSIA%2F%2BI9daSe%2B6W28sIlMpPXx7z"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9b25baacda3c9064-FRA
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:80 · app.cutviewer.com
2025-12-22 15:11
HTTP/1.1 200 OK
Date: Mon, 22 Dec 2025 15:11:00 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=3i4gJg4uxbRjkSQdQzvsT%2F8WJqonUFDFBWYQdDR5OQWzWpeb96%2B4Nx6C8wot0XMdYcn9AHW5w6tRS%2BrTJrgadUzbcXiAdFcvEmqrzjiMFN%2Be"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9b208c9eecad2534-LHR
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:443 · app.cutviewer.com
2025-12-20 23:19
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 23:19:54 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=K0zXXWuWyx9I8DZXZ3a8T%2FKTgRiKj7xqe9CcEg9dYVrAd%2BVgTmeAyPOKDJKNHNEGV0I5ZobN%2F4xNMJ8arepMboTv606%2F4vtrHsr47ohmvy%2Bl"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9b12de035c72760b-AMS
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:80 · app.cutviewer.com
2025-12-20 11:12
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 11:12:43 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=55,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=T%2BiEw%2BphQJ4%2FPmDgMuOMElqu45v%2BmxnpJQ2nB4%2FSvkxk4KFQS8GybyEGrWPNUG6yPn6e4TQvzyZ9D2iRJiPK8fdK6hLoIJYloWLRhqzrDA%3D%3D"}]}
Server: cloudflare
CF-RAY: 9b0eb4d0c9e46d50-EWR
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>
Open service 104.21.42.26:443 · app.cutviewer.com
2025-12-19 01:17
HTTP/1.1 200 OK
Date: Fri, 19 Dec 2025 01:17:30 GMT
Content-Type: text/html
Content-Length: 7511
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "64629fd964e6c0e45b555537af60787f"
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
x-frame-options: DENY
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=zpcR%2Fzudw%2FFy4npTmyC0QVOuWMbXdSXG25uY3WM61OpOjPQh7fo3evL9nzliLp%2FMSVwPASIcbpSksF4s1JatiHKeK3HZjhaQXivtdNzWPQV7"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9b030f88bb8226f7-LHR
alt-svc: h3=":443"; ma=86400
Page title: CutViewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutViewer</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
<script defer data-domain="cutviewer.com" src="https://pl.cutcomposer.com/js/script.tagged-events.js"></script>
<!-- Ace Editor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ext-language_tools.min.js"></script>
</head>
<body>
<script>
// Console capture shim - must be first script
(function() {
window.__consoleLogs = [];
const originalConsole = {
log: console.log,
error: console.error,
warn: console.warn,
info: console.info,
debug: console.debug
};
['log', 'error', 'warn', 'info', 'debug'].forEach(method => {
console[method] = function(...args) {
window.__consoleLogs.push({
type: method,
timestamp: new Date().toISOString(),
message: args.map(arg => {
try {
return typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
} catch (e) {
return String(arg);
}
}).join(' ')
});
// Keep logs to a reasonable size
if (window.__consoleLogs.length > 1000) {
window.__consoleLogs.shift();
}
// Call original method
originalConsole[method].apply(console, args);
};
});
})();
// Initialize theme immediately to prevent flash of wrong theme
(function() {
const savedTheme = document.cookie.split('; ')
.find(row => row.startsWith('theme='))
?.split('=')[1] || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
// Also update theme icon if it exists
window.addEventListener('DOMContentLoaded', function() {
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = savedTheme === 'dark' ? '🌙' : '☀️';
}
});
})();
</script>
<div class="app-container">
<!-- Unified Header -->
<div class="app-header">
<div class="header-left">
<a href="https://cutviewer.com/" id="logo-link" class="logo-link">
<h3>CutViewer</h3>
</a>
<div class="file-controls">
<input type="file" id="file-input" accept=".nc,.gcode,.txt,.ngc,.tap,.cnc" style="display: none;">
<button id="open-file-btn">Open File</button>
</div>
</div>
<div class="header-right">
<div class="view-controls">
<button id="view-top" class="view-btn" data-view="top">Top</button>
<button id="view-front" class="view-btn" data-view="front">Front</button>
<button id="view-left" class="view-btn" data-view="left">Left</button>