$pathArray = explode('/', $file);
$filePath = '';
while ($pathArray) {
    WriteLog('PutFile: $pathArray = ' . print_r($pathArray, 1));
    $filePath .= array_shift($pathArray);
    WriteLog('PutFile: $filePath = ' . $filePath);

    if ($pathArray) {
        $directoryToCheck = rtrim($filePath, '/');
        if ($directoryToCheck && !file_exists($directoryToCheck)) {
            WriteLog("PutFile: mkdir($directoryToCheck)");
            if (is_writable(dirname($directoryToCheck))) {
                # sanity check
                mkdir($directoryToCheck);
            } else {
                WriteLog('PutFile: warning: is_writable(dirname($directoryToCheck)) is FALSE');
                return '';
            }
        }
        $filePath .= '/';
    }
}


	$pathArray = explode('/', $file);
	$filePathComma = '';
	$filePath = '';
	while ($pathArray) {
		WriteLog('PutFile: $pathArray = ' . print_r($pathArray, 1));
		$filePath .= $filePathComma . array_shift($pathArray);
		WriteLog('PutFile: $filePath = ' . $filePath);

		if ($pathArray) {
			if ($filePath && ! file_exists($filePath)) {
				WriteLog("PutFile: mkdir($filePath)");
				if (is_writable($filePath)) {
				    # sanity check
					mkdir($filePath);
				} else {
					WriteLog('PutFile: warning: is_writable($filePath) is FALSE');
					return '';
				}
			}
		}

		$filePath .= $filePathComma;
		WriteLog('PutFile: $filePathComma = ' . $filePathComma);
		$filePathComma = '/';
	}




Sessions <br>
<br>
Sessions allow you to log in without having to enter a password or any other credentials! <br>
This is done by using session cookie, a client-stored private key, or a client fingerprint. <br>
<br>
In every case, you have the option to remain anonymous or to use a name of your choosing. <br>
<br>
Unless you choose to reveal it of your own volition, your private information is not required. <br>
This includes your phone number, email address, name, or any other personally identifiable information. <br>
<br>
We hope you find this place welcoming and safe.


If you are new to the concept of a cryptographic web of trust, here is a simple explanation:

    Everyone has two cryptographic keys: a public key and a private key.
    Your public key is like a mailbox address. Anyone can send you a message encrypted with your public key, but only you can decrypt it with your private key.
    Your private key is like the key to your mailbox. Only you should have it, and you should never share it with anyone.

In a cryptographic web of trust, people sign each other's public keys. This means that they are vouching for the identity of the person who owns the key.

When you verify someone's public key, you are essentially saying, "I trust that this key belongs to the person who says it does."

The more people who sign a person's public key, the more trustworthy it is. This is because it is unlikely that a large group of people would all be fooled by the same scammer.

If you have any questions about the cryptographic web of trust, please do not hesitate to ask.

Here is a simpler explanation for laypeople who don't know what a hash, a private key, or a graph are:

Imagine a group of friends. Each friend has a unique secret code. When a friend wants to send a message to another friend, they encrypt the message with the recipient's secret code. Only the recipient can decrypt the message with their secret code.

In a cryptographic web of trust, people verify each other's identities by signing each other's secret codes. This means that they are vouching for the identity of the person who owns the code.

When you verify someone's secret code, you are essentially saying, "I trust that this code belongs to the person who says it does."

The more people who sign someone's secret code, the more trustworthy it is. This is because it is unlikely that a large group of people would all be fooled by the same scammer.

I hope this helps!




	if (1) {
		#my $replyStack = WalkReplyTree($file{'file_hash'});
		my $replyStack = WalkComments($file{'file_hash'});
		$replyStack = HtmlEscape($replyStack);
		#$txtIndex .= GetDialogX($replyStack, 'ReplyStack');
	}





