@networkpro/web 1.12.7 → 1.12.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -2
- package/README.md +27 -0
- package/cspell.json +4 -0
- package/jsconfig.template.jsonc +3 -1
- package/package.json +10 -10
- package/src/app.html +1 -1
- package/src/hooks.server.js +1 -1
- package/src/lib/components/CodeBlock.svelte +13 -0
- package/src/lib/components/foss/FossItemContent.svelte +2 -2
- package/src/lib/data/fossData.js +8 -1
- package/src/lib/images.js +15 -8
- package/src/lib/img/qr/pgp-contact.webp +0 -0
- package/src/lib/img/qr/pgp-github.webp +0 -0
- package/src/lib/img/qr/pgp-security.png +0 -0
- package/src/lib/img/qr/pgp-security.webp +0 -0
- package/src/lib/img/qr/pgp-support.webp +0 -0
- package/src/lib/img/qr/vcard.webp +0 -0
- package/src/lib/meta.js +5 -0
- package/src/lib/pages/AboutContent.svelte +62 -32
- package/src/lib/pages/LicenseContent.svelte +13 -19
- package/src/lib/pages/PGPContent.svelte +142 -0
- package/src/lib/pages/TermsConditionsContent.svelte +1 -1
- package/src/lib/styles/css/default.css +23 -1
- package/src/lib/styles/css/style.css +13 -4
- package/src/lib/styles/global.min.css +1 -1
- package/src/routes/pgp/+page.server.js +18 -0
- package/src/routes/pgp/+page.svelte +61 -0
- package/src/routes/pgp/[key]/+server.js +35 -0
- package/src/service-worker.js +18 -6
- package/static/{assets → bin}/license/CC-BY-4.0.html +1 -1
- package/static/{assets → bin}/license/COPYING.html +1 -1
- package/static/img/powered-by-proton.svg +1 -0
- package/static/pgp/pgp-contact.webp +0 -0
- package/static/pgp/pgp-github.webp +0 -0
- package/static/pgp/pgp-security.png +0 -0
- package/static/pgp/pgp-security.webp +0 -0
- package/static/pgp/pgp-support.webp +0 -0
- package/static/pgp/security@s.neteng.pro.asc +22 -0
- package/static/pgp/vcard.webp +0 -0
- package/static/sitemap.xml +71 -11
- package/static/assets/bin/contact.vcf +0 -13
- package/static/assets/bin/contact@s.neteng.pro.asc +0 -17
- package/static/assets/bin/github@sl.neteng.cc.asc +0 -29
- package/static/assets/bin/linksheet.json +0 -8
- package/static/assets/bin/support@neteng.pro.asc +0 -47
- package/static/assets/consulting-terms.pdf +0 -0
- /package/{assets → static/bin}/consulting-terms.pdf +0 -0
- /package/{assets → static}/bin/contact.vcf +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0-rdfa.xml +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.md +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.txt +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.xml +0 -0
- /package/static/{assets → bin}/license/COPYING-rdfa.xml +0 -0
- /package/static/{assets → bin}/license/COPYING.md +0 -0
- /package/static/{assets → bin}/license/COPYING.odt +0 -0
- /package/static/{assets → bin}/license/COPYING.txt +0 -0
- /package/{assets → static}/bin/linksheet.json +0 -0
- /package/{assets/bin → static/pgp}/contact@s.neteng.pro.asc +0 -0
- /package/{assets/bin → static/pgp}/github@sl.neteng.cc.asc +0 -0
- /package/static/{img/qr → pgp}/pgp-contact.png +0 -0
- /package/static/{img/qr → pgp}/pgp-github.png +0 -0
- /package/static/{img/qr → pgp}/pgp-support.png +0 -0
- /package/{assets/bin → static/pgp}/support@neteng.pro.asc +0 -0
- /package/static/{img/qr → pgp}/vcard.png +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/pages/PGPContent.svelte
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== -->
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
import CodeBlock from "$lib/components/CodeBlock.svelte";
|
|
11
|
+
import { base } from "$app/paths";
|
|
12
|
+
import { CONSTANTS } from "$lib";
|
|
13
|
+
|
|
14
|
+
// Log the base path to verify its value
|
|
15
|
+
//console.log("Base path:", base);
|
|
16
|
+
|
|
17
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
18
|
+
|
|
19
|
+
const { COMPANY_INFO, PAGE } = CONSTANTS;
|
|
20
|
+
|
|
21
|
+
const keys = [
|
|
22
|
+
{
|
|
23
|
+
name: "General Contact & Support",
|
|
24
|
+
email: "support (at) neteng.pro",
|
|
25
|
+
fingerprint: "6590 B992 E2E3 EFF1 2738 7BCE 2AF0 93E9 DEC6 1BA0",
|
|
26
|
+
opgp: "https://keys.openpgp.org/search?q=support%40neteng.pro",
|
|
27
|
+
file: "/pgp/support@neteng.pro.asc",
|
|
28
|
+
img: "pgp-support",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "Secure Email",
|
|
32
|
+
email: "contact (at) s.neteng.pro",
|
|
33
|
+
fingerprint: "DF11 8BAA 6C2D 9DCD EBDC 2DDC F993 7349 9495 F957",
|
|
34
|
+
opgp: "https://keys.openpgp.org/search?q=contact%40s.neteng.pro",
|
|
35
|
+
file: "/pgp/contact@s.neteng.pro.asc",
|
|
36
|
+
img: "pgp-contact",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "Security Contact",
|
|
40
|
+
email: "security (at) s.neteng.pro",
|
|
41
|
+
fingerprint: "B7FE 1D4E 6CAB 3E71 4A9F DF6E 48CB 7290 C00D 0DA5",
|
|
42
|
+
opgp: "https://keys.openpgp.org/search?q=security%40s.neteng.pro",
|
|
43
|
+
file: "/pgp/security@s.neteng.pro.asc",
|
|
44
|
+
img: "pgp-security",
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Tracks which PGP key's fingerprint was last copied.
|
|
50
|
+
* @type {string | null}
|
|
51
|
+
*/
|
|
52
|
+
let copiedKey = null;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Copies the fingerprint of a given PGP key and shows temporary feedback.
|
|
56
|
+
* @param {{ fingerprint: string, email: string }} key - The PGP key object
|
|
57
|
+
*/
|
|
58
|
+
function handleCopy(key) {
|
|
59
|
+
copy(key.fingerprint);
|
|
60
|
+
copiedKey = key.email;
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
if (copiedKey === key.email) copiedKey = null;
|
|
63
|
+
}, 2000);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Writes a string to the clipboard.
|
|
68
|
+
* @param {string} text - The text to copy to the clipboard
|
|
69
|
+
*/
|
|
70
|
+
function copy(text) {
|
|
71
|
+
navigator.clipboard.writeText(text).catch((err) => {
|
|
72
|
+
console.error("Clipboard copy failed:", err);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<h1>🔐 Public PGP Keys</h1>
|
|
78
|
+
<p>
|
|
79
|
+
Below are our public encryption keys. Use them to securely send email or
|
|
80
|
+
verify signed messages.
|
|
81
|
+
</p>
|
|
82
|
+
<p>
|
|
83
|
+
<img
|
|
84
|
+
src="/img/powered-by-proton.svg"
|
|
85
|
+
alt="Powered by Proton"
|
|
86
|
+
style="width: 168px; height: 24px;" />
|
|
87
|
+
</p>
|
|
88
|
+
<p class="bquote">
|
|
89
|
+
NOTE: Addresses under the <strong>s.neteng.pro</strong> domain are powered by Proton
|
|
90
|
+
Mail to ensure strong end-to-end privacy protections.
|
|
91
|
+
</p>
|
|
92
|
+
|
|
93
|
+
{#each keys as key}
|
|
94
|
+
<section class="pgp-entry" aria-labelledby={`pgp-${key.img}`}>
|
|
95
|
+
<div class="pgp-text">
|
|
96
|
+
<h2 id={`pgp-${key.img}`}>{key.name}</h2>
|
|
97
|
+
<h3>
|
|
98
|
+
<
|
|
99
|
+
{#if key.opgp}
|
|
100
|
+
<a rel={PAGE.REL} href={key.opgp} target={PAGE.BLANK}>
|
|
101
|
+
{key.email}
|
|
102
|
+
</a>
|
|
103
|
+
{:else}
|
|
104
|
+
{key.email}
|
|
105
|
+
{/if}
|
|
106
|
+
>
|
|
107
|
+
</h3>
|
|
108
|
+
<CodeBlock text={key.fingerprint} />
|
|
109
|
+
<p>
|
|
110
|
+
<button
|
|
111
|
+
type="button"
|
|
112
|
+
on:click={() => handleCopy(key)}
|
|
113
|
+
aria-label={`Copy PGP fingerprint for ${key.name}`}
|
|
114
|
+
title="Copy fingerprint to clipboard">
|
|
115
|
+
{copiedKey === key.email ? "Copied!" : "Copy fingerprint"}
|
|
116
|
+
</button>
|
|
117
|
+
</p>
|
|
118
|
+
<p>
|
|
119
|
+
<a
|
|
120
|
+
href={key.file}
|
|
121
|
+
download
|
|
122
|
+
aria-label={`Download PGP key for ${key.name}`}
|
|
123
|
+
title="Download PGP key">
|
|
124
|
+
Download Key
|
|
125
|
+
</a>
|
|
126
|
+
</p>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="pgp-qr">
|
|
129
|
+
<picture>
|
|
130
|
+
<source srcset={`/pgp/${key.img}.webp`} type="image/webp" />
|
|
131
|
+
<img
|
|
132
|
+
src={`/pgp/${key.img}.png`}
|
|
133
|
+
alt={`QR code for ${key.email}`}
|
|
134
|
+
loading="lazy"
|
|
135
|
+
decoding="async"
|
|
136
|
+
style="width: 150px; height: 150px;" />
|
|
137
|
+
</picture>
|
|
138
|
+
</div>
|
|
139
|
+
</section>
|
|
140
|
+
{/each}
|
|
141
|
+
|
|
142
|
+
<!-- cspell:ignore ebdc -->
|
|
@@ -112,7 +112,7 @@ This file is part of Network Pro.
|
|
|
112
112
|
|
|
|
113
113
|
<a href={tandcLink} target={PAGE.SELF}>Docs</a>
|
|
114
114
|
|
|
|
115
|
-
<a href="/
|
|
115
|
+
<a href="/bin/consulting-terms.pdf" download target={PAGE.BLANK}>
|
|
116
116
|
PDF <span class="fas fa-file-arrow-down"></span>
|
|
117
117
|
</a>
|
|
118
118
|
</sup>
|
|
@@ -457,12 +457,16 @@ footer .container {
|
|
|
457
457
|
.block {
|
|
458
458
|
width: 100%;
|
|
459
459
|
border: none;
|
|
460
|
-
font-size: 0.
|
|
460
|
+
font-size: 0.875rem;
|
|
461
461
|
line-height: 1.125rem;
|
|
462
462
|
background: none;
|
|
463
463
|
border-radius: 0;
|
|
464
|
+
font-family: monospace; /* retain code look */
|
|
464
465
|
outline: none;
|
|
466
|
+
overflow-wrap: break-word; /* modern replacement */
|
|
465
467
|
resize: none;
|
|
468
|
+
white-space: normal; /* allow wrapping */
|
|
469
|
+
word-break: normal; /* avoid deprecated behavior */
|
|
466
470
|
}
|
|
467
471
|
|
|
468
472
|
.fingerprint {
|
|
@@ -518,3 +522,21 @@ footer .container {
|
|
|
518
522
|
overflow: hidden;
|
|
519
523
|
white-space: nowrap;
|
|
520
524
|
}
|
|
525
|
+
|
|
526
|
+
.pgp-entry {
|
|
527
|
+
display: flex;
|
|
528
|
+
align-items: center;
|
|
529
|
+
flex-wrap: wrap;
|
|
530
|
+
gap: 2rem;
|
|
531
|
+
margin-bottom: 2rem;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.pgp-text {
|
|
535
|
+
flex: 2;
|
|
536
|
+
min-width: 250px;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.pgp-qr {
|
|
540
|
+
flex: 1;
|
|
541
|
+
min-width: 150px;
|
|
542
|
+
}
|
|
@@ -129,15 +129,24 @@ a:active {
|
|
|
129
129
|
text-decoration: underline;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/* visited link */
|
|
133
|
+
a:visited {
|
|
134
|
+
color: #7f6227;
|
|
135
|
+
}
|
|
136
|
+
|
|
132
137
|
/* focused link */
|
|
133
|
-
a:focus {
|
|
138
|
+
a:focus-visible {
|
|
134
139
|
color: #191919; /* Black text when focused */
|
|
135
140
|
background-color: #ffc627; /* Gold background when focused */
|
|
141
|
+
outline: 2px solid #ffc627;
|
|
142
|
+
outline-offset: 4px;
|
|
136
143
|
}
|
|
137
144
|
|
|
138
|
-
/*
|
|
139
|
-
a:
|
|
140
|
-
color:
|
|
145
|
+
/* Reset focus style to avoid duplication */
|
|
146
|
+
a:focus:not(:focus-visible) {
|
|
147
|
+
color: inherit;
|
|
148
|
+
background-color: transparent;
|
|
149
|
+
outline: none;
|
|
141
150
|
}
|
|
142
151
|
|
|
143
152
|
/* visited and mouse over */
|
|
@@ -3,4 +3,4 @@ Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
|
3
3
|
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
4
4
|
This file is part of Network Pro.
|
|
5
5
|
========================================================================== */
|
|
6
|
-
html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box}pre{font-family:monospace;font-size:1em}a{background-color:#0000}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted buttontext}fieldset{padding:.35em .75em .625em}legend{color:inherit;box-sizing:border-box;white-space:normal;max-width:100%;padding:0;display:table}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}html{color:#222;scroll-behavior:smooth;font-size:1em;line-height:1.4}::-moz-selection{text-shadow:none;background:#191919}::selection{text-shadow:none;background:#191919}hr{border:0;border-top:1px solid #ccc;height:1px;margin:1em 0;padding:0;display:block;overflow:visible}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}body{color:#fafafa;background-color:#191919;margin:10px;font-family:Arial,Helvetica,sans-serif}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:focus{color:#191919;background-color:#ffc627}a:
|
|
6
|
+
html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box}pre{font-family:monospace;font-size:1em}a{background-color:#0000}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted buttontext}fieldset{padding:.35em .75em .625em}legend{color:inherit;box-sizing:border-box;white-space:normal;max-width:100%;padding:0;display:table}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}html{color:#222;scroll-behavior:smooth;font-size:1em;line-height:1.4}::-moz-selection{text-shadow:none;background:#191919}::selection{text-shadow:none;background:#191919}hr{border:0;border-top:1px solid #ccc;height:1px;margin:1em 0;padding:0;display:block;overflow:visible}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}body{color:#fafafa;background-color:#191919;margin:10px;font-family:Arial,Helvetica,sans-serif}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:visited{color:#7f6227}a:focus-visible{color:#191919;outline-offset:4px;background-color:#ffc627;outline:2px solid #ffc627}a:focus:not(:focus-visible){color:inherit;background-color:#0000;outline:none}a:visited:hover{color:#7f6227}.hidden,[hidden]{display:none!important}.visually-hidden{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;width:auto;height:auto;white-space:inherit;margin:0;position:static;overflow:visible}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}@media print{*,:before,:after{color:#000!important;box-shadow:none!important;text-shadow:none!important;background:#fff!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^=\#]:after,a[href^=javascript\:]:after{content:""}pre{white-space:pre-wrap!important}pre,blockquote{page-break-inside:avoid;border:1px solid #999}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.full-width-section{background-position:50%;background-size:cover;width:100%;max-width:1920px;margin:0 auto}.container{max-width:1200px;margin:0 auto;padding:0 12px}.readable{max-width:900px;margin:0 auto}header,footer{width:100%}header .container,footer .container{max-width:1200px;margin:0 auto;padding:20px 12px}.gh{border-collapse:collapse;border-spacing:0;margin:0 auto}.gh td,.gh th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.gh .gh-tcell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.gh,.gh col{width:auto!important}.gh-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.soc{border-collapse:collapse;border-spacing:0;margin:0 auto}.soc td,.soc th{border-collapse:collapse;word-break:normal;padding:8px;overflow:hidden}.soc .soc-fa{text-align:center;vertical-align:middle}@media screen and (width<=767px){.soc,.soc col{width:auto!important}.soc-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.foss{border-collapse:collapse;border-spacing:0}.foss td,.foss th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.foss .foss-cell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.foss,.foss col{width:auto!important}.foss-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}}.bnav{text-align:center;border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav td,.bnav th{text-align:center;vertical-align:middle;word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav .bnav-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav,.bnav col{width:auto!important}.bnav-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.bnav2{border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav2 td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav2 th{word-break:normal;border-style:none;padding:12px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.bnav2 .bnav2-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav2,.bnav2 col{width:auto!important}.bnav2-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.pgp{border-collapse:collapse;border-spacing:0;margin:0 auto}.pgp td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp th{word-break:normal;border:1px solid #000;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp .pgp-col1{text-align:right;vertical-align:middle;padding-right:1rem}.pgp .pgp-col2{text-align:left;vertical-align:middle;padding-left:1rem}@media screen and (width<=767px){.pgp,.pgp col{width:auto!important}.pgp-wrap{-webkit-overflow-scrolling:touch;margin:2rem 0 auto;overflow-x:auto}}.logo{margin-left:auto;margin-right:auto;display:block}.index-title1{text-align:center;font-style:italic;font-weight:700}.index-title2{letter-spacing:-.015em;text-align:center;font-variant:small-caps;font-size:1.25rem;line-height:1.625rem}.index1{letter-spacing:-.035em;text-align:center;font-style:italic;font-weight:700;line-height:2.125rem}.index2{letter-spacing:-.035em;text-align:center;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.index3{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem}.index4{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem;text-decoration:underline}.subhead{letter-spacing:-.035em;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.bold{font-weight:700}.emphasis{font-style:italic}.uline{text-decoration:underline}.bolditalic{font-style:italic;font-weight:700}.bquote{border-left:3px solid #9e9e9e;margin-left:30px;padding-left:10px;font-style:italic}.small-text{font-size:.75rem;line-height:1.125rem}.large-text-center{text-align:center;font-size:1.25rem;line-height:1.75rem}.prewrap{white-space:pre-wrap;display:block}.hr-styled{width:75%;margin:auto}.center-text{text-align:center}.copyright{text-align:center;font-size:.75rem;line-height:1.125rem}.gold{color:#ffc627}.visited{color:#7f6227}.goldseparator{color:#ffc627;margin:0 .5rem}.center-nav{text-align:center;padding:5px;font-size:1rem;line-height:1.5rem}.block{overflow-wrap:break-word;resize:none;white-space:normal;word-break:normal;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-family:monospace;font-size:.875rem;line-height:1.125rem}.fingerprint{white-space:pre-line;font-weight:700;display:block}.pgp-image{width:150px;height:150px}.spacer{margin:2rem 0}.separator{margin:0 .5rem}.emoji{margin-right:8px}.headline{margin-bottom:4px;font-style:italic;font-weight:700;display:block}.label{font-family:inherit;font-weight:700}.description{font-family:inherit;font-style:normal;font-weight:400;display:inline}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pgp-entry{flex-wrap:wrap;align-items:center;gap:2rem;margin-bottom:2rem;display:flex}.pgp-text{flex:2;min-width:250px}.pgp-qr{flex:1;min-width:150px}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/pgp/+page.server.js
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== */
|
|
8
|
+
|
|
9
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
10
|
+
|
|
11
|
+
export const prerender = false;
|
|
12
|
+
|
|
13
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
14
|
+
export function load() {
|
|
15
|
+
return {
|
|
16
|
+
meta: meta["/pgp"] || defaultMeta,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/routes/pgp/+page.svelte
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== -->
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
import PGPContent from "$lib/pages/PGPContent.svelte";
|
|
11
|
+
import Badges from "$lib/components/Badges.svelte";
|
|
12
|
+
import FullWidthSection from "$lib/components/FullWidthSection.svelte";
|
|
13
|
+
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
14
|
+
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
15
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @type {string}
|
|
19
|
+
* Style class for the div element.
|
|
20
|
+
*/
|
|
21
|
+
const spaceStyle = "spacer";
|
|
22
|
+
|
|
23
|
+
export let data;
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
+
|
|
28
|
+
<link rel="canonical" href="https://netwk.pro/pgp" />
|
|
29
|
+
|
|
30
|
+
<section id="about">
|
|
31
|
+
<FullWidthSection containerClass="readable">
|
|
32
|
+
<!-- BEGIN MAIN CONTENT -->
|
|
33
|
+
<section id="main-content">
|
|
34
|
+
<PGPContent />
|
|
35
|
+
</section>
|
|
36
|
+
<!-- END MAIN CONTENT -->
|
|
37
|
+
|
|
38
|
+
<div class={spaceStyle}></div>
|
|
39
|
+
|
|
40
|
+
<!-- SOCIAL MEDIA -->
|
|
41
|
+
<section id="social-media">
|
|
42
|
+
<SocialMedia />
|
|
43
|
+
</section>
|
|
44
|
+
|
|
45
|
+
<hr />
|
|
46
|
+
|
|
47
|
+
<div class={spaceStyle}></div>
|
|
48
|
+
|
|
49
|
+
<!-- LEGAL NAVIGATION -->
|
|
50
|
+
<section id="legal-nav">
|
|
51
|
+
<LegalNav />
|
|
52
|
+
</section>
|
|
53
|
+
|
|
54
|
+
<div class={spaceStyle}></div>
|
|
55
|
+
|
|
56
|
+
<!-- BADGES -->
|
|
57
|
+
<section id="badges">
|
|
58
|
+
<Badges />
|
|
59
|
+
</section>
|
|
60
|
+
</FullWidthSection>
|
|
61
|
+
</section>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/pgp/[key]/+server.js
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== */
|
|
8
|
+
|
|
9
|
+
import { error } from "@sveltejs/kit";
|
|
10
|
+
import fs from "fs/promises";
|
|
11
|
+
import path from "path";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type {import('@sveltejs/kit').RequestHandler}
|
|
15
|
+
*/
|
|
16
|
+
export async function GET({ params, setHeaders }) {
|
|
17
|
+
const key = params.key;
|
|
18
|
+
|
|
19
|
+
if (!key || !key.endsWith(".asc")) {
|
|
20
|
+
throw error(400, "Invalid or missing file name");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const filePath = path.resolve("static/pgp", key);
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const file = await fs.readFile(filePath);
|
|
27
|
+
setHeaders({
|
|
28
|
+
"Content-Type": "application/pgp-keys",
|
|
29
|
+
"Content-Disposition": `attachment; filename="${key}"`,
|
|
30
|
+
});
|
|
31
|
+
return new Response(file);
|
|
32
|
+
} catch {
|
|
33
|
+
return new Response("File not found", { status: 404 });
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/service-worker.js
CHANGED
|
@@ -28,10 +28,19 @@ const CACHE = `cache-${version}`;
|
|
|
28
28
|
const excludedAssets = [];
|
|
29
29
|
|
|
30
30
|
const IGNORE_PATHS = new Set([
|
|
31
|
+
"/.well-known/security.txt.asc",
|
|
31
32
|
"/img/banner-1280x640.png",
|
|
32
33
|
"/img/logo-transparent.png",
|
|
33
34
|
"/img/logo.png",
|
|
34
35
|
"/img/svelte.png",
|
|
36
|
+
"/pgp/pgp-github.png",
|
|
37
|
+
"/pgp/pgp-github.webp",
|
|
38
|
+
"/pgp/contact@s.neteng.pro.asc",
|
|
39
|
+
"/pgp/github@sl.neteng.cc.asc",
|
|
40
|
+
"/pgp/security@s.neteng.pro.asc",
|
|
41
|
+
"/pgp/support@neteng.pro.asc",
|
|
42
|
+
"/pgp/vcard.png",
|
|
43
|
+
"/pgp/vcard.webp",
|
|
35
44
|
"/screenshots/desktop-foss.png",
|
|
36
45
|
"/webfonts/fa-brands-400.ttf",
|
|
37
46
|
"/webfonts/fa-solid-900.ttf",
|
|
@@ -50,7 +59,7 @@ const ASSETS = [
|
|
|
50
59
|
|
|
51
60
|
const shouldExclude =
|
|
52
61
|
path.startsWith("http") ||
|
|
53
|
-
path.startsWith("/
|
|
62
|
+
path.startsWith("/bin/") ||
|
|
54
63
|
disallowedHosts.some(
|
|
55
64
|
(host) => hostname === host || hostname.endsWith(`.${host}`),
|
|
56
65
|
) ||
|
|
@@ -81,10 +90,12 @@ const REQUIRED_ASSETS = [
|
|
|
81
90
|
"/icon-services.png",
|
|
82
91
|
"/icon-splash.png",
|
|
83
92
|
"/img/banner-og-1200x630.png",
|
|
84
|
-
"/
|
|
85
|
-
"/
|
|
86
|
-
"/
|
|
87
|
-
"/
|
|
93
|
+
"/pgp/pgp-contact.png",
|
|
94
|
+
"/pgp/pgp-contact.webp",
|
|
95
|
+
"/pgp/pgp-security.png",
|
|
96
|
+
"/pgp/pgp-security.webp",
|
|
97
|
+
"/pgp/pgp-support.png",
|
|
98
|
+
"/pgp/pgp-support.webp",
|
|
88
99
|
"/manifest.json",
|
|
89
100
|
"/offline.html",
|
|
90
101
|
"/offline.min.css",
|
|
@@ -98,7 +109,8 @@ const REQUIRED_ASSETS = [
|
|
|
98
109
|
"/styles/solid.min.css",
|
|
99
110
|
"/webfonts/fa-brands-400.woff2",
|
|
100
111
|
"/webfonts/fa-solid-900.woff2",
|
|
101
|
-
"/.well-known/dnt-policy
|
|
112
|
+
"/.well-known/dnt-policy.txt",
|
|
113
|
+
"/.well-known/gpc.json",
|
|
102
114
|
];
|
|
103
115
|
|
|
104
116
|
if (isDev) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="196.114" height="28" aria-label="POWERED BY: PROTON"><g shape-rendering="crispEdges"><path fill="#555" d="M0 0h117.614v28H0z"/><path fill="#6d4aff" d="M117.614 0h78.5v28h-78.5z"/></g><g fill="#fff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="100" text-anchor="middle" text-rendering="geometricPrecision"><image width="11.114" height="14" x="9" y="7" href="data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMTkuMDUyMDAwMDAwMDAwMDAzIDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5Qcm90b248L3RpdGxlPjxwYXRoIGQ9Ik0wIDE3Ljc1VjI0aDQuNDAxdi01Ljk3OWMwLTAuNTgyIDAuMjMyLTEuMTQgMC42NDUtMS41NTFhMi4yMDQgMi4yMDQgMCAwIDEgMS41NTYtMC42NDNoNC41MTNhNy45NTUgNy45NTUgMCAwIDAgNS42MTItMi4zMTggNy45MDcgNy45MDcgMCAwIDAgMi4zMjUtNS41OTUgNy45MSA3LjkxIDAgMCAwLTIuMzI1LTUuNTk2QTcuOTU4IDcuOTU4IDAgMCAwIDExLjExMyAwSDB2Ny44MTJoNC40MDFWNC4xMjloNi40MTZjMC45OTUgMCAxLjk1MSAwLjM5NCAyLjY1NiAxLjA5NyAwLjcwNCAwLjcgMS4xIDEuNjUzIDEuMTAxIDIuNjQ2YTMuNzQyIDMuNzQyIDAgMCAxLTEuMTAxIDIuNjQ4IDMuNzY2IDMuNzY2IDAgMCAxLTIuNjU2IDEuMDk3SDYuMTUzYTYuMTU4IDYuMTU4IDAgMCAwLTQuMzUyIDEuNzk1IDYuMTMzIDYuMTMzIDAgMCAwLTEuODAxIDQuMzM4WiIvPjwvc3ZnPg=="/><text x="658.637" y="175" textLength="795" transform="scale(.1)">POWERED BY</text><text x="1568.637" y="175" font-weight="bold" textLength="545" transform="scale(.1)">PROTON</text></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
2
|
+
Comment: User ID: security@s.neteng.pro <security@s.neteng.pro>
|
|
3
|
+
Comment: Valid from: 1/6/25 8:36 AM
|
|
4
|
+
Comment: Type: 255-bit EdDSA (secret key available)
|
|
5
|
+
Comment: Usage: Signing, Encryption, Certifying User IDs
|
|
6
|
+
Comment: Fingerprint: B7FE1D4E6CAB3E714A9FDF6E48CB7290C00D0DA5
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
mDMEZ3v4eRYJKwYBBAHaRw8BAQdAFxcxIifN3QdPmjnVFLXkCueQBV+GCpybLTgw
|
|
10
|
+
FPqMNvi0LXNlY3VyaXR5QHMubmV0ZW5nLnBybyA8c2VjdXJpdHlAcy5uZXRlbmcu
|
|
11
|
+
cHJvPojRBBMWCgCDBYJne/h5AwsJBwmQSMtykMANDaVFFAAAAAAAHAAgc2FsdEBu
|
|
12
|
+
b3RhdGlvbnMub3BlbnBncGpzLm9yZ3rrat4fGUXd3ubqU+S6lJBxikUj2XJHnG3R
|
|
13
|
+
dledkYRnAxUKCAQWAAIBAhkBApsDAh4BFiEEt/4dTmyrPnFKn99uSMtykMANDaUA
|
|
14
|
+
AM61AQCadROujMKqyuGezv9/l2bqY2TCwxlU6pt2OP2kBaGawQEA56C1AnZ4j43c
|
|
15
|
+
VnMVc66lGoTzyTceHJRtC4OF+BT2TQW4OARne/h5EgorBgEEAZdVAQUBAQdAeH9H
|
|
16
|
+
BjnnWYk6uRjTz/rD8XKuyVmK+M2FkvwwTGnp41UDAQgHiL4EGBYKAHAFgmd7+HkJ
|
|
17
|
+
kEjLcpDADQ2lRRQAAAAAABwAIHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmec
|
|
18
|
+
Wa0ZrRuAVXctQtSq1NG+iidE0NBjZDHAgMnyMjEhIAKbDBYhBLf+HU5sqz5xSp/f
|
|
19
|
+
bkjLcpDADQ2lAAADagD/VgytFYartgP6AuqYOgbFd+n25ziiFX936t+ooCLvhcwB
|
|
20
|
+
AO6Mwo291bBwCIFNJ8gA1P7P02UsXvFOO+GGgaHlff8K
|
|
21
|
+
=Wt2X
|
|
22
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
|
Binary file
|
package/static/sitemap.xml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!-- Sitemap last updated on 2025-06-
|
|
2
|
+
<!-- Sitemap last updated on 2025-06-11 -->
|
|
3
3
|
|
|
4
4
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<loc>https://netwk.pro</loc>
|
|
9
9
|
|
|
10
|
-
<lastmod>2025-
|
|
10
|
+
<lastmod>2025-06-10</lastmod>
|
|
11
11
|
|
|
12
12
|
<changefreq>weekly</changefreq>
|
|
13
13
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
<loc>https://netwk.pro/about</loc>
|
|
33
33
|
|
|
34
|
-
<lastmod>2025-
|
|
34
|
+
<lastmod>2025-06-10</lastmod>
|
|
35
35
|
|
|
36
36
|
<changefreq>monthly</changefreq>
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
<loc>https://netwk.pro/license</loc>
|
|
69
69
|
|
|
70
|
-
<lastmod>2025-06-
|
|
70
|
+
<lastmod>2025-06-10</lastmod>
|
|
71
71
|
|
|
72
72
|
<changefreq>monthly</changefreq>
|
|
73
73
|
|
|
@@ -91,7 +91,19 @@
|
|
|
91
91
|
|
|
92
92
|
<loc>https://netwk.pro/terms-conditions</loc>
|
|
93
93
|
|
|
94
|
-
<lastmod>2025-
|
|
94
|
+
<lastmod>2025-06-10</lastmod>
|
|
95
|
+
|
|
96
|
+
<changefreq>monthly</changefreq>
|
|
97
|
+
|
|
98
|
+
<priority>0.5</priority>
|
|
99
|
+
|
|
100
|
+
</url>
|
|
101
|
+
|
|
102
|
+
<url>
|
|
103
|
+
|
|
104
|
+
<loc>https://netwk.pro/pgp</loc>
|
|
105
|
+
|
|
106
|
+
<lastmod>2025-06-11</lastmod>
|
|
95
107
|
|
|
96
108
|
<changefreq>monthly</changefreq>
|
|
97
109
|
|
|
@@ -101,25 +113,73 @@
|
|
|
101
113
|
|
|
102
114
|
<url>
|
|
103
115
|
|
|
104
|
-
<loc>https://netwk.pro/
|
|
116
|
+
<loc>https://netwk.pro/bin/CC-BY-4.0.html</loc>
|
|
117
|
+
|
|
118
|
+
<lastmod>2025-06-10</lastmod>
|
|
119
|
+
|
|
120
|
+
<changefreq>yearly</changefreq>
|
|
121
|
+
|
|
122
|
+
<priority>0.3</priority>
|
|
123
|
+
|
|
124
|
+
</url>
|
|
125
|
+
|
|
126
|
+
<url>
|
|
127
|
+
|
|
128
|
+
<loc>https://netwk.pro/bin/COPYING.html</loc>
|
|
129
|
+
|
|
130
|
+
<lastmod>2025-06-10</lastmod>
|
|
131
|
+
|
|
132
|
+
<changefreq>yearly</changefreq>
|
|
133
|
+
|
|
134
|
+
<priority>0.3</priority>
|
|
135
|
+
|
|
136
|
+
</url>
|
|
137
|
+
|
|
138
|
+
<url>
|
|
139
|
+
|
|
140
|
+
<loc>https://netwk.pro/.well-known/security.txt</loc>
|
|
141
|
+
|
|
142
|
+
<lastmod>2025-06-11</lastmod>
|
|
143
|
+
|
|
144
|
+
<changefreq>yearly</changefreq>
|
|
145
|
+
|
|
146
|
+
<priority>0.2</priority>
|
|
147
|
+
|
|
148
|
+
</url>
|
|
149
|
+
|
|
150
|
+
<url>
|
|
151
|
+
|
|
152
|
+
<loc>https://netwk.pro/.well-known/dnt-policy.txt</loc>
|
|
153
|
+
|
|
154
|
+
<lastmod>2025-06-11</lastmod>
|
|
155
|
+
|
|
156
|
+
<changefreq>yearly</changefreq>
|
|
157
|
+
|
|
158
|
+
<priority>0.2</priority>
|
|
159
|
+
|
|
160
|
+
</url>
|
|
161
|
+
|
|
162
|
+
<url>
|
|
163
|
+
|
|
164
|
+
<loc>https://netwk.pro/.well-known/gpc.json</loc>
|
|
105
165
|
|
|
106
|
-
<lastmod>2025-
|
|
166
|
+
<lastmod>2025-06-11</lastmod>
|
|
107
167
|
|
|
108
168
|
<changefreq>yearly</changefreq>
|
|
109
169
|
|
|
110
|
-
<priority>0.
|
|
170
|
+
<priority>0.2</priority>
|
|
111
171
|
|
|
112
172
|
</url>
|
|
113
173
|
|
|
114
174
|
<url>
|
|
115
175
|
|
|
116
|
-
<loc>https://netwk.pro/
|
|
176
|
+
<loc>https://netwk.pro/.well-known/humans.txt</loc>
|
|
117
177
|
|
|
118
|
-
<lastmod>2025-
|
|
178
|
+
<lastmod>2025-06-11</lastmod>
|
|
119
179
|
|
|
120
180
|
<changefreq>yearly</changefreq>
|
|
121
181
|
|
|
122
|
-
<priority>0.
|
|
182
|
+
<priority>0.1</priority>
|
|
123
183
|
|
|
124
184
|
</url>
|
|
125
185
|
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
BEGIN:VCARD
|
|
2
|
-
VERSION:3.0
|
|
3
|
-
FN:Scott Lopez
|
|
4
|
-
N:Lopez;Scott
|
|
5
|
-
TEL;TYPE=WORK,PREF=1:(623) 252-4350
|
|
6
|
-
EMAIL;TYPE=HOME:github@sl.neteng.cc
|
|
7
|
-
EMAIL;TYPE=WORK:support@neteng.pro
|
|
8
|
-
EMAIL;TYPE=Secure:business@s.neteng.pro
|
|
9
|
-
ADR;TYPE=WORK:;;Peoria\, AZ 85382\nUS
|
|
10
|
-
ORG:Network Pro Strategies
|
|
11
|
-
TITLE:Security Consultant
|
|
12
|
-
URL:https://netwk.pro
|
|
13
|
-
END:VCARD
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
2
|
-
|
|
3
|
-
xjMEaA9hQBYJKwYBBAHaRw8BAQdA0plJIVADzWGVQtDnYcjtokJN+xTURRDx
|
|
4
|
-
+bPQWsRCCMrNK2NvbnRhY3RAcy5uZXRlbmcucHJvIDxjb250YWN0QHMubmV0
|
|
5
|
-
ZW5nLnBybz7CwBEEExYKAIMFgmgPYUADCwkHCZD5k3NJlJX5V0UUAAAAAAAc
|
|
6
|
-
ACBzYWx0QG5vdGF0aW9ucy5vcGVucGdwanMub3Jn7SJZvz9xzMXAz0AK0oap
|
|
7
|
-
2J4yPfF5ITdHI3E4NrGhHiUDFQoIBBYAAgECGQECmwMCHgEWIQTfEYuqbC2d
|
|
8
|
-
zevcLdz5k3NJlJX5VwAA3lgBAPlvilH7QBDdourj+ndUWOlkN/UK5GVZFNdl
|
|
9
|
-
Wtz+yqO9AQDi6ZJvz4FXtnLpiDnrGLl+XtS9mpb9W1K6veAfq9EPDs44BGgP
|
|
10
|
-
YUASCisGAQQBl1UBBQEBB0CH4STLqhXPigKwiTqgROmO9+ZBwLULvQIr/opO
|
|
11
|
-
xkvFcgMBCAfCvgQYFgoAcAWCaA9hQAmQ+ZNzSZSV+VdFFAAAAAAAHAAgc2Fs
|
|
12
|
-
dEBub3RhdGlvbnMub3BlbnBncGpzLm9yZzQ5Pg7sTb37RQ0E0xHK7uw476sQ
|
|
13
|
-
4ReUd+a+A2uSan3wApsMFiEE3xGLqmwtnc3r3C3c+ZNzSZSV+VcAALq5AQDJ
|
|
14
|
-
bhqyY8dg25WXFPtL8TgeK8BP+d4y5IaobKuZ2gHh2wD+MmeUZZBNiIM/QPMo
|
|
15
|
-
Pgm5czd9ckE/aknVqJZPLx7KJAQ=
|
|
16
|
-
=o5rM
|
|
17
|
-
-----END PGP PUBLIC KEY BLOCK-----
|