remove i2p references, bring back nitter, secrets.enc -> secrets.yaml for syntax highlighting

This commit is contained in:
Arya 2024-04-07 17:08:13 +05:30
parent 641f5b0c39
commit 328e3b642a
Signed by: arya
GPG Key ID: 842D12BDA50DF120
6 changed files with 94 additions and 110 deletions

View File

@ -19,7 +19,7 @@ ansible-playbook all/playbook.yaml # Initialize
``` ```
For Privacy Frontends playbook, you need access to the ansible vault password, which you'll have if you are a segfault sysadmin :) For Privacy Frontends playbook, you need access to the ansible vault password, which you'll have if you are a segfault sysadmin :)
``` ```
ansible-playbook -i inventory.yml -e @secrets.enc --ask-vault-pass privfrontends/playbook.yaml ansible-playbook -i inventory.yml -e @secrets.yaml --ask-vault-pass privfrontends/playbook.yaml
``` ```
Additionally, you can make use of the following ansible tags: Additionally, you can make use of the following ansible tags:
- caddy-non-update \- update Caddy configs but don't update caddy itself - caddy-non-update \- update Caddy configs but don't update caddy itself
@ -32,10 +32,10 @@ Many parts of our privacy frontends configurations are meant to be private, such
Hence, these are stored as variables using ansible-vault. Hence, these are stored as variables using ansible-vault.
There are two different ansible-vaults in use in our setup, encrypted `host_vars` files per-host, and a global `secrets.enc`. There are two different ansible-vaults in use in our setup, encrypted `host_vars` files per-host, and a global `secrets.yaml`.
### secrets.enc ### secrets.yaml
`/secrets.enc` contains private variables that are same for all our servers. `/secrets.yaml` contains private variables that are same for all our servers.
Currently, it contains the following: (as of 9/6/23) Currently, it contains the following: (as of 9/6/23)
- rfc2136_key \- RFC2136 key for DNS01 - rfc2136_key \- RFC2136 key for DNS01
- watchtower_mtrx_pass \- Watchtower Matrix password - watchtower_mtrx_pass \- Watchtower Matrix password
@ -78,7 +78,7 @@ Firstly, add the thing to `docker_services` array/var in `/privfrontends/playboo
Then, create the `/compose/SERVICE_NAME` directory and add the compose file (compose.yml.j2) to the same. You can use the `{{inventory_hostname}}` variables where required. Then, create the `/compose/SERVICE_NAME` directory and add the compose file (compose.yml.j2) to the same. You can use the `{{inventory_hostname}}` variables where required.
If the service needs a secret key, add it to the ansible-vault secrets.enc with `ansible-vault edit secrets.enc`. If you are a Project Segfault sysadmin you already have the password for it :P If the service needs a secret key, add it to the ansible-vault secrets.yaml with `ansible-vault edit secrets.yaml`. If you are a Project Segfault sysadmin you already have the password for it :P
Past this, Caddy needs to be configured. Past this, Caddy needs to be configured.

View File

@ -24,9 +24,6 @@
(torloc) { (torloc) {
header Onion-Location http://{args[0]}.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion{path} header Onion-Location http://{args[0]}.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion{path}
} }
(i2ploc) {
header X-I2P-Location http://{args[0]}{path}
}
(acmedns) { (acmedns) {
tls { tls {
dns rfc2136 { dns rfc2136 {
@ -74,13 +71,16 @@ lbry.{{ server_prefix }}.projectsegfau.lt lbry.projectsegfau.lt {
reverse_proxy :3550 reverse_proxy :3550
import def import def
import torloc lbry import torloc lbry
import i2ploc pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p
} }
nitter.{{ server_prefix }}.projectsegfau.lt nitter.projectsegfau.lt n.psf.lt n.{{ server_prefix }}.psf.lt { nitter.{{ server_prefix }}.projectsegfau.lt nitter.projectsegfau.lt n.psf.lt n.{{ server_prefix }}.psf.lt {
import def import def
import torloc nitter import torloc nitter
import i2ploc pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p reverse_proxy :8387
redir https://twiiit.com{uri} basicauth {
{% for item in private_service_basicauth %}
{{ item }}
{% endfor %}
}
} }
libreddit.{{ server_prefix }}.projectsegfau.lt libreddit.projectsegfau.lt lr.psf.lt lr.{{ server_prefix }}.psf.lt { libreddit.{{ server_prefix }}.projectsegfau.lt libreddit.projectsegfau.lt lr.psf.lt lr.{{ server_prefix }}.psf.lt {
reverse_proxy :6464 reverse_proxy :6464
@ -91,7 +91,6 @@ libreddit.{{ server_prefix }}.projectsegfau.lt libreddit.projectsegfau.lt lr.psf
format json format json
} }
import torloc libreddit import torloc libreddit
import i2ploc pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p
} }
teddit.{{ server_prefix }}.projectsegfau.lt teddit.projectsegfau.lt t.psf.lt t.{{ server_prefix }}.psf.lt { teddit.{{ server_prefix }}.projectsegfau.lt teddit.projectsegfau.lt t.psf.lt t.{{ server_prefix }}.psf.lt {
redir https://libreddit.projectsegfau.lt{uri} redir https://libreddit.projectsegfau.lt{uri}
@ -141,13 +140,11 @@ rimgo.{{ server_prefix }}.projectsegfau.lt rimgo.projectsegfau.lt rg.psf.lt rg.{
bw.{{ server_prefix }}.projectsegfau.lt bw.projectsegfau.lt bw.psf.lt bw.{{ server_prefix }}.psf.lt { bw.{{ server_prefix }}.projectsegfau.lt bw.projectsegfau.lt bw.psf.lt bw.{{ server_prefix }}.psf.lt {
import def import def
import torloc breezewiki import torloc breezewiki
import i2ploc pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p
reverse_proxy :10416 reverse_proxy :10416
} }
scribe.{{ server_prefix }}.projectsegfau.lt scribe.projectsegfau.lt sc.psf.lt sc.{{ server_prefix }}.psf.lt { scribe.{{ server_prefix }}.projectsegfau.lt scribe.projectsegfau.lt sc.psf.lt sc.{{ server_prefix }}.psf.lt {
import def import def
import torloc scribe import torloc scribe
import i2ploc pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p
reverse_proxy :8006 reverse_proxy :8006
} }
translate.{{ server_prefix }}.projectsegfau.lt translate.projectsegfau.lt tl.psf.lt tl.{{ server_prefix }}.psf.lt { translate.{{ server_prefix }}.projectsegfau.lt translate.projectsegfau.lt tl.psf.lt tl.{{ server_prefix }}.psf.lt {

View File

@ -1,9 +1,8 @@
http://www.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfg3pdzzocax6a4oznoyf5k4etzknfatqu23i43wxejwdaffoa.b32.i2p { http://www.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
reverse_proxy https://projectsegfau.lt { reverse_proxy https://projectsegfau.lt {
header_up Host "projectsegfau.lt" header_up Host "projectsegfau.lt"
} }
import tor www import tor www
import i2ploc pjsfg3pdzzocax6a4oznoyf5k4etzknfatqu23i43wxejwdaffoa.b32.i2p
} }
# PUBNIX # PUBNIX
http://geminiproxy.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { http://geminiproxy.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
@ -29,35 +28,30 @@ http://*.p.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
} }
# Privacy Frontends # Privacy Frontends
http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p { http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor lbry import tor lbry
import i2ploc pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p
reverse_proxy :3550 reverse_proxy :3550
} }
http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p { http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
reverse_proxy :8387 reverse_proxy :8387
import tor nitter import tor nitter
import i2ploc pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p
} }
http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p { http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor libreddit import tor libreddit
import i2ploc pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p
reverse_proxy :6464 reverse_proxy :6464
} }
http://teddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { http://teddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor teddit import tor teddit
reverse_proxy :9061 reverse_proxy :9061
} }
http://inv.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfhqamc7k6htnumrvn4cwqqdoggeepj7u5viyimgnxg3gar72q.b32.i2p { http://inv.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor inv import tor inv
import i2ploc pjsfhqamc7k6htnumrvn4cwqqdoggeepj7u5viyimgnxg3gar72q.b32.i2p
reverse_proxy https://invidious.projectsegfau.lt { reverse_proxy https://invidious.projectsegfau.lt {
header_up Host "invidious.projectsegfau.lt" header_up Host "invidious.projectsegfau.lt"
} }
} }
http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p { http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor invbp import tor invbp
import i2ploc pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p
reverse_proxy :7573 reverse_proxy :7573
} }
http://gothub.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { http://gothub.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
@ -84,19 +78,17 @@ http://rimgo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
header_up Host "rimgo.projectsegfau.lt" header_up Host "rimgo.projectsegfau.lt"
} }
} }
http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p { http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor breezewiki import tor breezewiki
import i2ploc pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p
reverse_proxy https://bw.projectsegfau.lt { reverse_proxy https://bw.projectsegfau.lt {
header_up Host "bw.projectsegfau.lt" header_up Host "bw.projectsegfau.lt"
} }
} }
http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p { http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
reverse_proxy https://scribe.projectsegfau.lt { reverse_proxy https://scribe.projectsegfau.lt {
header_up Host "scribe.projectsegfau.lt" header_up Host "scribe.projectsegfau.lt"
} }
import tor scribe import tor scribe
import i2ploc pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p
} }
http://translate.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { http://translate.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
reverse_proxy https://translate.projectsegfau.lt { reverse_proxy https://translate.projectsegfau.lt {
@ -110,24 +102,21 @@ http://safetwitch.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion
} }
import tor safetwitch import tor safetwitch
} }
http://search.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfwklrellqoj275kzeu2tz4c3j5zktnqod56s7l5dc25ro3wgq.b32.i2p { http://search.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor search import tor search
import i2ploc pjsfwklrellqoj275kzeu2tz4c3j5zktnqod56s7l5dc25ro3wgq.b32.i2p
reverse_proxy https://search.projectsegfau.lt { reverse_proxy https://search.projectsegfau.lt {
header_up Host "search.projectsegfau.lt" header_up Host "search.projectsegfau.lt"
} }
} }
http://git.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfdrtv2465bisenvzhfvdleznx4arlih2hlnrhpzugailnm7iq.b32.i2p { http://git.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor git import tor git
import i2ploc pjsfdrtv2465bisenvzhfvdleznx4arlih2hlnrhpzugailnm7iq.b32.i2p
reverse_proxy https://git.projectsegfau.lt { reverse_proxy https://git.projectsegfau.lt {
header_up Host "git.projectsegfau.lt" header_up Host "git.projectsegfau.lt"
} }
} }
http://todo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfivs2sxudfy65kojxqophc6vqjqdr6woczy6hzaxvxvbj3bkq.b32.i2p { http://todo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion {
import tor todo import tor todo
import i2ploc pjsfivs2sxudfy65kojxqophc6vqjqdr6woczy6hzaxvxvbj3bkq.b32.i2p
reverse_proxy https://todo.projectsegfau.lt { reverse_proxy https://todo.projectsegfau.lt {
header_up Host "todo.projectsegfau.lt" header_up Host "todo.projectsegfau.lt"
} }

View File

@ -26,7 +26,6 @@ inv.bp.projectsegfau.lt, i.bp.psf.lt, invidious.projectsegfau.lt, inv.projectseg
import def import def
header -X-Frame-Options header -X-Frame-Options
import torloc invbp import torloc invbp
import i2ploc pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p
} }
piped.projectsegfau.lt proxy.piped.projectsegfau.lt api.piped.projectsegfau.lt { piped.projectsegfau.lt proxy.piped.projectsegfau.lt api.piped.projectsegfau.lt {
reverse_proxy :6970 reverse_proxy :6970
@ -57,7 +56,6 @@ arya.projectsegfau.lt {
bb.us.projectsegfau.lt bb.in.projectsegfau.lt bb.eu.projectsegfau.lt bb.projectsegfau.lt { bb.us.projectsegfau.lt bb.in.projectsegfau.lt bb.eu.projectsegfau.lt bb.projectsegfau.lt {
import def import def
import torloc beatbump import torloc beatbump
import i2ploc pjsflmvtqax7ii44qy4ladap65c3kqspbs7h7krqy7x43uovklla.b32.i2p
redir https://hyperpipe.projectsegfau.lt{uri} redir https://hyperpipe.projectsegfau.lt{uri}
} }
ferrit.projectsegfau.lt snooddit.projectsegfau.lt { ferrit.projectsegfau.lt snooddit.projectsegfau.lt {

View File

@ -1,70 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
31373334316338616530336663386162326136303066636462656235636139613037323732616433
3464633562643434666536373662363132656238336435640a343261393539363663623731323533
35383934346563633538353535613936316237613832353261376534323665653834353831353831
6237323465623230340a666366333130306462333233336431306135386339373763653037653238
32393563383237356235633935383161623332613934383164386532316564653861356163393236
33356133313633333534613966666662636336633565356331616165383433663935663162373730
30343961316638393433613935323635363332663735623730353230643163393336393462613764
39323532343533396532636264373166323739343931353139343633636137323633303038643561
63633964616334386463353566636638393963343931316635343664653363393231363531393438
31626666616634343833623661386663393731616162636337346235626433356230376564333533
30626232643461613934346534613233363737373161363832326463343363636336666538633132
63656633613466623265646235383238663738383632626664356133373964643536646635653238
66376264376538643465306664653035346637636336366339383561636364616530353232303265
66626431663965323136363065646339323934623436663862366338613466663564333462326431
63326131353462316563346366356665393438346430663839376562386638643630613232303833
66346265633261653463363761333335343331366265663735656331616537323631396331386262
31623439393039613461303434333636613037326436656363303532373132666339653662376332
35343964636638393563613066323763653365333965366139396665353065333131653037363563
65383132356239383332636235336434663961306130656461663739663663346136613239623965
61363334303637343732393030663066353631323365643532633865363134363761323138343365
64323233383632376338396632376561636134386133303835396231666436613362343435383234
36316237636435353736623033356362643238616536626133306639376539353132303331336164
61396261323865353464353637653061366463376638363736333233383163613662386631343933
32343937626138343937336162303534336533663535636234363936326139623233356538346630
63306439643366616137656135623637333033626438343933653063636165373038613239383164
34636664336165643565643436393961316266653339383961666337383039656362623031656138
30306433623131366461383635303361666162333261616431363966613432663034343966656139
63316131646165316339303564316533396362613232643237393233643235666531646162623064
34393435613635326539613035336462393832653534623433396661366236336237613966623234
34633838376532326163343437633134353132616438343538633564623033346364336663343564
64383939646637323932383336303834663236313932656436633533303437626562303031346162
36623936663266336236346432356135636662613137336439333735356438613433663963653732
36623331633338346437336130373035306566653766623334303037343663663063663661373736
31313564646333616638643133636265393837663261396336343866313035643730613639343234
30653935303831366136633361333637336433393236376339613435303535313038303539336539
33356634626164663963363562333838353237616130313839653135363733323362613132386461
64623839356236613839356534323562303031613061633435323232306231313965343766623831
35636530613036393465323364636661383739623266616530343536353061353363643163666537
33353961313963366637373163616530373962643630353435383634333865303634363735633461
62626363303163303265646565373865363733626432353232386436313533353334376165376266
38623037626137643833363361353635363734393666643336353631363664643863383633336137
36383834623163323463383736663035653234373337353264316639643462376434633232316331
33313236333530663362313736303033346134383138333338393761343138363561376334356138
36363163393835333666393531333635633162363861373033393464623938356332653761333930
35386435636566336633313263646339303061353638663833643761303463333031386664303531
61343930306338643634333731353635323164643939356331326564636665303966346137393536
33313066633266313464333463306637386262363130633832393633366532363538313834306565
61356533393661353565313166653134643336356138653966623434633335363630636139363139
36663037303362663035653864306364316361326236623938656334373733313665646530303066
61386634343232373730363031376637653063333834313862636461353463653161376562376138
39646164306233643665663737653631353035656135373263343863356437623661633333643331
35353334313964363731636166356163363831653930356133643938303664336533303331333536
65353364376232623463623138663737303333636432663262633033663737303836666135386138
38666562383337353137663735306230373637353837616237643334663933316463666335613739
65663565643365363431396635663661643964643462643364663231613333323433343931623637
36336266373333623237383635303436396362393032303731633162383265666430386437643963
62643961383435626633353733373336313638333038653238383034373635626637303665303562
36663531326434343763663731623865323531303037306166316264646461376134353831656565
39613962643938333332333038346234393538343030343261396532363237613339373831303564
66393162613230376237373631323931663830366336663138643631633438386131333763646562
38646431343263653237313336653231363962373939393164636562613939663161353565343438
36626134656533366131653466646138326237303262623731373533313132303339333661616335
37616334646131303332326261633938336633373039636131363235313330653530346636353236
64663463333435383535393831613564613266616166666332653366656165633939333537393033
35393965623265633035656162343961396230346431646533363666396461363139376134326134
34346136326537616533636433633562336563396539653965633037383265383930303866666535
30343536623163343237393866323637313739366339316532636633643533373937653764356564
34373836396264613766666565343139613033373136363165646138636633383361653036653232
3730

70
secrets.yaml Normal file
View File

@ -0,0 +1,70 @@
$ANSIBLE_VAULT;1.1;AES256
30326238333263633831626131343435333162356137393138613762363230393132393633653865
6432613339363565326162616631376430326437353861340a666664633033616538353735666239
36616430386136613736326665633738343733643765306237383237643963343162313266373537
6164323630616562320a343363643766656132643531653838633334623237396336366433663931
34646231393361363764376635373138323736383734656264666561353238396132633838353830
33386164343234616132356534396633633663313534626463633965343765326264333835323537
65306335623233323438356264626336376235363663313036643065366638643335626335343766
32643636353331336533333931323131366438306464613338323862306639643765333365346236
37303562363064623133636338356231373535343366366365393938666136656339336230346234
32316235353464323437643839376637623737306639353632656135313730643234356135376136
32616565363861313965666165623939373934396663393134386639623636346132626465306164
30303961366136383462396264376538633364616262613437333132346132653766366134626334
36393166646634373333643862353638326630653637653630643435613666653062333661636236
62653231633733333563396133636436643239353331363735316231333863326535656132636662
37613565373939343630653766353732333237363533333261656533386239323266366635653138
35613764373537373338353461353462663864333231323535323562373733376634383131383761
31383162636364343533626236653639613161356664343936623239633262666363616334336533
35653764356665373864343535623966646233663134663861313735643537323439626162653838
35663164393134663235646333643862303136383065313966643530623364316165373039653131
31663733396632386633323962373862326666353463326634656436353031643563616164376330
39303661636139653334373331363232356533386632353631396133373861373130643430376532
32343039353165383465343566346530666435313734633337396431666630333438353365316131
37373231653133636338303331366638343463383332363666393361613739323365363364316631
65336336643564616466306133623661336264626338393836613861663737383066393263386263
61316637646366333261303036633130383264343966633337656130396336636637363061653564
64313433303364623235353138636463636534313631353236623634653234363237383231656466
61646330633035373030373231303931343339393161373034616665316338396264346566656637
38306638366336303264663866303462633231666437646261303431653439646661343264303331
61653136396437373166323032386239643137306433383634363035336132306235656234313266
61626561366538623364346434643933363037366566663632656631613831386462326666393166
32636635313831313537646234343539363164326232623737336434396436353466373134363638
37363462383565383739346134373063636238313665353130646438343030613062346364333931
36343837633331636134643366663638333038333765616239623839313730383362383031373833
32663334646637663339386634346234353339363766656664663831666262636164303561323262
39326231313437366534366533323765313038333537643865323230653838376637636534343761
36653966396263326665653138313066353064323836343664653330616631346464666262346437
33643233333238616239613737613164663139393130666364626362353332633662376136383762
36336462313633396666373438343965303461336132353236616130356666636632316237313633
31626566616236393664666339303865656230366439373234643163616664636134616434633136
64366262663866353164356433303132363336636262333133303532373039383537626335373633
61303662646263383164656232646665376639386233646333643431353461333930353964616562
61303366613937363463313166343539643435353166383239316338316230636339363434333736
38383663666466333730313534653539633633353062613133383362393735363536643439396138
36343866313239313937623261633638323535343933343665356133316663366333393439316364
34343236366636386338623534613364363066303935333564336561366531626331663338363838
38663435656539636231386161313762633232336533303362613937393062376532383736383938
64656232333637663033393532313337333633353564396434353633343634376361383131663030
36636631653933386534306135633834343531326136316364326665323133363163623436363232
61643636326335656138646663653639323664636639396136666363323431316539306138343935
38323431353730336336313066353337383532643230613963356335383436663564653539306430
31343963376364666437373963393630656165323265633964653438313833383730643839353863
62643536336463336437613562343062656133396530656337353330356430623662363437653732
37666162393830666337653362383131303466396430643034373064653530626636333231386237
32643932333833336364343933616161663065396635613364616362343066623134623932366265
34396465386463636438313638653434386163623166636636366233343033666638323065323239
36326639623565333530366363396166626461616337303261353330396634393434313935316463
39383864386437386136626461633133346532646463623934613062393862323939363236643461
31333034303362666132643865373030313832313866326538336235303866313463613765363334
30383031623561303761643134313234633233383462383739616331653439353864643363613436
31353661376137646633643633373334623434386363303537326364666362306134626339343131
32393866383665366432396334626166363237396638396630653335663235386263643838383935
65646636366538616662313738353666366536303562626166363231613161613561333436616531
37386634363763636362656566346366363139353065633764326266633265373261323938613764
65386430643437373732343765323966316530623266303466303833306539303066386132646431
32383235393931336631663062326364333235323039316233323231366537663862656536366330
35326362663434366432366366643265353332313664646234366332383766316435373966633032
62663763316630323131393431373866633336353162633434316130316137356163316162306638
66316531353564613864623833326166636465396638656239653736646666646437306335396237
65353339323833383533383661616364666666306166336538346532636663353464