Compare commits

..

2 commits

Author SHA1 Message Date
562311375d
Update my website to v2.1.0 2024-11-02 00:35:58 +05:00
1f71663ecb
Configure jellyfin logging 2024-11-02 00:34:53 +05:00
9 changed files with 274 additions and 235 deletions

View file

@ -2,7 +2,7 @@
- hosts: webservers
roles:
- name: comfycamp
postgresql_password: "{{ postgresql_users.comfycamp }}"
jwt_secret: "{{ comfycamp_jwt_secret }}"
secret_key_base: "{{ comfycamp_secret_key_base }}"
smtp_password: "{{ mail_users['comfycamp@comfycamp.space'] }}"
database_url: postgres://comfycamp:{{ postgresql_users.comfycamp }}@postgresql:5432/comfycamp
openid_discovery_url: "https://auth.comfycamp.space/application/o/comfycamp/.well-known/openid-configuration"
openid_client_id: "4XfAX6yccJf10dedRuLp997xORtXKij02oNIej8k"
openid_client_secret: "{{ comfycamp.openid_client_secret }}"

View file

@ -0,0 +1,16 @@
---
argument_specs:
main:
options:
database_url:
type: str
required: true
openid_discovery_url:
type: str
required: true
openid_client_id:
type: str
required: true
openid_client_secret:
type: str
required: true

View file

@ -4,22 +4,24 @@
path: /etc/comfycamp
state: directory
owner: root
group: root
mode: "1700"
- name: Copy comfycamp config
become: true
ansible.builtin.template:
src: comfycamp.env
dest: /etc/comfycamp/.env
src: comfycamp.toml.j2
dest: /etc/comfycamp/config.local.toml
owner: root
group: root
mode: "0600"
- name: Create comfycamp container
become: true
community.docker.docker_container:
name: comfycamp
image: git.comfycamp.space/lumin/comfycamp:v2.0.1
image: git.comfycamp.space/lumin/comfycamp:v2.1.0
networks:
- name: postgresql
- name: haproxy
volumes:
- /etc/comfycamp/config.local.toml:/usr/src/comfycamp/config.local.toml:ro
env:
RUST_LOG: warn
restart_policy: unless-stopped

View file

@ -1,9 +0,0 @@
PHX_HOST=comfycamp.space
DATABASE_URL=postgres://{{ postgresql_user }}:{{ postgresql_password }}@postgresql:5432/comfycamp
SECRET_KEY_BASE={{ secret_key_base }}
SMTP_RELAY=comfycamp.space
SMTP_FROM=comfycamp@comfycamp.space
SMTP_USERNAME=comfycamp@comfycamp.space
SMTP_PASSWORD={{ smtp_password }}
SMTP_PORT=587
JWT_SECRET={{ jwt_secret }}

View file

@ -0,0 +1,9 @@
url = "https://comfycamp.space"
[database]
url = "{{ database_url }}"
[openid]
discovery_url = "{{ openid_discovery_url }}"
client_id = "{{ openid_client_id }}"
client_secret = "{{ openid_client_secret }}"

View file

@ -1,5 +0,0 @@
postgresql_user: comfycamp
postgresql_password:
smtp_password:
jwt_secret:
secret_key_base:

View file

@ -6,6 +6,12 @@
loop:
- jellyfin-cache
- jellyfin-config
- name: Copy logging config
become: true
ansible.builtin.template:
src: logging.json.j2
dest: /var/lib/docker/volumes/jellyfin-config/_data/config/logging.json
mode: "0644"
- name: Run jellyfin
become: true
community.docker.docker_container:

View file

@ -0,0 +1,21 @@
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Jellyfin.Api.Controllers.UniversalAudioController": "Warning"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{ThreadId}] {SourceContext}: {Message:lj}{NewLine}{Exception}"
}
}
],
"Enrich": [ "FromLogContext", "WithThreadId" ]
}
}

View file