# skip_index_text - skips IndexTextFile() call
# skip_index_image - skips IndexImageFile() call
# skip_index_html - skips IndexHtmlFile() call
# skip_index_zip - skips IndexZipFile() call
# skip_index_cpp - skips IndexCppFile() call
# skip_index_py - skips IndexPyFile() call
# skip_index_pl - skips IndexPerlFile() call
# skip_index_video - skips IndexVideoFile() call
# skip_index_audio - skips IndexAudioFile() call
# skip_index_pdf - skips IndexPdfFile() call
# skip_index_doc - skips IndexDocFile() call
# skip_index_xls - skips IndexXlsFile() call
# skip_index_ppt - skips IndexPptFile() call
# skip_index_ods - skips IndexOdsFile() call
# skip_index_odt - skips IndexOdtFile() call
# skip_index_odp - skips IndexOdpFile() call
# skip_index_odb - skips IndexOdbFile() call
# skip_index_odg - skips IndexOdgFile() call



					CONSENT NOTICE! <br>
					<br>
					Attention! You are about to share information about your device. <br>
					This form's purpose is to help with troubleshooting. <br>
					It may also be used for a survey to help improve browser support. <br>
					<br>
					To continue, please follow the steps below:

  Pollyanna is a framework for building community websites
  with an emphasis on consent and accessibility.


 ,ggggggggggg,
dP"""88""""""Y8,      ,dPYb, ,dPYb,
Yb,  88      `8b      IP'`Yb IP'`Yb
 `"  88      ,8P      I8  8I I8  8I
     88aaaad8P"       I8  8' I8  8'
     88""""",ggggg,   I8 dP  I8 dP  gg     gg    ,gggg,gg   ,ggg,,ggg,    ,ggg,,ggg,     ,gggg,gg
     88    dP"  "Y8gggI8dP   I8dP   I8     8I   dP"  "Y8I  ,8" "8P" "8,  ,8" "8P" "8,   dP"  "Y8I
     88   i8'    ,8I  I8P    I8P    I8,   ,8I  i8'    ,8I  I8   8I   8I  I8   8I   8I  i8'    ,8I
     88  ,d8,   ,d8' ,d8b,_ ,d8b,_ ,d8b, ,d8I ,d8,   ,d8b,,dP   8I   Yb,,dP   8I   Yb,,d8,   ,d8b,
     88  P"Y8888P"   8P'"Y888P'"Y88P""Y88P"888P"Y8888P"`Y88P'   8I   `Y88P'   8I   `Y8P"Y8888P"`Y8
                                         ,d8I'
                                       ,dP'8I
                                      ,8"  8I
                                      I8   8I
                                      `8, ,8I
                                       `Y8P"

CONSENT:

For operators and administrators, Pollyanna supports every released software
version indefinitely, forgoing forced updates or any coercion.

For users and clients, Pollyanna facilitates full account and data ownership
and accessibility. Users should be able to access or not access the service as
they see fit and in whatever way they see fit, as long as it is with the consent
of the operator. Users should be able to see, with full transparency, all the
data and information contained in the service.

ACCESSIBILITY:

Pollyanna bends over backwards to accommodate every user and client,
regardless of their access method of choice, browser and configuration,
connection speed, device type, abilities, and situation.

Pollyanna tries to perpetuate the Any Browser philosophy, and is regularly
tested with a variety of browsers and configurations. In particular, Pollyanna
has been tested with popular versions of Lynx, Mosaic, Netscape, Internet Explorer,
Opera, Firefox, Brave, Safari, and even Google Chrome.

WHY USE THIS?
=============
Below is an outline of reasons you would want to use Pollyanna.

Respectful:
Pollyanna aims to display your content as close to your intention as possible.
It will not clip it. It will not remove line breaks. It will not alter spacing.
Unless you ask.

Empowering:
User "account", aka private key, remains in user's possession and control.
Identity can be used across multiple servers without "federation".
Registration is not required, and registering does not require email.
Designed to allow the user to know who is operating the site.
Users can easily export their own contributions in comfortable formats.

