@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.
Files changed (64) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/README.md +27 -0
  3. package/cspell.json +4 -0
  4. package/jsconfig.template.jsonc +3 -1
  5. package/package.json +10 -10
  6. package/src/app.html +1 -1
  7. package/src/hooks.server.js +1 -1
  8. package/src/lib/components/CodeBlock.svelte +13 -0
  9. package/src/lib/components/foss/FossItemContent.svelte +2 -2
  10. package/src/lib/data/fossData.js +8 -1
  11. package/src/lib/images.js +15 -8
  12. package/src/lib/img/qr/pgp-contact.webp +0 -0
  13. package/src/lib/img/qr/pgp-github.webp +0 -0
  14. package/src/lib/img/qr/pgp-security.png +0 -0
  15. package/src/lib/img/qr/pgp-security.webp +0 -0
  16. package/src/lib/img/qr/pgp-support.webp +0 -0
  17. package/src/lib/img/qr/vcard.webp +0 -0
  18. package/src/lib/meta.js +5 -0
  19. package/src/lib/pages/AboutContent.svelte +62 -32
  20. package/src/lib/pages/LicenseContent.svelte +13 -19
  21. package/src/lib/pages/PGPContent.svelte +142 -0
  22. package/src/lib/pages/TermsConditionsContent.svelte +1 -1
  23. package/src/lib/styles/css/default.css +23 -1
  24. package/src/lib/styles/css/style.css +13 -4
  25. package/src/lib/styles/global.min.css +1 -1
  26. package/src/routes/pgp/+page.server.js +18 -0
  27. package/src/routes/pgp/+page.svelte +61 -0
  28. package/src/routes/pgp/[key]/+server.js +35 -0
  29. package/src/service-worker.js +18 -6
  30. package/static/{assets → bin}/license/CC-BY-4.0.html +1 -1
  31. package/static/{assets → bin}/license/COPYING.html +1 -1
  32. package/static/img/powered-by-proton.svg +1 -0
  33. package/static/pgp/pgp-contact.webp +0 -0
  34. package/static/pgp/pgp-github.webp +0 -0
  35. package/static/pgp/pgp-security.png +0 -0
  36. package/static/pgp/pgp-security.webp +0 -0
  37. package/static/pgp/pgp-support.webp +0 -0
  38. package/static/pgp/security@s.neteng.pro.asc +22 -0
  39. package/static/pgp/vcard.webp +0 -0
  40. package/static/sitemap.xml +71 -11
  41. package/static/assets/bin/contact.vcf +0 -13
  42. package/static/assets/bin/contact@s.neteng.pro.asc +0 -17
  43. package/static/assets/bin/github@sl.neteng.cc.asc +0 -29
  44. package/static/assets/bin/linksheet.json +0 -8
  45. package/static/assets/bin/support@neteng.pro.asc +0 -47
  46. package/static/assets/consulting-terms.pdf +0 -0
  47. /package/{assets → static/bin}/consulting-terms.pdf +0 -0
  48. /package/{assets → static}/bin/contact.vcf +0 -0
  49. /package/static/{assets → bin}/license/CC-BY-4.0-rdfa.xml +0 -0
  50. /package/static/{assets → bin}/license/CC-BY-4.0.md +0 -0
  51. /package/static/{assets → bin}/license/CC-BY-4.0.txt +0 -0
  52. /package/static/{assets → bin}/license/CC-BY-4.0.xml +0 -0
  53. /package/static/{assets → bin}/license/COPYING-rdfa.xml +0 -0
  54. /package/static/{assets → bin}/license/COPYING.md +0 -0
  55. /package/static/{assets → bin}/license/COPYING.odt +0 -0
  56. /package/static/{assets → bin}/license/COPYING.txt +0 -0
  57. /package/{assets → static}/bin/linksheet.json +0 -0
  58. /package/{assets/bin → static/pgp}/contact@s.neteng.pro.asc +0 -0
  59. /package/{assets/bin → static/pgp}/github@sl.neteng.cc.asc +0 -0
  60. /package/static/{img/qr → pgp}/pgp-contact.png +0 -0
  61. /package/static/{img/qr → pgp}/pgp-github.png +0 -0
  62. /package/static/{img/qr → pgp}/pgp-support.png +0 -0
  63. /package/{assets/bin → static/pgp}/support@neteng.pro.asc +0 -0
  64. /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
+ &lt;
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
+ &gt;
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="/assets/consulting-terms.pdf" target={PAGE.BLANK}>
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.75rem;
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
- /* visited link */
139
- a:visited {
140
- color: #7f6227;
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:visited,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{resize:none;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-size:.75rem;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}
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
+ }
@@ -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("/assets/") ||
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
- "/img/qr/pgp-contact.png",
85
- "/img/qr/pgp-github.png",
86
- "/img/qr/pgp-support.png",
87
- "/img/qr/vcard.png",
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-1.0.txt",
112
+ "/.well-known/dnt-policy.txt",
113
+ "/.well-known/gpc.json",
102
114
  ];
103
115
 
104
116
  if (isDev) {
@@ -26,7 +26,7 @@
26
26
 
27
27
  <link
28
28
  rel="canonical"
29
- href="https://netwk.pro/assets/license/CC-BY-4.0.html" />
29
+ href="https://netwk.pro/bin/license/CC-BY-4.0.html" />
30
30
 
31
31
  <link rel="icon" href="/favicon.ico" sizes="any" type="image/x-icon" />
32
32
  </head>
@@ -26,7 +26,7 @@
26
26
 
27
27
  <link
28
28
  rel="canonical"
29
- href="https://netwk.pro/assets/license/COPYING.html" />
29
+ href="https://netwk.pro/bin/license/COPYING.html" />
30
30
 
31
31
  <link
32
32
  rel="icon"
@@ -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
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Sitemap last updated on 2025-06-08 -->
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-05-28</lastmod>
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-05-29</lastmod>
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-04</lastmod>
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-05-29</lastmod>
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/assets/license/COPYING.html</loc>
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-05-29</lastmod>
166
+ <lastmod>2025-06-11</lastmod>
107
167
 
108
168
  <changefreq>yearly</changefreq>
109
169
 
110
- <priority>0.4</priority>
170
+ <priority>0.2</priority>
111
171
 
112
172
  </url>
113
173
 
114
174
  <url>
115
175
 
116
- <loc>https://netwk.pro/assets/license/CC-BY-4.0.html</loc>
176
+ <loc>https://netwk.pro/.well-known/humans.txt</loc>
117
177
 
118
- <lastmod>2025-05-29</lastmod>
178
+ <lastmod>2025-06-11</lastmod>
119
179
 
120
180
  <changefreq>yearly</changefreq>
121
181
 
122
- <priority>0.4</priority>
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-----