@ -1,213 +1,212 @@
$ANSIBLE_VAULT;1.1;AES256
37653738373233376237353836326534666561343865386464383338353665366536313032636436
3630633233333562363561366636343132313366663337330a636233323765373037353237303566
35613165346265666330653435663763303364633164313536613364633261373965343032616136
3732346366336632660a643565653261303163396137656264666462663432373837616433326165
31356631626434626332363966626331326664356234326131636561313631363236393432303834
35343138353738366432376639313662383338343632316363333562306164303539633730393966
64326635303364626137306361663564376531616466323536646539373438316332303933643732
61313336613033363931326562633462633534663164303933653331663231656663393532666231
61316338663631613039613838666435633036613966316235346434626530386362353564343332
33356235353433366437633066653363623763653231666435303662636435303033363337633265
34393539613063326536633630646366346138306431306465363035386232313937373166353935
37333766313065366233633937373431333061326333373430353738383465646337633633306338
64623438326665313431303165353335616266383235653731636531383436383033313133616230
33623534656661383161613734303230386636663662386532383562393461663762373331663766
39616230636135383031653035333434613963316136343062363363613138393266383539616631
35333834366331653539323338633231336433656262343438313438303438613739323230613733
32303063303561363263356461313735346330333637383665633163353366373832636535636133
66616635663533303335656237613962383663623536663331633666383063316535393832366161
62343963663564363530383335636565613564366332366563306539636339376465363038313361
38333163373837363639313663313339393531373033366536636263663238323564396631373865
62386533336638616337656662363133346436613939656532303930336530343337636436313630
64353832656664393030363432333139353439636331646437616663383830663534383461643334
64353030336330636165343431643961616638363563636465633238303233666237343230663765
66313666323332306431366238326330633534353664326131376438613237653364653735643838
37333831633036303136663731643939656561616531363033343261633830626339396536313466
34646433333936633132663232373539326335653966643764343434363438376265643635313737
66316334666465313465373238383463323561363334396439613639346337306639666133363666
32613830383262343964346535333465353031626431383733353763303162303865643430653239
35656635666132373863653163323632393234313435636464326334353935336566346661653033
39306563363065303165373732636132343339663865663361623366666163386463636339666633
36383836346565383561303131306437333638386530626265383265636462386338343335303834
61313430386636626234643630346663326262653866333963633234383566646565326662336163
38616563363035376562346536326363663064306338346336653130346366613532336561336234
34393930303661336665326634313230313439323431353535666130336565623264643466616630
34373637346636653565646664633739653837323130653731356565616265336438366663313561
65326339373332343232373534646231623461343065303261373430373636356263313638333437
62643662376132393334373934663033363330316137616365326136336134646334386161306131
36613065316433363561356661353733393766373561666532303638353466643734323261353139
35623738363938303461623964393830616666616562326235643534313937663331633263336535
32356536393636396331656335633261666438633333326238336661626232633635333131303264
66646633386534663365616638343934636537313232303236353534353331393962343037323664
39623063333932616531343565386233353436356436363866313262343932386533356361663462
62623939373962646434356439656165353266353663636233356338323865333361643166326165
35663961356564646232356466353563343832396537366635376435656332656539303833646362
32663761653562323632373665303133353938663563643463313536383962663936313433356439
30636530336430633532626264653466343137356633313464613936323633396232323463646231
30653162653533336161356435316435336435616365333432333334376536626261396530373034
66663231663765323836316234633734643131393462663463633266383361663635633663313364
33316163336539336561663765393431306139623662313631383963666433386466633261666364
63396232666461663466623035316337646161303638373265663036323933376239636137383764
33633531386333346263353564613638343030326436313966356161643334633965343537643735
65633461633436643039336166613766353162343862616436383330656536623762373364623230
35333631396662323261646635356434396131633964663831336364343962383539366264333133
65396437376561613566323839353331333933656139616336316534633966623931663736393130
31623961326130613438633231626238373532633531306361306363353436613163326565356437
30306461646232376264616463313235303738653766313233346465383633616330303538613432
65336365343038653435623233666334366363353535663662373934303536373034666537616537
37646534373361633332366337313630663539626339643337316162323736323766663738626438
32653533633931333461353935343238366630613866616565333938663234393230376638333738
37656239373131383434323333623466396237666237306532346464653237313635623738336437
31326138646265643131616366663166616332616639383339353131323262353363643562353634
37326438623962333465633431373438346538346336356535363233376636343065313930346339
31653337613533346636626463333234623562306331633865343963393132346430313437623363
65316633643739366532366635636466646231373334393965316565383764366531613363316430
37623834343963616363656139623837333437633263333537373165366464323532303135326266
34623937666630626637356630353139613736326438346233316562353831616137393334303161
63633362353036373137366337616133363230616534353639323332313339613864633230623238
39336636616661333038326136636662653730636536333966323938656338623437393238363833
64383433343934636330623363363766303336313262323066353436346235626632383239316361
35353030646265336232346530373030643731313436373837663031343036363135363330633137
31643533316263653631373964326262666163643633643662383036616161653766623339396362
61383135366666376665313634633534666134323762666438373439393565303135333366303538
31663461343031316330623334366435393166363634383239366561663762333562323966373563
32353961343361666661306539323132653535346466633135303364656334353865336636616535
33643736313438353765633266373964663739656336363838393039646565643738323663313237
62396166373733326266363264613165313665656665386431346566616133313966356566356261
38363764653665636566633762316133353833626133646133313834376134343039316464336463
31393932326538366533653133633961306434346335366663373534386233343532363866376364
32306233643031633735343232396634376339376561393631666361396337326361313564646337
33626139663935313434393030376539643439393331643832663539336465666632636566343432
61623865356631346333613030383935366663373764333961333639626635383038376662346430
37326464333835643938626434666162376165393837396264393533383765386631323632383939
34323431323134366561343063346131383664663231303232356363313434663738373135343733
37313633303862383663666665396262303232653536396236303036643736323131333939656231
66643464623661333233396630353938306366613134363666326163386366383463636263656630
37303232663161396533633535363535633330633335366634303964616138643062373162623731
62363361383461633934393430613664316437626565626433323637646133643632616463383433
31396136323833343134623634663335623134643765636237393631613464383635363135613530
35653030623565373264316434386138373931656262633231353135633034376163386662343330
38633232356564643733346633313631313662353137623137323931643466333462353639623933
62653261323533306332626263613763666134633134383935666637313237313530393033663266
39373237306465333761363361663436333932343164626264376365363231363963643332656632
61303932306139666363313739373764333435396234366465363563383831383933356664303166
32623763343866316135356439363139336464343263323863353866333038636564396265613235
61366536366164323432383830623064363036616363303861303538653730303539396336376563
35633964306637396365373730376338373933353934646133626230363837336163306636336131
65353630333633306236666639643035366432356363313064386266313936303163636366373733
35343163353832623239633530316232343864313366383235303830333661623436616164333866
32633463306333626337366137663263613739376364316661306662613862346430386332636231
66373336643531306266343061333637373263636661656465656165366633386163663432623665
39616362613931623264653430646563633334356536626131333539633164393066333631303864
31633731613332393462353538626464363739643265653332386630343132613862636637366336
62633562363531303737303665343234663565303737366164386431303736306238633963643662
62613935653864353937383764356364343263656635656666626236316232383665613865636138
33633435373133333264386233643734386438623036643361663530383063313539393037663039
33626564376165343339333361316565633764656334383730383564613565653831336262303737
35656162306438626462383165363863643265326538303762326662363335623566636435323166
35353164656136643538396434323933626334303764383130303065383461373631393138633938
33633864663738643031316563633035653931643031613064343633383036333934663938316538
39633763646138343162626436616532316566663931373264336334376234663966313763303637
32643766653736346638333066366165613237343337343966303833626462653031616138353266
33393262646138346564366538316565626561376537636134353263306337316438333965633465
34633664613539343863653630343738323939633062316231396431326335353734366535376263
64316161383163356436373632636365626663356337633234373361396466643965336239646639
37636266316133323732393335636330616130396161336639316434316662626366346162643337
33333634643030623934363130366362646161396466303731663134623164356436313334373834
34356136383137333462633837313963313034633365373036396639396635643261356339636330
36633961336437396332346163346665613861363130356665666333393038396361346532393738
33336631373465333365623032663734653736303536333666343536623336383264363631376534
30656135616134356161353830306130316135373132633233383336323164373039333864306337
65616238383534636334623663613831613334663663613761313161356136646334356439623737
33666564623036666235653964636461343434616134353462333566666334313161383136306334
30366234653061326435343431623434386537353062666339386433633761623561373061636264
64343734393637346437383538333766653563383337653763373763613035633231323361376461
62326562383162303939313933386631633530316531323637633036393462633731366537336239
33646135643538376266383831656137373634663062643363633463323134633831636431656466
37373838343030336330386561653962323137323133326239333361393433336538383636633837
65306561336434386236636139613366366566303466373463333939323161663539356131633735
66663162633730663263326639336137626230386537353461333762633330616263363764376137
64303630396436623431396132613562646265643464393835363132646365333263363764393866
66353162393964356533643531373766313963613161383234613265336533393335646232333466
34306437386230373366643864356562333737316633366564393564633232353466333930623239
32313063323865306631663361326265353638346365343433303436333639393434303863313263
34363832306238343938346236363431626439636161373361353964353437653062373932313539
66313632366439623439643931333365646261393163393765316263316436386338326161646364
64626535396664383630323639353538336134366465303666626631616266363162336637373536
30353637336532383863653831336666646437376464393531333036313238613937666661663532
38356331306534643936363964343638363566393361653864396430383531333563643436343161
31333936653632643066333030323265646436653037633937623937636536363035626136373963
66366265616639623130616662313332346536313030353433353935373435653634666233323030
35633365356535363837383832656463303336666662353731343032313339623930383830653732
66383164663634386237373236363832646239656232333062626464316236643934653037316237
65633531363462653630386364373364336331613536643734663733633130363238343663613339
61636466333830313964336666343735303939333462333635386665626333363266343464623735
32393739323138306639633832313662346138316237643830653936653932366230323038633839
66376463653633386330386162376334303830643165333833653439633438313534356333633736
66313330633938663039656638396631616332666266653232323133656365316131323234333062
61393663323733656236333532316665663562663136633038633739343663646664396234386339
35373362333166343133363061323166373836373438643165343861386263323637363630393737
63636363353330386563323766323731656636646436333133656262383935356432306331663265
65383163346538393733376430386164326536363236383839343537316665363665313930356364
62616165356635356232633337373032646136616165623763313530383137666162623364356262
64353364356630623532316237376333383864653163666333343134613537336338353838353263
38363633343463643932663666383034356561623830366436396534353030633130656663313164
66636134353530633237316633383462353130653963346165646431653563316333386430643365
61633236303337663534363430393864336130373534666539643130376439346230316335373239
63613439623431346166366664323365643862353431363436656336393733316434346335626530
37623561376361333863313537326534663665313931316438623261313063623561623034366331
65333432396265663464383131396232326336323163356431393863306639313237333931363362
33323137636633636133613361396361663430633465663638363930316134623261323630626566
37366333333237386535623261336530666664373630373965646136396234343464353036386262
66636463643034363764666462356335633461393762303832303130376131623639363234336466
38323730363866353166623936393862373363646361346135393063613563306533383237613233
35343537346363303433306537313766363635633164383566343765323863333863393730333263
39343763346631353032656663396238653438643264346536666462663937643436386565376331
32356462333530306464353038336264396337343639643236663330316638313263613536333337
61386431373663646231336562343135303232616535666163373664363232376432313535343138
61306330333330383139336435376561356461636662306137303938653739333131636530666632
32393630386165366365653830346562663962313665356235323531616562306430663930313136
30633234383238393332383862303066336230346535383633656334376638313766653466666466
35336265643166363138373536393031643833643564333265303766613035343763363364393366
33323839383263613338613862346630373561653033633439633864643566353334336666326334
39646464363564633761616265333030376130363365626238333966653836376139623639336162
65356237623137383366373865313135333737393531613363636666333639636335336636323334
31306437653032656236376161653664613564616236383935323432383631356464343462353564
63386166383462653365363962643837326638336361636533643233656164313139363830393336
33303332643536623931396562356133643435343238383032633463616330313661353935303130
36386536386533333665663038643131343165623465343536323634323433363363396665653765
34313830333163313964346434663731613461666563396262383234346131316531333130653438
32313032306164653739656664343861396430633635333735386666653833333033373038646539
34613731383231373531363237323663333635636534393135396438306661363438306332383961
30636636666164313733373639306663383734393733303166363332363234643634323464646136
62323134356462333831323336346266616339656361316433656464386636353962386637316631
63323236316232396164323435333665313962303139326338656266333766316231303031633964
66383734663537613238303764333165333065313165656266393666663937626539393861666561
39383233663039356639643437656531333361346566663732386135356234653532393363303965
63623235343536313466323065343432383861356230373630613730616436303438353765343832
65336230346131383131373466393932383363333063303234326333623331656337613530373637
32643032636434353538626265343036653065386233663933346261663564636138306231626636
31646136393636346434636636653230653230363035353133663734336133336436643061373261
32346537613733636137306539303432333833633134326539323031653132343731613032396133
30306264653132366633326439653635336661326665333332323331373763653862633536373631
39663831396232373738616562623737633038636432613333326537336564633631346566656138
66333664646631663731666439366264373162653532313739663131366339356532336663313738
36336533616630303564393566653735623432396637656138316366333163383730386433383962
61303337626165663033383964613331353163333465613034353238626134323239633363363935
63336330636661396137316338653338643137646663646339313863653666316639316462306163
65333939333033376161393934343333653335303937663661353765306336333730363361383036
39373433353764373838616232393336313432643461313332633135636430633238653666353635
66663630323365353432353031383065656339646432353265666562643761303765666234343634
30323861373237346433373834326530323364363634303839623961346431303338306134666535
63656663383839613562663765326530383439346661373465623234303063383239386535616265
64623661306239306461333463306139303734636239366135633364323436353530303634326138
35623737333731643032643632633265343934343961663963343162636339663461363561646630
62386463383530316662663562616433666262653861396335396233636637353463316262343431
64326532326532303833643939323364306261653165633463343265383734343663633333636162
61303038336533613566333634386333303739316464333830366366653139323739303062656464
66323337383662333261616462656237626235303033343934363633633435643032666433643138
38613935356261396139353564633861333666353538303363666664303937666531363637383636
31636563643562373863353363343831333039376139333262613334626435633035646437316363
64346632656232363161623835393263303964343366353438633561623031646363353130643866
65623230613331346330
31376237396661663235386439336462393237613233383364393430626366363634376435333437
3836363266326339643761623033346263326130303966390a323566323263376563313265383234
38363432636532303966663435613436343530353435643731356664613531643863623631366232
3634663239393234380a303132616361623937303564373037386231393339396661633732366264
64333930333438363532306331633032643034363563306461373230376634343264333835353266
39363662303639646639353730356135376631343036356665353863306539663465613264656432
63383364356562396231633233323465333864376630396363316235363063383033333339616131
63376466353136306532396635393533303934306436393861373664363033613137373036356631
62616236633938363231656362316663396563636536353032633230656130393833353866326263
38303663316139663330643630373765356165613837303566326430333864313931333235376233
31333634323738336330373332303734313238643662333434643731626234616238306132306639
31386337633962373162336435336630373063356635656138396166633334383439343564376262
65363265663033326565343030313439613866376531626337653439356366346637663035396161
34323237316439666562363436303539353333396431656439623431353435363833393138356162
30613263623266653761323233326361633834366230393030623633636437393365666261323164
30323065633563626462663436316138666439353161386366383331633038366661653534383766
31613165633732316131643934623733343234353963353031616430396536623235623236626231
66383532646430666264313266646639316538396331646466626530306433666130313332633964
37663864326564373837666532376665386264646438663433363532623062396630646464346536
62343665373638333430386663313434653466666661303337316161313462343430306537626632
64333134666434366161663434363938346137313061663034396438323138643836643931333163
38646363346462646131366266613862326366623062393063343864373532653366313561663939
34376134636662303233393736333765333862623461316230336333386664613232653964646266
62623264363733656331316264353736613331373339373833346261316264323561376464313062
35366564323561623534633264363831343331343262306638643363363663373165623265376665
30323733663863383731336266376332376161326531306466666264343831393435366539353961
65353635353936373662353265366662386564386161373633643361393230303437376433633365
63616338376561363736326163356166353962323737656234313136613238633634646232656333
38383161653035323764316261313361333734633761373932636338366135653439383834326531
31386435633761323862323037323038316533613135653465323330336233653736636436386461
35616436306538396163663637356266633530393032393366383831396532326531663537306133
61663138313163313038313365646564623638643033613134313839393330366436653462323666
38623363363965363135643164323266323861346665646166336131336264346431303937333839
37346535353166393361323537636632336361306463613566623565663766656463393431646336
31363638623664626332323239383465663931656235353830653332316136306537613733343134
64356134363331376135666135646230663030353239306164366366356362326361393938363566
31633663656362643165336236623737623063646664316436373464643834616330663730333761
63373561393664313138623465303930343136306633656332373830396262353839666564643931
32613634636335636535396431363663366262626666396461393035653437396130623764343333
31366233323136333036643833326237616561623166633663376435383133656332363930646639
33653431346131616439313364396431616131393439613933626131383833313365373136313439
38313462386139616637633232363834333237313366343066343539366166383366393462643561
33636361613832336363653966633264313638656266626635646464373832663461383631363164
34386163376130633864383433386265363637313266363238326533383033613061653036666566
31643130303830643632313062653034386564316163303937336634643336323131643361373832
34333334633833376238353932343836646539643632363266326332626130393133623266643138
34633131393530373361613431393265303034653134333833363961336663323936613062613962
39343630323263656335353664323236623734356632623338633336383634373766633936306362
66303832383061623039303735383465633763663666316632623664633863326439316135663133
34626661353862353266363534373533356563393362323137303138663232396436393736316562
39373466316533626130396637373364363031396539323863393830376162393063303264393433
36393037616133366336373138653739353234343935656562353237363261363039636561303666
31666665326466663830623835626466613036333862376361333030306435653234346339343038
61666434356566396464363031653764653230643362643466363032316530366431646633336135
31623238623531623466373038353563386331356662623630643633386339633462383734386463
39653933306365306131636561306333633961623136363163303835663937653930633939323033
34656436653035666163373865646264643038393963306434616335353332353835653631643932
33643963386330663639333037313238653634613130313434346164373565353465633837396565
65356636663363383339346139646530313134623638646330303063343439666432373935303439
32393036356339653232653865653761346338643731653434646661363966643435376362396461
63373233663534623364323934636466373039323765396530623939633135653832633862656531
37616634636266613432313263653932653964373430363166613961303933666536303665386439
36616461633937303264366262353930626332313133323438633630346332396233336466643334
66356161396561333634646661363166633033383635303730616531316434613933316639353432
61636430656266376464396633346533373265353564623464346166383266353164333463313635
37613964623764663134616138636134646665626135383736616361346564353038393864616233
65353336663938666336313066333639336561326161643834356662386632343235396339376537
66326462313332646633653830643535336239313235643162326562653963323732303533353966
65326632623762336336633236633639356662353738363435363439623939643064343932313762
32663066653164626639623563646262333436366661636263633463356662393031643832613639
35626635383438333834336430346436303030363031613937366365386666306137643033653134
32363339663937363132306661613935326563653461616131353031663231333238633265636436
66616337323335316330366563346464306662313035356466616132656663643361326236663533
38303439646163323061656338653863626131313137396336373034343930613962663137383164
66613362653433303539363533316263316632313538316364643263303533353738643031393239
36316664633033353764393461383931393362616137326134363837313664623063636430323231
38393135366133616534323166653565303863313762396131333065626565663666663662643730
66643631633663343362326237646337346235343136373138396434383961363663313461396361
31396433386365363532393633336132616433633666646535366630353964343437623662653562
62643830373736386535643762316663336163303937656531383166633430643035313939356333
63636534303033343165633865326132306539383462303063643762626261376565373735656562
61396337313266323831343431313163653637653061323838316362323739653131353437353134
66356236643665643537386664363733643938613964613932323835356364316631336331393534
64396164386433396465653234373031363138313439613133323235663663353934626430393166
30373262303632646132666261303730653566656632373262386136386364323065656266643561
36343933643638353332373766656130343836323062663333646138346137363362346339323936
38393739363063316164386462353663343562653761323738333834356636313932633861656535
32303133353564663238363030346531643362343763613634313132653539343030363535343438
64636236393139346239353065366531623762393566363434343634376237666333336566343038
36666234623530386465343130316236656361663466333361643033386238396130653664396134
35656333313634366265616131323566613163333463326364346331316535363365333662336438
62303863623066323539653662386163646239623766303030613333653863303639373062656434
61316533343433646333323664653762333139633466626533626539383532663832663965383661
63373334663439363165376438343463653664326138383839653865656138613466396462373733
64666361393433633866666665396539356538646130383763663034336138336231356464613238
66366664383036363532303137333664336336383561306536313431643039333835643334346138
64366163386538313366383131613332376166363565613464363131373466373363363936343661
39663331323832616632383866316263396331336336366563633636343934323361613866373334
30376631623137663639386630383238643561633330363035316631643234316634663538383732
38656333616634313431326133336563626664643237643766313563343133306338633461393733
38343030386130646139363837396639396665646533373035333237633532353464333763616430
65383236616534373932663934366464323935626663376265613063663362313932646638323634
64623164393235386264666363386437323166326234303261643361636534383831316234646232
39323761393038656338653461313462346266653434663763613636643736346233393234643463
64376131316236323564666238616535623361393064616436663538336430616332343932316530
65626631616562303933663236646536653363613832343431346631663538613938343533623961
37316234376536376561643566663434623836643337343765633765373361656562323863303465
66633634636263623262396563373931356266653938356337313636623861363664633262633934
62303238653138653063653134333537306235663263383234663637636565366637363965393631
65656635386536643765656562386139663931653664386230316531346466393830646563663764
35303834623131386661323166336463653835666564386166303664393831373736333162363535
33373632613865393064623135666564633665666663656163303832613761336234316331653663
64353461303838316166336530363665346461323163346130393061316461353962613239376336
63313932653366613231643937353939326236333231363238633636386239653066396630633331
34356139373338643365613766323334353361376163323733656661323634656439316435643434
65383365336364313139393262363132373532313730353639333734373039343838343830373363
35653864363265363938373261396139363166356336393764663633376439623838643138363363
39383833643066333233373635646363366266353832333934396639336662613532363765343937
61613365613333346632303033383166393561663166313830396135663565323636333530363563
39356362313161613863656166316266353438646166333166363265383733373066383465656463
38353131343737306234346333616162333064353033376232356139383035333931363966333331
32633036333566663233613134343766383534653239323736623230653264643734633030616433
31316365663639666462383738303661303730313833346263353263323037366262303739636564
64313931636535313738383537366664323934393437393930356430663161663532666434653330
37313132393234373039383933623564313166343632373364656538313764646661633763653063
35383336376639396361383961356266333363383363353939383863646333643732613230643733
38613064376365343930366263663065666262323538656333663333383763306631393863616436
66336637386135663832656330396634383331323036343633636338303833366431343538396637
35363061326565353261353635373165653936366337646433626238613634633131623561616233
37383566353463376132366137643236613437326334333536666630656437336130363037353432
38366266376234343761313032653632333861346333323530643530393836316437336366643537
63653661386461636632643639303665396131616366323530316462643334613838636564366661
32366634646433376565386263306231643665376335613334653638313366336265626339333661
62626366383138643261343332393261653030653638376165303337343462373462636332393139
61633935666135656631346331646439623530626263326365333731313034333937366234363865
62336664333564616636323662616664356638623063363731383863376233663435356437366535
65663963616262346536333831303665313538353764663932316163373733643366363239306537
34303632653563373763626433316438343161336666663631363637353634633431363738336232
32346236663465373233623737303732323230356534343931373439376230616536326432316634
37646235653438366431646232313164626161656530363666396162636531323433633037313130
37316337383065343561646666633631343336333135353966393463653739386165383836656264
31653232343433663137313065663035353565633632313565393864636266323932313032373932
30616466386663613838396332303536303762623335613665653539653666323537386563303062
34353966646233393339333139323465393764396630343439363339643063386638313862643937
37303438306438313138656539393732376636323236333339393966336163313530623638613161
36356464623537343731373037313566393066356161383130343633393266393963396135346132
37393334633638373831313536346235353131333835323662353036626362386331386439383035
33396537333333313638663138653930396564303539373766616430326364383833663033346639
66393862386261613461343231616135643932393738316231653837363864343864313364353033
36343461383934313339333864646631326161313530306330386338663762396330366130643835
62313165633165616331383237343438663366343936646437633464636438366135306635633332
64353761616537383537663630373430666161356563303930396363656262356436633035666135
64323061346137613232353861386432663261663533336635386438363063663663383834626636
64303930366564303738626165346135613536363164633931343064346532643161313833356262
34303530383536313331333139376464303934383135336562376437363466616436383963356537
37386262316166633139633463346165323639313331353037323637613565346232383838323363
61653963633232373737666663316464623234383064653366393461393239623934616332636230
61623232616138383233343932666565626566383736633038343435386162633434613039623836
34353963393530366665653137333835383365393831646662393633383562353232643138353536
34336434346539343033333865316339326661643666383137363939343566326161353936303430
35653732333638373532623231366230666164663465633863613133316434613635313262393033
31383934643431303032346665626663633632623430663436343833336563393336336232303735
61663834666366356436346337306436666239323337623434316331383339323839373234616235
35373634653962663632383137366630616132633364313063613363666461626432646534666239
34663836616363396230333832343563616336313235343931636438326134363066616439333864
64366562383365663230316239626631633137316330633061386130623837353032623666616233
63396137623262383236383034353265336263626430636131646438633164393732363336343331
31616663383863643534663936356535636465313131373362386431396330346366616431656661
36356463393762623866643234333533353334653563653233616635356261353237323564386239
32613633343432633033613231343335393134306466623133636139393237303035653963383532
65316230356461326132373434653064336536333531386338376430646231386165313930346166
66336536373738353235653437363430333063666666393538386661393430373137613035663034
30373663373839353461383932643464613736303036333231633465346231376134616462393463
31643665643664386632383530666137646261383361376361363239343637616462633233333465
66303434653264333431646661666439633164346365666436643862653766643736353837613239
62613265356432383036666662373737323338623635346361346632343332623530376466313631
32303965643033653833396334646264643932323663333563313038303864333235303362393838
30623663306138333536356261366331313632343561613466313261343561666132346135356131
36653765316263333064373165613537396530386530366434363531653563363862303230343130
63326163343466373466346237646235396134303133656163343132393466663364633834633539
35616164373935366161366639666462313866383832396264373161333066356332313434386236
38623931633532653232366563333461646230363732343261663965653366643132376130386333
38616433356532326635316262663732353363386232393036333739653338306464373065336536
65386139303539333939373435353563376435366332313934313331356433343132393530316163
33343636383732396635366662383538663337393463636430363732386639373037623738336366
35363031383937343434613936656666363566373733383038666631363136303132653832623939
61336239613664636631636163386636613133386138393561363938343964666331646139303962
39643765336439383965376235333764343939653164636331376436333437363839393230333536
36633935386363326364313061336464323030306137613664643063653838636661663265393634
33613332336462393134326233363837373866376130383339326439633637316132346164343731
34663162393037333430343766643463303032313839353330663134363362653936653664626637
64343538366135643466633238343634396630363036306265363339333363656136376634636139
37316461383864623261646466333938643536663963616433613930393531336431626630653964
64366634663934643561326631333662353938393339613532373162393230626665613034346365
38303738346662333634326661343666316466626235326266623131663264356438663966636339
39616265333639393737613861353239363133343466346432643465376230656238323365643537
34663262386433356436633233653364636365663036393437653238616566333736396266333333
31636139636138653934373532623331333030396233663132633435373032353264343466313033
31663130646336303831653330396630636335383932613165373738376230363031303537646239
31663430333234646465323131643839393337653836643837653431653034386636336261646662
63393530613166386364393238356362386231316631663037376166336136356235313666303266
63366234316331666664376662373439393563646134396332613436323636333635333739366231
34356132653030613132313030383366663132343631376536373434353963366138643264626534
62653931386465396135383337383635333336376462643931626535336432366539323964363838
63656535333062343766366663343535656665313730356562336234336163616633616539316663
39626662323338633264316134303639353937383965396434323462626632313536336264396139
63326162316331393036313562613439363631636530646664353933326130643537663133383432
34313432346334346336623831383834633064623036386262356563636634656330373964626165
63653937323532333337353635343864343534613333343462313733623735346237653930323237
62373330396433373966373961343832353739333835366333656237303562333663373233343233
643332613538333230356462366138653138