Provable:
Provable reliability of information integrity with digital signatures.
Provable consensus and voting results -- full transparency.
Provable privacy by allowing end user to control physical access to data.

Portable:
All forum text is stored as text files, improving ability to archive.
Data is housed by service provider without lock-down and is always exportable.

Customizable:
Custom themes and appearance using simple commands (like Myspace or Tumblr)

Durable/Decentralized:
All data can be downloaded and replicated, in entirety or in segments.
Can be cloned and re-hosted, with portable user accounts usable across all copies.

Accessible:
Tries very hard to accommodate every known and testable client.
Tested with hundreds of different browsers, devices, and configurations.
Full support for text-mode, no-JS, screen-readers, mouse-free, etc.
Allows registration to be optional, if operator wants to allow it.
Easier to access via telnet or text-mode than most websites.
Attempts universal accessibility for all anticipated scenarios.

Securable:
Can be operated as static HTML for a smaller attack surface.
JavaScript is also an optional module and optional for clients.

Convenient Installation:
Uses the most stable technologies, and compatible with most Web servers
Optional PHP and SSI modules for more convenient usage.
Optional client-side JS module for easier client signatures.

Friendly, Compatible, Accessible:
Modular interface shows only the basics for beginners, more options later.
Tested thoroughly by many devices, configurations, platforms, browsers, users.
Tested for accessibility by vision, mobility, and connectivity impaired users.
Tested with Mosaic, Netscape, IE, Opera, iOS, Android, Lynx, w3m, and more.
Supports all web servers which can write standard access.log format.

Art-Friendly:
Text-art is accommodated with a monospace font and preserving whitespace layout.
Compatible with historic browsers to allow time-period-accurate installations.

Transparent:
Everything posted to community is viewable and verifiable.
Voting logs are transparent, auditable, and trustable (Kevin Bacon)
Meta-moderation is possible by voting on votes, and so on.
Best content (and friends) for each user can be found with vote comparison.
Ballot stuffing and other abuse is detectable with data analysis.
Validation chain prevents tampering with item posting timestamps.
Items can be deleted by operator, but trace remains in timestamp log.

Resilient:
Avoid being a spam target by fine-tuning access.
Avoid advertising by avoiding community over-growth.
User-centric operation allows easy migration in case of instance changes.

TESTED AND SUPPORTED BROWSERS AND CLIENTS:

The list below is by no means extensive, and is growing often.
In no particular order.

Safari 1.0+ (iOS, Mac, and Windows)
Netscape 2.0+
Internet Explorer 3.0+
Mozilla SeaMonkey 1.0+
Firefox 1.0+
Lynx
Links (GUI and console)
w3m
qutebrowser
Luakit
LibreWolf
Pale Moon
Waterfox
Waterfox Classic
Microsoft Edge
Dillo
Liferea
OffByOne
Brave
Falkon
Camino
Beacon
Vivaldi
Opera 2.0+
Samsung Internet (Android)
Samsung TV (name unknown)
Kindle
Google Translate (requires skilled operator for some features)
Tor Browser
Chromium
wget
curl
NCSA Mosaic (requires accommodations)
QuiteRSS



=====
		DBAddConfigValue('flush');
		DBAddItem('flush');
		DBAddItemAttribute('flush');
		DBAddItemParent('flush');
		DBAddKeyAlias('flush');
		DBAddLabel('flush');
		DBAddLocationRecord('flush');
		DBAddPageTouch('flush');
		DBAddTask('flush');



		SELECT
	DISTINCT item_flat.author_key,
	c.value AS client_id
FROM
	(
		SELECT
			file_hash,
			value
		FROM
			item_attribute
		WHERE
			attribute = 'client_id'
	) AS c
	JOIN
		item_flat
	ON (item_flat.file_hash = c.file_hash)
;

===

<!-- -->

<a name=topics><h3>Finding Newest Information</h3></a>

<p>Go to the "Read" page. Newest moderated posts are here.</p>

