Configure LDAP for mastodon

This commit is contained in:
Ivan R. 2024-10-20 15:03:25 +05:00
parent e03943b724
commit 8c23f79b12
Signed by: lumin
GPG key ID: E0937DC7CD6D3817
6 changed files with 220 additions and 184 deletions

View file

@ -4,4 +4,5 @@
- name: authentik
postgresql_password: "{{ postgresql_users.authentik }}"
secret_key: "{{ authentik.secret_key }}"
smtp_pasword: "{{ mail_users['auth@comfycamp.space'] }}"
smtp_password: "{{ mail_users['auth@comfycamp.space'] }}"
ldap_outpost_token: "{{ authentik.ldap_outpost_token }}"

View file

@ -12,5 +12,4 @@
active_record_encryption_deterministic_key: "{{ mastodon.active_record_encryption_deterministic_key }}"
active_record_encryption_key_derivation_salt: "{{ mastodon.active_record_encryption_key_derivation_salt }}"
active_record_encryption_primary_key: "{{ mastodon.active_record_encryption_primary_key }}"
oidc_client_id: "oD2Vg5shQju164gYmju8"
oidc_client_secret: "{{ mastodon.oidc_client_secret }}"
ldap_password: "{{ ldap_password }}"

View file

@ -8,7 +8,7 @@
become: true
community.docker.docker_volume:
name: "{{ item }}"
loop: ["authentik-redis", "authentik-media", "authentik-templates"]
loop: ["authentik-redis", "authentik-media", "authentik-templates", "authentik-certs"]
- name: Run redis container
become: true
community.docker.docker_container:
@ -43,6 +43,13 @@
- name: authentik-redis
- name: postgresql
- name: haproxy
user: root
volumes:
- authentik-media:/media
- authentik-templates:/templates
- authentik-certs:/certs
- /etc/letsencrypt/live/comfycamp.space/fullchain.pem:/certs/comfycamp.space/fullchain.pem:ro
- /etc/letsencrypt/live/comfycamp.space/privkey.pem:/certs/comfycamp.space/privkey.pem:ro
env_file: /etc/authentik/.env
- name: Run authentik worker container
become: true
@ -54,4 +61,25 @@
- name: authentik
- name: authentik-redis
- name: postgresql
volumes:
- authentik-media:/media
- authentik-templates:/templates
- authentik-certs:/certs
env_file: /etc/authentik/.env
- name: Run authentik LDAP outpost
become: true
community.docker.docker_container:
name: authentik-ldap
image: ghcr.io/goauthentik/ldap:{{ tag }}
networks:
- name: authentik
- name: haproxy
ports:
- 389:3389
volumes:
- authentik-certs:/certs
- /etc/letsencrypt/live/comfycamp.space/fullchain.pem:/certs/comfycamp.space/fullchain.pem:ro
- /etc/letsencrypt/live/comfycamp.space/privkey.pem:/certs/comfycamp.space/privkey.pem:ro
env:
AUTHENTIK_HOST: http://authentik:9000
AUTHENTIK_TOKEN: "{{ ldap_outpost_token }}"

View file

@ -31,6 +31,7 @@
- name: postgresql
- name: minio
- name: haproxy
- name: authentik
ports:
- 127.0.0.1:3000:3000
volumes:
@ -61,6 +62,7 @@
- name: redis-mastodon
- name: postgresql
- name: minio
- name: authentik
volumes:
- mastodon-public-system:/mastodon/public/system
restart_policy: unless-stopped

View file

