Files
minisrv/zefie_wtvp_minisrv/includes/config.json

589 lines
26 KiB
JSON

{
/*
STOP! STOP! STOP!
Do NOT edit this file. Instead make a file called "user_config.json" in the same folder as "app.js"
With that, you can override anything defined here. You can copy this config as a template, but should
only leave in things you are actually overriding, in case a future feature update changes any defaults.
*/
"config": {
"service_ip": "127.0.0.1", // IP sent to the box (public IP for public service, LAN IP for local testing)
"bind_ip": "0.0.0.0", // IP on your machine to bind to (0.0.0.0 = All Interfaces/IPs)
"ServiceVaults": [
// Service Vaults: See ServiceVault.md for more info
"UserServiceVault",
"includes/ServiceVault"
],
"ServiceDeps": [
// Service Deps: orks like ServiceVaults. See ServiceVault.md for more info
"UserServiceDeps",
"includes/ServiceDeps"
],
"enable_prealpha_workaround": false, // Allows prealpha to minimally connect, but may cause security issues
"cgi_enabled": false, // Disable CGI by default
"php_enabled": false, // Disable PHP by default
"php_binpath": "php-cgi",
"SessionStore": "SessionStore", // Where we store account (session) data. Best left unchanged.
"SharedROMCache": "SharedROMCache", // Shared ROMCache (wtv-service:/ROMCache/, where wtv-service is any configured service). Found under service vault. Best left unchanged.
"enable_shared_romcache": true, // Disabling this will cause a lot of problems without manual intervention. Best left unchanged.
"service_owner": "a minisrv user", // Set this to your name or screenname
"service_description": null, // Set to a string to have your description added to the default homepage. May be used in other places in the future. HTML is allowed here.
"service_owner_account": "minisrvuser", // Set this to your account name on your minisrv
"service_owner_contact": "someone", // Set this to your contact (eg email address, twitter handle, etc)
"service_owner_contact_method": "something", // Set this to the contact method (eg email, twitter, etc)
"service_name": "minisrv", // What you want your service to be called
"service_logo": "minisrv.gif", // The logo shown on most service pages and error alerts. Can be absolute path or the name of a file in the SharedROMCache.
"service_splash_logo": "splash_minisrv.gif", // The logo shown on the splash screen. Can be absolute path or the name of a file in the SharedROMCache.
"hide_ssid_in_logs": true, // Filter SSIDs with asterisks to prevent accidently leaking user SSIDs when debugging.
"filter_passwords_in_logs": true, // Filter passwords (form fields containing "pass") to prevent accidently leaking user passwords when debugging.
"post_percentages": [ 0, 25, 50, 100 ], // When recieving POST data from the client, we display the progress of the transfer in the console log if the verbosity is high enough. Here you can show more or less updates.
"verbosity": 2, // 0 thru 4, lowest is quietest, higher is more verbose. Best set to 4 if something is going wrong.
"socket_timeout": 86400, // How long after we last gotten a request from a client before we clean up its data. The client can always restore it with the ticket.
"post_data_socket_timeout": 30, // How long until we give up waiting for data from the client in a POST transfer. Too little and POSTs will fail when dialup retrains. Too much and the server may stall waiting.
"error_log_file": "errors.log", // Where to write errors to disk
"catchall_file_name": "catchall.js", // default catchall filename
"hide_minisrv_version": true, // hide or show the minisrv version (eg like Apache version, can be hidden to hide known exploits for older version)
"enable_lzpf_compression": true, // Toggle LZPF (old classic) compression. Best left unchanged.
"enable_gzip_compression": true, // Toggle GZIP (all other boxes) compression. Best left unchanged.
"show_detailed_splash": true, // Shows the service name, server version, and user connect speed on the splash page
"show_diskmap": false, // Useful for debugging custom Diskmaps
"unauthorized_url": "wtv-1800:/unauthorized?", // Where to send unauthorized users
"enable_port_isolation": true, // Only respond to services on their correct ports
"domain_name": "minisrv.local", // For personalizing mail and MSNTV2
"require_valid_ssid": false, // require a valid SSID (with valid CRC)
"user_accounts": { // user account settings
"max_users_per_account": 6, // Max total users (including primary) per account
"min_username_length": 5, // minimum username length
"max_username_length": 18, // maximum username length
"reserved_names_files": [
"includes/badWords.json",
"includes/reservedWords.json"
],
"filestore_storage": 16, // Megabytes
"scrapbook_storage": 8 // Megabytes
},
"pc_admin": {
"enabled": false,
"ip_whitelist": [
"192.168.1.0/24",
"127.0.0.1"
],
"password": "MySeqRetKey1" // change this in user_config.json
},
"keys": {
"initial_shared_key": "bWluaXNydiE=", // Used for the initial RC4 rolling key. 8 bytes base64 encode. If you intend to link multiple minisrv's together, they must all share the same Initial Shared Key.
"user_data_key": "PNa$WN7gz}!T=t6X7^=|Ii##CEB~p\\EP" // Currently used to cipher user passwords, recommended to change before hosting your minisrv for others to use. Changing this while there are registered accounts will make it impossible to decrypt existing account passwords
},
"passwords": {
// password configuration
"enabled": true, // allow users to password protect their account
"min_length": 5, // minimum length of user passwords
"max_length": 32, // max length of user passwords
"form_size": 16 // width of the form on the password prompt screen
},
"errorMessages": {
// custom error messages
"400": "${service_name} ran into a technical problem. Please try again.",
"401": "Authorization Required.",
"403": "The publisher of that page has not authorized you to view it.",
"404": "The service could not find the requested page.",
"500": "${service_name} ran into a technical problem. Please try again."
},
"lockdownWhitelist": [
// urls the client can access without being "logged in"
"wtv-1800:/preregister",
"wtv-1800:/noflash",
"wtv-flashrom:/*",
"wtv-register:/*",
"wtv-head-waiter:/images/*",
"wtv-head-waiter:/ROMCache/*",
"wtv-head-waiter:/login",
"wtv-head-waiter:/ValidateLogin",
"wtv-head-waiter:/login-stage-two",
"wtv-head-waiter:/complete-account-transfer",
"wtv-head-waiter:/cancel-account-transfer",
"wtv-head-waiter:/relogin",
"wtv-head-waiter:/bad-disk",
"wtv-log:/log"
],
/* shenanigans: this allows you to intentionally enable old minisrv bugs, as well as official WebTV Networks exploits
Shenanigans is a bitwise flag, where each bit corresponds to a different bug or exploit.
Enabling a flag will re-enable the corresponding bug or exploit in the minisrv.
This is intended for educational purposes to study how these exploits work.
However, enabling shenanigans may cause security issues, so it should be used with caution and only if you understand what each flag does.
Shenanigans should be left disabled.
See WTVShenanigans.js for more info.
*/
"shenanigans": false,
"image_decoder": {
"enabled": true,
"gif_type": "ALP", // "ALP" or "ALF", see WTVImage.js for details.
"jpg_quality": 75,
"image_formats": [
"image/png",
"image/svg+xml",
"image/avif",
"image/tiff",
"image/webp"
],
"image_options": {
"compressionLevel": 0, // for png, anything higher than 0 is just wasting CPU time for minisrv's use case
"adaptiveFiltering": true,
"dither": 1,
"colors": 256,
"effort": 10
},
"max_height": 2048,
"max_width": 640,
"max_file_size": 524288,
"jpeg_interval": 5, // lower quality by this amount to try to lower filesize
"max_quality_tries": 5 // try to decode up to this many times, reducing quality each time, until the file is under the max_file_size. After this many tries, it will error out rather than sending an oversized file to the client.
},
"audio_proxy": {
"enabled": false,
"types": [
"audio/mpeg",
"audio/mp3",
"audio/wav",
"audio/ogg",
"audio/x-wav",
"audio/flac",
"audio/x-flac",
"audio/aac",
"audio/mp4",
"audio/x-m4a",
"audio/x-ms-wma"
],
"bitrate": "32k",
"sampleRate": 22050,
"channels": 1,
"maxDurationSeconds": 480,
"ffmpegPath": "ffmpeg"
}
},
"services": {
// service definitions
"wtv-head-waiter": {
// wtv-head-waiter handles logins
"port": 1601,
"connections": 1,
"privileged": true,
"modules": [
"WTVSSL"
]
},
"wtv-tricks": {
// wtv-tricks
"port": 1602,
"flags": "0x00000004"
},
"wtv-star": {
// wtv-star is used for custom logos and internally by WebTV clients for service outages
"port": 1603,
"flags": "0x00000007"
},
"wtv-news": {
// Usenet
"port": 1605,
"local_nntp_enabled": true,
"local_nntp_port": 5730, // Port for internal NNTP
"local_nntp_requires_auth": true, // Needs to be enabled for posting
"modules": [
"WTVNews"
],
"featuredGroups": [
// groups featured on wtv-news:/lobby. These groups are automatically created if they do not exist.
{
"name": "WebTV",
"group": "webtv.users",
"description": "A moderated discussion with WebTV customers"
},
{
"name": "Hacking",
"group": "alt.discuss.webtv.hacking",
"description": "Not advertiser friendly"
},
{
"name": "minisrv",
"group": "minisrv.users",
"description": "The server behind it all"
},
{
"name": "MIDIs",
"group": "alt.discuss.midis",
"description": "Explore the sounds of Beatnik with your WebTV"
}
],
"groupMetaRefreshInterval": 86400 // not yet used
},
"news": {
// for news:group.name urls
"port": 1605,
"flags": "0x00000004"
},
"wtv-register": {
// wtv-register
"port": 1607,
"privileged": true
},
"wtv-mail": {
// wtv-mail
"port": 1608,
"connections": 3,
"modules": [
"WTVNews"
]
},
"mailto": {
"port": 1608
},
"wtv-log": {
// wtv-log
"port": 1609,
"connections": 1,
"write_logs_to_disk": true, // set this to false to not save logs the ServiceLogPost folder
"dont_save_chat_logs": true, // They just take up space unless you want to monitor your user's joins and disconnects, doesn't log messages either way
"max_logs_per_ssid": 50
},
"wtv-favorite": {
// wtv-favorite
"port": 1611,
"connections": 3,
"enable_multi_query": true,
"max_folders": 14,
"max_favorites_per_folder": 18
},
"wtv-home": {
// wtv-home
"port": 1612
},
"wtv-1800": {
// wtv-1800
"port": 1615,
"connections": 1,
"flags": "0x00000001",
"privileged": true,
"send_tellyscripts": true, // Best left untouched
"send_tellyscript_to_mame": true,
"dialin_number": 18006138199,
"dns1ip": "10.0.0.50",
"dns2ip": "8.8.8.8",
"modules": [
"WTVTellyScript"
]
},
"wtv-flashrom": {
// wtv-flashrom
"port": 1618,
"flags": "0x00000040",
"debug": false,
"use_zefie_server": true, // access zefie's repository of flashroms, local roms will still be used if they exist. Best left unchanged.
"bf0app_default_rom": "content/artemis-webtv-000/build7377/internal-nondebug/bf0app-part000.rom", // Can change the default build for bf0app
"catchall_file_name": "content-serve.js", // catchall for ROM part files. Best left untouched
"modules": [
"WTVFlashrom"
],
"is_flashrom_service": true
},
"wtv-setup": {
// wtv-setup
"port": 1613,
"flags": "0x00000010",
"passport_service": "wtv-passport", // for messenger
"connections": 3,
"privileged": true,
"modules": [
"WTVBGMusic",
"WTVRegister"
]
},
"wtv-cookie": {
// wtv-cookie (used for http(s) cookies)
"port": 1619,
"connections": 1
},
"wtv-guide": {
// wtv-guide (not yet complete)
"port": 1621,
"connections": 3,
"modules": [
"WTVGuide"
]
},
"wtv-chat": {
// wtv-chat (used for IRC)
"port": 1630,
"connections": 3
},
"wtvchat": {
// wtvchat://server:port/channel passthrough (wni official)
"port": 1630,
"flags": "0x00000004",
"allow_double_slash": true // allows service:// .. don't enable on http or https
},
"irc": {
// irc://server:port/channel passthrough (something wni should have had...)
"port": 1630,
"flags": "0x00000004",
"servicevault_dir": "wtvchat", // share service_vault with wtvchat
"allow_double_slash": true // allows service:// .. don't enable on http or https
},
"wtv-disk": {
// wtv-disk (used for DiskMaps)
"port": 1635,
"connections": 3,
"modules": [
"WTVDisk"
]
},
"wtv-author": {
"port": 1643,
"connections": 3,
"enable_multi_query": true,
"max_pages": 4,
"publish_mode": "service", // "service" or "directory"
"publish_dest": "pb_services", // service name, or directory path
"powered_by_url": null, // Set to a URL to have a custom "Powered by" link. If null, it will use the publish domain.
"modules": [
"WTVAuthor"
]
},
"ftp": {
"port": 1650,
"connections": 3,
"max_response_size": 8, // Megabytes
"handler_module": "WTVFTP",
"handler_extra_vars": ["wtvmime"]
},
"http": {
// http upstream
"port": 1650,
"connections": 3,
"use_external_proxy": false, // use an external proxy (WebONE or some other minifying proxy is recommended)
"external_proxy_is_socks": false, // use a socks proxy
"external_proxy_host": "127.0.0.1", // IP address or hostname of proxy
"external_proxy_port": 1080, // Port of proxy
"flags": "0x00000001",
"max_response_size": 16, // Megabytes
"disallow_no_slash": true,
"handler_module": "WTVHTTP",
"handler_extra_vars": ["http"]
},
"https": {
// https upstream
"port": 1650,
"connections": 3,
"use_external_proxy": false, // use an external proxy (WebONE or some other minifying proxy is recommended)
"external_proxy_is_socks": false, // use a socks proxy
"external_proxy_host": "127.0.0.1", // IP address or hostname of proxy
"external_proxy_port": 1080, // Port of proxy
"flags": "0x00000001",
"max_response_size": 16, // Megabytes
"disallow_no_slash": true,
"handler_module": "WTVHTTP",
"handler_extra_vars": ["http"],
"allow_self_signed_ssl": false, // If true, will allow self-signed SSL certificates via the proxy.
"support_bitdefender_self_signed_proxy": true // If the user has bitdefender installed, it is intercepting SSL connections and re-signing them with its own self-signed certificate. Enabling this will add the Bitdefender certificate to the trusted store for the https service, allowing it to proxy https connections without errors.
},
"proto": {
// ProtoWeb Proxy
"port": 1650,
"connections": 3,
"use_external_proxy": true,
"replace_protocol": "http",
"external_proxy_is_socks": false,
"external_proxy_host": "wayback.protoweb.org",
"external_proxy_port": 7851,
"external_proxy_is_http1": true,
"flags": "0x00000001",
"max_response_size": 16, // Megabytes
"disallow_no_slash": true,
"handler_module": "WTVHTTP",
"handler_extra_vars": ["http"]
},
"gopher": {
// Gopher processor
"port": 1651,
"connections": 3,
"allow_double_slash": true,
"flags": "0x00000001",
"uses_service_vault": false, // For custom services that use modules instead of service vaults
"disallow_no_slash": true,
"log_raw_gopher": false, // set to true to log raw gopher responses to the console for debugging
"handler_module": "WTVGopher",
"handler_extra_vars": ["wtvmime"]
},
"wtv-passport": {
// wtv-passport (for messenger)
"port": 1654
},
"wtv-music": {
// wtv-music
"port": 1656,
"connections": 3,
"flags": "0x00000004"
},
"wtv-search": {
"disabled": true,
"port": 1695
// "searxng_url": "" // replace with your own searxng instance
},
"wtv-proxy": {
"port": 1696
// "wrp_url": "" // replace with your own tenox9/wrp
},
"pb_services": {
// PC Services for PageBuilder
"port": 1697,
"pc_services": true, // defines service as a PC service
"servicevault_dir": "http_pb", // The service vault dir for the PC Services for PageBuilder
"service_vaults": [ "PageBuilderVault" ], // additional service vaults for this service
"drop_connection_on_wrong_port": true, // If true, resets connection if the PC browser connects to a port that is not PC Services enabled
"show_verbose_errors": false, // extra debugging
"allow_https": false, // for future use with LetsEncrypt
"force_https": false // for future use with LetsEncrypt
},
"wtv-admin": {
// wtv-admin
"port": 1698,
"enable_multi_query": true,
"privileged": true,
"password": "viRak-7" // change to something more unique
},
"pc_services": {
// PC Services
"port": 1699,
"pc_services": true, // defines service as a PC service
"disabled": true, // disabled by default, set disabled: false in user_config.json for this service to enable.
"servicevault_dir": "http_pc", // The service vault dir for the PC Services
"drop_connection_on_wrong_port": false, // If true, resets connection if the PC browser connects to a port that is not PC Services enabled
"show_verbose_errors": false, // extra debugging
"privileged": true,
"use_https": false,
"force_https": false,
"catchall_file_name": "indexer.js",
"https_cert": {
/* self-signed, can be replaced with another cert */
// "domain": "mycooldomain.com",
"cert": "%ServiceDeps%/https/selfsigned_cert.pem",
"key": "%ServiceDeps%/https/selfsigned_key.pem"
}
},
"mms": {
"port": 1755,
"udp_port": 1755,
"enable_udp": true,
"protocol": "mms",
"pacing_multiplier": 0.9,
"enable_burst": true,
"burst_multiplier": 4.0,
"burst_prestart_ms": 15000,
"allow_indexing": true,
"debug": false,
"handler_module": "WTVMMS",
"handler_handles_port": true
},
"pnm": {
"port": 7070,
"protocol": "pnm",
"udp_bind_port_min": 57361,
"udp_bind_port_max": 57391,
"descriptor_after_hello_ms": 85,
"burst_prestart_ms": 5000,
"allow_indexing": true,
"debug": false,
"handler_module": "WTVPNM",
"handler_handles_port": true,
"handler_extra_vars": ["crypto"]
},
"msntv2": {
"port": 1694,
"connections": 3,
"flags": "0x00000001",
"protocol": "HTTPS",
"privileged": true,
"handler_module": "WTV-MSNTV2",
"handler_handles_port": true,
"servicevault_dir": "msntv2",
"max_response_size": 64, // Megabytes
"intercept_urls": [
{
"match": "headwaiter.trusted.msntv.msn.com",
"local_dir": "headwaiter"
},
{
"match": "sg1.trusted.msntv.msn.com",
"local_dir": "sg1"
},
{
"match": "login.live.com",
"local_dir": "passport"
}
],
"handler_extra_vars": ["runScriptInVM", "handlePHP", "handleCGI", "ssid_sessions", "WTVClientSessionData", "socket_sessions"],
"show_verbose_errors": false,
"ssl": {
"cert": "%ServiceDeps%/msntv2/minisrv.crt",
"key": "%ServiceDeps%/msntv2/minisrv.key"
},
"modules": [
"WTVRegister",
"WTVNews"
],
"usenet_service": "wtv-news"
}
},
"favorites": {
"folder_templates": {
// define user default favorites here
// If image is a URL, it should be an absolute path, or a file under wtv-favorite:/
"Recommended": [
{
"title": "DuckDuckGo",
"url": "http://lite.duckduckgo.com/lite",
"image_type": "image/wtv-bitmap",
"image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAABlAAAAAQBkLmAuYC5gLmAt3y5gJ1xsJKUgJeApoCIgLmAuYC5f7mAlG+umaVymJy5gLmAkoCMf5eAl4CigKOAuYC5gLN6sYe5gLmAm4CbgHCAlICdgJ6Ag22jqJ9znZ3YgNiAwIDAgJ54sZKlepmbuYC5gJuCm4CXgJeAo4CjgLmAuYCwebOHtH65gpd0qpmqcaKUmHCwlsWAj4C1gJCAjICMgLmAuYC5gLmAoXa3jZ+Aa4CggJOAl4CVgJuAo4CdgLmAfYC5gHKAbYCXgJaAuYCsgJeAj4CVcpalmW2jnH6AuoB5gLqAj4C7f5WAs3+ib5qcmG6omrmAuYChd7GQZ4B0gJeAloChcKqUl3Gjnbl5uYC5fbmAp3KrkJdxp5uUdZampXGdmbh9uYCWb6uZtX+xhZ54np2XbrmSn3CanotunKigcp2c2IXYgMCCwICqcZqYmnCmmrmAroC5gLmAlHOWpqBwopm0frGFl3Kin7d9uYCTbaubuYC5gKN3rpG4f66FmXOinYqAjIC5gLmAAAAAAAAAAAAAAAAAAAAAAAAAACUtBy4QLCQPHhAvARQDAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAwrKSAnJiMdIgoEGhEhAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAFDQgICAgICAgICAgICAgICAgICAgICBkCBg4WFwAAAIAAAAAcKAsLCwsLCwsLCwsLCwsLCwsLCwsLCxIVGB8JGwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACowExMTAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
},
{
"title": "Old'aVista",
"url": "http://www.oldavista.com/",
"image_type": "url",
"image": "canned/oldavista.gif"
},
{
"title": "RetroSite",
"url": "http://retrosite.org/",
"image_type": "url",
"image": "canned/retrosite.gif"
},
{
"title": "68k.news",
"url": "http://68k.news/",
"image_type": "url",
"image": "canned/news.gif"
},
{
"title": "The Old Net",
"url": "http://theoldnet.com/lite",
"image_type": "image/wtv-bitmap",
"image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAACBAAAAAQCALmAuYC5gLmAuHy5ga9ftIu2f7iCmHWjoISusnuoj699knKVbK18rnm8gL2AuIC4gISdh3mojKN9uIC4gJudmXyRdJessXywiZdwjq+XdaShkauQebCLsH65gLmAsIG0gLWEt393q555lIKaf7uBlX94gHOAiICGgKtsto+yebiF2IDYgLqAuoCZkJyLp4iqhZmAmYDYgNiAp4CmgHKAfICjgKKAg4CUgLmElYC2gqSAt4CnfoiSnnqPgI+A0IDQgIyAkoCJgIeAk4CTgKGAzICfgHOAe4CHgIqAnX+RgMp/uYC5gJeAmYCOgJGAn4CjgL6AkYC4gJOAdIB4gKCAnICggJ2Ak4CdgI6AhoCggJKAqIS7gLKBtoCTfbt+s3+4gKOAo4CwgK+AjoCMgLeAuICvf6aAtoCygI+YmXyli6p9oICNgJ2AgoCHgI6AjICcgIWAlYC9gLyAuYC5gLKApn+SlIV6rYSrfnWuiXeejq58koOKf6qBo4C3f7mBnnW5kbiAuYCcdaFyzYDNgLOAs4C5gLmAo4CngLmAt4CvgJF/noB1f7aAtYCAgG+AtIC3gG2AiYC1gLKAs4CNgLaAtoCWgJOAeIBtgJGAuYCSgLmAnJSNe6KOoX2kgHiAqoCMgKSApoCBgHqAuYC4gLiAsoCXgJuAcoB3gKaAooCYgHiAAAAAADMMBwcHBwcHAi8BAQEWDAwwMDAwMDACAgICLwAAAAAAAAAAADQKLQMGCgYDCA8PDw8NBgMEBAQEBCMICQkIDwAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAA9CwsLCwsLCwsLCws9HBwcHBwzHBwLAAAAAAAAAAAAAAAeOBQpDS4dISQuGxISEhINKDg+KTsgOBQ5AAAAAAAHAAAAAAAAJgAmBQUFBQUFAAUFBRwgPj4+Pho/PiAjAAAAAAAGAAAAAAAAHiEZEhISEhISEhISDT88Ezw/ExMTIDkAAAAAAABVAAAAAAAANwsFMTExMTExMTExFRQYGBgYGBgYPCMAAAAAAAB5AAAAAAAAHi4lFxcXFxcXFxcXDSgYGCk+GBgYKTkAAAAAAABVAAAAAAAAFSIiEBAQEBAQEBAQHhoODhgODg4OGDkAAAAAAABVAAAAAAAAMxwcHBwcHBwcHBwcHCEdHR0pHSEdHTIAAAAAAABVAAAAAAAAHiojEBAQEBAQEBAQHjsfHx8fDiEfKTkAAAAAAAB6AAAAAAEAAAAAPQAAAAAAAAAAACUlJSUlJSUlJQsLCwsAAABVAAAAPSYkJiYkJiQmJCQkJCMkJiQkJCIkJCYkJCQkJCIAAABVAAAAAAAAAAAAJiYmJCYkJiQkJCQmJCYREQsAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAKws9Cz0LACsAPQsAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAJAYnLCcnBgYnBiIAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAzMjMcMzIyMjIrHDIyMisyMjILHDIyCzMzMjIyMisLAAB6AAA3NTc2JTY0JTY0NTU1JSU2NTU3NTU1NDUlNjU1NjQqAABVPQAAAD0AAAAAAD0ANzYfDh0fHyEfHwsAPQsAAAAAAAA9AABVFR0pIS4pLjonJzonJzoVJzo6OjoGOicnLjY7ITsoIRg7ITlVAAAAAAAAAAAAAAAAAAAoGBQ/IBQUAAAAAAAAAAAAAAAAAAB6ADMTPD8TPhM/ExM8OD88PzgUExQ8Ez4UPBQTExQ+PD8UOQBV"
}
],
"Personal": [
{
"title": "The Midnight Archive",
"url": "http://archive.midnightchannel.net/",
"image_type": "url",
"image": "canned/midnightchannel.gif"
},
{
"title": "WebTV/MSNTV Secret Pics & Info",
"url": "http://turdinc.kicks-ass.net/Msntv/index2.html",
"image_type": "url",
"image": "canned/mattman69.gif"
}
]
}
}
}