<p>Advanced: To see unmoderated content, go to Help page.</p>

===

<p>Expert: Validate message tree in your favorite language.</p>

<p>Advanced: Use message identifier and profile fingerprint numbers to verify message delivery via separate channel.</p>

<p>Do not get distracted, press Send button to submit to message board.</p>

<p>No guarantees of message delivery are provided by this resource.</p>

<p>If you are using profile, your message may be signed with cookie and/or signature.</p>


	<p>
		<span class=beginner>
			Use Flush to make space for new content:<br>
		</span>
		<label for=chkFlush>
			<input type=checkbox id=chkFlush name=chkFlush>
			Flush
		</label>
		<input type=submit name=btnFlush id=btnFlush value=Flush>
	</p>

	<p>
		<span class=beginner>
			If something you expect does not appear, try this button:<br>
		</span>
		<label for=chkUpdate>
			<input type=checkbox id=chkUpdate name=chkUpdate>
			Update
		</label>
		<input type=submit name=btnUpdate id=btnUpdate value=Update>
	</p>

	<p>
		<span class=beginner>
			Reset templates and rebuild site:<br>
		</span>
		<label for=chkRebuild>
			<input type=checkbox id=chkRebuild name=chkRebuild>
			Rebuild
		</label>
		<input type=submit name=btnRebuild id=btnRebuild value=Rebuild>
	</p>

=====

active:

Most recently active authors are shown here.

This list is sorted by the user's most recent activity.

Operator notes:

config/template/query/active
default/template/query/active

Technical notes:

The activity is logged in /chain.log, viewable as /chain.html, and is cryptographically sound.

The format of chain.log is:

(hash of item) | (timestamp as float) | (checksum hash which includes the previous line as its input)

The hashes used in this proof-of-concept system are old-fashioned in order to promote easy switching between hash algorithms, but developer prior experience compatibility is also a factor.


===

gpg php-cgi php lighttpd convert sqlite3





<body onmousemove ="document.title = this.tagName; if (this.tagName == 'BODY') {SetActiveDialog(this)}">










