Run prosody (xmpp)
This commit is contained in:
parent
4cbb180ebe
commit
eaf661cda8
8 changed files with 480 additions and 195 deletions
13
prosody.yml
Normal file
13
prosody.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
- hosts: webservers
|
||||||
|
roles:
|
||||||
|
- name: prosody
|
||||||
|
postgresql_password: "{{ postgresql_users.prosody }}"
|
||||||
|
virtual_host: xmpp.comfycamp.space
|
||||||
|
muc_domain: conference.xmpp.comfycamp.space
|
||||||
|
http_file_share_domain: upload.xmpp.comfycamp.space
|
||||||
|
tls_cert_path: /etc/letsencrypt/live/comfycamp.space/fullchain.pem
|
||||||
|
tls_key_path: /etc/letsencrypt/live/comfycamp.space/privkey.pem
|
||||||
|
ldap_password: "{{ ldap_password }}"
|
||||||
|
turn_external_host: "turn.comfycamp.space"
|
||||||
|
turn_external_secret: "{{ coturn_static_auth_secret }}"
|
37
roles/prosody/docker/Dockerfile
Normal file
37
roles/prosody/docker/Dockerfile
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
MAINTAINER Prosody Developers <developers@prosody.im>
|
||||||
|
|
||||||
|
ARG PROSODY_PACKAGE=prosody-0.12
|
||||||
|
ARG LUA_PACKAGE=lua5.3
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
|
extrepo tini \
|
||||||
|
&& extrepo enable prosody \
|
||||||
|
&& apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
|
${PROSODY_PACKAGE} \
|
||||||
|
${LUA_PACKAGE} \
|
||||||
|
lua-unbound \
|
||||||
|
lua-sec \
|
||||||
|
lua-readline \
|
||||||
|
lua-dbi-sqlite3 \
|
||||||
|
lua-dbi-postgresql \
|
||||||
|
lua-dbi-mysql \
|
||||||
|
lua-ldap \
|
||||||
|
luarocks \
|
||||||
|
lib${LUA_PACKAGE}-dev \
|
||||||
|
&& update-alternatives --set lua-interpreter /usr/bin/${LUA_PACKAGE} \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN mkdir -p /etc/prosody/conf.d /var/run/prosody \
|
||||||
|
&& chown prosody:prosody /etc/prosody/conf.d /var/run/prosody
|
||||||
|
|
||||||
|
COPY ./entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod 755 /entrypoint.sh
|
||||||
|
ENTRYPOINT ["/usr/bin/tini", "--", "/entrypoint.sh"]
|
||||||
|
|
||||||
|
EXPOSE 80 443 5222 5269 5347 5280 5281
|
||||||
|
ENV __FLUSH_LOG yes
|
||||||
|
CMD ["prosody", "-F"]
|
22
roles/prosody/docker/entrypoint.sh
Normal file
22
roles/prosody/docker/entrypoint.sh
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
set -e
|
||||||
|
|
||||||
|
data_dir_owner="$(stat -c %u "/var/lib/prosody/")"
|
||||||
|
if [[ "$(id -u prosody)" != "$data_dir_owner" ]]; then
|
||||||
|
# FIXME this fails if owned by root
|
||||||
|
usermod -u "$data_dir_owner" prosody
|
||||||
|
fi
|
||||||
|
if [[ "$(stat -c %u /var/run/prosody/)" != "$data_dir_owner" ]]; then
|
||||||
|
chown "$data_dir_owner" /var/run/prosody/
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$1" != "prosody" ]]; then
|
||||||
|
exec prosodyctl "$@"
|
||||||
|
exit 0;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$LOCAL" && "$PASSWORD" && "$DOMAIN" ]]; then
|
||||||
|
prosodyctl register "$LOCAL" "$DOMAIN" "$PASSWORD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec runuser -u prosody -- "$@"
|
31
roles/prosody/meta/argument_specs.yml
Normal file
31
roles/prosody/meta/argument_specs.yml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
argument_specs:
|
||||||
|
main:
|
||||||
|
options:
|
||||||
|
postgresql_password:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
virtual_host:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
muc_domain:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
http_file_share_domain:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
tls_cert_path:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
tls_key_path:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
ldap_password:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
turn_external_host:
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
turn_external_secret:
|
||||||
|
type: str
|
||||||
|
required: true
|
59
roles/prosody/tasks/main.yml
Normal file
59
roles/prosody/tasks/main.yml
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
- name: Create prosody volume
|
||||||
|
become: true
|
||||||
|
community.docker.docker_volume:
|
||||||
|
name: prosody
|
||||||
|
- name: Create prosody config dir
|
||||||
|
become: true
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/prosody
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
mode: "1700"
|
||||||
|
- name: Create prosody config dir
|
||||||
|
become: true
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/prosody/_data
|
||||||
|
state: directory
|
||||||
|
owner: "101"
|
||||||
|
mode: "1700"
|
||||||
|
- name: Copy prosody config
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: prosody.cfg.lua.j2
|
||||||
|
dest: /etc/prosody/_data/prosody.cfg.lua
|
||||||
|
owner: "101"
|
||||||
|
register: cfg
|
||||||
|
- name: Copy tls certificate
|
||||||
|
become: true
|
||||||
|
ansible.builtin.copy:
|
||||||
|
remote_src: true
|
||||||
|
src: "{{ tls_cert_path }}"
|
||||||
|
dest: /etc/prosody/_data/fullchain.pem
|
||||||
|
register: tls_cert_state
|
||||||
|
- name: Copy tls private key
|
||||||
|
become: true
|
||||||
|
ansible.builtin.copy:
|
||||||
|
remote_src: true
|
||||||
|
src: "{{ tls_key_path }}"
|
||||||
|
dest: /etc/prosody/_data/privkey.pem
|
||||||
|
register: tls_key_state
|
||||||
|
- name: Run prosody container
|
||||||
|
become: true
|
||||||
|
community.docker.docker_container:
|
||||||
|
name: prosody
|
||||||
|
image: git.comfycamp.space/lumin/prosody:v0.0.2
|
||||||
|
networks:
|
||||||
|
- name: postgresql
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
|
- "5222:5222"
|
||||||
|
- "5223:5223"
|
||||||
|
- "5269:5269"
|
||||||
|
- "5281:5281"
|
||||||
|
volumes:
|
||||||
|
- prosody:/var/lib/prosody
|
||||||
|
- /etc/prosody/_data:/etc/prosody:ro
|
||||||
|
- "{{ tls_cert_path }}:/etc/tls/fullchain.pem:ro"
|
||||||
|
- "{{ tls_key_path }}:/etc/tls/privkey.pem:ro"
|
||||||
|
recreate: "{{ cfg.changed or tls_cert_state.changed or tls_key_state.changed }}"
|
118
roles/prosody/templates/prosody.cfg.lua.j2
Normal file
118
roles/prosody/templates/prosody.cfg.lua.j2
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
admins = { "lumin@xmpp.comfycamp.space" }
|
||||||
|
|
||||||
|
ssl = { key = "/etc/prosody/privkey.pem", certificate = "/etc/prosody/fullchain.pem" }
|
||||||
|
|
||||||
|
external_addresses = { "62.16.41.235" }
|
||||||
|
|
||||||
|
modules_enabled = {
|
||||||
|
-- Generally required
|
||||||
|
"disco"; -- Service discovery
|
||||||
|
"roster"; -- Allow users to have a roster. Recommended ;)
|
||||||
|
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.
|
||||||
|
"tls"; -- Add support for secure TLS on c2s/s2s connections
|
||||||
|
|
||||||
|
-- Not essential, but recommended
|
||||||
|
"blocklist"; -- Allow users to block communications with other users
|
||||||
|
"bookmarks"; -- Synchronise the list of open rooms between clients
|
||||||
|
"carbons"; -- Keep multiple online clients in sync
|
||||||
|
"dialback"; -- Support for verifying remote servers using DNS
|
||||||
|
"limits"; -- Enable bandwidth limiting for XMPP connections
|
||||||
|
"pep"; -- Allow users to store public and private data in their account
|
||||||
|
"private"; -- Legacy account storage mechanism (XEP-0049)
|
||||||
|
"smacks"; -- Stream management and resumption (XEP-0198)
|
||||||
|
"vcard4"; -- User profiles (stored in PEP)
|
||||||
|
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard
|
||||||
|
|
||||||
|
-- Nice to have
|
||||||
|
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices
|
||||||
|
"invites"; -- Create and manage invites
|
||||||
|
"invites_adhoc"; -- Allow admins/users to create invitations via their client
|
||||||
|
"invites_register"; -- Allows invited users to create accounts
|
||||||
|
"ping"; -- Replies to XMPP pings with pongs
|
||||||
|
"register"; -- Allow users to register on this server using a client and change passwords
|
||||||
|
"time"; -- Let others know the time here on this server
|
||||||
|
"uptime"; -- Report how long server has been running
|
||||||
|
"version"; -- Replies to server version requests
|
||||||
|
"mam"; -- Store recent messages to allow multi-device synchronization
|
||||||
|
"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls
|
||||||
|
|
||||||
|
-- Admin interfaces
|
||||||
|
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
|
||||||
|
"admin_shell"; -- Allow secure administration via 'prosodyctl shell'
|
||||||
|
|
||||||
|
-- HTTP modules
|
||||||
|
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
|
||||||
|
"websocket"; -- XMPP over WebSockets
|
||||||
|
--"http_openmetrics"; -- for exposing metrics to stats collectors
|
||||||
|
|
||||||
|
-- Other specific functionality
|
||||||
|
"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)
|
||||||
|
"watchregistrations"; -- Alert admins of registrations
|
||||||
|
"server_contact_info"; -- Publish contact information for this service
|
||||||
|
--"announce"; -- Send announcement to all online users
|
||||||
|
--"groups"; -- Shared roster support
|
||||||
|
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
|
||||||
|
--"mimicking"; -- Prevent address spoofing
|
||||||
|
--"motd"; -- Send a message to users when they log in
|
||||||
|
--"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
|
||||||
|
--"tombstones"; -- Prevent registration of deleted accounts
|
||||||
|
--"welcome"; -- Welcome users who register accounts
|
||||||
|
|
||||||
|
-- Custom modules
|
||||||
|
"auth_ldap";
|
||||||
|
"cloud_notify"; -- XEP-0357; requires mod_smacks, mod_mam and mod_carbons
|
||||||
|
}
|
||||||
|
|
||||||
|
modules_disabled = {}
|
||||||
|
|
||||||
|
allow_registration = false
|
||||||
|
|
||||||
|
c2s_require_encryption = true
|
||||||
|
s2s_require_encryption = true
|
||||||
|
s2s_secure_auth = false
|
||||||
|
|
||||||
|
storage = "sql"
|
||||||
|
sql = {
|
||||||
|
driver = "PostgreSQL";
|
||||||
|
database = "{{ postgresql_database }}";
|
||||||
|
host = "{{ postgresql_host }}";
|
||||||
|
port = {{ postgresql_port }};
|
||||||
|
username = "{{ postgresql_username }}";
|
||||||
|
password = "{{ postgresql_password }}";
|
||||||
|
}
|
||||||
|
|
||||||
|
http_external_url = "https://xmpp.comfycamp.space/"
|
||||||
|
|
||||||
|
http_ports = { 5280 }
|
||||||
|
http_interfaces = { "*" }
|
||||||
|
|
||||||
|
https_ports = { 5281 }
|
||||||
|
https_interfaces = { "*" }
|
||||||
|
|
||||||
|
legacy_ssl_ports = { 5223 }
|
||||||
|
|
||||||
|
turn_external_host = "{{ turn_external_host }}"
|
||||||
|
turn_external_secret = "{{ turn_external_secret }}"
|
||||||
|
|
||||||
|
contact_info = {
|
||||||
|
admin = { "mailto:admin@comfycamp.space", "xmpp:lumin@xmpp.comfycamp.space" };
|
||||||
|
feedback = { "https://git.comfycamp.space/lumin/homelab" };
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualHost "{{ virtual_host }}"
|
||||||
|
authentication = "ldap"
|
||||||
|
ldap_server = "comfycamp.space:389"
|
||||||
|
ldap_base = "DC=ldap,DC=goauthentik,DC=io"
|
||||||
|
ldap_tls = false
|
||||||
|
ldap_rootdn = "cn=ldapservice,ou=users,dc=ldap,dc=goauthentik,dc=io"
|
||||||
|
ldap_password = "{{ ldap_password }}"
|
||||||
|
ldap_filter = "(&(objectclass=user)(cn=$user))"
|
||||||
|
|
||||||
|
Component "{{ muc_domain }}" "muc"
|
||||||
|
restrict_room_creation = "local"
|
||||||
|
modules_enabled = {
|
||||||
|
"vcard_muc"; -- XEP-0153
|
||||||
|
"muc_mam"; -- XEP-0313
|
||||||
|
}
|
||||||
|
|
||||||
|
Component "{{ http_file_share_domain }}" "http_file_share"
|
4
roles/prosody/vars/main.yml
Normal file
4
roles/prosody/vars/main.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
postgresql_host: postgresql
|
||||||
|
postgresql_username: prosody
|
||||||
|
postgresql_port: 5432
|
||||||
|
postgresql_database: prosody
|
391
vaulted_vars.yml
391
vaulted_vars.yml
|
@ -1,196 +1,197 @@
|
||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
31393432626564366537636630303233376637633566343064646666373635653833363364393635
|
35356639306530626432313537383935386465613461643534386137363939333462626136376463
|
||||||
3436623765376337636331653731656334323838663636620a383837383263666434613165373464
|
3837323437396233306565373362636534306462313031370a363235363539316532393033386530
|
||||||
31666565343263366132356334323033623338663563326161373962653032336631666632313861
|
64366132656633383330306161303739356536396166343262366633343931373461646234623432
|
||||||
3935396164666166330a333364323566653130363939626162616231383365613361366632313031
|
3337366138376631340a623964336565353330353065316435643939323165343362353933386230
|
||||||
61383535386463356665653231353661336462613361656666663161383363666236613963303330
|
62343764356539383434626165626561613334633661656566366666383732376139643565616332
|
||||||
66623962396566626366386630633665326563643135633762373638346332363339353036323963
|
33653265623935383735646535393665626561356433626461373830313237306264313031623030
|
||||||
34646330626539313066316464343161326632396530633639656433303435663230326238303033
|
36366362396664346338313233616566653338323561383037663466316562626461373138663464
|
||||||
32666535353139646131653933313664333039663736386662623238366430303236613635323661
|
30333965626362653938383965343830353337303661666266653462313938343634646532343263
|
||||||
39323934343931666661333662383262646231313461383762316536653133323464643331373133
|
39383831353039616564336230396563623461353539663864323936643464323237333730643236
|
||||||
32666663656263613161376534663165383535613365373630656265653661333564663636313131
|
39643032623064353663633936646361363638363031363963316662663162306632316532323561
|
||||||
31343661613237366131333339613530393438666230383031343537353934336532323036373130
|
34373539376130656565343934316235376264653636336430363238383638323538346332383134
|
||||||
62363366633335326566303437303938373637653639333964666238336139623935613936666435
|
35346236633237353239613235376563393334633765653063306465343465633931376434636239
|
||||||
65323435653365666135643737333666356236336533326262633437306364313763366562313830
|
39373435636536353530393936636633376664326239303131336261613832653839633030326433
|
||||||
39663331323433356231326135343761626139653763336332636432386436636237336538303432
|
30623930363566383330386339383839393866643738333835343964333731356264393730613930
|
||||||
66353139363839373539313331346130313237376131643139306633353132653635663266653838
|
33376263313631326161613864663539643061363361663062363364363434306466373437313662
|
||||||
32363737306363323664656532613231396438373835333264366231366138626432653136626137
|
37613537393164623432323364326166396165346136336238306461653034653833363563363162
|
||||||
61363935383330623636383732653530626233336234353731353964623834663166613135386234
|
36653163306433323233346131663439383666623433373265346337633064656461386233663731
|
||||||
35303236633030306532373064666465373565663765613730636565633261663761383430303731
|
31333735646333633266303330366566636433626236376664656565643561656631376137333936
|
||||||
65346336326237393362313637636439663763616566323830643834353330393864643137363766
|
66623661313165303638656635393230336362656563313537373065316530336536373532326262
|
||||||
39666639623632663763353236386363616432616364383937633738613633663335613965303138
|
63396237386331626330343463663939303734313361633139383866313231386437383336353730
|
||||||
32353232343839653362326636373836306465396432636364373139363831623763653763353837
|
30623766653465313333353236303138613035643863396364653538386234616237383239343231
|
||||||
61363138653334626632373961343038646435373030613462636138363139333737623336313561
|
32663966643961663162356566366331643766346431323965613931626161363433306664383466
|
||||||
62346437303361363366386233376561643736653436373566376532663265326431343566343432
|
38653266613636346461643332353035343636393839653765376562323938346562363735616533
|
||||||
65363330326433376335373732346366633162623735306233376533613432363566343036333933
|
39636563626239393165666664353936663938316437656463363933313563636265613734346537
|
||||||
61326232663261326132643030623033396364623530643561386565383836386335386666633937
|
38666136643730663964613836346636336433366365383034356562366630336639306435633731
|
||||||
35383064373638306338393733613130323364616632383663376632323166616233326530636539
|
37313464623264663132643232653136356230656164373566323635613233306333356435306664
|
||||||
38343065336639356464336239356334623132323135646438616636373162306462393563623737
|
64613063373938663461653038643532653133323833633632333263613232626339336333623831
|
||||||
63633530623362306362613334613731313132643338326334646265303836393131343234323635
|
64613163316465613439633534313431653665366135316636633035353534636364383235306561
|
||||||
35373261393363653364626136396131633832643866373936393636623734663536636132643733
|
37663366643832656530326462393765653031646435393331656432353039646339626136333335
|
||||||
63363566366565343836343137666338343937373463356331663962336539356437393833333134
|
32373437666137343433663132396666616264363233313334336530663534663031613034613033
|
||||||
37643535356632656636666536313139396665336234366239306436383731633731346564363934
|
34643834343437336538643139366634376565663633623365633566643561396465623432613537
|
||||||
38313833663266356632336232396239646235626236356434353532366332663636633563343666
|
37653464323939643239323630633931313737666462613831386466303465306135313861646431
|
||||||
37303231366362343933383464333133383064613930373833346138323866373266383432306561
|
65383938633632363866616363346664306636363166663630303764633333616230353563633761
|
||||||
62653336623334353661326337326165303963313965646165663134633266373438376464313262
|
34393835386537336430396563346330393039636366353039653434343037383234396636643433
|
||||||
39356432386132356234616534386366336461653030383965663666633137616330353030663938
|
36306132616634626431313639636635386564636134656132373635633731383238353336383830
|
||||||
66363930636636636131376431333865656531653938653439313161633564626561643162643866
|
33306562613132663231346338313430333137656236356638663663646564306664303163373730
|
||||||
66363034366564666535316335616635646336313866343162326435666537666435666165396463
|
34333139623931326132656431353939356162386462353163306431653232626462646338373965
|
||||||
33363133616132626364373132643561363766663031393631363837343932393936623764363866
|
35623962363634333061386537313735386637663864646637346161316261346461333431653537
|
||||||
64616636346234353865666164346364343764376333396632623663636632333931613036333634
|
63313234306333653863363266363630323337343636653266356631393961366335623439666163
|
||||||
34363363663766626163396637353432666531396561356134376538363539313163633634396662
|
38643335333661396534303136373335363363653765623962653661366466616565376461363033
|
||||||
33313361663139303766663531376338303665346136303864616535306533383639303662326261
|
35393831353266376436386435326232346364653562373061323261643235326334333962326138
|
||||||
37383831386133616265363834613663396138613639393266313336376262383133336431663839
|
64366435336335633939333138316534393039336438623437373832303434323461383133336138
|
||||||
63636234363837373261353737323665613733626233343634623734383265323932653963376262
|
65646131363433626135386161386635386439336237393131663930343963373537346634336330
|
||||||
37353135303561313137623836633165616531633432613432623765333834626364643166373930
|
64646632333033363233626561653739333539316338386230623961373730373330393639633638
|
||||||
36613261376237323339633166633965366466363431363163346436383136303437343262373333
|
37666637633465616562663332623331326266613637663537643031336439333134636338323566
|
||||||
32373963643636336562333637653739376337363631333933623633343431323339366338353333
|
38343435326132333763663634633965393635343934393738313165373864306135376332353036
|
||||||
38336333653166336636363536326431303264626362313132623039636262616262333138326561
|
31303534666136383261366263356561646366626433336132306161643964636137336434623739
|
||||||
35383032383137656137373465343464663261633535383031353530353332633163636439336339
|
34656231366639646432663436653437343464316461376662313563366464323230613837613537
|
||||||
34376332326261646664653535643763303031376662646330313039656362376238353536376335
|
31623835343332383530366631313635643264396636336265326436323339303962636464386633
|
||||||
63323832366536623637356434353062353336656162303838356237653866653930613436343166
|
32633134356236653537623638646366623337613662313465326366353533326462613434666365
|
||||||
65363630346436386137373362306630636236646235336130323262626465323666636338323535
|
34663965333932353364616465323238376534346661343137353663353764303761376239633366
|
||||||
33653961366435316231613038366438393434366462383062646337346332346661636162313062
|
63613266393564653532646562386264303538363461636433653231623834353162333138663738
|
||||||
36613761643862363838386236313930363431303163343036656638656538376638363835623837
|
33333934376562306266653033303735393164393433343266393466366330323836313034366462
|
||||||
37363233363230646561623732346435316634343939636538393535613839646433376239386265
|
64333765653938373636623536323265353361333431343339633662646135313930373864306331
|
||||||
36333264666564343561333661616432396662326665363063636530643361323762303364376363
|
32366233353138346630306434623262343134613063373831613932393363343038366532326466
|
||||||
34663038613761643562373431323436653536346331313330346138613661366531396638623632
|
32653263303330653135663230616166626562343135653363326634386466303236303231363936
|
||||||
62346330653965653637666366646134383562346162343330663339353838303138626335626431
|
36383061633437363935323964323861336138386337643562333965333232356463393762353031
|
||||||
66656137663037646235656131386436623030626638366562393765383737386462616635333034
|
61393861653434626465333162653536303836303539353531336531316539343933623566363234
|
||||||
63396261303034363334333866616230623534303862613765333237343866363264653530336462
|
31636431613462333630303435323330323439633562633431616261666364306666326537393432
|
||||||
33663435643561323432306638326436653030326238313230343761343964323137663463333137
|
64336437383733353037656132303432643635643631333733346336626262336265333536363464
|
||||||
37396532396432636631626339376462326639326238343531316363303865636663306663303538
|
62373861313530633931386234326338333731626131323130663164306534616432383934393639
|
||||||
63343635323962393233353363373838666439346531313839666136353531623333633034656364
|
36383561333238303537633662643237646430396335663864623037643336366466333034636136
|
||||||
39613434613833646639376332383762376164316362376464656537363139316531383666356534
|
61656539346632663964656232646165666139633966663335613836656237663661303235313837
|
||||||
31396561303066613734643064626530333563323465383037633838666361373661346332313835
|
66306430393066373764633732623533353261613938353034396432626335643238393837366135
|
||||||
38313039373038303365633736643062323931633330336331646338353736623331363561366537
|
33376461336333613035303032336637646362366161633130643263376435663263636664616136
|
||||||
30333062653334386339653262666364656166383736383762613564613163363966616234363639
|
38663164326333346533323063616561633265643565393064636133336539626635663932613863
|
||||||
62356338336538366336373564656162636565333663656632663034646333313065303232323561
|
38663931313264306464306237393930383337643436346431353061313661613534623838366533
|
||||||
33346238306630346331666336383637623965316135653037626638373136663738643861613733
|
37306635666566373237616136356162366433643064623661633631343463656537316636316234
|
||||||
34636331353262356135666238353766336430353833653265616432343462326636613837343334
|
30306662376332363461343638613239396563653561636230626436643332323238323466353162
|
||||||
31306466366163313864653330613637386165363730343932366439393864323463323665626165
|
61313664373130326231396230363332326432306534613939313434386439643966636632656461
|
||||||
35646131303064663539303530663635366533386631646233383935343033303232363562663431
|
30643966336464333932373562396533333064616639356436333130343865353838623565633331
|
||||||
63353939633538363135306163333362306333616465653639323936323338316331313433653030
|
37376530333461386638346366666338313835336438376466323865303133656434633263663261
|
||||||
30333062373138633434323637336536396463633330393663653131623234613838393537623834
|
66343230626530643436633565626536333435393966316438656466376239353335663330393537
|
||||||
30343263366563653534303866376133363734643633313533326137343531393436636665343631
|
34376437306239353761306434323032333466353839363230376131356531646537613830663233
|
||||||
37383331636365626536633063396336396630373531376164363434353836303632316364626161
|
32663163336239336664323265636131323061666137336264643737613635303565353866366663
|
||||||
36376566383664363266373661646139393030303362663632313539383232373334376535353034
|
65373134383930306637663532646539306236333864666337353832376232636137623732643237
|
||||||
62663333303966376339666132636236616365333839303762376431383563366164666236636339
|
63613535313939323464616132616536316630346134613038656562633638633333333962313037
|
||||||
38666631303139373733663930313663643934363435396666386238343237363930363934613565
|
32643838343665623161336631656661623838366162663930313638343731356362626236643732
|
||||||
62616237666332613633363762393533373535366137316436626266646362313762626662313035
|
33386665363731376461313830313134336532633834636462383234326531613964363730633134
|
||||||
31336335356335303864383833623765383635303665366530306135373566316661633861616533
|
36316137623334646163313335363366363836663963623266323261393061616662623439663238
|
||||||
65373165643565343961373963306464626536663433343365636237303937313331313037633066
|
64633834623838346262623362306564613136333961653765653165656436303762376238376239
|
||||||
39356665623839306261663236633236626130383233643436623864636461633039306331393439
|
62666665613134343935646335326563323664303262346139363361366664653365346236613163
|
||||||
38303635323363303135353836623534396236383639333666356563623465303532386631666236
|
39353832636566346265626437643138306565366237303237303539386233613637376437376464
|
||||||
32316263323462626330383630313364656330636232636636623534383833303361626366393736
|
33633630386562663037353164343736373562343236316465323330643436363463373339626362
|
||||||
61376536323364343239653430396130306231376166643566653436383763336366356533616337
|
65653637356238653066326330316462356564613864363633373833663838353135373261353031
|
||||||
36383138643864386631633233303935313563366265653235363930303765646436333630326333
|
64613237316230366539303231363133346334326631336665346630323733363533623936383637
|
||||||
31656232656566656366396638646161313932303233393365326339393530663662333233346337
|
31636366346435393335346563386165393032363536383138336133303436646563353637366537
|
||||||
62646538363533643732633834386566346336633538326564653566323639323332363165376461
|
37363565616262643365343864666236343164666337633265333637633465626361333730636564
|
||||||
39616138393735343536356233353862663365336464313162633866633130353063343466393333
|
66366134376139313264623735346630646163386639353739396363336239306365316439393233
|
||||||
35336665306662656632306234653461353339643665373430336632373161366331363234646433
|
32356434656134303332313762663332376566383730313535366162373935303231383339613131
|
||||||
33313662613934653532346532316237623936353431326239643966616536373363643636613834
|
65656466353535316665396631303664366138626335356132303936316161306237613964333766
|
||||||
30626337343439326663326134306662663534623331643338363638383738633334613032623063
|
35623435656532316565656164613337643935343934303365393638356134643165383834363632
|
||||||
37636561373231333064633332303630613965376631663765306566326265616630663361393133
|
65616363653636356633623835633537326438646663363862383963306634636337626164303334
|
||||||
31313735646264636532353939363335333930373362386232636237643764386333363231303334
|
63353135336439613464373433363632336237663965396436333732386366353466356335396234
|
||||||
31323231656537636465336662343638633964396362383138353936353432653163626537333237
|
35333733366636343761666333366436313233326361356365373636666133373636613531643561
|
||||||
37326238323538626466326464653036643864623732613439393739343431343366336266346630
|
32373536363662626261326133366463313736653230316161646634306634336238316136393136
|
||||||
64333663663034663330313936623039366662383335343835316132343666363933666433663435
|
33373931653133333661363435616135393032303261643738383239393437306237393664313731
|
||||||
33646565363963343634373433383330393932383432366565653666323232646133393938666231
|
35306666303238353462316230666338396466303034386266316236386665666334613435373035
|
||||||
30336232363063303238326132346334646634383063633936303336336332353166636139353631
|
38346363356365326534663837356131643864376461396161336433333635663966396238663439
|
||||||
64393433333936363661383830316137363862626239663439613965326336643338336562646264
|
62646534333964393063613637663166373861626132346564643530323961626464323965656131
|
||||||
62663664653363646436363338646631373534356661623436636235393762643034613766313861
|
32646638383366303836623237376661303430643738336437343030326136306130663339366632
|
||||||
61663262393838363730363238613439633432643463613036663731373039633130376562313134
|
65626134343934373237373761396465633061336638653231666262326162636138633636383235
|
||||||
63363036356237663333616534343464623036613363616434396430656438316665613932616237
|
39616136656563653534643139623263363161376261356461316538373533323364386239326361
|
||||||
33316139323562613037383966646335633263666464323039343964373731336161626532353932
|
61376461306130363039346439633739613236353431353738363464633132366133653736376338
|
||||||
63396434623637656133323266346633636239633964643563663132306566353331373263666566
|
36336439386130353036333234323133393030346536376136303531386636643236323863323363
|
||||||
39633936393265666565313436353237353463616562356363363933656561336234386337333534
|
30616134616631616665613739303564353734313037333763653266303638666237356464623865
|
||||||
33323633646464363061303132343739613933666433386466343463376333346332323838326336
|
65323738376661383061376263653138383866636333333436363863623562616163356630316563
|
||||||
61313238366461313538626632303665353630313733353933643232333930323263343962323631
|
66666463333966316236373036323039663030316336333363383464373434626133393863383932
|
||||||
66663433353064653863353334396630313130656263356561643663343639356134376235633165
|
31316330366565356639326164393235653133346230613533646166346566663661303031663466
|
||||||
65623664313737393463346339623833353239333962656231643237633837636132636261653665
|
64613832653137393138353965363439346363663962666465353332666639393337656238386235
|
||||||
38336563356138383237386336623663613365313261393561383362666635323163633161636362
|
33626336333664393435356139653864386330633531633632376630636431383039656562303563
|
||||||
37636466353961323239373936653335663364643330656433616561396236633234316565333233
|
38306261616638313037353938313333656335303831643531353637646466356432656633363534
|
||||||
33306661366536666538323633303637373263343739336334303863643666653732623035626638
|
34656630393938623866386230663932633564303731656266636161373735613865346436643034
|
||||||
38396637343261343133653463623765663231326532303235313765663632383636393135363736
|
33646639373665323736633338336565373365616161383137656166323565633863613231343438
|
||||||
39363738323133373162376162303130363466333139366330646132636666633366666638626163
|
36393035393266663539393961616165646338616138356633383738333461666336353239393735
|
||||||
31353866386161343338353233643833356537316164653862643561363434663764393261626365
|
64653239333332383461316333643535353035346531303466623437666662343366393165343931
|
||||||
35666631613731666666376263666232613336613962373132646131646134613734383766306164
|
63333738393435363936316433306661663265663635643937373130623133663364613362643934
|
||||||
36326536396133663634613235663033336138393839303434613635613734313230623161663630
|
31636638376263356438336463356537333938313936333466353466316437376561383966346330
|
||||||
37643235626331666530383966636131343035376563666631646436633039363338663438343733
|
38343434346639333362646630363565366330646339303730373333613438666630323135346464
|
||||||
34633462353162303236366632623566393964396661656636663232633562346561663566656333
|
65616131343332663330613639653263663962373065376166393832393364306464386334363936
|
||||||
37633961383036393162666232333732616633396265343533663964346465653930633733353630
|
61393434623534653535336338653736613961646534333836383963366430326562383830636335
|
||||||
30613738363538383534366632633764376365666633656433326661333666336630393133653538
|
64383263383131353433663939653064653132386265356565386130616464626665356339356537
|
||||||
66346365653065666437363035663433366330613765356136633431356564353032636564316466
|
39643739323937623333396433336330636233656662393736643132626131373665396537636436
|
||||||
65383836336436356665363762316436373938353562353039363963363836393462643263386463
|
66306462643837616639376565373633366464353938333035333639373630393766633737313837
|
||||||
37306462663132316632633538393162393137646165303930383636373761393438303261316230
|
37326566353562333239353633633762333235306339396531653532313466613435336234393665
|
||||||
65316163353266383735616463666164336466663764383930356439373830643463366238626230
|
39653564306362383166396561643137653166346462376138396263306437636231613862353838
|
||||||
61653132613231626162316161653432616236303862373035633839623936616230623334643634
|
64633633643134356562336466303031323664646466323033323437613339643039316230346163
|
||||||
39343962323230353363666462303266383331353337653935643030306130393262336335643133
|
34666332376439313063363138616335626638333036373037333665333532623539376565663663
|
||||||
38386536306338303363323435623237663933666539383461666363383837373462636462313964
|
34613935323337623932653031343831353637666166663066663338393163663434323463623734
|
||||||
30393662333364653638656539623765393334646633376139323234323265383437333938643033
|
61333838663766316464313062353734343166613538386331373863626133353332373936313365
|
||||||
37303963616536396235653339323031323139663839653633363437633961333930346264383538
|
31323762313164623538663732303461653536306130353636666138616630333534613738343438
|
||||||
34626232336230323934343363646139316465656236366133343362346430666164353331653133
|
66633836323332393064343665613236393733353564366438653139376534306135386132663865
|
||||||
62353361336538663162316361356665383638616363626630363564636639656161343733316239
|
65343731643031363936653231623538623464363034386131653333363662663236353563643661
|
||||||
62643737353933313530396230323034353266653964616137626334623464633436363839333366
|
30326431643837303632643664333639323134353532363464393563623366313762343038323337
|
||||||
34353535646130336165376239646365613463303935373332616234623166653736353138663361
|
38623930306236616539353738343564373865353339636565656264336334323466333366353961
|
||||||
35383762373934306361366162356634663236643432306339343930393866373230346665376437
|
65383634393430366338313464313735396138373166376162376462376465343034653631393137
|
||||||
39663339353939343833613666346434316332303937376537646232633864393731333436623230
|
31393534396438643334346562333030313766616263363435663830356137313961356236623539
|
||||||
39366562343639393961396430326437356331623532353631653663373761343532353736313236
|
63396263376538653966373333333662343831396634373036636239623032373531616537346265
|
||||||
61666637616266616435333233356363653334386637643262396635366237633465623837636133
|
63306635313064313135623063336131343430326132353062303965373561356563373865323161
|
||||||
32613131633162616432323939343034653936383830376437653935366433613766613235633564
|
33316564346237383433393866636439663639363139663461653535376631656138613362323864
|
||||||
66656433373964326464316439633765313766656238316165306536383539363838396135633839
|
39303034303733626563316165633431646162383463643434646638306463666366353535633335
|
||||||
35353064616265623133666536313262393930343935653662323039633564613337323232383264
|
39666263626139386362336533386265336431333966313061383838366532663035656639396431
|
||||||
31363464346537363061343230363938666437613662383265393237666464363830386366646137
|
62333233386338646463393932346335663761306166323062633134643464393535336564346232
|
||||||
61373865643166356666626231316335616632383138323864396465666361363130323966363861
|
65353732356561616337336234353936383465633032366231633535623135343134393034656366
|
||||||
62366139376166383161376564663239643334323037333335383931343830616632666566313638
|
35356336393639653561646539376238383930626236613239373332643735646236306466646361
|
||||||
34636361303737663264653164333835343765386562353936343032303735343664363835663334
|
66336463386466373065613731653861626461323462653538353437383731323264613731613834
|
||||||
39653061623766303064643439383537373937316664633236353964663534326163633466386466
|
61323362333163656465396534643037323032386536313134666661336430306136633533313466
|
||||||
38613563613834646532373730336133393332353832353261343939343336306436613863353930
|
32613439333936336635663263333636633862376663303537653865646137356433383639346263
|
||||||
36326236343963343232336439353463326539346130616465653235393238306330393632373261
|
35386361383530376531613832316665356336303232343333396464613832373133396133303731
|
||||||
33383862333632636232653835643137326665386562326430643465336566343631363636363065
|
30383761353764313366373031663933633332346637396137386238636534336435663431326333
|
||||||
38353734636565353432343431303262383636303037633036396332326537623233353234663234
|
36396235376463616331633135656461353730363638363630363134333432306465653338616437
|
||||||
37636137613863616466626439346339323536343231313639353639316266616365313639656534
|
33316266303835633963623863373234623534323331323764613362316237323635616433653165
|
||||||
38626233386534636466313564343231663334633635663337613131353733303037363638393165
|
61383161333232663132646132383939333264363039393137393630313063326339393233623437
|
||||||
37353364623865356637333739316330633432316164636138393532653766393663313465346538
|
38663766643638313363653336396531303562643332663539323733393736353762393433653638
|
||||||
32386565643936616337356366663630623165343230666534383135373137306632663137316662
|
66633962313866623835626462343166363939306632353339626430346539646137653632373931
|
||||||
30303938313639303264633462386132326236313333656634343139363837396133306230666363
|
31666631353430343161636538303430653736663537613331643832343062306562663864623766
|
||||||
34373631663466363536653333613638383361656230363633633836396562356332323431653335
|
34313761363564633637356564646335366262343934346531333837316231383564323832306234
|
||||||
37636239636534363630663634643331396232363438346161303231326334326534623962303763
|
66623262633332666433336137373138353862373563633439643361326239663130366330326134
|
||||||
36656530646366336639323537666665353638643833366137313837666265373236393734626135
|
37643335666361653333353735303265636237656439323736373264326237356662393465346637
|
||||||
66343162396565303561616165346237363761313763343162636330353163366632396333373962
|
31316263336433363662626438383439663232653931623266373666613737306561336233363930
|
||||||
32383664633335333465323533343130303362323734613663613533613830343234303763366466
|
64366334613435613837363463393639373033373665623261646163653031303430323932373564
|
||||||
33636630373038346462653231623962613263626634386462333461346231643737396134323530
|
31313962326664613233323534663236633761636639343139663138363738653561646566663837
|
||||||
37323131323339356165646165353762343437623536386131663535396464643666323863353034
|
32396330663161343032666465376561313664333138366333326339646164326134363330393761
|
||||||
33336637623061346539633665626438386330636633613939383561346330393836343735656633
|
37396166306262613361316632343562616631626130626265373632646131336131646239313761
|
||||||
61333962396237613639333736383563386165343662613534373562313463316534353336323666
|
61326562343530353731373635313935363936356437643234633238333936346362326436396462
|
||||||
65356136373537326230336631333034313438333130623032366437383065396533626262353961
|
30326630323234666135326335653437316662353932383461396465363030643030353366666234
|
||||||
62656665393965323937646364356433646231363863616263363733636562316434303431636562
|
30333534366238343065333938363864643232316431633864386562396636646336363038313864
|
||||||
39646530316266623135333363666664303131633339643162616631303336383835666362633935
|
30363337623430613333356136386562333235313733353235323064356139353834303562383862
|
||||||
39383066363863623231626631373233363931626333366462353739646638376630616163636661
|
37356535313039383736386135333938663430613736376338393634356563326636356631353032
|
||||||
62316535356530356336653264346532376531363665663339303136636235366330616463666532
|
35353338383036366532656230623633313634343463313536633435306533646130316264303962
|
||||||
36353236333335656635306335363565313630303930363836373433613234353936363339393162
|
61376630383234323761626639623836623530356465336633356364303362636466393166383631
|
||||||
35613166663963313833383435306661323738366637326539633830306434633164663665343737
|
39306134373237323465353062313630656361333061643661633062356136643564333034363963
|
||||||
66373231336662343737353563643763336464396464656531633466636330303132646635666465
|
30393338336334303161666563323131633333326366373363613361623231383261326431616235
|
||||||
32313761653138623365303733393639663834633761663763356432626439666530633832383036
|
39613436373164623539316336303431353033346161396539343365366330333439346635643236
|
||||||
61313261656237306637663132613630353938636431616437613566386462626136613566373730
|
39373162613936376631326437636464383964316530663233383664393737393136386336363235
|
||||||
31323663333231663039306666613831383131373433646635623762633835633833353339363537
|
66646261353966636465323936353133613333383863646335356336396338623731343265333264
|
||||||
38363734653437343435653262666166623233636463303238306635353439376362653735343835
|
31363364306431316461636636303664346265393039646536313935633535306131323136356539
|
||||||
65613465383561653663316563373665636534336465346234303631623636633837393366663237
|
32633030373733383335653663613830643038636661333564656235323137383034303531346661
|
||||||
37333835376438393637396136373663336333353062383838656534616437643232343766616138
|
31313931383837396438656564663231666130653163636437376463656662623661643932353035
|
||||||
38393533363830626365646231323231366531383934386562643837353461303061333738346631
|
64353464343565393961386139386133393636303831313430386531666335646430643264626332
|
||||||
66343565333338656166643334363935643831366238326132626661336639623835613538323634
|
35373733363731363030343036313838613966396561383364373533373734393563666664333031
|
||||||
30643832616438353061303536336566373131353562393830653531376332326432303831366330
|
37313334393862356433363537323633656566313161643561376663353537393532363935643134
|
||||||
30373034396532356433396631363064323035353662333632363639646534373035663937663439
|
36643832363838313935636630643566366330396462326630393636636661393361396537383134
|
||||||
34666436666564336362663830383030316237633063363962646236643464316463313832343938
|
31303533636430356338666533333930323962326262613533333435373936393733623563343630
|
||||||
61633530393132636130666631353761303132333764313035396266623936646462346465666165
|
63326234333465323733656263376530633739346364373834666136333561643733316162373230
|
||||||
30383133626464346361336432633762363233393330393738343133316337346530363033333332
|
39623161316634306663366337356533303465373238373938366633633934316234366364373862
|
||||||
38613262616535323931386636613864633230346635363537373735643137666165623562386338
|
35393134653466396462623663393162333236633036396263663435313038373832316166393834
|
||||||
30326561666537616434633734653238396466636136306439643733396165653632363063346465
|
38636137363836343536393864363339613164663066386333663337363539343532333163663433
|
||||||
64626436356532363562616439323335653637316339633163353834383064363137623631623462
|
65656136383264323464353831383037316666323238633031656538663362643238623339313538
|
||||||
33386231386362313135313833316261363366343366313034636161613334383666656137396331
|
37386263383032313130386566323635626661363830343637303234383463363530343531626565
|
||||||
37326337313833356264366434353431393933343766363432363331616265623866353536353461
|
63303861303532313934626635613138643739373964633966383238356430383861653361313535
|
||||||
37333237356637343537323464653261356462363365343032373435376464643862333238623661
|
31336463663139626235626561646138373236393230323338306236626266386138326363626434
|
||||||
31636331616531363864313061313931323533613436306337363334316431633663653830633662
|
66343130666438306534393236343163326234336365316566373638633232643163626663386435
|
||||||
65663161333261653234386339636366356230333465343738333330353237653436613039353139
|
34623737303736613766663765616433326432666634663934646130626133626336623235636462
|
||||||
373436643563343438663230316130653731
|
38623063316431343162356131376234656134343563323063663931353930613338303863636162
|
||||||
|
63343438636664646337
|
||||||
|
|
Loading…
Reference in a new issue