@ -39,12 +39,10 @@ ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY={{ active_record_encryption_determini
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT={{ active_record_encryption_key_derivation_salt }}
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY={{ active_record_encryption_primary_key }}
OIDC_ENABLED=true
OIDC_DISPLAY_NAME=comfycamp.space
OIDC_ISSUER=https://comfycamp.space
OIDC_DISCOVERY=true
OIDC_SCOPE=openid,profile,email
OIDC_UID_FIELD=preferred_username
OIDC_REDIRECT_URI=https://m.comfycamp.space/auth/auth/openid_connect/callback
OIDC_CLIENT_ID={{ oidc_client_id }}
OIDC_CLIENT_SECRET={{ oidc_client_secret }}
LDAP_ENABLED=true
LDAP_HOST=comfycamp.space
LDAP_PORT=389
LDAP_METHOD=start_tls
LDAP_BASE=DC=ldap,DC=goauthentik,DC=io
LDAP_BIND_DN=cn=ldapservice,ou=users,dc=ldap,dc=goauthentik,dc=io
LDAP_PASSWORD={{ ldap_password }}

View file

@ -1,172 +1,180 @@
$ANSIBLE_VAULT;1.1;AES256
62303238323030396332633131343161616138373937646534376462633863353632343063303063
3665323164346365336532646364636363353636356535630a616137356630386337373564333537
65373834653363373432303535333563636535656431316132326632356136633931386332323363
6433613965383565370a316661343864623731346135656563643266663131623632363536623866
66323361343136343566346532376132326438653133303337383332303533666637663632333633
66643439343231633635336164613637353461636430386461306665636434383837336433316135
32623634343264333339613537363739613932386564306430373162646535663665316566396663
65306365653537306164663631306433363038653566313462656434656537323133613464653662
66313535646436643763616534623761393634376465613332326533343532326466616437323338
65653166346563613637343134386331323038346136373764636135343162666530373831666530
33666633363464653139663636343662306432376538316162643663626430396435363464626138
34623863663737366131666632313136353635653431613738313032376631373064353966346134
32613633373762323232646437326663306265333333616238643039613131633066336439376330
62393062653830316436346563656265653465386266323131623039323633393534306232613337
37316336383639313939636264633363666265393438353439396530323239663734336330343031
30633537323937383533313562316233336532373932336163656263636239653066663765373539
64663166396430336533316330313733343838653739306334333132653731626236333437376136
36363430343362656632616139663164356434633534366663373438323931363532646636663933
39333166653334336437613139363535356261373936636433356366653663356631306138346336
65643236353064306364643639363134656635303162313235653730396166323763306238353836
34653439623937616431626465623139636364333062393636376132333661353330363465626137
35373836333134356336643233303563366437326562386265336564643761656465333934356335
61316539333931396233643466396138653164636335326563383866616366373161623061663834
31383436636262383663333639313634633239363466326135373437633761363830656161303232
37376634633361303235643330333939326439376564376630616232336636623564316161396530
64626331613562386338366663363961366439633634653665646131306330333137626330333166
35626461306463386332656639663938323166643866383534316333313332323032646665306237
65626431653366353533393835303230306430363366636161303735343262383865633164343030
65356336633335373063303337323538313533626531396532323161363161666438623835303361
34626132643465346530653263306565343166373666313862623931366339373961373836636661
65653861396466316466323764383539643662376236316636323736313866363132363263646463
34623064326130313464666562643838646233383836366238653137326634643761363766356533
39626637343331323634333038626238303162666436303462316232623266643639626634356131
63323136333763393739386236663761383836653631373264393965343662666363356231313933
33323864626330656535303335396533623031353536336537653230373134316139353064353631
61646530636139323065383238666661333763356438316335666364306562393039363233383464
65343939306630376361666232356634323837656133656334386636663436313137623561386538
63303237643937376631383532393761383265353935613063393763313934613430393135386331
64323866356261663137376466386537343965323264343633623730646237663464633963366132
38336639643939393434383033396363303063363632343131373330306461346361636162343139
61626164636564613564636637373638313664653038333664346131313539303634326233333264
37303933343030636230616332643962653061623161636530626261376234653730396432616432
65643631353831643936353136333462643039303432613735393236363765393265346233666231
36653433393761393333336631376139393939386639306337376562303231626239313031326330
33613262616461383631326135343166353563373439336232613339343331306662663736333433
37306132633466356531623561313030346566383064356236636538353732323436396361643439
34393162636263363338333165363735396535613465303531393466316438623665626265396534
62393633393239386665313162626637386162316463343235346331643166383966633634316332
36643065656638383961323062343665616333386365393936633864353138646630343966366533
33356438643063316431663962626431343635653065636664336238643030356464343839666330
36343130626365346465323234383538656564616531363763636132636236363166363432326234
62643161316334393961653335623733303163663730646331326464333265353364363331396634
31326239366130343238613332313266623933373965326432386538653138306263653333373433
37303962646263643833636233626634336234386136356266386237376337646435656262323032
62366661363537313433633965363363616330663030303036666561316239306131323838386337
38313734396562373836623435326463613838396439376633363362663034353738626466396133
34323037336263623138363738313932666435646335353834373532323631343363396338623366
66326166336561396531306534366463633464663135346236663431356533363030396262383463
31396463656564313635616662626636633566313761633536373935326230363434623837666562
61393232636362383232633831373934343032663433363834383339336139396264343935353139
36653537393264303063356165356532646432636562303761646236323965353033383535323137
32643664613131383239613331323635633363333439633565663731633464373965653134306536
32643737343631396136653763373733633331353362653239346537663435623566316136633466
38393164346562353462353635306137633164366339306235396462633537316537663937356338
63636664376162303931353462303432353633383765623638636131316630303131316161346166
38393834613539316364666466646564653632326462626132643735366565643436663063373764
32366237303562336435333561313332313739646564376233336366626437326262653962626533
64393733346437303534613037663233373230643336373962633463613930653763633732333833
64323438323165643464343536396233623562303461636561666663623635316363643161613164
66313865333736636230333136393638666231386164356132313932393338396564336338353763
32323936323362326664613164366635323033313862386663353465643363613964613832336134
65636336393839343364393130356164663730363932646638363564353139303834303630623534
35366665303730613033393833623163626635666362353635356535396161313333633063343232
33363861303530366136656230613063306563326631663665303261396335373430633162363666
63353636303331313235306636333431366536353135343336386537653436346536326135376336
66323230393863323833343832366461653038313766393161316632393065636465643835333535
37303764363031626263376566386633356335626539353863313861336130376138303164653839
36356333306635343535333437646562316262383531626339623534653733303466653435653332
63393664306266333465613032303230373562633839623832633539326337313662356337316464
33363437306630393666376532653261333434666163393139623963353661316264646536613938
39396466373562643865343236323964656163326433393136636565623132316466303335336563
34656266366335316131613965636139666363656239636336306137633535386239663639613235
33623835343835663262656639613136303732333631343165393763643739313739396364323337
61643138626133363831363165313234313231396265326335643564343237306239333663376565
32353834373735616232343662623232376433623833356232323239636631623864336435316264
33663363623035383865643666396130383861386137303738623935376163316438356162306135
62653763613536623337373236636564643762613362303466343139353764396431393430363832
39323330353862303063356331646536383533306330343062653939336364643039626331666666
36653130366137383533313665383065626236383363393164646339356330653032633265373761
62613766303166656362376231383561626565623430356665396234643934363565303638326433
62643433333037643034386461343464633430386432366133623332313139373037313635633831
37653431393963306263653166663266646462633463393635303339376664323836343030353931
66663030396634336363343233396366343836633238623536653331653363306361393934376164
31306335643030373639356635626232306331353630343530626531623235323961303339373865
30356531303938323431313937353134393162333761626535356365643232383032323433633465
30343534313763353834666333313235336564646237666133373330636533323532353735363863
33373838393035396162633066376462333632636232336531633936666366373861636232373364
30333666343836333436383363356261633335613831336662326364343961333462353035303537
36323862363762303336396634363564353762646432383833343965643965366533306661376133
39363132333265306232363930326265653537373261613265386435333862386462666234316332
39393136383336626534393738326438393761633339623833336530333462363362353237323332
61623638646630646261396364633833643434633430313962326638643165373637613935383865
37326535633238313234386362333937353837636563326133666163346431383736616363623539
33313939626133393464656330666166376533303064623636633163336563306437383336373030
32316633303162343737323034383264643638306264623166373139323363326130646336623434
62653433626131323837613736373036303635343761663738653637373335636562616530313166
32643931343537383331363233336236373963376435643933613637626638363665623061653665
37363432343266663531323534656333376566633139666164363031643664316531663765633564
63366631636236313363386138626232383061636139653637333263353762353632633439343166
31323562623332643135363662643434653238323538383432373861663733396334633036613738
61303934386362633566613239343463643265333864373133333164373739343538383931386330
32306630393338643830633461653463613337313661613064313332343864666231353366633030
38346563326564633462663036666331633038663639386162313835643431386166383466626332
32326161623535666137386537303562303634356433343465626233366639393762303562303163
37663366343630313434623665646438393539643136306333333630623133393736353763396630
31306430373266336337633364656634356539336335663165643631383030616262646664396364
37633236313935383166346365636466373739616661306536306631333735313462366634393137
35623736646264363664306139653366353466343766653264363836643633323331633334386532
35313166396163663532313032323366336238636262396361613130306239616432333338636430
33376438323863343031373633336234643839393235386330363939303038376639616330303931
65383339353837353531366563306337653233386162363137643965316330333566653861376132
63353236396438323839386331393731306237383532666133616132353430363836376631653335
32353262623439636466373038663564313234366163646365333836336336343238353239393433
34303062326461376430313761386236326631383339313332653430656133396230623838383963
64666261656365626537623436616662376464376161363733376461303039363135323835396165
62333538643630353739623233346530626338643931656566326137643533303266656462626462
61663963303236353562396532303734633863643030613830613666623438373764363937636566
65323137353965316233643038626632396432653431326533643961303834653231376362343438
62633232353962333533663366623335656134373364343365393161313263616336333330333538
36653230336236366139356233663434396335626565336566313436666539376433353562353438
64346464336430616338326530616365373364643733323238303339343633663936636566363339
37303635643662643333313030643735613635386537636331313637303439396665386463643537
32643163356139313465326666313364633366313862323338383737393566626637303965636466
33656631613832343235383334373635303131643666313565316330366132396333326535663232
32323462353362303166356535323137323034373832613839306164336634376661656662616436
39616264376339376566343332303965386534656463343831356166643931616662363437653639
63363833356534363637333130633166343764663065633763326465333336316331386436653735
39613366666439336664363161313163646362373762643366386334666565653163613861306433
37336263386439343237373035623364313533636534656234623836326336306138363666343434
35616362303438383639393139386362396233393765303966653266646431633564656331353336
63343864326465643134323963336132363034643538653732653736313761306663383832343564
66333334386432373936366530363331316633313936633766376561333635623433356234323530
62336330343665373836653137306436646236646237373331333737373433663566643964613231
31373637386462333038386362303964656638363365616335643032653861376366333533613366
39633765663433323933376164626533396663653037653364396665636166326237343235643962
39393536323432633962383162396533616433663336353536376339393563333933613836366663
37366533376462346139626665323366363331396632323933363566613862383437396461316664
33623930323331366530323263326535396230306332313638356235623934643634376666633761
64343930326238623730613331356663346338323162623331313361393066396662663034643634
64313936306438313362623937393365386533363435306263313965346338326564656432323233
35343131373263353364313238663033333433636462326266323230383964616539373132303434
30393565333462393834656634346233343461323261306232326531633133623531313964663063
66656465646131343835383832363836373961346162386162616161333939343763333234656161
65353663303161663735613432663734326634633463636638633830316238636263333735633963
36343861306366373663336635366139303333643835376139623666623062396462613835313138
37653964626434656235373936613234313561636361636531376364393331346432336439343137
63353139613065303266633336313535376630653066653361336362346335363362333336383864
64323836326231313862306630633832346234656436653135343166323038323738333964346135
38653263623563313164336665613965376539343166363263636233653331653638363932303532
34343165353937663539666333653331636233623565373662376362393337653130373735326132
34386134656165343836393630626235376537616137666439333634656638623331333432633436
35613937613637313534356237386336366538653162613733626666366530646238363330656566
39303035316338333531313631653836353831353831373766666564316138323536313138343765
32373538663432363231333833663633326239313337643831623937393661313431326539666461
66333238663834376331666631316163343833383834363366613938343837653136643935306335
62636361376632326164643061636631323364393731383833613661336335373763383161333535
62343861333634663930626635343562313762633036376132323933353232633564323038373565
66633735643933393965393030333939653338306637646532303538373534363961343761643866
39336566383238336563646636313339313237326637306134303636616130633238353665643166
61666637396562333134386462623134333463303661303637393537666330646630346531313938
623563313335646235323464363837633438
62633431383231353637396566626664316637613263373139303464396439653964316464353533
3961343265373032386266343964323365613033396334300a636431623961373265373939643136
64386132303065393139326237303235306239633739353035653365383333363130396563346130
3838396139363437380a373532313131373739356661376336343364623433333733316463626666
66353939643336316137313033663832396538393638663332613939306334323639326265303834
65646537336132323063666538663562633432613731656531316366343539306333373436373030
64343233393336333566363131326234393962383665346538656663343935396433663931663139
38663661633631616531333333303736666435393238366630306631646639623661613338326136
64383761373339363564353961366533383237613835643339613034626362363662313235336232
65656337656136326462633030376665313963356538653066376538333937313533646266383061
37633931643666656133646433383764333963316234333162663736313066346331323638393039
62356165383437326635363030386364366163313536386136393030646530656434316332386539
66626234323166646439336636373539326334623336363934356633653565353734313339386133
65656130376131623662363939643237363835656337656231643438386565346636376531343661
37316135396464383439373531636437383730303562373665326337396463363433663062346266
32386231633465386664663566613931353161323032343839303762613333353532646639313735
39346539306663663330303430313638626366383664323461623234326332376434653463313335
62663263626439633436386232356631353562626166643563616630376636373338316137626266
33343365643062373734373464313835356337663731333833323438313733346536326538363665
39653336323937393838393532373461326631626134626262343039656135386532303236613738
31376430626666313563633731633833633933636133653664633962313865306637636364376563
63323830653262396339383364666434663437336638326631356431336430393339343835343635
39306464316666376537623064386362306666626562336432306462356165356133383862316632
36393534623733346338386439363431383266656362656264376266393939313039313465303365
37636134366535663563383331653162336633646139333761336565343761316231306161386534
38363731373538373165313866393666343639336230373637363735636339663037316266663133
35663964343030353635323733383234313432396130616166643663343866363830313035393838
66363463653161643637626233636133633930363637363838363361373930646632383635336663
39383137666236613939623533383432643731656631353533373661306638623566633137336665
36383938353734373361366663653730333862616465616335376637333430316664353264346535
34303639363737653439376332633030313933366462653132346165623934653736653330376538
64326539663137316130306437313732393161356439626535663538656435366237386432306565
36373135343933373735386539643934313831623034383232343538626661343062303936303032
39656234343562386264386561303437616664646362653732623630386533343834376364366135
61373964646335316238336333663035633138346130343163323739663362653462666639636231
30663561373830353833306132623432333031336161313761316130666164393066366135323664
37616634636534643264666532653666663161373165663436313234623532633037343032383231
33633733653537356439643431633738656436333535373966666338633763366466316639393136
35666566666334303366393761326638366238643538643934633834366235396337356430633963
66633630346466323461343437656332393133313564633438336362633836316362306532353239
32333762653637313037333430326130653531613439633333663362663032333939666537313232
61383636623063303362396435333761623763363234343161646439393336303431613462376430
63623233356533343839343264303930363632393436613433636630386331383338346662646662
30343231363732343462616633383738616234633234346466383232626231393934333565353636
64386635643262623135343238633766623530346463383730303537343866353966633161303237
38313932663933396264636537316231666237343631343630326332393161623738663236636332
37626261663835306333663863313666653965343766636261346564663435376536373137396535
65333936303361306635653066313138633237376432376638386535363839383331626566653931
64626462313033316336656661643733343230366538646565303232366562383232623364323136
37633966653934313462623636376631626434376530323531636635363236353239373532396336
63303936323535373964366566353062343939623065346338623862373764666634666264313932
61306131643734663531643534326564613661326330613165613762666332356132306330396631
37653238646334313161633862623535643363386134333039626130616537383933366633306162
31313263613333303735366634373735363037336535373963313064353134306430656363383865
34646563303863303336666634643964636136366134306630623566636363663537323736303130
37383133313065666261333633623963393932366365386336356138386531333939666635353937
63656465663338353763396661616333313037396364626337303933313562666665346163623965
39303863633730613633636566323236663966646436623065303932373331313336306334343033
30623030336431336563376465653063356331653136383035393339663963366137333965646232
66393230633663323730646134626661326165646638393165613237623039643065663835303537
36633534613365663535643033313438313036346131383962363837363463336131333632396534
37613431663439306366646665323338653666383934393930396632363037616334313931633764
30363031393439663839323030353132373135376431386136343130626663303534313461646464
31373436626432623362313363396563383131306462356530643534363935393433386164363935
64636231303733663863396662636262616166643161396137393238373035336338356634666636
36653336396562636465316362623133333863333933656137663363316632633538323130393230
30363665656132396434656135656331386430363237383562326336373832366431653134323966
61366262346363336131376336333131306439636130363862346539343162303464356431313833
61386235633036393435626638633032353537366633396235633930326164313633396332376666
62633034663437616166623034356637336431663865363332376531653737663333303839326437
64663261643066303464633965643231643637393538373863383936383262636530383737336336
65363735313937616364653366633831623731376663356666376663393361333162303131383165
62383632636461373933653835663932633962346532313362323261366166353461616336653664
64373937643630353430386131663238383137626238336161633964613739326230653035316231
34663739386139303665393233373862623431656336313662666664363566386435646362643963
36376463356236366339653530353833653632623862363434313031616361613932326561393230
61366439623064353139623037393664376630303861316138383866356535386133353765613861
37303561613934366330396265653066393132636130343765313732653632373063343364383236
32663562313337616462633933646432616261613135393262633933613330363663623938613662
63386135316366643230386161653331663063336139326466326363313730336130356239653465
36613161366635313361356539643966363664376461303366326635383438366134363733666262
61343064613366386163616666313936303262333832623963326239343165323434373432363134
65323335306432396464393433376433623038623166666132336530326532383665346161373961
36643730633833376534363435626431356434663235626432313733336535633161383232356132
34373735666538363663326438323832653364646130643339306631396139343139323530316666
35396433396665666465623434663762376566373631376662323266373364633431393661393639
64646162376166376537396463316364626333386436663034623330666236613566653137326532
36366663303636303938643238396562353138326433343564386233623965373431656239336235
37353965303533656163663066326163326335636331613566623631336337306139393534373064
65643061636230373364633431306338353166613861656634376664363339623262366338383630
37393961396362656236663635633339653439626539666531313236346333383030656364303431
63376539393336316666393831303937643535366663303736653534636461303362663965373530
61383534313634643639643834386165613737343732333236316530343130663565616333636561
61653437313934336639343066316538303933613530623761653238306133373162336535333431
38333334646538363833646636373233316236653438666235336333343234333135333266653830
61643462643462613561373362613931653832653263663335353937363162326637363736336137
34383237656639383762353466353537623030643466323162316237646161333031316432323061
61633632373037653233343061646130333537303865343832646137323765313263313566326533
35316439376566636362646530353334613037313639366633643131323133373338626566613364
34336430393064346636383933366361363837356463633131396534353933643137663531633963
66353234643535333433346331663265306238373539653761626165333738666364663761336431
34633731653131373463656466613265616464636231363961623631303661656130353538333163
36363131646666313930323434363737643666366131383466633731653866313264613565316233
32323961346566326136663334663335663464303239636562316634303537636563613266646539
38303036356465383333623166306331653439653837333362646335396333343432336335333533
62376433656637363237363764396466323832613563363163336437353265653462313662643465
66623066366538363964396135353831333834643235306536346636633237366664323965366639
66613734376635653336363163386531346562346466386333373536323336666135323063323734
37383037383235333133383232343130396535633838663239623565626566626662363966663961
65643566306465643339386161653638326633323735613633666139346530326532363661373864
64303837393566633935393838336366376363343063346233316431666239613535373633616365
66323161633765353865373730396433656539643761613233373166623062386263646262626531
66346532656361373032303566616161333337306539656462326564373462333732336238393234
39653637623630326565336263303336613738326465663836343639346335613031396538393466
64386162323664306433613466356530333765353139613261356435303833663365373138323239
32393034353863363236346137356431353564653133653231663239383362613635336638393735
30613838653166383364393436343730373530646634633637373364393732656366333461326235
36313931323639323632366236626435386637626562326538303935616230653365326237303766
33646463373130633632643334646538306631343336623934383237386465333631306238616162
63653235353834316363616461663166613636303438643563643561343731313366306161616165
62383061316237346333343063623563313631373363376136336630373665373062343436376263
66326235313065306637653534373133363330326330306338333962373232346464396431346430
33376336393834356532306262663838323838373464386330613664646433656163613836366364
61633532613833383665663235393235316666333961393266663166623162383161643539323737
63643465646337643638626238376364383831323139633466356139666632396438303437613935
66613831613565613139336339303763326638373464346164303231613332633566626539613532
36646561333736313634633532386133333839623930303732643333376633646164383162336662
33613863353665366233663133653535316534316332316363393762653039343566666336633066
36613734306163633932353863643632636165373937363933346332626231376632373962663039
34393633663633396264386265353962356430376662636531656232613538383731303364343436
32316564336134383363393337363832353032323538613333643266633063393739313461653361
30326435613535613935306136393636363761323337333538353162343631353936333361323534
65326564363962343330373361613562366635643233343430386164326666616534363366386437
39353761356362373030663461633034343034386633653332353939323963353765326563396365
30356665646230656130306365653936653262396235653461386432343135313737616130396161
31643432663730373038353833306366383764633963646164343062666136306361383165356439
32363137623966666465333934373766633532393236636562363762616631613964373261326135
37626339386331316466363136633761376663626363376564636566636361396365623131343666
38343131313137653665623966303463633435303131663938383062653539346532353263633230
32366238343432333536663836363432383664623430636261363461383333636338633165343465
31346339633430656636616461313231363339373461633537646366623166383239623836333165
33616364353534646531373563363238643164326561353339373233353631623131333965636364
35353363333232333530613635303866366463356662636532646531616564356566336438636239
64653065356139646535333434373266646239636466653138333431343135663235626134363437
32616331643961613435386461346564313533373464613832306536396339626162353030653362
34326636323933326234366265316339663033343232366563323532343137303633336363393334
31336531316665353163613236346666376533646532613431613263333130633038346466366263
33363364636535333433373262313564663864373736383738326238313738313563616139396265
35303836643035323137343163353130626662653430323336393933646464656439363834633434
64363035386139333538376366666262316266343063616636336266316237303761353435303534
30356433663966663166623331323335336534316536643835626136646131653031636135353864
64633334376432343133386362353361376333666338333362343237656331346665383564623062
64633335376464306635623333343037653533343632353062383763656337663039373832626430
39353235633136303866353034343135633732376131623734303866326135663831316330376535
32626338383638666436316134346331393836313964323364643934373664613462373539316330
32626263643566386666313664336237616236323866313638366238376237643965356436373434
30393338353837613265386363303235363162613261653563303166306565333637376261636131
33613130363232633764393165626238303232393032356264363065613963356233373462616234
34626238313539613665666331366661653730336238396139336630323733633639306364373832
66373432393061333464346132666230336432373931313835633830613362343862633833326435
64663535633133376539396632383662663838326531323831366161343663313632306563316561
63353437343335343130363534316232396330313731336638666230636133313035613437353132
63623533303637336366626631383233323739393064666464643138613035616532386230386161
64636666373965623230343337323163663734613439313964313662656136363163326231646338
33323261666237306434636534663762663835376633366365663438313936316230646537396538
65346437353530343337383536633437363065653738626662356633616434333736613831666436
32316664393536623439313665613061393163303262323238333937333432626130313234316465
62313438653137396431316533396230643836363732306235333833636532333534313532613163
62316534376435653961663230343262333837373761626130373532306366376531363833386230
65383965653936663834323632303364643734366364643535383562373434313330616639626334
66333333633863353966626235363835656261383033346563343961653662636531353832336437
61653766323535353364633331663839626665636165346364383866353131343532396266356339
38303435326139383466623532646166366532353636353437343336346335363332393665663835
34316432313335656437386263373366326534666632633237613363366231613866393761376635
66353463653838346532376638363965353434316330643064386238383931656464633264346262
66623639383837643939633565343361613633373730653035653139633832343532656239633633
62623539626236386163643765373633353363313336636537653162303930363463626139383435
33383736366164646639666136353861663235646366303135663630363866343661626234613335
353530333634326663326530663939633466