https://vitalik.ca/general/2021/05/23/scaling.html
https://assets.website-files.com/60005e3965a10f31d245af87/60352707e6dd742743c75764_Golemwhitepaper.pdf
https://eprint.iacr.org/2021/442
https://blog.trailofbits.com/2018/10/12/introduction-to-verifiable-delay-functions-vdfs/
https://www.youtube.com/watch?v=BXLcKQ6fLsU&t=1607s
https://eprint.iacr.org/2020/374.pdf
https://www.youtube.com/
https://www.youtube.com/c/StanfordVideo
https://www.youtube.com/watch?v=BXLcKQ6fLsU&amp;t=1607s
https://twitter.com/lukedashjr/status/1382892186954567682?s=21
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3243656
https://vitalik.ca/general/2021/04/02/round9.html
https://research.chain.link/whitepaper-v2.pdf
https://www.stacks.co/
https://www.youtube.com/watch?v=7ggwLccuN5s
https://www.youtube.com/c/ETHGlobal
https://eprint.iacr.org/2011/495.pdf
https://math.mit.edu/research/highschool/primes/materials/2018/Kuszmaul.pdf
https://dfinity.org/
https://blog.bitmex.com/breaking-down-the-fee-market-eip-1559/
https://medium.com/dfinity/applied-crypto-one-public-key-for-the-internet-computer-ni-dkg-4af800db869d
https://research.metastate.dev/plonk-by-hand-part-1/
https://eprint.iacr.org/2021/632
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018380.html
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018379.html
https://weekinethereum.substack.com/
https://ethresear.ch/t/using-polynomial-commitments-to-replace-state-roots/7095
https://uploads-ssl.webflow.com/5f6b7190899f41fb70882d08/603651a1101106649eef6a53_chainlink-ocr-protocol-paper-02-24-20.pdf
https://www.deco.works/
https://vitalik.ca/general/2021/04/07/sharding.html
https://uniswap.org/blog/uniswap-v3/
https://www.notion.so/Integral-Community-e3b598c7c8154ec9bfe5264115044487
https://www.youtube.com/watch?v=dljPSrwgJZ8
https://www.youtube.com/channel/UCYWsYz5cKw4wZ9Mpe4kuM_g
https://github.com/noir-lang/noir
https://solanabeach.io/validators
https://handshake.org/
https://www.namebase.io/
https://hedera.com/
https://blog.statechannels.org/introducing-web3torrent/
https://blog.openzeppelin.com/on-the-parity-wallet-multisig-hack-405a8c12e8f7/
https://www.forbes.com/sites/billybambrough/2021/02/03/visa-reveals-bitcoin-and-crypto-banking-roadmap-amid-race-to-reach-network-of-70-million/amp/
http://bitcoin.mit.edu/
https://medium.com/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649
https://coingeek.com/the-defi-hacks-of-2020/
https://coingeek.com/decentralized-exchange-lendf-me-set-to-return-funds-following-hack/
https://coingeek.com/7-4-million-stolen-in-value-defi-exploit/
https://renproject.io/
https://media-exp1.licdn.com/dms/document/C4D1FAQFUXYeLnkm2WA/feedshare-document-pdf-analyzed/0/1613360561492?e=1613599200&v=beta&t=aOL6fKQ8VC6xfLskrZfNN1w558cZy_uBUH_PC4M9yMs
https://www.reddit.com/r/ethereum/comments/lk1rjp/this_is_why_eip_1559_is_good_and_why_vitalik/
https://arxiv.org/abs/2008.05300
https://journals.sagepub.com/doi/full/10.1177/0268396220944406
https://furucombo.app/
https://z.cash/technology/zksnarks/
https://www.youtube.com/watch?v=mOm47gBMfg8
https://www.youtube.com/channel/UCVmRAQeesq4TA3rdvbz-IkQ
https://blog.sia.tech/skydb-a-mutable-database-for-the-decentralized-web-7170beeaa985
https://github.com/DaWe35/SkyID
https://litecoinca.sh/downloads/hive_whitepaper.pdf
https://henryaspegren.github.io/files/ecto_paper.pdf
https://www.youtube.com/watch?v=fepAqvd1Gfw&list=PLrtFm7U0BIfX-UlKLCwoRLN9n59aoV5EE&index=6
https://www.youtube.com/channel/UC_kOxlaYNOTtNwtwySZ0B8w
https://www.youtube.com/watch?v=fepAqvd1Gfw&amp;index=6
https://www.youtube.com/watch?v=LGUwfL6juzE&list=PLrtFm7U0BIfX-UlKLCwoRLN9n59aoV5EE
https://www.youtube.com/watch?v=LGUwfL6juzE
https://github.com/ethereum/eth2.0-specs
http://ethersear.ch
https://ethresear.ch/c/eth2-phase-2/35
https://www.coindesk.com/buggy-code-release-13-ethereum-nodes-offline
https://www.youtube.com/watch?v=d8z7fUpJzsk
https://www.youtube.com/channel/UC2iGGbbKzS2hYwcZ9xBS-6A
https://umaproject.org/
https://rockside.io/
https://urbit.org/docs/tutorials/concepts/technical-overview/
https://github.com/urbit/urbit/issues
https://www.altcoinbuzz.io/reviews/altcoin-projects/sia-network-skynet-the-age-of-decentralized-internet-part-2/
https://twitter.com/PhABCD/status/1267444959763992576?s=20
https://github.com/metalicjames/cschnorr
https://programmingbitcoin.com/
https://github.com/coventry/programmingbitcoin
https://raw.githubusercontent.com/coventry/programmingbitcoin/master/all.html
https://electriccoin.co/blog/halo-recursive-proof-composition-without-a-trusted-setup/
https://www.moac.io/
https://libra.org/en-US/white-paper/
https://www.bankofengland.co.uk/-/media/boe/files/quarterly-bulletin/2014/money-creation-in-the-modern-economy
https://unexpected-values.com/crypto-dollars/
https://techcrunch.com/2015/05/26/the-bank-of-facebook/
https://libracrunch.com/libra-association-founding-members/
https://github.com/blockstack/stacks-blockchain/blob/develop/sip/sip-001-burn-election.md
https://ipfs.io/ipfs/QmR7GSQM93Cx5eAg6a6yRzNde1FQv7uL6X1o4k7zrJa3LX/ipfs.draft3.pdf
https://filecoin.io/filecoin.pdf
https://www.youtube.com/watch?v=HUVmypx9HGI
https://www.youtube.com/user/stanfordonline
https://github.com/sipa/bips/blob/bip-schnorr/bip-taproot.mediawiki#cite_ref-12-0
https://github.com/sipa/bips/blob/bip-schnorr/bip-tapscript.mediawiki
https://simplepoll.rocks/dashboard/mitbitcoinclub/settings/
https://github.com/JeremyRubin/bips/blob/op-checkoutputshashverify/bip-coshv.mediawiki
https://github.com/ajtowns/bips/blob/bip-anyprevout/bip-anyprevout.mediawiki
https://blockstream.com/2018/01/23/en-musig-key-aggregation-schnorr-signatures/
https://bitcoin.stackexchange.com/questions/64733/what-is-p2pk-p2pkh-p2sh-p2wpkh-eli5
https://blockstream.com/2018/04/30/eltoo-next-lightning/
http://giovanni.bajo.it/post/47119962313/golomb-coded-sets-smaller-than-bloom-filters
https://goo.gl/forms/dXBgCnAIjeXvNu5t1
https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki
https://github.com/coventry/RSADonations
https://blog.gnosis.pm/solidity-delegateproxy-contracts-e09957d0f201
https://eprint.iacr.org/2019/099.pdf
https://github.com/zknuckles/sonic
https://arxiv.org/pdf/1904.05234.pdf
http://frontrun.me
https://people.csail.mit.edu/nickolai/papers/gilad-algorand-eprint.pdf
https://www.youtube.com/watch?v=Q1LgYokejfc#t=14m
https://www.youtube.com/watch?v=5KdtIWoygXI#t=8m
https://www.youtube.com/channel/UCgp23vdLNaUitOkCxxVnRrg
https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627
https://eprint.iacr.org/2019/099
https://en.bitcoin.it/wiki/Script
https://github.com/mimblewimble/grin/blob/master/doc/intro.md
https://mimblewimble.cash/
https://www.grin-forum.org/t/mimblewimble-grin-resources/60
https://eprint.iacr.org/2018/1039
https://vitalik.ca/general/2017/11/09/starks_part_1.html
https://vitalik.ca/general/2017/11/22/starks_part_2.html
https://vitalik.ca/general/2018/07/21/starks_part_3.html
https://medium.com/@VitalikButerin/zk-snarks-under-the-hood-b33151a013f6
https://www.algorand.com/docs/whitepapers/
https://eprint.iacr.org/2017/1066.pdf
https://www.elementsproject.org/elements/confidential-transactions/investigation.html
https://people.xiph.org/~greg/confidential_values.txt
https://bitcoin.org/bitcoin.pdf
https://gist.github.com/harding/dabea3d83c695e6b937bf090eddf2bb3
http://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/
http://andrea.corbellini.name/2015/05/23/elliptic-curve-cryptography-finite-fields-and-discrete-logarithms/
http://andrea.corbellini.name/2015/05/30/elliptic-curve-cryptography-ecdh-and-ecdsa/
http://andrea.corbellini.name/2015/06/08/elliptic-curve-cryptography-breaking-security-and-a-comparison-with-rsa/
https://github.com/ignopeverell/grin/blob/master/doc/intro.md
https://github.com/mimblewimble/grin/pull/1444
